<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>.log</title>
        <link>https://velog.io/</link>
        <description>해야 되는 일이 하고 싶은 일로</description>
        <lastBuildDate>Mon, 23 Sep 2024 00:08:07 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>.log</title>
            <url>https://velog.velcdn.com/images/unfamiliar_dev/profile/220903c7-a095-4229-a060-c0b357367b94/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. .log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/unfamiliar_dev" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[<정보처리기사 실기> 20년 기출]]></title>
            <link>https://velog.io/@unfamiliar_dev/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC-%EC%8B%A4%EA%B8%B0-20%EB%85%84-%EA%B8%B0%EC%B6%9C</link>
            <guid>https://velog.io/@unfamiliar_dev/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC-%EC%8B%A4%EA%B8%B0-20%EB%85%84-%EA%B8%B0%EC%B6%9C</guid>
            <pubDate>Mon, 23 Sep 2024 00:08:07 GMT</pubDate>
            <description><![CDATA[<h3 id="1회기출">1회기출</h3>
<p><a href="https://ss-o.tistory.com/57?category=950890">출처</a></p>
<p>소프트웨어 테스트 방법의 일반적인 원리 중 하나인 살충제 패러독스(Pesticide Paradox)의 개념을 간략히 설명하시오</p>
<blockquote>
<p>소프트웨어 테스트 방법 중 하나로 동일한 테스트 케이스로 반복 실행하면 더 이상 결함을 발견할 수 없음을 의미한다.</p>
</blockquote>
<p>데이터 마이닝의 개념</p>
<blockquote>
<p>많은 데이터 가운데 숨겨져 있는 유용한 상관 관계를 발견하여, 미래에 실행 가능한 정보를 추출해내고 의사 결정에 이용하는 과정을 말한다. 
대규모로 저장된 데이터 안에서 체계적이고 자동적으로 통계적 규칙이나 패턴을 찾아내는 기법</p>
</blockquote>
<p>프로토콜에 필요한 3요소</p>
<blockquote>
<p>구문, 의미, 타임이 </p>
</blockquote>
<p>HTML의 단점을 보완한 인터넷 언어로, SGML의 복잡한 단점을 개선한 다목적 마크업 언어이다. 웹 상에서 구조화된 문서를 상호교환 가능하도록 설계된 웹 표준 문서 포맷으로 메타 데이터 정의가 명확하다. 사용자가 새로운 태그와 속성을 정의할 수 있는 확장성을 가진다. 유니코드를 사용하여 전 세계의 모든 문자를 처리 가능하며 장치와 시스템에 독립적이다. </p>
<blockquote>
<p>XML(eXtensible Markup Language)</p>
</blockquote>
<p>JavaScript Object Notation, 속성 - 값 쌍으로 이뤄진 데이터 오브젝트를 전달하기 위해 사용하는 개방형 표준포맷
AJAX에서 많이 사용 / XML을 대체하는 주요 데이터 포맷</p>
<blockquote>
<p>Json</p>
</blockquote>
<p>운영체제의 비선점 프로세스 스케줄링 기법 중 하나인 HRN은 어떤 작업이 서비스 받을 시간과 그 작업이 서비스를 기다린 시간으로 결정되는 우선순위에 따라 CPU를 할당하는 기법이다. HRN의 우선순위를 결정하는 계산식을 쓰시오. </p>
<blockquote>
<p>(대기시간 + 서비스 시간 ) / 서비스 시간</p>
</blockquote>
<p>트랜잭션 특성 ACID 중 일관성, 영속성 외 2개 특성 입력</p>
<blockquote>
<p>원자성(Atomic), 고립성(Isolation)</p>
</blockquote>
<p>원자성</p>
<blockquote>
<p>트랜잭션 내의 연산은 반드시 모두 수행되어야 하며 그렇지 못한 경우 모두 수행되지 않아야함 (Commit, Rollback)</p>
</blockquote>
<p>네트워크 공격 유형</p>
<p>공격자가 패킷의 출발지 주소나 포트를 임의로 변경해 출발지와 목적지 주소를 동일하게 함으로써, 공격 대상 컴퓨터의 실행속도를 느리게 하거나 동작을 마비시켜 서비스 거부 상태에 빠지도록 하는 공격 방법</p>
<blockquote>
<p>랜드 어택</p>
</blockquote>
<p>128비트 암호화 해시함수이다. RFC 1321로 지정되어 있으며, 주로 프로그램이나 파일이 원본 그대로인지를 확인하는 무결성 검사등에 사용된다. 1991년 로널드 라이베스트가 예전에 쓰이던 MD4를 대체하기 위해 고안했다.</p>
<blockquote>
<p>MD5</p>
</blockquote>
<p>모듈화를 중심으로 하는 소프트웨어 설계 방법에서는 모듈의 독립성을 높게 해주는 것이 좋은 설계 방향이다. 모듈의 독립성을 높여주기 위해서는 각 모듈 간의 관련성을 나타내는 ( ) 낮누고, 모듈 안의 요소들이 서로 관련되어 있는 정도를 나타내는 ( ) 높이는 것이 가장 바람직하다.</p>
<blockquote>
<p>결합도, 응집도</p>
</blockquote>
<p>릴리즈 노트는 고객 편의성을 고려하여 조직의최종 사용자인 고객과 잘 정리된 릴리즈 정보를 공유하는 문서이다. 릴리즈 노트의 내용으로는 보통 즉정 소프트웨어 릴리즈의 최근  변경 사항, 개선 사항 및 버그 수정을 간결히 요약되어 있다. 릴리즈 노트 작성 항목 중 문서 이름(릴리즈 노트 이름), 제품 이름, 버전 번호, 릴리즈 날짜, 참고 날짜, 노트 버전 등을 기술하는 작성항목이 무엇인지 쓰시오.</p>
<blockquote>
<p>헤더(Header)</p>
</blockquote>
<p>OSI 7 참조 모델 중 두 장비 간의 전송을 위한 연결이나 전달 등의 인터페이스의 기계적, 전기적, 절차적 특성을 정의하여 비트를 물리적인 매체를 통해 전송하는 계층</p>
<blockquote>
<p>물리계층(Physical)</p>
</blockquote>
<p>애플리케이션 성능이란 사용자의 요구 기능을 해당 애플리케이션이 최소의 자원을 사용하면서 얼마나 빨리, 많은 기능을 수행하는가를 육안 또는 도구를 통하여 점검하는 것을 말한다. 이를 측정하기 위한 지표는 (), (), (), 자원 사용율이 있다.</p>
<blockquote>
<p>처리량, 응답시간, 경과시간</p>
</blockquote>
<p>비정규화</p>
<blockquote>
<p>시스템의 성능 향상을 위해 수행되는 의도적인 정규화 원칙을 위배하는 행위</p>
</blockquote>
<hr>
<h3 id="2회기출">2회기출</h3>
<p>비상상태 또는 업무중단 시점부터 업무가 복구되어 다시 정상가동 될 때까지의 시간을 의미하는 용어</p>
<blockquote>
<p>목표 복구 시간 / RTO(Recovery Time Objective) </p>
</blockquote>
<p>비동기식 자바스크립트 XML 통신 기법</p>
<blockquote>
<p>AJAX</p>
</blockquote>
<p>고객의 요구사항 변화에 유연하게 대응하기 위해 일정한 주기를 반복하면서 개발하는 방법론, 워터폴에 대비되는 방법론으로 최근 회사에서 각광받는 방법론(시제품)</p>
<blockquote>
<p>Agile (애자일)</p>
</blockquote>
<p>학번, 이름을 학생 테이블에서 3,4학년인 학생을 검색 (IN 함수사용)</p>
<blockquote>
<p>SELECT 학번, 이름 FROM 학생 WHERE 학년 IN(3,4);</p>
</blockquote>
<p>트랜잭션 Rollback</p>
<blockquote>
<p>트랜잭션 실패 시 트랜잭션 실행 이전으로 되돌리는 데이터 제어어</p>
</blockquote>
<p>무결성과 인증을 보장하는 인증헤더(AH)와 기밀성을 보장하는 암호화(ESP)를 이용한 IP 보안 프로토콜, 망 계층(network layer, 3계층)인 인터넷 프로토콜(IP)에서 보안성을 제공해주는 표준화 기술</p>
<blockquote>
<p>IPsec</p>
</blockquote>
<p>애플리케이션을 실행하지 않고, 소스 코드에 대한 코딩 표준, 코딩 스타일, 코드 복잡도 및 남은 결함을 발견하기 위하여 사용 (테스트 자동화 도구 유형) </p>
<blockquote>
<p>정적 테스트</p>
</blockquote>
<p>한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다(one-to-many) 의존성을 가지는 디자인 패턴. 서로 상호작용을 하는 객체 사이에서는 가능하면 느스한게 결합(Loose coupling)하는 디자인을 사용해야 한다.</p>
<blockquote>
<p>Observer</p>
</blockquote>
<p>휴대 전화를 비롯한 휴대용 장치를 위한 운영 체제와 미들웨어, 사용자 인터페이스 그리고 표준 응용 프로그램(웹 브라우저, 이메일 클라이언트, SMS, MMS) 등을 포함하고 있는 소프트웨어 스택이자 리눅스 모바일 운영 체제이다. 개발자들이 자바와 코틀린 언어로 응용 프로그램을 작성할수 있게 하였으며, 컴파일된 바이트코드를 구동할 수 있는 런타임 라이브러리를 제공한다.</p>
<blockquote>
<p>안드로이드</p>
</blockquote>
<p>학생 테이블의 name 속성에 IDX_NAME 이름으로 인덱스 생성하는 SQL 문</p>
<blockquote>
<p>CREATE INDEX IDX_NAME ON 학생(NAME);</p>
</blockquote>
<p>HTTP, HTTPS, SMTP를 통해서 XML 기반의 데이터를 주고받는 프로토콜 웹 서비스 방식에 HTTP 기반의 ( ) 사용하여 송수신한다. ( ) 대신 레스트풀 프로토콜로 대체할 수 있다.</p>
<blockquote>
<p>SOAP(Single Object Access Protocol)</p>
</blockquote>
<p>SQL Injection</p>
<blockquote>
<p>사용자의 입력값 등 외부 입력값이 SQL 쿼리에 삽입되어 공격자가 원하는 SQL 쿼리문을 실행하는 공격 기법</p>
</blockquote>
<p>UI 설계 원칙에서 정확하고 완벽하게 사용자의 목표가 달성될 수 있도록 제작하는 원칙</p>
<blockquote>
<p>유효성</p>
</blockquote>
<p>전 세계 오픈된 정보를 하나로 묶는 방식으로 link data와 open data의 합성어가 무엇인지 쓰시오.</p>
<blockquote>
<p>LOD( Linked Open Data)</p>
</blockquote>
<p>데이터 모델링 절차</p>
<blockquote>
<p>요구사항 분석 &gt; 개념적 데이터 모델링 &gt; 논리적 데이터 모델링 &gt; 물리적 데이터 모델링</p>
</blockquote>
<p>소프트웨어 개발 과정에서 변경 사항을 관리하는 기법은 ( ) 기법이라고 하며, ( ) 기법을 활용한 도구로는 CVS, SVN, Git 등이 있다. </p>
<blockquote>
<p>형상관리</p>
</blockquote>
<p>사용자에게 읽기 / 쓰기 / 실행 권한을 부여하고 그룹에게는 읽기 / 실행을 부여하고 그 이외에는 실행 권한을  a.txt에 부여하는 명령어를 한줄로 작성하시오 (8진법을 사용하시오)</p>
<blockquote>
<p>chmod 751 a.txt</p>
</blockquote>
<h3 id="3회기출">3회기출</h3>
<p>리팩토링의 목적</p>
<blockquote>
<p>복잡한 코드의 단순화, 소스의 가독성을 통해 유지보수성 향상, 유연한 시스템, 생산성 향상, 품질 향상이 있다.</p>
</blockquote>
<p>대표적인 내부 라우팅 프로토콜로 다익스트라 알고리즘을 이용한 대규모 네트워크에 적합한 링크 상태 라우팅 프로토콜로 불리는 라우팅 프로토콜은?</p>
<blockquote>
<p>OSPF (Open Shortest Path First Protocol) </p>
</blockquote>
<p>형상 통제</p>
<blockquote>
<p>형상 항목의 버전 관리를 위해서 변경 여부와 변경 활동을 통제하는 활동</p>
</blockquote>
<p>형상 관리 절차 :</p>
<p>형상 식별 - 형상 관리 대상을 정의 및 식별하는 활동</p>
<p>형상 통제 - 형상 항목의 버전 관리를 위한 형상통제위원회 운영</p>
<p>형상 감사 - 소프트웨어 베이스라인의 무결성 평가</p>
<p>형상 기록 - 소프트웨어 현상 및 변경관리에 대한 각종 수행결과를 기록</p>
<p>심리학자 톰 마릴은 컴퓨터가 메세지를 전달하고, 메세지가 제대로 도착했는지 확인하며, 도착하지 않았을 경우 메세지를 재전송하는 일련의 방법을 &#39;기술적 은어&#39;를 뜻하는 (      )이라는 용어로 정의했다.</p>
<blockquote>
<p>프로토콜</p>
</blockquote>
<p>TCP/IP에서 오류가 발생하면 ( ) 메세지를 보내서 오류가 발생했음을 알린다. </p>
<blockquote>
<p>ICMP ( Internet Control Message Protocol) </p>
</blockquote>
<p>과목별 점수의 평균이 90이상인 과목이름, 최소점수, 최대점수를 구하는 SQL</p>
<blockquote>
<p>SELECT 과목이름, MIN(점수) AS 최소점수, MAX(점수) AS 최대점수 FROM 성적 GROUPBY 과목이름 HAVING AVG(점수) &gt;=90</p>
</blockquote>
<p>학생 테이블에서 이름인 민수인 튜플을 삭제하는 SQL 문</p>
<blockquote>
<p>DELETE FROM 학생 WHERE 이름 = &#39;민수&#39;;</p>
</blockquote>
<p>릴레이션 A, B가 있을 때 릴레이션 B 조건에 맞는 것들만 릴레이션 A에서 튜플을 꺼내 프로젝션하는 관계 대수의 기호는 무엇인가?</p>
<blockquote>
<p>÷ </p>
</blockquote>
<p>순수관계연산자는 셀렉트(σ) / 프로젝트(π) / 조인(⋈) / 디비전(÷) </p>
<p>셀렉트 : 릴레이션에 존재하는 튜플들 중에서 특정 조건을 만족하는 튜플들의 부분집합을 구하여 새로운 릴레이션을 만든다.
프로젝트 : 주어진 릴레이션에서 속성 리스트에 제시된 속성 값만을 추출하여 새로운 릴레이션을 만든다.
(단 연산 결과에 중복이 발생하면 중복이 제거.)
조인 : 공통 속성을 중심으로 2개의 릴레이션을 하나로 합쳐서 새로운 릴레이션을 만든다.</p>
<p>헝가리안 표기법</p>
<blockquote>
<p>식별자 표기 시 접두어에 자료형을 붙이는 표기법</p>
</blockquote>
<p>식별자 표기법 :</p>
<p>카멜 표기법 - 식별자 표기 시에 여러 단어가 이어지면 첫 단어 시작만 소문자로 표시하고, 각 단어의 첫 글자는 대문자로 지정하는 표기법 (ex : goodMan)</p>
<p>파스칼 표기법 - 식별자 표기 시에 여러 단어가 이어지면 각 단어의 첫 글자는 대문자로 지정하는 표기법</p>
<p>(ex : GoodMan)</p>
<p>스네이크 표기법 - 식별자 표기 시에 여러 단어가 이어지면 단어 사이에 언더 바를 넣는 표기법 (ex : good_man)</p>
<p>헝가리안 표기법 - 식별자 표기 시, 접두어에 자료형을 붙이는 표기법</p>
<p>(ex : szGoodMan (sz는 String Zero로 약자로 문자열이 없다는 표기입니다.)</p>
<p>테스트의 종류 중, 둥치분할 테스트, 경계값 분석 테스트 등의 종류가 있는 테스트 기법 </p>
<blockquote>
<p>블랙박스 테스트(명세 기반 테스트)\</p>
</blockquote>
<p>DB 스키마 </p>
<blockquote>
<p>데이터베이스의 구조, 제약조건 등의 정보를 담고 있는 기본적인 구조</p>
</blockquote>
<p>UI 설계 원칙 중 직관성에 대해서 쓰시오</p>
<blockquote>
<p>누구나 쉽게 이해하고, 쉽게 사용할 수 있어야 하고, 쉬운 검색, 쉬운 사용성, 일관성이 부득성을 가지고 있는 UI 설계 원칙 </p>
</blockquote>
<p> EAI 유형에는 메세지 버스(Message bus), 하이브리드(Hybrid), (   1.  ), (   2.   ) 4가지가 있다.</p>
<blockquote>
<ol>
<li>포인트 투 포인트(Point-to-point) 2. 허브 앤 스포크(Hub &amp; Spoke)</li>
</ol>
</blockquote>
<p>EAI의 유형 (데이터 전송 모델)</p>
<p>메세지 버스 : 애플리케이션과 미들웨어간 웹서비스 인터페이스를 통해 전송</p>
<p>하이브리드 : 허브앤스포크와 메세지버스 혼합</p>
<p>포인트 투 포인트 : 1:1방식으로 애플리케이션 통합 수행</p>
<p>허브 앤 스포크 : 단일 접점인 허브시스템을 통해 데이터를 전송하는 중앙 집중 방식</p>
<p>C++에서 생성자란 무엇인지 쓰시오</p>
<blockquote>
<p>해당 클래스의 객체가 생성될 때 자동으로 호출되는 특수한 종류의 메서드</p>
</blockquote>
<p>학생 테이블에 주소 속성을 추가하는 SQL문 작성</p>
<blockquote>
<p>ALTER TABLE 학생 ADD 주소 VARCHAR(20);</p>
</blockquote>
<h3 id="4회기출">4회기출</h3>
<p>현재 IPv4의 확장형으로 IPv4가 가지고 있는 주소 고갈, 보안성, 이동성 지원 등의 문제점을 해결하기 위해서 개발된 128비트 주소체계를 갖는 차세대 인터넷 프로토콜은 무엇인가?</p>
<blockquote>
<p>Ipv6</p>
</blockquote>
<p>목적에 따른 디자인 패턴의 유형에는 생성, 구조, ()이가 있다. </p>
<blockquote>
<p>행위 </p>
</blockquote>
<p>데이터베이스의 회복(Recovery) 기법 중 Rollback 시 Redo, Undo가 모두 실행되는 트랜잭션 처리법으로 트랜잭션 수행 중 갱신 결과를 바로 DB에 반영하는 기법은 무엇인가?</p>
<blockquote>
<p>즉시 갱신 기법</p>
</blockquote>
<p>스니핑(Sniffing) </p>
<blockquote>
<p>암호화 되지 않은 패킷들을 수집하여 순서대로 재조합 후 ID, PW와 같은 중요한 정보를 유출하기 위한 수동적인 형태의 공격 </p>
</blockquote>
<p> IP 패킷에서 외부의 공인 IP주소와 포트 주소에 해당하는 내부 IP주소를 재기록하여 라우터를 통해 네트워크 트래픽을 주고받는 기술은 무엇인가?</p>
<blockquote>
<p>NAT(Network Address Transformation) </p>
</blockquote>
<p>분산 컴퓨팅 기술 기반의 데이터 위변조 방지 기술로 P2P방식을 기반으로 하여 소규모 데이터들이 연결되어 형성된 &#39;블록&#39;이라는 분산 데이터 저장 환경에 관리 대상 데이터를 저장함으로써 누구도 임의로 수정할 수 없고 누구나 변경의 결과를 열람할 수 있게끔 만드는 기술은 무엇인가?</p>
<blockquote>
<p>블록체인</p>
</blockquote>
<p>오픈 소스 기반으로 한 분산 컴퓨팅 플랫폼으로, 일반 PC급 컴퓨터들로 가상화된 대형 스토리지를 형성하고 그 안에 보관된 거대한 데이터 세트를 병렬로 처리할 수 있도록 개발된 자바 소프트웨어 프레임워크로 구글, 야후 등에 적용한 기술은 무엇인가? </p>
<blockquote>
<p>하둡</p>
</blockquote>
<p>이상 현상의 종류 3가지</p>
<blockquote>
<p>삽입 이상, 삭제 이상, 갱신 이상</p>
</blockquote>
<p> 테스트 오라클 중 특정한 몇 개의 입력값에 대해서만 기대하는 결과를 제공해주는 오라클은 무엇인가?</p>
<blockquote>
<p>샘플링 오라클</p>
</blockquote>
<p>SELECT 학과, COUNT(학과) AS 학과별튜플수 FROM 학생 GROUP BY 학과</p>
<p>데니스 리치와 켄톰슨 등이 함께 벨 연구소를 통해 만든 운영체제이며, 90% 이상 C언어로 구현되어 있고, 시스템 프로그램이 모듈화되어 있어서 다른 하드웨어 기종으로 쉽게 이식 가능하며 계층적 트리 구조를 가짐으로써 통합적인 파일 관리가 용이한 운영체제는 무엇인가?</p>
<blockquote>
<p>유닉스</p>
</blockquote>
<p>정보보안에서 가용성(Availablility)</p>
<blockquote>
<p>인가된 사용자는 권한 범위 내에서 언제든 자원 접근 가능</p>
</blockquote>
<p>기밀성 : 인가되지 않은 개인 혹은 시스템 접근에 따라 정보 공개 및 노출을 차단하는 특성</p>
<p>무결성 : 인가된 사용자만이 시스템 내 정보 수정 가능</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[한 권으로 그리는 컴퓨터 과학 로드맵]]></title>
            <link>https://velog.io/@unfamiliar_dev/%ED%95%9C-%EA%B6%8C%EC%9C%BC%EB%A1%9C-%EA%B7%B8%EB%A6%AC%EB%8A%94-%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B3%BC%ED%95%99-%EB%A1%9C%EB%93%9C%EB%A7%B5</link>
            <guid>https://velog.io/@unfamiliar_dev/%ED%95%9C-%EA%B6%8C%EC%9C%BC%EB%A1%9C-%EA%B7%B8%EB%A6%AC%EB%8A%94-%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B3%BC%ED%95%99-%EB%A1%9C%EB%93%9C%EB%A7%B5</guid>
            <pubDate>Sun, 22 Sep 2024 13:03:50 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/e50b63b6-6c0e-49e0-bf13-32528b079b39/image.jpeg" alt=""></p>
<p>cs를 customer service로만 알고 있었던,,, 나를 반성하면서 Computer Science 알기위해 도서관에서 책을 빌려보았다.. (사실 책 구경하다가 우연히 보게 됨 ㅎ;) </p>
<h1 id="computer-science-컴퓨터-과학">Computer Science (컴퓨터 과학)</h1>
<p>컴퓨터과학이라는 학문이. 컴퓨터과학은 컴퓨터가 문제 해결에 어떻게 활용될 수 있는지 보여주었다. 결국 프로그램을 효과적으로 작성하려면 컴퓨터과학을 필수적으로 배워야 한다..</p>
<p>⇒  프로그그래밍적 사고력을 요하는 개발자는 결국 코딩을 잘 해야하는데 이를 효과적으로 작성을 하려면 컴퓨터과학은 필수적으로 배워야 한다.</p>
<blockquote>
<p>모든 사람은 프로그래밍을 배워야 한다. 프로그래밍은 생각하는 방법을 가르쳐주기 때문이다 - 스티브잡스</p>
</blockquote>
<h2 id="문제-해결을-위한-기초-지식">문제 해결을 위한 기초 지식</h2>
<ol>
<li>순서도와 의사코드를 이용해 생각을 나타내고 모델로 정리하기</li>
<li>논리적으로 따져보고 옳고 그름 판단하기</li>
<li>사물을 꼼꼼하게 세는 법</li>
<li>확률을 안전하게 계산하기</li>
</ol>
<h3 id="1-순서도">1. 순서도</h3>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/cd203437-f7f4-402f-8de8-9f467db0f276/image.png" alt="">
$</p>
<p>컴퓨터 프로그램도 결국 절차이기에  사람이 봐도 이해할 수 있도록 그릴수 있어야 한다. </p>
<p>아래 대전제를 기억해보자 </p>
<ol>
<li>프로그램 절차의 개수는 정해져 있어야 한다.</li>
<li>각 절차는 항상 같은 내용이어야 한다.</li>
<li>모든 가능성을 고려해야 한다.</li>
<li>예시는 절차를 검증하는 데 사용한다.</li>
</ol>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/20d418d2-bbcb-463c-9404-eb8ec0158e24/image.png" alt=""></p>
<p>vscode에서도 .excalidraw 파일로 업로드 가능하다. </p>
<h3 id="2-논리적으로-따져-보기">2. 논리적으로 따져 보기</h3>
<p>수리논리학에서도 변수와 연산자를 이용해 사물의 타당성을 나타낸다고 한다.</p>
<p>eg)  “만약 수영장의 물이 따뜻하면, 나는 수영하겠다. “ </p>
<p>이 명제가 타당하기 위해서는 다음 두 명제가 타당해야함.</p>
<p>A : 수영장의 물이 따듯하다.</p>
<p>B : 나는 수영한다. </p>
<p>이러한 명제는 True 또는 False 둘 중하나만 될수 있다.  </p>
<p>참고 … fuzzy logic 이라는 개념에 의해 명확하게 정의될 수 없는 지식을 표현하는 방법이 있다고 한다. </p>
<p>eg ) 참과 거짓이라는 2개의 값만을 가지는 고전적인 이진 논리에서 벗어나 참과 거짓으로 명확히 선을 그을 수 없는 예를들어 저는 키가 177~8정도 되는데 키가 큰 편일까요? 등 </p>
<p>이 처럼 이러한 한계점을 극복하기 위해 논리식의 값이 구간 [0, 1] 사이의 값을 가질 수 있도록 정의한다고 합니다.</p>
<p>위 예시의 명제에서 따듯한 물에서만 수영할 것을 뜻하는건 아닙니다. 이 명제는 차가운 수영장 물에 대해서는 아무것도 약속하지 않았다. 달리 말해 A→B는 B→A를 의미 하지 않는다. </p>
<p>만약 두 명제가 서로 의존하다는 것을 나타내려면 ‘상호조건명제’를 사용하면 된다. </p>
<p>A ←→ B : 만약 수영장의 물이 따뜻하다면, 그리고 오직 수영장의 물이 따뜻해야만 나는 수영하겠다.</p>
<p>어디까지나 상호조건명제에서만 그렇지 일반적으로 A→ B에서 B → A를 추론하지말자. 이렇게 추론하는 것을 ‘도치 (inverse)의 오류’ 리고 한다. </p>
<p>이처럼 우리가 알고 있고 앞으로 학습할수 있는 여러 연산자(논리, boolean, 진리표등)을 통해 논리적인 사고력을 길러보자.</p>
<h3 id="3-꼼꼼하게-세는-법---4-확률-계산하기">3. 꼼꼼하게 세는 법  &amp; 4. 확률 계산하기</h3>
<p>여,,,기에서는 다양한 문제에서 나올 수 있는 결과나 구성의 가짓수를 세는 수학정 방법론과 확률 계산의 기본 원칙을 다루고 있어 pass 합니다. (아마 전공 과정에서는 이를 이산수학이라고 지칭하는거 같네요)</p>
<h3 id="결론내-생각">결론(내 생각)</h3>
<p>어느 책에서 본 적이 있는데 사람이 집으로 갈 때는 무의식적으로 익숙한 주위를 보면서 가지만 컴퓨터는 도착지와 현재 위치 기반으로 어디를 어떻게 거리는 얼마나 등을 고려해야 한다 했습니다. 이처럼 컴퓨터에게 어떠한 명령을 하려면 논리를 기반으로 프로그래밍을 해야하는게 중요하며 위 4가지 속성아래 진행해야한 다는 것을 알수 있습니다.</p>
<h1 id="programming-paradigm">Programming Paradigm</h1>
<blockquote>
<p>“ 말하는 대로 프로그램이 바로 만들어지는 프로그래밍 언어는 없나요? “ 하고 말하는 사람을 보면, 막대사탕을 물려주라.</p>
</blockquote>
<blockquote>
<ul>
<li>앨런 퍼리스 Alan Jay Perlis ( 참고로 앨런 퍼리스는 컴퓨터과학의 노벨상인 튜링상을 최초로 수상한 미국의 컴퓨터 과학자,,,</li>
</ul>
</blockquote>
<p>머지 않아 사람이 쓰는 언어로 컴퓨터에게 할 일을 지시하는 날이 오겠지만, 현재까지는 기계가 해야 할 일을 제약 없이 지시할 수 있는 능력을 가진 사람은 프로그래머뿐이다. 내리고 싶은 명령을 프로그래밍 언어(기계가 이해하는 언로)로 표현해야지.. </p>
<hr>
<h2 id="1-코드를-지배하는-숨겨진-언어-요소-파해치기">1. 코드를 지배하는 숨겨진 언어 요소 파해치기</h2>
<h3 id="프로그래밍-언어의-세-가지-기본-요소">프로그래밍 언어의 세 가지 기본 요소</h3>
<ul>
<li>프로그래밍 언어들 마다 용도와 특징, 문법등이 상이하지만 모든 언어가 존재하는 목적은 단 하나, 바로 정보를 조작하는 것</li>
<li>프로그래밍 언어가 정보를 표현하고 조작하는 데는 세 가지 기본 요소가 필요하다.</li>
</ul>
<ol>
<li><strong><em>정보를 나타내는 값</em></strong></li>
</ol>
<p>값은 (value)은 정보를 나타낸다. 값은 정말인지 중요하기에 프로그래밍 언어의 <strong><em>‘일급 시민’</em></strong>이라고 부른다.</p>
<p><strong><em>” 1급 시민 “  또는 “ 1급 객체 “</em></strong> 라는 용어는 해당 언어의 요소가 다음과 같은 특성을 갖추었을 때 사용된다고 한다. </p>
<p>a. 변수나 데이터 구조 안에 담길 수 있음
b. 함수의 인자로 전달될 수 있음
c. 함수의 결과로 반환될 수 있음
d. 할당에 사용된 표현식 내에서 리터럴로 표현될 수 있음</p>
<p>⇒ eg. Javascript에서 함수는 1급 객체라고 할수 있다. 대표적인 전통적의 객체지향 프로그래밍 언어인 Java는 함수를 1급 시민으로 취급하지 않았지만 Java 8부터 람다 표현식을 도입하여 함수형 프로그래밍 스타일을 어느 정도 지원하기 시작했다고 한다.</p>
<p>참고로 람다 표현식(lambda expression)이란 함수형 프로그래밍을 구성하기 위한 함수식이다. </p>
<p>eg</p>
<pre><code>int add(int x, int y) {
return x + y;
}

// 위의 메서드를 람다 표현식을 이용해 아래와 같이 단축 시킬수 있다. (메서드 반환 타입, 메서드 이름 생략)
(int x, int y) -&gt; {
return x + y;
};

// 매개변수 타입도 생략 할 수 있다.
(x, y) -&gt; {
return x + y;
};

// 함수에 리턴문 한줄만 있을 경우 더욱 더 단축 시킬 수 있다. (중괄호, return 생략)
(x, y) -&gt; x + y;

출처: [https://inpa.tistory.com/entry/☕-Lambda-Expression](https://inpa.tistory.com/entry/%E2%98%95-Lambda-Expression) [Inpa Dev 👨‍💻:티스토리]</code></pre><ol start="2">
<li><strong><em>값을 만들어내는 ‘식’</em></strong></li>
</ol>
<p>식(expression)은 값을 생성하는 표현이다. </p>
<p>값을 생성하는 방법에는 크게 두가지가 있다. </p>
<p>a. 리터럴(literal)을 작성하는 방법
b. 함수를 호출해 구하는 방법</p>
<p>eg.      3 </p>
<p>코드에 표기된 문자3이 의미하는 대로 값3이 바로 생성된다. 코드의 표현을 그대로 값으로 옮기는 말그대로 literal 것이다.</p>
<p>함수의 경우, 다른 어딘가에 작성된 방법이나 절차에 따라 명령을 수행함으로써 값을 생성하는 것이다. </p>
<p>사실 식이란, 우리가 어떻게 작성하더라도 컴퓨터의 계산 과정에서 하나의 값으로 축약되기 마련이기에 연산자를 이용하면 여러식을 하나의 큰 식으로 결합하고, 이것을 다시 한층  더 큰 식으로 만들수도 있다. </p>
<ol start="3">
<li><strong><em>명령을 내리는 ‘문’</em></strong></li>
</ol>
<p>식이 값을 나타내는 데 사용된다면, 문(statement)은 컴퓨터에게 무언가를 수행하도록 명령하는 데 사용된다. </p>
<p>eg. print(”hello world”) 라는 문은 메시지가 출력되도록 하는 것 처럼</p>
<p>일부 프로그래밍 언어는 정의(definition) 라는 특별한 문을 제공하며, 정의는 새로운 값이나 함수처럼 이전에 존재하지 않았던 대상을 추가하여 프로그램의 상태를 변경하는 것. </p>
<p>정의된 대상을 가리킬 수 있으려면 이름을 대상에 연관시켜 두어야 하고 이를 <strong><em>이름 바인딩(name binding)</em></strong>이라고 한다.</p>
<h2 id="2-변수에-정확한-정보-저장하기">2. 변수에 정확한 정보 저장하기</h2>
<h3 id="값을-가리키는-변수">값을 가리키는 변수</h3>
<p>변수는 이름 바인딩(이름과 값을 묶는 매개) 중에서 가장 대표적인 것 </p>
<p>변수는 어떤 값이 저장된 메모리 주소와 이름을 연결한 것. </p>
<p>변수에 특정 유형(정수, 부동소수점 수, 문자열 등)이 있기에 이 변수의 유형을 통해 프로그램은 변수의 메모리 블록에서 읽어들인 비트(0과 1)들을 어떻게 해석해야 할지 알 수 있다. </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/d5e4a877-b6d2-4253-a1a7-8f99e31b13ed/image.png" alt=""></p>
<h3 id="변수-유효-범위">변수 유효 범위</h3>
<p>변수가 어디에서 유효하게 사용될 수 있는지는 변수의 유효 범위(scope)에 의해 정의된다. </p>
<p>eg. 전역변수 </p>
<p>전역에서 유효한 모든 이름은 <strong><em>이름공간(namepace)</em></strong>을 구성한다. 불필요한 것들을 이름공간에 추가하면 이름 공간이 더렵혀지게 되고 이를 <strong><em>이름공간 오염(namespace pollution)</em></strong> 이라고 한다. </p>
<h2 id="3-문제의-해법을-다양한-패러다임을-고민하기">3. 문제의 해법을 다양한 패러다임을 고민하기</h2>
<h3 id="프로그래밍-패러다임--프로그래밍-세계를-바라보는-관점">프로그래밍 패러다임 : 프로그래밍 세계를 바라보는 관점</h3>
<p>패러다임은 코드를 작성하는 형식과 기술을 결정한다.</p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/923cb3f3-a289-44da-8cb1-4f0c524e15d9/image.png" alt=""></p>
<h2 id="결론">결론</h2>
<p>프로그래밍 언어 구조와 프로그래밍 패러다임을 간략히 살펴 보았다. 앞으로 다양한 프로그래밍언와 패러다임이 생길 것이기에 이러한 개략적인 구조를 이해하였으니 어떤 언어가 등장하든 가볍게 접근할수 있도록 해야겠다!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[<정보처리기사 실기> 21년 기출
]]></title>
            <link>https://velog.io/@unfamiliar_dev/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC-%EC%8B%A4%EA%B8%B0-21%EB%85%84-%EA%B8%B0%EC%B6%9C</link>
            <guid>https://velog.io/@unfamiliar_dev/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC-%EC%8B%A4%EA%B8%B0-21%EB%85%84-%EA%B8%B0%EC%B6%9C</guid>
            <pubDate>Sun, 22 Sep 2024 05:38:31 GMT</pubDate>
            <description><![CDATA[<p><a href="https://sssinga.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC-%EC%8B%A4%EA%B8%B0-2021%EB%85%84-1%ED%9A%8C-%EA%B8%B0%EC%B6%9C%EB%AC%B8%EC%A0%9C-%EB%B3%B5%EC%9B%90-%EB%B0%8F-%EB%8B%B5%ED%95%B4%EC%84%A4%5D">출처</a></p>
<h3 id="1회기출">1회기출</h3>
<p>네트워크 계층 프로토콜</p>
<p>인터넷 환경에서의 호스트 상호 간 통신에서 연결된 네트워크 접속 장치의 물리적 주소인 MAC주소를 이용하여 IP주소를 찾는 인터넷 계층의 프로토콜로, 역순 주소 결정 프로토콜이라 불린다. </p>
<blockquote>
<p>RARP</p>
</blockquote>
<p>데이터베이스 설계</p>
<p>물리적 설계 =&gt; 논리적 구조로 표현된 데이터를 디스크 등의 저장장치에 저장할 수 있는 데이터로 변환하는 과정으로, 파일의 저장 구조 및 액세스 경로를 결정하여, 테이블 정의서 및 명세서가 산출된다.</p>
<p>개념적 설계 =&gt; 현실 세계에 대한 인식을 추상적 개념으로 표현하는 과정으로, 개념 스키마 모델링과 트랜잭션 모델링을 수행하며, 요구 조건 명세를 E-R다이어그램으로 작성한다. </p>
<p>논리적 설계 =&gt; 현실의 자료를 특정 DBMS가 지원하는 자료구조로 변환하는 과정으로, 트랜잭션의 인터페이스를 설계하고, 정규화를 통해 스키마를 평가 및 정제한다.</p>
<p>웹 서비스 </p>
<p>웹 서비스와 관련된 서식이나 프로토콜 등을 표준적인 방법으로 기술하고 게시하기 위한 언어로, XML로 작성되며 UDDI의 기초가 된다. SOAP, XML 스키마와 결합하여 인터넷에서 웹 서비스를 제공하기 위해 사용되며, 클라이언트는 이것을 통해 서버에서 어떠한 조작이 가능한지를 파악할 수 있다. </p>
<blockquote>
<p>WSDL, (Web Service Description Language) </p>
</blockquote>
<p>요구사항 </p>
<p>(1) 요구사항은 시스템이 무엇을 하는지, 어떤 기능을 하는지 등 사용자가 시스템을 통해 제공받기를 원하는 기능이나 시스템이 반드시 수행해야 하는 기능을 의미한다. </p>
<blockquote>
<p>기능</p>
</blockquote>
<p>(2) 요구사항은 품질이나 제약사항과 관련된 요구사항으로, 시스템의 장비 구성, 성능, 인터페이스, 테스트, 보안 등의 요구사항을 말한다. </p>
<blockquote>
<p>비기능</p>
</blockquote>
<p>시스템의 성능을 향상시키고 개발 및 운영의 편의성 등을 높이기 위해 정규화된 데이터 모델을 의도적으로 통합, 중복, 분리하여 정규화 원칙을 위배하는 행위를 가리키는 용어를 쓰시오.</p>
<blockquote>
<p>반정규화 ( 역정규화, 비정규화) </p>
</blockquote>
<p>블랙박스 테스트 </p>
<p>(1)은 입력 조건의 중간값보다 경계값에서 오류가 발생될 확률이 높다는 점을 이용한 검사 기법이고, (2)는 입력조건이 유효한 경우와 그렇지 않은 경우의 입력 자료의 개수를 균등하게 정하는 검사 기법이다.</p>
<p>예를 들어 0 &lt;= X &lt;= 10과 같은 조건이 있을 때, (1)은 -1,0,10,11 입력값으로, (2)는 0이상 10이하의 수 n개와 0미만 10초과의 수 n개를 입력값으로 정한다. </p>
<blockquote>
<p>(1) 경계값 분석 (2) 동등 분할 테스트(동치분할, 균등분할, 동치 클래스) </p>
</blockquote>
<p>어플리케이션 테스트</p>
<p>코딩 직후 소프트웨어 설계의 최소 단위인 모듈이나 컴포넌트에 초점을 맞춰 수행하는 테스트로, 모듈 테스트라고도 불린다. 사용자의 요구사항을 기반으로 한 기능성 테스트를 최우선으로 인터페이스, 외부적 I/O, 자료구조, 독립적 기초경로, 오류 처리 경로, 경계 조건 등을 검사한다. </p>
<blockquote>
<p>단위 테스트</p>
</blockquote>
<p>모듈들을 결합하여 하나의 시스템으로 완성시키는 과정에서의 테스트를 의미하며, 모듈 간 또는 컴포넌트 간의 인터페이스가 정상적으로 실행되는지 검사한다.</p>
<blockquote>
<p>통합 테스트</p>
</blockquote>
<p>IPv6는 ( 128 ) 비트의 주소를 가지며, 인증성, 기밀성, 데이터 무결성의 지원으로 보안 문제를 해결할 수 있고, 주소의 확장성, 융통성, 연동성이 뛰어나다. </p>
<p>IPv4는 32비트의 주소를 가지며 ( 8 ) 비트씩 4부분, 총 32비트로 구성되어 있다. Ipv4는 네트워크 부분의 길이에 따라 A 클래스에서 E클래스까지 총 5단계로 구성되어 있다. </p>
<p>네트워크</p>
<p>실행 프로세스 간 통신을 가능하게 하는 기술 종류에는 파이프, 메시지 큐, 공유 메모리, 세마포어, 소캣 등이 있다.</p>
<blockquote>
<p>IPC(Inter-Process Communication) </p>
</blockquote>
<p>기업 내 각종 애플리케이션 및 플랫폼 간의 정보 전달, 연계, 통합 등 상호 연동이 가능하게 해주는 솔류션으로, Point-to-Point, Hub&amp;Spoke, Message Bus, Hybrid 등의 당양한 방식으로 구축이 가능한 모듈 연계 방법</p>
<blockquote>
<p>EAI(Enterprise Application Integration) </p>
</blockquote>
<p>데이터 모델 구성요소 3가지</p>
<p>데이터베이스에 저장된 실제 데이터를 처리하는 작업에 대한 명세로서 데이터베이스를 조작하는 기본 도구이다. </p>
<p>개체 데이터 모델에서는 ( 연산 ) 을 이용하여 실제 데이터를 처리하는 작업에 대한 명세를 나타내는데 논리 데이터 모델에서는 ( 구조 ) 를 어떻게 나타낼 것인지 표현한다.</p>
<p>( 제약조건 ) 은 데이터 무결성 유지를 위한 db의 보편적 방법으로 릴레이션의 특정 칼럼에 설정하는 제약을 의미하며, 개체무결성과 참조 무결성 등이 있다.</p>
<p>시스템 객체의 접근을 개인 또는 그룹의 식별자에 기반을 둔 방법, 어떤 종류의 접근 권한을 가진 사용자가 다른 사용자에 자신의 판단에 따라 권한을 허용하는 접근제어 방식?</p>
<blockquote>
<p>DAC(임의 접근 통제) </p>
</blockquote>
<p>임의적 접근 통제(DAC - Discretionary Access Control) : 시스템 객체에 대한 접근을 사용자나 그룹의 신분을 기준으로 제한하는 방법</p>
<p>강제적 접근 통제(MAC - Mandatory Access Control) : 미리 정해진 정책과 보안 등급에 의거하여 주체에게 허용된 접근 권한과 객체에게 부여된 허용 등급을 비교하여 접근을 통제하는 모델</p>
<p>역할기반 접근 통제(RBAC - Role Based Access Control) : DAC와 MAC의 단점을 보완한 방식으로 멀티 프로그래밍 환경에서의 보완 처리를 위해 제안되었으며 사용자에게 할당된 역할에 기반하여 접근을 통제하며 중앙에서 집중적으로 관리</p>
<p>결합도</p>
<p>( 내용 결합도 ) 다른 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용하는 경우의 결합도</p>
<p>( 스탬프 결합도 ) 모듈 간의 인터페이스로 배열이나 객체, 구조 등이 전달되는 경우의 결합도</p>
<p>( 공통 결합도 ) 파라미터가 아닌 모듈 밖에 선언된 전역 변수를 참조하고 전역 변수를 갱신하는 식으로 상호작용하는 경우의 결합도</p>
<p>네트워크 보안</p>
<p>( ) &#39;세션을 가로채다&#39;라는 의미로, 정상적인 연결을 RST 패킷을 통해 종료시킨 후 재연결 시 희생자가 아닌 공격자에게 연결하는 기법이다.</p>
<p>TCP ()은 공격자가 TCP 3-Way-Handshake 과정에 끼어듦으로써 서버와 상호 간의 동기화된 시퀀스 번호를 갖고 인가 되지 않은 시스템의 기능을 이용하거나 중요한 정보에 접근할 수 있게 된다.</p>
<blockquote>
<p>세션 하이재킹</p>
</blockquote>
<h3 id="2회기출">2회기출</h3>
<p>네트워크 장치를 필요로하지 않고 네트워크 토폴로지가 동적으로 변화되는 특징이 있으며 으용 분야로는 긴급 구조, 긴급회의, 전쟁터에서의 군사 네트워크에 활용되는 네트워크</p>
<blockquote>
<p>Ad-hoc Network</p>
</blockquote>
<p>인터페이스</p>
<p>(1) 사용자가 시스템이나 서비스를 이용하면서 느끼고 생각하게 되는 총제적인 감정 및 경험</p>
<blockquote>
<p>UX (User Experience) </p>
</blockquote>
<p>(2) 사용자와 시스템 간의 상호작용이 원할하게 이뤄지도록 도와주는 장치나 소프트웨어 </p>
<blockquote>
<p>UI (User Interface)</p>
</blockquote>
<p>트랜잭션 </p>
<p>트랜잭션의 연산은 데이터베이스에 모두 반영되도록 완료(Commit) 되든지 아니면 전혀 반영되지 않도록 복구(Rollback) 되어야 한다는 특성을 의미한다.</p>
<blockquote>
<p>원자성(Atomicity)</p>
</blockquote>
<p>정규화 (도부이결다조) </p>
<p>비정규 릴레이션 =&gt; 1NF 도메인이 원자값
1NF -&gt; 2NF : 부분적 함수 종속 제거
2NF -&gt; 3NF : 이행적 함수 종속 제거
3NF -&gt; BCNF : 결정자이면서 후보키가 아닌 것 제거
BCNF -&gt; 4NF : 다치 종속 제거
4NF -&gt; 4NF : 조인 종속성 이용 </p>
<p>SQL</p>
<p>학부생 테이블에서 입학생수가 300이상인 튜플의 학과번호를 999로 갱신하는 SQL문</p>
<pre><code>UPDATE 학부생 SET 학과번호 = 999 WHERE 입학생수 &gt;= 300; </code></pre><p>SELECT .... FROM 학생정보 a JOIN 학과정보 b (   ON   ) a.학과 = b.(   학과 )</p>
<p>회원 테이블에서 &#39;이름&#39;이 &quot;이로&quot; 시작하는 회원들을 &#39;가입일&#39; 순으로 내림차순 정렬하는 SQL 문</p>
<pre><code>SELECT * FROM 회원 WHERE 이름 LIKE 이% OREDER BY 가입일 DESC</code></pre><p>미국 국립 표준 기술연구소 (NIST), DES를 대체하며, 128 비트 블록 크기와 128,192,256비트 키 크기의 대칭 키 암호화 방식은?</p>
<blockquote>
<p>AES (Advanced Encryption Standard)</p>
</blockquote>
<p>화이트박스 테스트</p>
<p>최소 한번은 모든 문장이 수행되도록 구성하는 검증 기준</p>
<blockquote>
<p>구문(문장) 검증 기준</p>
</blockquote>
<p>조건식이 참(True) 거짓(False)일 때 수행되도록 구성하는 검증 기준</p>
<blockquote>
<p>결정(분기) 검증 기준</p>
</blockquote>
<p>결정(분기) 검증 기준과 달리 조건식에 상관없이 개별 조건이 참(True) 거짓(False)일 때 수행되도록 구성하는 검증 기준</p>
<blockquote>
<p>조건 검증 기준</p>
</blockquote>
<p>응집도(우논시절통순기)</p>
<p>내부의 요소들이 기능적으로 연관성은 없으나, 순차적으로 실행될 때의 응집도</p>
<blockquote>
<p>절차적 응집도</p>
</blockquote>
<p>서로 다른 기능을 수행하지만 동일한 입력과 출력을 사용할 때의 응집도</p>
<blockquote>
<p>교환적 응집도</p>
</blockquote>
<p>하나의 기능에 밀접하게 관련되어 있거나 연관되어 있을 떄의 응집도 </p>
<blockquote>
<p>기능적 응집도</p>
</blockquote>
<p>패킷교환방식(저장 방식) : 패킷이라는 단위를 사용하여 데이터를 송신하고 수신. 패킷이란 정보를 일정한 크기로 분할한 뒤 각각의 패킷에 송수신 주소 및 부가 정보를 입력한 것으로 현재 컴퓨터 네트워크에서 주로 사용하는 방식. (EX : 인터넷)</p>
<p>목적지 호스트와 미리 연결한 후, 통신하는 연결형 교환 방식</p>
<blockquote>
<p>가상회선 방식 (Virutal Circuit) </p>
</blockquote>
<p>헤더에 붙어서 개별적으로 전달하는 비연결형 교환 방식</p>
<blockquote>
<p>Data Gram 데이터그램 방식</p>
</blockquote>
<p>디자인 패턴 중에서 (행위) 패턴은 반복적으로 사용되는 객체들의 상호작용을 패턴화 한 것으로, 클래스나 객체들이 상호작용하는 방법.  알고리즘의 패턴에는 Interpreter, Observer, Command등이 있음</p>
<p>병행제어기법 중, 접근한 데이터에 대한 연산을 모두 마칠때까지 상호배제하는 기법</p>
<blockquote>
<p>로킹</p>
</blockquote>
<p>럼바우 데이터 모델링 </p>
<ol>
<li><p>다수의 프로세스들 간의 자료 흐름을 중심으로 처리 과정을 표현한 모델링 ex) 자료 흐름도(DFD)</p>
<blockquote>
<p>Function</p>
</blockquote>
</li>
<li><p>시간의 흐름에 따른 객체들 간의 제어 흐름, 상호 작용, 동작 순서 등의 동적인 행위를 표현하는 모델링 ex) 상태 다이어그램(상태도)</p>
<blockquote>
<p>Dynamic </p>
</blockquote>
</li>
<li><p>시스템에서 요구되는 객체를 찾아내어 속성과 연산 식별 및 객체들 간의 관계를 규정하여 표시하는 모델링 ex) ER다이어그램(ERD)</p>
</li>
</ol>
<blockquote>
<p>Information</p>
</blockquote>
<p>테스트 하네스의 도구 구성 요소 중, 상향식 테스트시, 상위 모듈 역할을 대신하는 테스트 드라이버와 하향식 테스트 시 하위 모듈 역할을 대신하는 테스트 (스텁) 이 있다.</p>
<h3 id="3회기출">3회기출</h3>
<p>네트워크 계층 프로토콜</p>
<p>호스트 IP주소를 네트워크 접속 장비의 물리적 주소(MAC)로 바꿈</p>
<blockquote>
<p>ARP(Address Resolution Protocol) </p>
</blockquote>
<p>데이터를 제어하는 DCL의 하나인 GRANT의 기능에 대해 간략히 서술</p>
<blockquote>
<p>데이터베이스 관리자가 사용자에게 권한을 부여하는 데 사용하는 명령어
GRANT 권한 리스트 ON 개체 TO 사용자</p>
</blockquote>
<p>AAA서버는 사용자의 컴퓨터 자원 접근 처리와 서비스 제공에 있어서의 다음3가지 기능을 제공하는 서버이다.</p>
<p>접근하는 사용자의 신원을 검증하는 기능</p>
<blockquote>
<p>Authentication </p>
</blockquote>
<p>신원이 검증된 사용자에게 특정된 권한과 서비스를 허용하는 기능</p>
<blockquote>
<p>Authorization </p>
</blockquote>
<p>사용자가 어떤 종류의 서비스를 이용했고, 얼마만큼의 자원을 사용했는지 기록 및 보관하는 기능</p>
<blockquote>
<p>Accounting</p>
</blockquote>
<p>디자인 패턴</p>
<p>객체 생성을 서브 클래스에서 처리하도록 분리하여 캡슐화된 패턴으로, 상위 클래스에서 인터페이스만 정의하고 실제 생성은 서브 클래스가 담당한다. 다른 이름으로 가생 생성자(Virutal Constructor) 패턴이라고도 불린다. </p>
<blockquote>
<p>Factory Method (생성패턴 중 하나) </p>
</blockquote>
<p>결합도(Coupling)의 종류 중 단순 처리 대상인 데이터만 전달되는 것이 아니라 어떻게 처리해야 하는지를 결정하는 제어 요소가 전달되는 경우의 결합도를 영문으로</p>
<blockquote>
<p>Control </p>
</blockquote>
<p>애플리케이션 테스트 </p>
<p>소프트웨어의 하위 모듈에서 상위 모듈 방향으로 통합하면서 테스트하는 기법이다.</p>
<blockquote>
<p>상향식 통합 테스트</p>
</blockquote>
<p>하나의 주요 제어 모듈과 관련된 종속 모듈의 그룹인 클러스가(Cluster)가 필요하다.
데이터의 입 출력을 확인하기 위해 더미 모듈인 ( ) 를 생성한다.</p>
<blockquote>
<p>드라이버, 테스트 드라이버, Driver, Test Driver</p>
</blockquote>
<p>SELECT COUNT(*) CNT FROM A CROSS JOIN B WHERE A.NAME LIKE B.RULE;</p>
<blockquote>
<p>cross join은 교차결합으로 카디션 곱이라고도 부른다. join을 해서 나올 수 있는 모든 행의 조합을 보여주면 된다. 각 결과를 곱으로  S로 시작하는 개수가 2개고 T를 포함하는 개수가 2개면 2*2 =4</p>
</blockquote>
<p>파일의 구조는 파일을 구성하는 레코드들이 보조기억장치에 편성되는 방식을 의미하는 것으로, 크게 순차, ( ), 해싱으로 구분한다. ( ) 파일 구조는 값,주소 쌍으로 구성되는 데이터 구조를 활용하여 데이터에 접근하는 방식으로, 자기 디스크에서 주로 활용된다. </p>
<blockquote>
<p>Index, 색인</p>
</blockquote>
<p>( ) 다이어그램은 UML 다이어그램 중 객체(Object)들을 ( )로 추상화하여 표현하는 다이어그램으로 대표적인 구조적 다이어그램이다. ( ) 는 각각의 객체들이 갖는 속성과 메소드를 표현한 것으로 3개의 구획으로 나워 이름, 속성, 메소드를 표기한다. </p>
<blockquote>
<p>클래스, Class</p>
</blockquote>
<p>OSI 7 Layer</p>
<p>물리적으로 연결된 두 개의 인접한 개방 시스템들 간에 신뢰성 있고 효율적인 정보 전송을 할 수 있도록 연결 설정, 데이터 전송, 오류 제어 드의 기능을 수행한다. </p>
<blockquote>
<p>데이터 링크 계층 </p>
</blockquote>
<p>개방 시스템들 간의 네트워크 연결을 관리하며, 경로 제어, 패킷 교환, 트래픽 제어 등의 기능을 수행한다.</p>
<blockquote>
<p>네트워크 계층, 망 계층</p>
</blockquote>
<p>서로 다른 데이터 표현 형태를 갖는 시스템 간의 상호 접속을 위해 필요한 계층으로, 코드 변환, 데이터 암호화, 데이터 압축, 구문 검색 등의 기능을 수행한다. </p>
<blockquote>
<p>표현 계층</p>
</blockquote>
<p>(   )는 블록 암호의 일종으로, 미국 NBS (National Bureau of Standards, 현재 NIST)에서 국가 표준으로 정한 암호이다. 
(   )는 64비트 평문을 64비트 암호문으로 암호화하는 대칭키 암호 알고리즘이다.
(   )의 키는 7비트마다 오류검출을 위한 정보가 1비트씩 들어가기 때문에 실질적으로는 56비트이다.
( ) 취약점을 보완하기 위해 만들어진 고급 암호 화 표준 방식이 AES</p>
<blockquote>
<p>DES(Data Encryption Standard)와 AES(Advanced Encryption Standard)는 대칭키 암호화 방식 중 하나</p>
</blockquote>
<p>블랙박스 테스트</p>
<p>테스트 기법 중 그래프를 활용하여 입력 데이터 간의관계와 출력에 영향을 미치는 상황을 체계적으로 분석한 다음 효용성이 높은 테스트 케이스를 선정하여 검사하는 기법</p>
<blockquote>
<p>Cause0Effect Graph</p>
</blockquote>
<p>Windows, MacOS 등에서 사용하는 인터페이스로, 사용자가 명령어를 직접 입력하지 않고 키보드와 마우스등을 이용하여 아이콘이나 메뉴를 선택하여 모든 작업을 수행하는 사용자 인터페이스</p>
<blockquote>
<p>GUI (Graphic User Interface)</p>
</blockquote>
<p>UML의 관계</p>
<p>관계는 사물과 사물 사이의 연관성을 표현하는 것이다.</p>
<p>하나의 사물이 다른 사물에 포함되어 있는 관계로, 전체와 부분으로 구분되어지며 서로 독립적이다.</p>
<blockquote>
<p>Aggregation (추상화)</p>
</blockquote>
<p>상위 모듈이 하위 모듈보다 더 일반적인 개넘을 가지고 있으며, 하위 모듈이 상위 모듈보다 더 구체적인 개념을 가진다.</p>
<blockquote>
<p>Generalization (개념화)</p>
</blockquote>
<hr>
<pre><code>public class testco {
 public static void main(String[] args) {
  int a = 3, b = 4, c = 3, d = 5;
  if((a == 2 | a == c) &amp; !(c &gt; d) &amp; (1 == b ^ c != d)) {
   a = b + c;
    if(7 == b ^ c != a) {
     System.out.println(a);
    } else {
    System.out.println(b);
    }
  } else {
    a = c + d;
    if(7 == c ^ d != a) {
    System.out.println(a);
    } else {
    System.out.println(d);
    }
  }
 }
}</code></pre><p>비트 XOR 연산자(^) </p>
<p>두 비트가 서로 다른 경우에만 1이 되고 그렇지 않으면 0이된다.
eg
0 ^ 0 -&gt; 0
0 ^ 1 -&gt; 1 
1 ^ 1 -&gt; 0
1 ^ 0 -&gt; 1</p>
<hr>
<p>싱글톤 패턴</p>
<pre><code>class Connection {
  private static Connection _inst = null;
  private int count = 0;
    static public Connection get() {
      if(_inst == null) {
      _inst = new Connection();
      return _inst; 
      }
    return _inst;
    }
  public void count() { count ++; }
  public int getCount() { return count; }
}

public class testcon {
  public static void main(String[] args) {
    Connection conn1 = Connection.get();
    conn1.count();
    Connection conn2 = Connection.get();
    conn2.count();
    Connection conn3 = Connection.get();
    conn3.count();

    System.out.print(conn1.getCount());
  }
}</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[<정보처리기사 실기> 22년 기출 ]]></title>
            <link>https://velog.io/@unfamiliar_dev/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC-%EC%8B%A4%EA%B8%B0-22%EB%85%84-%EA%B8%B0%EC%B6%9C</link>
            <guid>https://velog.io/@unfamiliar_dev/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC-%EC%8B%A4%EA%B8%B0-22%EB%85%84-%EA%B8%B0%EC%B6%9C</guid>
            <pubDate>Fri, 20 Sep 2024 10:52:18 GMT</pubDate>
            <description><![CDATA[<h3 id="1회기출">1회기출</h3>
<p><a href="https://chobopark.tistory.com/271">출처</a></p>
<p>아래 설명에 맞는 RAID 단계를 숫자로 작성하시오.</p>
<ul>
<li>Striping(스트라이핑) 구현 방식</li>
<li>I/O 로드의 분산으로 매우 빠른 속도</li>
<li>데이터를 블럭으로 분할 저장하며, 각 블럭은 다른 디스크로 나뉘어 저장</li>
</ul>
<blockquote>
<p>0</p>
</blockquote>
<p>오류가 발생하기 전까지의 사항을 로그(log)로 기록해 놓고, 이전 상태로 되돌아간 후, 실패가 발생하기 전까지의 과정을 그대로 따라가는 현상</p>
<blockquote>
<p>redo</p>
</blockquote>
<p> 작업을 취소하여 트랜잭션을 이전 상태로 되돌리는 것</p>
<blockquote>
<p>undo</p>
</blockquote>
<p>SELECT name, score FROM 성적 ORDER score DESC</p>
<p>데이터베이스의 이상현상 중, 삭제 이상에 대해 서술하시오. </p>
<blockquote>
<p>데이터를 삭제할 경우 원하지 않는 다른 데이터도 삭제되어버리는 현상
삽입 이상 : 정보 저장 시 불필요한 세부사항을 입력해야 하는 경우
갱신 이상 : 중복 데이터에서 특정 부분만 수정되어 중복된 값이 모순을 일으키는 경우</p>
</blockquote>
<p>요소를 확장해준다는 의미를 가지고 있으며, 모든 항목의 하나의 요소로 추가</p>
<blockquote>
<p>extend</p>
</blockquote>
<p>리스트 내부 요소를 꺼내주는 함수로써, 그 요소는 리스트 안에서 삭제하고 그 값을 반환 (마지막 요소 또는 지정한 요소를 삭제하고 삭제한 값을 반환함) </p>
<blockquote>
<p>pop</p>
</blockquote>
<p>리스트 내부의 요소의 순서는 뒤집는 역할</p>
<blockquote>
<p>reverse</p>
</blockquote>
<p>임시 키 무결성 프로토콜</p>
<blockquote>
<p>TKIP (Temporal Key Integrity Protocol)</p>
</blockquote>
<p>키보드나 마우스와 같은 장치 없이 말이나 행동 그리고 감정과 같은 인간의 자연스러운 표현으로 컴퓨터나 장치를 제어할 수 있는 환경 </p>
<blockquote>
<p>NUI (Natural User Interface)</p>
</blockquote>
<p>유기적 사용자 인터페이스, 자연 그대로의 상태 특성들을 반영한 장치 제어</p>
<blockquote>
<p>OUI (Organic User Interface)</p>
</blockquote>
<p>분석도구에 대한 설명</p>
<p>소스 코드의 실행 없이, 코드의 의미를 분석해 결함을 찾아내는 원시적 코드 분석 기법</p>
<blockquote>
<p>static(테스트 정석 분석 도구) </p>
</blockquote>
<p>소스 코드를 실행하여 프로그램 동작이나 반응을 추적하고 코드에 존재하는 메모리 누수, 스레드 결함 등을 분석 </p>
<blockquote>
<p>dynamic(테스트 동적 분석 도구)</p>
</blockquote>
<p>자바 프로그래밍 언어를 이용한 xUnit의 테스트 기법으로써 숨겨진 단위 테스트를 끌어내어 정형화시켜 단위 테스트를 쉽게 해주는 테스트용 Framework이다.</p>
<blockquote>
<p>JUnit</p>
</blockquote>
<p>블랙박스 테스트 기법</p>
<blockquote>
<p>Boundary Value Analysis (경계값 분석) / Equivalence Partitioning(동등분할) / Cause-Effect Graphing Testing (원인-효과 그래프)</p>
</blockquote>
<p>슈펴키는 (1) 의 속성을 갖는다. </p>
<p>후보키는 (1)와 (2)의 속성을 갖는다.</p>
<blockquote>
<p>(1) 유일성 (2) 최소성 </p>
</blockquote>
<p>이 공격은 APT 공격에서 주로 쓰이는 공격으로, 공격 대상이 방문할 가능성이 있는 합법적인 웹 사이트를 미리 감염시킨뒤, 잠복하고 있다가 공격 대상이 방문하면 대상의 컴퓨터에 악성코드를 설치하는 방식</p>
<blockquote>
<p>Watering Hole</p>
</blockquote>
<p>정보 보호 관리 체계란, 정보 통신 서비스 제공자가 정보 통신망의 안정성 및 신뢰성을 확보하여 정보 자산의 기밀성, 무결성, 가용성을 실현하기 위한 관리적, 기술적 수단과 절차 및 과정을 체계적으로 관리 및 운영하는 것이다.</p>
<blockquote>
<p>ISMS(Information Security Management System)</p>
</blockquote>
<p>소프트웨어 생명주기 V-모델</p>
<blockquote>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/bc7fd76f-e8c2-49a2-a3e4-c461658516b4/image.png" alt=""></p>
</blockquote>
<hr>
<pre><code>class A {
  int a;
  int b;
}

  public class Main {

  static void func1(A m){
   m.a *= 10;
  }

  static void func2(A m){
    m.a += m.b;
  }

  public static void main(String args[]){

  A m = new A();

  m.a = 100;
  func1(m);
  m.b = m.a;
  func2(m);

  System.out.printf(&quot;%d&quot;, m.a);

  }
}</code></pre><blockquote>
<p>2000</p>
</blockquote>
<pre><code>class Car implements Runnable{
  int a;

  public void run(){
     system.out.println(&quot;message&quot;)
  }
}

public class Main{
  public static void main(String args[]){
    Thread t1 = new Thread(new ___());
    t1.start();
  }
}</code></pre><blockquote>
<p>Car 
new 다음은 무조근 class // Runnable은 인터페이스다 (implements) 때문</p>
</blockquote>
<pre><code>#include &lt;stdio.h&gt;
int main() {

  int number = 1234;
  int div = 10;
  int result = 0;

  while (number ( 1 ) 0) {

    result = result * div;
    result = result + number ( 2 ) div;
    number = number ( 3 ) div;

  }

  printf(&quot;%d&quot;, result);
return 0;

}</code></pre><blockquote>
<p>(1) &gt;<br>(2) % 
(3) /</p>
</blockquote>
<pre><code>#include &lt;stdio.h&gt; 
int isPrime(int number) { 
  int i; 
  for (i=2; i&lt;number; i++) { 
    if (number % i == 0) return 0; 
  } 
  return 1; 
} 

int main(void) { 
  int number = 13195, max_div=0, i; 
  for (i=2; i&lt;number; i++) 
  if (isPrime(i) == 1 &amp;&amp; number % i == 0) max_div = i; 
  printf(&quot;%d&quot;, max_div); 
  return 0; 
}</code></pre><blockquote>
<p>소인수분해, 5,7,13,29 =) 29가 답</p>
</blockquote>
<hr>
<h3 id="2회기출">2회기출</h3>
<p>관계 데이터 모델</p>
<p>( ) 관계 데이터의 연산을 표현하는 방법으로, 관계 데이터 모델의 젱안자인 코드가 수학의 술어 해석에 기반을 두고 관계 데이터베이스를 위해 제안했다. 
원하는 정보가 무엇이라는 것만 정의하는 비절차적 특성을 지니며, 원하는 정보를 정의할 때 계산 수식을 사용한다. 
튜플 해석식을 사용하는 튜플 () 과 도메인 해석식을 사용하는 도메인 () 으로 구분된다. </p>
<blockquote>
<p>관계 해석, Relational calculus </p>
</blockquote>
<p>양방향 암호화 방식</p>
<ol>
<li>Xuejia Lai와 James Messey 가 만든 알고리즘으로 PES(Proposed Encryption Standard)에서 IPES(Improved PES)로 변경되었다가, 1991년에 제작된 블록 암호 알고리즘으로 현재 국제 데이터 암호화 알고리즘으로 사용되고 있다. 64비트 블록을 128비트의 key를 이용하여 8개의 라운드로 구성되어 있다.</li>
</ol>
<ol start="2">
<li>미국의 NSA에서 개발한 Clipper 칩에 내장되는 블록 알고리즘이다. 전화기와 같은 음성을 암호화 하는데 주로 사용되며 64비트 입출력에 80비트의 키 총 32라운드를 가진다.</li>
</ol>
<blockquote>
<p>1.IDEA( International Data Encryprion Algorithm) 2.SKIPJACK</p>
</blockquote>
<pre><code>SELECT 제조사, 제품명, 단가
FROM 제품
WHERE 단가 &gt; ( ALL ) (SELECT 단가 FROM 제품 WHERE 제조사=&#39;H&#39;)</code></pre><p>네트워크 보안</p>
<p>( ) 은 인터넷 등 통신 사업자의 공중 네트워크와 암호화 기술을 이용하여 사용자가 마치 자신의 전용 회선을 사용하는 것처럼 해주는 보안 솔루션이다.
암호화된 규격을 통해 인터넷망을 전용선의 사설망을 구축한 것처럼 이용하므로, 비용 부담을 줄일 수 있다.
( ) 을 사용하면 두 치 및 네트워크 사이에 암호화된 보안 터널이 생성되며, 터널에 사용되는 프로토콜에 따라 SSL( ) 과 IPSec ( )으로 불린다.</p>
<blockquote>
<p>VPN </p>
</blockquote>
<p>SOLID 원칙</p>
<p>( ) 은/는 클라이언트가 자신이 이용하지 않는 메서드에 의존하지 않아야 한다는 원칙이다.</p>
<p>( ) 은/는 큰 덩어리의 인터페이스들을 구체적이고 작은 단위들로 분리시킴으로써 클라이언트들이 꼭 필요한 메서드들만 이용할 수 있게 한다.</p>
<p>예를 들어 하나의 복합기에 프린터와 복사기, 팩스 메서드가 있는데 이 세가지 메서드는 같은 파일에 존재하므로 프린터 로직만 바뀌어도 복사기와 팩스도 재컴파일을 해야한다.</p>
<p>그러므로 ( ) 을/를 적용하여 로직이 바뀌어도 다른 메서드는 영향을 받지 않도록 해야한다.</p>
<blockquote>
<p>ISP (Interface segregation principle) 인터페이스 분리 원칙</p>
</blockquote>
<p>IP 주소가 139.127.19.132이고 서브넷마스크 255.255.255.192일 때 아래의 답을 작성하시오.
(10진수로 표기)</p>
<p>(1) 괄호안에 들어갈 네트워크 주소 : 139.127.19.( )</p>
<blockquote>
<p>128</p>
</blockquote>
<p>(2) 해당 네트워크 주소와 브로드캐스트 주소를 제외한 호스트 개수</p>
<blockquote>
<p>62</p>
</blockquote>
<p>애플리케이션 테스트 - 인수 테스트</p>
<p>(1) 선정된 최종 사용자가 여러 명의 사용자 앞에서 행하는 테스트 기법으로, 실제 업무를 가지고 사용자가 직접 테스트 한다.</p>
<blockquote>
<p>베타 테스트</p>
</blockquote>
<p>(2) 개발자의 장소에서 사용자가 개발자 앞에서 행하는 테스트 기법으로, 테스트는 통제된 환경에서 행해지며, 오류와 사용상의 문제점을 사용자와 개발자가 함께 확인하면서 기록한다.</p>
<blockquote>
<p>알파 테스트</p>
</blockquote>
<p>애플리케이션 테스트 - 목적 기반 테스트</p>
<p>수정한 모듈이나 컴포넌트가 다른 부분에 영향을 미치는지, 오류가 생기지 않았는지 테스트하여 새로운 오류가 발생하지 않음을 보증하기 위해 반복 테스트 한다. </p>
<blockquote>
<p>Regression (회귀)</p>
</blockquote>
<p>Routing Protocl : 송수신 호스트 간 패킷 전달 경로를 선택</p>
<p>IGP(Interior GateWay Protocol) : 하나의 AS내 (동일그룹) 라우팅 정보 교환</p>
<blockquote>
<p>RIP(Routing Information Protocol) : 최단 경로 탐색으로 Bellman-Ford 알고리즘 사용
OSPF(Open Shortest Path First Protocol) : RIP 단점 개선 목적 / 대규모 네트워크에 널리 사용, 다익스트라 알고리즘 사용 </p>
</blockquote>
<p>EGP(Exterior GateWay Protocol) : 서로 다른 AS (다른그룹) 간 라우팅 정보 를 교환하는 프로토콜</p>
<blockquote>
<p>BGP(Border Gateway Protocol : 대규모 네트워크 적합, 다양한 경로 속성 고려한 최적 경로 결정</p>
</blockquote>
<p>경로 제어 프로토콜은 크게 자율시스템 내부의 라우팅에 사용되는 IGP와 자율 시스템간의 라우팅에 사용되는 EGP로 구분할 수 있다. </p>
<p>IGP는 소규모 동종 자율 시스템에서 효울적인 RIP와 대규모 자유 시스템에서 많이 사용되는 OSPF로 나누어진다. </p>
<p>OSPF는 링크 상태를 실시간으로 반영하여 최단 경로로 라우팅을 지원하는 특징이 있다. </p>
<p>BGP는 EGP의 단점을 보완하여 만들어진 라우팅 프로토콜로, 처음 연결될 때는 전체 라우팅 테이블을 교환하고, 이후에는 변화된 정보만을 교환한다. </p>
<p>함수적 종속</p>
<p>완전 함수적 종속(Full Functional Dependency) 
부분 함수적 종속(Partial Functional Dependency) 
이행적 함수 종속(Transitive Functional Dependency) </p>
<p>인터넷이란 TCP/IP 프로토콜을 기반으로 하여 전 세계 수많은 컴퓨터와 네트워크들이 연결된 광범위한 컴퓨터 통신망이다.</p>
<p>HTTP : 월드 와이드 웹에서 HTML 문서를 송수신 하기 위한 표준 프로토콜로, GEP, POST 메소드를 통해 메시지를 주고 받는다. 
Hypertext : 다른 문서나 그림으로 이동할 수 있는 연결을 가지고 있는 텍스트를 의미한다. 
HTML : 인터넷의 표준 문서인 하이퍼텍스트 문서를 만들기 위해 사용하는 언어이다. </p>
<hr>
<h3 id="3회기출">3회기출</h3>
<p>관계 대수 : 원하는 정보의 검색 과정을 정의하는 절차적 언어 </p>
<blockquote>
<p>순수 관계 연산자
Select(σ, 선택) 연산자의 기호는 시그마(σ) 사용
Project(π, 추출) 연산자의 기호는 파이(π)를 사용
Join(⋈, 연결) 연산자 기호는 ⋈를 사용
Division(÷, 나누기) 연산자의 기호는 나누기(÷)를 사용</p>
</blockquote>
<blockquote>
<p>일반 집합 연산자
Union (합집합) ∪
Intersection(교집합) ∩
차집합 DIFFERENCE 연산 기호 : -
교차곱 CARTESIAN PRODUCT 연산 기호 : ×</p>
</blockquote>
<p>관계 해석 : 원하는 정보가 무엇이라는 것맘ㄴ 정의하는 비절차적 언어</p>
<p>디자인 패턴</p>
<p>(1) 패턴은 구현부에서 추상층을 분리하여, 서로가 독립적으로 확장할 수 있도록 구성한 패턴으로, 기능과 구현을 두 개의 별도 클래스로 구현한다는 특징이 있다. 
(2) 패턴은 한 객체의 상태가 변화하면 개체에 상속된 다른 객체들에게 변화된 상태를 전달하는 패턴으로, 일대다의 의존성을 정의한다. 주로 분산된 시스템간 이벤트를 생성 발행하고, 이를 수신해야 할때 이용한다. </p>
<blockquote>
<p>(1) Bridge (2) Observer</p>
</blockquote>
<p>&#39;평가 점수표&#39;를 미리 정해 놓은 후 각 영역의 경계에 해당하는 입력값을 넣고, 예상되는 출력값이 나오는지 실제 값과 비교하는 명세 기반 테스트 기법 </p>
<blockquote>
<p>블랙박스 테스트 - 경계값 분석(Boundary Value Analysis) </p>
</blockquote>
<p>정보 보안</p>
<p>(1) 보안학적 측면에서 기술적인 방법이 아닌 사람들간의 기본적인 신뢰를 기반으로 사람을 속여 비밀 정보를 획득하는 기법이다. </p>
<blockquote>
<p>사회공학</p>
</blockquote>
<p>(2) 빅데이터와 비슷하면서도 구조화돼 있지 않고, 더는 사용하지 않는 &#39;죽은&#39; 데이터를 의미한다. 일반적으로 정보를 수집해 저장한 이후 분석이나 특별한 목적을 위해 활용하는 데이터가 아니며, 저장공간만 차지하고 이러한 이유로 심각한 보안 위험을 초래할 수 있다.</p>
<blockquote>
<p>다크 데이터 </p>
</blockquote>
<p>보안</p>
<p>( ) 머신러닝 기술을 이용하여 IT 시스템에서 발생하는 대량의 로그를 통합관리 및 분석하여 사전에 위협에 대응하는 보안 솔루션이다. </p>
<p>서로 다른 기종의 보안솔루션 로그 및 이벤트를 중앙에서 통합 수집하여 분석할 수 있으며, 네트워크 상태의 monitoring 및 이상징후를 미리 감지할 수 있다. </p>
<blockquote>
<p>SIEM (Security Information &amp; Event Management) </p>
</blockquote>
<p>형상관리도구</p>
<blockquote>
<p>Git, CVS, SVN</p>
</blockquote>
<p> 보안</p>
<p>(   1   )은/는 프로세서(processor) 안에 독립적인 보안 구역을 따로 두어 중요한 정보를 보호하는 ARM사에서 개발한 하드웨어 기반의 보안 기술로 프로세서(processor) 안에 독립적인 보안 구역을 별도로 하여, 중요한 정보를 보호하는 하드웨어 기반의 보안 기술이다.</p>
<blockquote>
<p>Trustzone</p>
</blockquote>
<p>(   2   )은/는 사용자들이 사이트에 접속할 때 주소를 잘못 입력하거나 철자를 빠뜨리는 실수를 이용하기 위해 유사한 유명 도메인을 미리 등록하는 일로 URL 하이재킹(hijacking)이라고도 한다.</p>
<blockquote>
<p>Typosquatiing</p>
</blockquote>
<p>(       )은/는 여러 개의 사이트에서 한번의 로그인으로 여러가지 다른 사이트들을 자동적으로 접속하여 이용하는 방법을 말한다. 일반적으로 서로 다른 시스템 및 사이트에서 각각의 사용자 정보를 관리하게 되는데 이때 하나의 사용자 정보를 기반으로 여러 시스템을 하나의 통합 인증을 사용하게 하는 것을 말한다. </p>
<p>즉 하나의 시스템에서 인증을 할 경우 타 시스템에서는 인증 정보가 있는지 확인하고 있으면 로그인 처리를 하도록 하고, 없는 경우 다시 통합 인증을 할 수 있도록 만드는 것을 의미한다.</p>
<blockquote>
<p>SSO, Single Sign On</p>
</blockquote>
<p>운영체제 - 스케쥴링 : 여러 프로세스의 처리 순서를 결정하는 기법 </p>
<p>SJF(Shortes Job First) : 준비상태 큐에서 시다리고 있는 프로세스들 중에서 실행 시간이 가장 짧은 프로세스에게 먼저 CPU를 할당하는 기법이다. 가장 적은 평균 대기 시간을 제공하는 최적 알고리즘이지만, 실행 시간이 긴 프로세스는 실행 시간ㅇ니 짧은 프로세스에게 할당 순위가 밀려 무한 연기 상태가 발생될 수 있다. </p>
<p>RR(Round Robin) : 시분할 시스템을 위해 고안된 방식으로, 준비상태 큐에 먼저 들어온 프로세스가 먼저 CPU를 할당받지만 각 프로세스는 시간 할당량 동안만 실행한 후 실행이 완료되지 않으면 다음 프로세스에게 CPU를 넘겨주고 준비상태 큐의 가장 뒤로 배치된다. 할당되는 시간이 작을 경우 문맥 교환 및 오버헤드가 자주 발생되어 요청된 잦ㄱ업을 신속히 처리할 수 없다. </p>
<p>SRT(Shortest Remaining Time) : 현재 실행중인 프로세스의 남은 시간과 준비상태 큐에 새로 도착한 프로세스의 실행 시간을 비교하여 가장 짧은 실행 시간을 요구하는 프로세스에게 CPU를 할당하는 기법으로, 시분할 시스템에 유용하다. 준비상태 큐에 있는 각 프로세스의 실행 시간을 추적하여 보유하고 있어야 하므로 오베헤드가 증가한다.</p>
<p>UML은 통합 모델링 언어로써, 시스템을 모델로 표현해주는 대표적인 모델링 언어이다.</p>
<p>구성 요소로는 사물, (    1    ), 다이어그램으로 이루어져 있으며, 구조 다이어그램 중, (     2    ) 다이어그램은 시스템에서 사용되는 객체 타입을 정의하고, 그들 간의 존재하는 정적인 관계를 다양한 방식으로 표현한 다이어그램이다. </p>
<blockquote>
<p>(1) 관계 (2) 클래스</p>
</blockquote>
<p>또한 UML 모델링에서 (     3    )은/는 클래스와 같은 기타 모델 요소 또는 컴포넌트가 구현해야 하는 오퍼레이션 세트를 정의하는 모델 요소이다.</p>
<blockquote>
<p>인터페이스</p>
</blockquote>
<p>192.168.1.0/24 네트워크를 FLSM 방식으로 3개의 서브넷으로 나웠을 때, 두번째 네트워크의 브로드캐스트 아이피를 쓰시오.</p>
<blockquote>
<p>192.168.1.127</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[<정보처리기사 실기> 23년 기출 (단답형)
]]></title>
            <link>https://velog.io/@unfamiliar_dev/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC-%EC%8B%A4%EA%B8%B0-23%EB%85%84-%EA%B8%B0%EC%B6%9C-%EB%8B%A8%EB%8B%B5%ED%98%95</link>
            <guid>https://velog.io/@unfamiliar_dev/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC-%EC%8B%A4%EA%B8%B0-23%EB%85%84-%EA%B8%B0%EC%B6%9C-%EB%8B%A8%EB%8B%B5%ED%98%95</guid>
            <pubDate>Tue, 17 Sep 2024 07:08:38 GMT</pubDate>
            <description><![CDATA[<h3 id="1회-기출">1회 기출</h3>
<p>웹에서 Javascript, XML을 이용하여 비동기 식으로 웹 페이지의 일부 콘텐츠만 리로드(Reload) 해오는 방식</p>
<p>하이퍼텍스트 표기 언어(HTML)만으로는 어려운 다양한 작업을 웹 페이지에서 구현해서 이용자가 웹 페이지와 자유롭게 상호 작용할 수 있도록 구현하는 기법</p>
<p>Google Maps와 Google()에서 이러한 방식을 사용</p>
<blockquote>
<p>AJAX(Asynchronous Javascript And XML)</p>
</blockquote>
<p>패킷 교환 방식에서 패킷이 전송되기 전에 송/수신 스테이션 간의 논리적인 통신 경로를 미리 설정하는 방식은 (1) 방식이며, 연결 경로를 확립하지 않고 각각의 패킷을 순서에 무관하게 독립적으로 전송하는 방식은 (2) 방식이다. </p>
<blockquote>
<p>(1) 가상회선(Virtual Circuit) (2)    데이터그램(Dategram) </p>
</blockquote>
<p>VPN(Virtual Private Network)에서 사용되는 프로토콜 중 하나로, L2F(Layer 2 Forwarding Protocol)와 PPTP(Point-to-Point Tunneling Protocol)의 기능을 결합하여 인터넷상에서 두 지점 간에 가상의 터널을 만들어 통신을 안전하게 전송하는 기술</p>
<blockquote>
<p>L2TP(Layer 2 Tunneling Protocol) </p>
</blockquote>
<p>포트 번호 22번을 사용하고 인증, 암호화, 압축, 무결성을 제공하며, Telnet보다 강력한 보안을 제공하는 원격 접속 프로토콜은?</p>
<blockquote>
<p>SSH(Secure Shell)</p>
</blockquote>
<p>(1) 인터넷 또는 네트워크를 통해 컴퓨터에서 컴퓨터로 스스로 전파되는 악성 프로그램이다. 윈도우의 취약점 또는 응용 프로그램의 취약점을 이용하거나 이메일 또는 공유 폴더를 통해 전파되며, 최근에는 공유 프로그램인 P2P 등을 이용하여 전파되기도 한다. 가장 큰 특징은 자신을 복제하여 네트워크 연결을 통해서 다른 컴퓨터로 스스로 전파되고 확산된다는것이다. </p>
<p>(2) 악성 루틴이 숨어 있는 프로그램으로 겉보기에는 정상적인 프로그램으로 보이지만 실행하면 악성 코드를 실행하는 프로그램이다. </p>
<p>(3) 사용자 컴퓨터 내에서 프로그램이나 실행 가능한 부분을 변형해서 감영 시키는 프로그램이다. 그리고 자신 또는 자신의 변형을 복사하는 프로그램으로 가장 큰 특성은 다른 네트워크의 컴퓨터로 스스로 전파되는 않는다.</p>
<blockquote>
<p>(1) 웜(Warm) (2) 트로이 목마(Trojan Horse) (3) 바이러스(Virus) </p>
</blockquote>
<p>IP의 동작 과정에서의 전송 오류가 발생하는 경우에 오류정보를 전송하는 목적으로 사용하는 프로토콜로, Ping-of-Death에서도 사용하는 프로토콜은?</p>
<blockquote>
<p>ICMP (Internet Control Message Protocol) </p>
</blockquote>
<p>디자인 패턴 중 객체의 대리자를 이용하여 원래 객체의 작업을 대신 처리하는 패턴?</p>
<blockquote>
<p>Proxy</p>
</blockquote>
<p>데이터베이스에 관련된 내용
(1) 테이블 내의 행을 의미하며, 레코드(Record)라고도 한다. 어떤 요소의 집합이지만 일반적인 집합과는 달리 중복이 허용될 수 있다.</p>
<p>(2) 릴레이션에 실제로 저장된 데이터의 집합을 의미한다. 릴레이션 또는 릴레이션 외연(Relation Extension)라고도 한다.</p>
<p>(3) 특정 데이터 집합의 유니크(Unique)한 값의 개수를 의미한다.</p>
<blockquote>
<p>(1) 튜플 (2) 릴레이션 인스턴스 (3) 카디널리티(Cardinality)</p>
</blockquote>
<p>스키마
(1) 사용자나 개발자의 관점에서 필요로 하는 데이터베이스의 논리적 구조이고, 사용자 뷰를 나타내며, 서브 스키마로 불린다. </p>
<p>(2) 데이터베이스의 전체적인 논리적 구조이다. 전체적인 뷰를 나타내고, 개체 간의 관계, 제약조건, 접근 권한, 무결성, 보안에 대해 정의한다.</p>
<p>(3) 물리적 저장 장치의 관점에서 보는 데이터베이스 구조이고, 실제로 데이터베이스에 저장될 레코드의 형식을 정의한다. 데이터 항목의 표현 방법, 내부 레코드의 물리적 순서 등을 표현한다. </p>
<blockquote>
<p>(1) 외부 스키마 (2) 개념 스키마 (3) 내부 스키마</p>
</blockquote>
<hr>
<h3 id="2회-기출">2회 기출</h3>
<p>화이트박스 테스트 유형 </p>
<p>전체 조건식의 영향은 고려하지 않고, 결정 포인트 내의 각 개별 조건식이 적어도 한 번은 참과 거짓의 결과가 되도록 수행하는 테스트 커버리지는 </p>
<blockquote>
<p> 조건 커버리지</p>
</blockquote>
<p>소프트웨어, 시스템을 외부에서의 악의적인 조작으로부터 보호하는 보안 기술로 위 변조와 같은 이상 조작을 검출하고, 이상 감지 시 프로그램을 오작동하도록 만드는 기술이다.</p>
<p>구성 기술로는 해시 함수, 핑거 프린트, 워터마크, 소프트웨어 원본 비교, 프로그램 체킹, 실행코드 난독화 등이 있다.</p>
<blockquote>
<p>템퍼 프루핑(Tamper-Proofing)</p>
</blockquote>
<p>Database 구축 프로세스를 순서대로 나열하시오.</p>
<blockquote>
<p>요구사항 분석 =&gt; 개념적 설계 =&gt; 논리적 설계 =&gt; 물리적 설계 =&gt; 구현</p>
</blockquote>
<p>디자인 패턴</p>
<p>(1) 패턴은 전역변수를 사용하지 않고 객체를 하나만 생성하도록 하며, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 디자인 패턴이다.</p>
<p>(2) 패턴은 각 클래스 데이터 구조로부터 처리 기능을 분리하여 별도의 클래스를 만들어 놓고 해당 클래스의 메서드가 각 클래스를 돌아다니며 특정 작업을 수행하도록 만드는 패터이다.</p>
<p>(2) 패턴은 객체의 구조는 변경하지 않으면서 새로운 기능(연산)만 따로 추가하거나 확장할 때 사용하는 디자인 패턴이다. </p>
<blockquote>
<p>(1) Singleton (2) Visitor</p>
</blockquote>
<p>오류제어방식</p>
<p>오류제어 방식에는 크게 (1) 방식과 (2) 방식이 있다. (1)방식은 데이터 전송 과정에서 발생한 오류를 검출하여 검출된 오류를 재전송 요구 없이 스스로 수정하는 방식이다. 대표적인 유형인 (3) 코드방식은 수신측에서 오류가 발생한 비트를 찾아 재전송을 요구하지 않고 자신이 직접 오류를 수정하는 방식으로 1비트의 오류 수정이 가능하다.</p>
<p>(2) 방식은 데이터 전송 과정에서 오류가 발생하면 송신 측에 재전송을 요구하는 방식이다. 대표적인 유형에는 (4) 검사, (5) 등이 있다. 
(4) 검사는 7~8개의 비트로 구성되는 전송 문자에 패리티 비트를 추가하여 오류를 검출하는 방식이다.
(5)은 다항식을 통해 산출된 값을 토대로 오류를 검사하는 방식으로 집단 오류를 해결하기 위한 방식이다. </p>
<blockquote>
<p>(1) FEC (2) BEC (3) Hamming (4) Parity (5) CRC</p>
</blockquote>
<p>프로토콜</p>
<p>HDLC 프레임의 구조는 플래그(Flag), 주소부(Address Field), 제어부(Control Field)로 구성되어 있다. 
여기에서 제어부는 프레임의 종류를 식별하기 위해 사용되는데 제어부의 첫 번째, 두 번째 비트를 사용하여 프레임의 종류를 구별할 수 있다. </p>
<p>프레임의 종류 중 (1) 프레임은 제어부가&#39;0&#39; 이므로 시작되는 프레임으로, 사용자 데이터를 전달하는 역할을 하고, (2)프레임은 제어부가 &#39;10&#39;으로 시작하는 프레임으로, 오류 제어와 흐름 제어를 위해 사용된다. 또한, (3) 프레임은 제어부가 &#39;11&#39;로 시작하는 프레임으로, 링크의 동작 모드 설정과 관리를 한다. </p>
<p>HDLC의 데이터 전송 모드는 세 가지로 구분되는데 (4)은 포인트 투 포인트 균형 링크에서 사용하고, 혼합국끼리 허가 없이 언제나 전송할 수 있도록 설정하는 특징이 있다. </p>
<p>(5) 전이중 통신을 하는 포인트 투 포인트 불균형 링크 구성에 사용하고, 종국은 주국의 허가 없이 송신할 수 있지만, 링크 설정이나 오류 복구 등의 제어 기능은 주국만 하는 특징이 있다. </p>
<blockquote>
<p>(1) 정보 (2) 감독 (3) 비번호 (4) 비동기 균형 모드 (5) 비동기 응답 모드 </p>
</blockquote>
<p>암호화</p>
<p>(1) 암호화와 복호화에 같은 암호 키를 쓰는 방식으로 비밀키 전달을 위한 키 교환이 필요하고, 암호화 및 복호화의 속도가 빠른 특징이 있다. </p>
<p>(2) 공개키와 개인 키가 존재하며, 공개키는 누구나 알 수 잇지만, 그에 대응하는 개인 키는 키의 소유자만이 알수 있는 암호화 방식이다. </p>
<blockquote>
<p>(1) 대칭키 암호화 방식 =&gt; DES, AES, ARIA, SEED (2) 비대칭키 암호화 방식 =&gt; RSA, ECC </p>
</blockquote>
<p>( ) 은 임의의 길이를 갖는 임의의 데이터를 고정된 길이의 데이터로 매핑하는 단방향 함수를 말한다. 아무리 큰 숫자를 넣더라도 정해진 크기의 숫자가 나오는 함수이다. </p>
<blockquote>
<p>해시 함수(Hash Function) 또는 해싱 함수(Hashing Fuction) 또는 해싱(Hashing)</p>
</blockquote>
<p>&quot;soojebi&quot; 뷰 테이블 제거, &quot;soojebi&quot; 뷰 테이블을 참조하는 테이블도 연쇄적으로 제거</p>
<blockquote>
<p>DROP VIEW soojebi cascade</p>
</blockquote>
<p>통합 테스트
(1) 제어 모듈이 호출하는 타 모듈의 기능을 단순히 수행하는 더비 모듈로 하향식 통합 테스트 수행시 필요하다. </p>
<p>(2) 상위의 모듈에서 데이터의 입력과 출력을 확인하기 위한 더미 모듈로 상향식 통합 테스트 수행시 필요하다.</p>
<blockquote>
<p>(1) 테스트 스텁(Test Stub) (2) 테스트 드라이버(Test Driver) </p>
</blockquote>
<hr>
<h3 id="3회-기출">3회 기출</h3>
<p>사용자가 비밀번호를 제공하지 않고 다른 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있게 하는 개방형 표준기술이다. 
구글, 페이스북 등의 외부 계정을 기반으로 토큰을 이용하여 간편하게 회원가입 및 로그인할 수 있는 기술이다. </p>
<blockquote>
<p>OAuth</p>
</blockquote>
<p>C언어에서 구조체의 포인터로 멤버에 접근하기 위한 기호를 쓰시오.</p>
<blockquote>
<p>-&gt;</p>
</blockquote>
<p>서버 접근통제 
(1) 규칙 기반(Rule-Based) 접근통제 정책으로, 객체에 포함된 정보의 허용 등급과 접근 정보에 대하여 주체가 갖는 접근 허가 권한에 근거하여 객체에 대한 접근을 제한하는 방법이다. </p>
<p>(2) 중앙 관리자가 사용자와 시스템의  상호관계를 통제하며 조직 내 맡은 역할(Role)에 기초하여 자원에 대한 접근을 제한하는 방법이다. </p>
<p>(3) 신분 기반(Identity-Based) 접근통제 정책으로, 주체나 그룹의 신분에 근거하여 객체에 대한 접근을 제한하는 방법이다.</p>
<blockquote>
<p>(1) MAC (2) RBAC (3) DAC</p>
</blockquote>
<p>Manadatory Access Control
Role Based Access Control 
Discretionary Access Control</p>
<p>정보전달의 기본단위를 53바이트 셀 단위로 사용하는 비동기식 시분할 다중화 방식의 패킷형 전송 기술은 무엇인지 영어 약자로</p>
<blockquote>
<p>ATM(Asyncchronous Transfer Mode)</p>
</blockquote>
<p>네트워크
사설 네트워크에 속한 IP를 공인 IP 주소로 바꿔는 네트워크 주소 변환 기술이다.
IPv4의 IP 주소 부족 문제를 해결할 수 있고, 보안을 강화하는 목적으로 사용한다.</p>
<blockquote>
<p>NAT(Network Address Translation) </p>
</blockquote>
<p>테스트 기법
입력 데이터의 영역을 유사한 도메인별로 유효값 / 무효값을 그룹핑하여 대푯값을 테스트 케이스로 도출하는 테스트 기법이다.
테스트 예상값을 설정해 놓고, 테스트 결과가 그 값과 비교해서 일치하는지 확인한다.</p>
<blockquote>
<p>Equivalence Partitioning (동등 분할 테스트=동치 분할 테스트, 균등 분할 테스트) </p>
</blockquote>
<p>클라우드 유형
(1) 서버, 스토리지 같은 시스템 자원을 클라우드 서비스로 제공한다.
(2) 인프라를 생성, 관리하는 복잡함 없이 애플리케이션을 개발, 실행, 관리할 수 있게 하는 플랫폼을 클라우드 서비스로 제공한다.
(3) 소프트웨어 및 관련 데이터를 클라우드 서비스로 제공한다.</p>
<blockquote>
<p>(1) laaS (Infrastructure as a Service) 
(2) PaaS (Platform as a Service) 
(3) SaaS ( Sofrware as a Service)</p>
</blockquote>
<p>라우팅 프로토콜
IGP(Interior Gateway Protocol) 중 거리벡터 알고리즘에 기초한 라우팅 프로토콜이다.
홉 수의 제한이 있고, UDP 프로토콜을 사용하는 라우팅 프로토콜이다. </p>
<blockquote>
<p>RIP( Routing Information Protocol) </p>
</blockquote>
<p>관계대수 연산자 기호
<img src="https://velog.velcdn.com/images/unfamiliar_dev/post/3ba968e3-8d23-4dae-a9ba-22cb548c97f7/image.png" alt=""></p>
<p><a href="https://straw961030.tistory.com/85">출처 </a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[기초부터 완성까지, 프런트엔드 ]]></title>
            <link>https://velog.io/@unfamiliar_dev/%EA%B8%B0%EC%B4%88%EB%B6%80%ED%84%B0-%EC%99%84%EC%84%B1%EA%B9%8C%EC%A7%80-%ED%94%84%EB%9F%B0%ED%8A%B8%EC%97%94%EB%93%9C</link>
            <guid>https://velog.io/@unfamiliar_dev/%EA%B8%B0%EC%B4%88%EB%B6%80%ED%84%B0-%EC%99%84%EC%84%B1%EA%B9%8C%EC%A7%80-%ED%94%84%EB%9F%B0%ED%8A%B8%EC%97%94%EB%93%9C</guid>
            <pubDate>Tue, 17 Sep 2024 04:36:36 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/b73043e8-f3c5-4c61-8d4e-882cb2886362/image.jpeg" alt=""></p>
<p>어쩌다 보니 이 책을 빌린거에 대하여 방치를 해두었다... 반납 예정까지 2일 남았지만 조금이나마 읽어보고 다시 대여를 해서 읽어야 겠다. (이미 예약도서 걸려있지만 ^^,,) </p>
<hr>
<h3 id="프런트-엔드-개발이란">프런트 엔드 개발이란?</h3>
<blockquote>
<p>클라이언트 영역에서 서비스 사용자와 대화하는 인터페이스(UI)를 개발하는 것이며, 다음과 같은 작업들을 포함한다.</p>
</blockquote>
<ul>
<li><p>사용자가 입력한 데이터를 비즈니스 로직에 따라 처리한다.</p>
</li>
<li><p>서버와 통신해 가져온 데이터를 출력한다.</p>
</li>
<li><p>디자인을 적용하여 스타일링한다. </p>
</li>
<li><p>클라이언트는 서비스를 이요하는 사용자 또는 사용자의 디바이스를 의미한다.</p>
</li>
</ul>
<p>지금은 프론트엔드 개발자를 향해 하나씩 공부를 하고 있지만 결국에는 서비스를 이용하는 사용자의 접근성과 편의성 증진을 위해 고민하고 목표를 가져야 겠다.</p>
<p>책에서는 기본기(HTML / CSS / JS 특히 JS)를 튼튼히 다져야 한다고 거듭 강조하고 있다. </p>
<h4 id="프론트엔드-개발자의-역할">프론트엔드 개발자의 역할</h4>
<ul>
<li>요구 사항 분석 : 개발 항목을 구체화하고 기술적 방향성을 정해야 한다. </li>
<li>설계 : 기능, 모듈 크게는 서비스 전반에 사용될 세부 기술들을 검토하고 적용해 구조를 설계한다.</li>
<li>개발 : 디자인, 기획서를 바탕으로 기능이나 모듈을 개발하며, 백엔드와 독립적으로 개발하도록 환경을 만들어 개발한다.</li>
<li>배포 : 실 서비스 배포 전에 테스트 환경을 구성해 QA 과정을 반복하고, 자동화된 배포 전략을 도입해 애플리케이션을 배포한다. </li>
</ul>
<h3 id="html--css">HTML &amp; CSS</h3>
<h4 id="html">HTML</h4>
<blockquote>
<p>Hyper Text Markup Language 문서의 서식이나 구조를 표현하는 부가적인 정보를 markup이라고 부르는데, 이 markup 구성에 가장 많이 사용되는 언어이다.</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/cb9bf9cc-7a93-4e25-9e12-455ccf27be58/image.png" alt=""></p>
<h4 id="start-tag--end-tag">Start Tag &amp; End Tag</h4>
<h4 id="void-요소">Void 요소</h4>
<blockquote>
<p>End Tag가 없는 태그들 또한 존재한다. Start Tag 만 입력하거나 &lt;input / &gt; 처럼 작성하는 이를 Self-closing 이라한다. </p>
</blockquote>
<h4 id="content--element">Content &amp; Element</h4>
<blockquote>
<p>content 는 start tag와 end tag 사이의 내용을 의미. start tag, end tag, content를 모두 합친게 element</p>
</blockquote>
<h4 id="attributes속성">Attributes(속성)</h4>
<blockquote>
<p>태그의 동작을 제어하도록 사용자가 지정하는 값을 의미 </p>
</blockquote>
<h4 id="인라인-요소와-블록-요소">인라인 요소와 블록 요소</h4>
<ul>
<li>인라인 요소 (inline) : 태그가 할당된 텍스트나 이미지의 크기에 맞는 필요한 공간만을 차지. 높이나 너비를 지정 할 수 없으며 줄 내부 어디서든 시작, span, button, img 태그가 대표적</li>
<li>블록 요소( block) : 태그가 시작되면 이전 요소와 상관없이 개행해 새로운 줄에서 시작. 너비는 좌우 양쪽으로 부모 요소의 100%를 차지하며 왼쪽에서부터 오르쪽으로 확장, div, article, form 태그가 대표적</li>
</ul>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/115ae310-1bdc-490e-b57c-6ce75f43cbb3/image.png" alt=""></p>
<h4 id="contents-model">contents model</h4>
<h4 id="metadata-content">Metadata Content</h4>
<blockquote>
<p>나머지 콘텐츠의 표시나 동작을 설정하거나 문서와 다른 문서와의 관계를 설정하는 요소</p>
</blockquote>
<h4 id="flow-content">Flow Content</h4>
<blockquote>
<p>본문에 사용되는 대부분의 요소는 Flow Content로 분류된다. </p>
</blockquote>
<h4 id="sectioning-content">Sectioning Content</h4>
<blockquote>
<p>아웃라인을 정의하며 각 Heading(제목) 요소와 Footer(바닥글) 요소의 범위(Scope)를 정한다. article, aside, nav, section 태그</p>
</blockquote>
<h4 id="phrasing-content">Phrasing Content</h4>
<blockquote>
<p>문서 내의 텍스트를 의미하며 단락을 형성하는 요소이다.</p>
</blockquote>
<h4 id="heading-content">Heading Content</h4>
<blockquote>
<p>섹션의 헤더를 정의하는 요소</p>
</blockquote>
<h4 id="embedded-content">Embedded Content</h4>
<blockquote>
<p>외부의 자원을 가져오거나 삽입할 때 사용하는 요소</p>
</blockquote>
<h4 id="interactive-content">Interactive Content</h4>
<blockquote>
<p>유저와 상호작용을 위해 특별히 설계된 요소</p>
</blockquote>
<p>HTML 태그의 카데고리는 크게 위 처럼 볼수 있겠다아..</p>
<h4 id="seo-search-engine-optimization">SEO( Search Engine Optimization)</h4>
<h4 id="시맨틱하게-html을-작성하자">시맨틱하게 HTML을 작성하자</h4>
<blockquote>
<p>의미에 맞는 태그를 사용해 문서를 작성하는 것</p>
</blockquote>
<h4 id="title-태그를-놓치지-말고-적절하게-작성하자">title 태그를 놓치지 말고 적절하게 작성하자</h4>
<h4 id="meta-namedescription-을-이용해-페이지-설명을-남기자">meta name=&quot;description&quot; 을 이용해 페이지 설명을 남기자</h4>
<h4 id="meta-charsetutf-8-를-사용해-인코딩-방식을-지정하자">meta charset=&quot;UTF-8&quot;/ 를 사용해 인코딩 방식을 지정하자</h4>
<blockquote>
<p>여러 브라우저에서 통일된 인코딩 방식으로 노출시킨다.</p>
</blockquote>
<h4 id="open-graph-twitter-태그를-사용해-외부-사용자를-유인하자">open graph, twitter 태그를 사용해 외부 사용자를 유인하자</h4>
<blockquote>
<p>og(open-graph) 태그는 페이스북에서 만든 프로토콜이며 여러 상황에서 동일한 메타 정보를 쉽게 표시하도록 만들어졌다.</p>
</blockquote>
<h3 id="css">CSS</h3>
<pre><code>선택자(A) { 
    프로퍼티(B) : 값(C); 
} 

&quot;A&quot; 의 &quot;B&quot;를 &quot;C&quot;로 하겠다. 

eg

h1 { 
    front-size: 14px;
}

&quot;h1&quot;의 폰트 사이즈를 14px로 하겠다.</code></pre><h4 id="상속">상속</h4>
<p>width, height, margin, display, border 등은 상속되지 않는 프로퍼티 또한 존재한다. </p>
<p>반면에 상속되는 프로퍼티지만 HTML 요소의 종류에 따라 상속되지 않기도 한다. 대표적으로 button 태그가 있음. 
만약 프로퍼티와 요소의 종류에 영향받지 않고 부모 요소의 프로퍼티를 상속받고 싶다면 명시적으로 inherit  값을 지정한다. </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/fd256356-bbcc-43e4-a5c1-4c3e5f24a066/image.png" alt=""></p>
<h4 id="전체-선택자">전체 선택자</h4>
<pre><code>* { 
/* 모든 요소의 pdding이 0이 됩니다. */ 
    padding: 0;
}</code></pre><h4 id="타입-선택자">타입 선택자</h4>
<pre><code>div { 
    padding: 10px;
}

모든 div 요소에 padding을 10px로 설정</code></pre><h4 id="id-선택자">id 선택자</h4>
<pre><code>&lt;div id=&quot;id-name&quot;&gt; id가 id-name인 div 요소 &lt;/div&gt;
&lt;style&gt; 
#id-name { 
    padding: 10px;
}
&lt;/style&gt; 

id가 id-name인 요소에 padding을 10px로 지정하고 싶다면 / id는 페이지당 하나만 가지는 단일값으로 정확하게 일치하는 단일 요소에만 지정하고 싶을 때 #을 붙여 사용 한다. </code></pre><h4 id="class-선택자">class 선택자</h4>
<pre><code>class 속성은 id와 다르게 여러 요소에 같은 class값을 지정해 동일한 스타일을 지정할 수 있다. </code></pre><h4 id="속성attribute-선택자">속성(attribute) 선택자</h4>
<pre><code>&quot;요소 이름[속성명(연산자) 값]&quot;의 형태를 갖는다.</code></pre><h4 id="마지막에-작성된-스타일-적용된다">마지막에 작성된 스타일 적용된다.</h4>
<h4 id="명시도specificity가-높은-선택자의-스타일이-적용된다">명시도(Specificity)가 높은 선택자의 스타일이 적용된다.</h4>
]]></description>
        </item>
        <item>
            <title><![CDATA[<정보처리기사 실기> 24년 기출]]></title>
            <link>https://velog.io/@unfamiliar_dev/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC-%EC%8B%A4%EA%B8%B0-24%EB%85%84-%EA%B8%B0%EC%B6%9C</link>
            <guid>https://velog.io/@unfamiliar_dev/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC-%EC%8B%A4%EA%B8%B0-24%EB%85%84-%EA%B8%B0%EC%B6%9C</guid>
            <pubDate>Thu, 12 Sep 2024 13:02:27 GMT</pubDate>
            <description><![CDATA[<p>구글링해서 24년에 출제된 기출 문제 하나씩 적재 해보자,, </p>
<h3 id="24년-1회">24년 1회</h3>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/7071b143-46f5-4ae8-b44e-af2e9ecfa452/image.png" alt=""></p>
<p>C언어 코드이며, 비트연사자가 주요 개념이 될듯하다. (삼항연산자는 뭐,,) </p>
<p>삼항연사자에 따라 거짓이 되며 v1을 반환한다. v1=0 이니깐 if(0)이 되고 이는 거짓이므로 else 문으로 이동.</p>
<p>v3 &lt;&lt; 2의 의미는 v3의 값을 왼쪽으로 2비트 이동시킨다. 왼쪽 비트 이동 연산자는 &lt;&lt;로, 값에 2의 해당 제곱수를 곱하는 효과가 있고, 아니면 29를 2진수로 표현하면 11101 인데 여기서 00을 오른쪽으로 붙이면 된다.1110100은 10진수로 변환하면 116이다.</p>
<p>이렇게 해도 되고 =&gt; v3는 29이므로, v3 &lt;&lt; 2는 29 * 2^2 = 29 * 4 = 116  </p>
<p>&lt;&lt; 오른쪽 2개 0 붙인다 이게 좀 더 직관적이네 ㅇㅇ </p>
<hr>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/966c9b9a-dc6e-44ee-b013-b71f2cdfb08a/image.png" alt="">
<img src="https://velog.velcdn.com/images/unfamiliar_dev/post/0df988ae-4759-40f6-84ed-9c70d7acd4a2/image.png" alt=""></p>
<p>싱글톤 패턴(Singleton Pattern) - 인스턴스가 오직 하나임을 보장하는 것 /  싱글톤 패턴은 클래스의 인스턴스를 하나만 만들고, 그 인스턴스를 어디에서든 접근할 수 있도록 보장하는 디자인 패턴</p>
<p>chat 풀이 / <a href="https://www.youtube.com/watch?v=Aa5kWwzDRgk">홍달썜 풀이</a>(조금 다름)</p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/c2ee3ef6-6d8d-433b-8024-aceb4d62738e/image.png" alt="">
<img src="https://velog.velcdn.com/images/unfamiliar_dev/post/d79b4ba9-6690-4730-ab94-ff570c080d64/image.png" alt=""></p>
<hr>
<h4 id="소프트웨어-구축---응집도-높은-순서">소프트웨어 구축 - 응집도 높은 순서</h4>
<p>우논시절통순기</p>
<p>우연적, 논리적, 시간적, 절차적, 통신적, 순차적, 기능적</p>
<hr>
<pre><code>#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

void reverse(char* str){
    int len = strlen(str);
    char temp;
    char*p1 = str;
    char*p2 = str + len - 1;
    while(p1&lt;p2){
        temp = *p1;
        *p1 = *p2;
        *p2 = temp;
        p1++;
        p2--;
    }
}

int main(int argc, char* argv[]){
    char str[100] = &quot;ABCDEFGH&quot;;

    reverse(str);

    int len = strlen(str);

    for(int i=1; i&lt;len; i+=2){
        printf(&quot;%c&quot;,str[i]);
    }

    printf(&quot;\n&quot;);

    return 0;

}
</code></pre><p>reverse 적용해주고 홀수 문자열 추출 =&gt; GECA</p>
<hr>
<h4 id="네트워크---라우팅">네트워크 - 라우팅</h4>
<p>OSPF(Open Shortest Path First Protocol) </p>
<blockquote>
<ol>
<li>대표적인 링크 상태 라우팅 프로토콜이다. 이것은 인터넷에서 연결된 링크의 상태를 감시하여 최적의 경로를 선택한다는것이다.</li>
<li>단일 자율 시스템 내에서 라우팅 정보를 배포하는 데 사용되는 내부 게이트웨이 프로토콜이다.</li>
<li>모든 대상에 도달하기 위한 최단 경로를 구축하고 계산하며 최단 경로는 Dijkstra 알고리즘을 사용하여 계산된다.</li>
<li>RIP 단점 개선 목적 / 대규모 네트워크에 널리 사용 </li>
</ol>
</blockquote>
<hr>
<h4 id="데이터베이스---관계대수">데이터베이스 - 관계대수</h4>
<p>Join =&gt; 두 개의 릴레이션을 하나로 합쳐 새로운 릴레이션 형성</p>
<ul>
<li>세타 조인 - 두 릴레이션 속성 값을 비교 후 조건을 만족하는 튜플만 반환</li>
<li>동등 조인 - 조건이 정확하게 &#39;=&#39; 등호로 일치하는 결과를 반환</li>
<li>자연 조인 - 동등 조인의 결과에서 중복된 속성을 제거한 결과를 반환</li>
</ul>
<hr>
<h4 id="애플리케이션-테스트">애플리케이션 테스트</h4>
<ol>
<li><p>모든 분기와 조건의 조합을 고려하나 모든 조합을 테스트하는 대신에 테스트가 필요한 중요한 조합을 찾아내는데에 중점을 둔다. </p>
</li>
<li><p>특정 조건을 수행할 때 다른 조건과는 상관없이 전체 결과에 영향을 미치는 조건만을 테스트한다. </p>
</li>
<li><p>각각의 파라미터는 적어도 한 번은 최종 결과에 영향을 주어야 한다.</p>
</li>
</ol>
<p>=&gt; 변경 조건 / 결정 커버리지 (MC/DC)</p>
<hr>
<h4 id="정보-보안---정보-보안-침해-공격">정보 보안 - 정보 보안 침해 공격</h4>
<p>인터넷 공격자의 존재를 숨기면서 이 공격자에게 시스템에 대한 무제한 접근 권한을 부여하는 악성 프로그램이다.</p>
<p>해커가 자신의 존재를 숨기면서 허가되지 않은 컴퓨터나 소프트웨어에 접근할 수 있도록 설계된 도구이다.</p>
<p>일반적으로 펌웨어, 가상화 계층 등의 다양한 시스템 영역에서 작동하며, 운영체제의 시스템콜을 해킹하여 악성코드의 실행여부를 숨겨 안티바이러스 탐지를 우회할 수 있다.</p>
<p>=&gt; Rootkit</p>
<ol>
<li><p>불특정 다수가 아닌 명확한 표적을 정하여 지속적인 정보수집 후 공격감행할 수 있다.</p>
</li>
<li><p>시스템에 직접 침투하는 것뿐 아니라 표적 내부직원들이 이용하는 다양한 단말을 대상으로 한다.</p>
</li>
<li><p>한가지 기술만이 아닌 Zero-day 취약점, 악성코드 등 다양한 보안 위협 공격 기술을 사용한다. </p>
</li>
<li><p>일반적으로 공격은 침투, 검색, 수집 및 유출의 4단계로 실행되며, 각 단계별로 다양한 공격 기술을 사용한다.</p>
</li>
</ol>
<p>=&gt; APT(Advanced Persistent Threat)</p>
<hr>
<h4 id="소프트웨어-구축---디자인-패턴">소프트웨어 구축 - 디자인 패턴</h4>
<p>구체적인 클래스에 의존하지 않고 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴이다.</p>
<p>연관성이 있는 객체 군이 여러개 있을 경우 이들을 묶어 추상화하고, 어떤 구체적인 상황이 주어지면 팩토리 객체에서 집합으로 묶은 객체 군을 구현화 하는 생성 패턴이다</p>
<p>관련성 있는 여러 종류의 객체를 일관된 방식으로 생성하는 경우에 유용하다.</p>
<p>kit라고도 불린다.</p>
<p>=&gt; Abstract Factory</p>
<h3 id="24년-2회">24년 2회</h3>
<p>데이터를 중복시켜 성능을 향상시키기 위한 기법으로 데이터를 중복 저장하거나 테이블을 합치는 등으로 성능을 향상시키지만 데이터 무결성을 저하될 수 있는 기법 </p>
<blockquote>
<p>반정규화</p>
</blockquote>
<p>프로토콜 </p>
<ul>
<li>Network layer에서 IP패킷을 암호화하고 인증하는 등의 보안을 위한 표준이다. </li>
<li>기업에서 사설 인터넷망으로 사용할 수 있는 VPN을 구현하는데 사용되는 프로토콜이다.</li>
<li>AH(Authentication Header)와 ESP(Encapsulating Security Payload)라는 두 가지 보안 프로토콜을 사용한다.<blockquote>
<p>IPSec</p>
</blockquote>
</li>
</ul>
<ul>
<li>대칭키 알고리즘으로 1997년 NIST(미국 국립기술표준원)에서 DES를 대체하기 위해 생성되었다.</li>
<li>128비트, 192비트 또는 256비트의 가변 키 크기와 128비트의 고정 블록 크기를 사용한다.</li>
<li>높은 안전성과 효율성, 속도 등으로 인해 DES 대신 전 세계적으로 많이 사용되고 있다.<blockquote>
<p>AES</p>
</blockquote>
</li>
</ul>
<p>패킷 교환 방식 중에 연결형과 비연결형에 해당하는 방식을 작성하시오. </p>
<p>① 연결형 교환 방식 
별도의 가상회선으로 송/수신 간 데이터 전달
전송 완료 후 가상회선도 종료 =&gt; 패킷 전송 전 논리적 통신 경로를 미리 설정</p>
<blockquote>
<p>가상회선</p>
</blockquote>
<p>② 비연결형 교환 방식
정보 전송 단위 : 패킷 
연결 경로 사전 설정 없이 각 패킷을 순서에 무관하게 독립적으로 전송</p>
<blockquote>
<p>데이터그램</p>
</blockquote>
<p>응집도 : 개별 모둘이 독립적인 기능으로 정의되어 있는정도 
모듈 내 출력 데이터를 다음 활동의 입력 데이터로 사용</p>
<blockquote>
<p>순차적(Sequential) </p>
</blockquote>
<p>모듈 내 구성 요소들이 다수 관련 기능을 순차적으로 수행</p>
<blockquote>
<p>절차적(Procedural) </p>
</blockquote>
<p>디자인 패턴</p>
<ul>
<li>컬렉션 객체의 내부 구조를 노출하지 않고 순차적으로 접근할 수 있게 하는 패턴이다. </li>
<li>이 패턴은 객체의 내부 표현 방식에 독립적으로 요소에 접근할 수 있도록 해준다</li>
<li>반복 프로세스를 캡슐화하여 클라이언트 코드에서는 컬렉션의 구체적인 구현에 종속되지 않도록 한다.</li>
</ul>
<blockquote>
<p>Iterator</p>
</blockquote>
<p>네트워크 계층 프로토콜
. 최소 Hop count (최단거리) 경로로 라우팅하는 프로토콜</p>
<blockquote>
<p>RIP( Routing Information Protocol)</p>
</blockquote>
<p>결합도</p>
<ul>
<li>한모듈이 다른 모듈의 내부 기능 및 자료를 직접 참조 / 수정<blockquote>
<p>내용(Content) </p>
</blockquote>
</li>
</ul>
<ul>
<li>어떤 모듈이 다른 모듈 내부의 논리적인 흐름을 제어하기 위해, 제어를 통신하거나 제어 요소를 전달하는 결합도이다.</li>
<li>한 모듈이 다른 모듈의 상세한 처리 절차를 알고 있어 이를 통제하는 경우나 처리 기능이 두 모듈에 분리되어 설계된 경우에 발생한다.</li>
</ul>
<blockquote>
<p>제어 (Control)</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[oauth 2.0 (구글 API) - 생활코딩님]]></title>
            <link>https://velog.io/@unfamiliar_dev/oauth-2.0-%EA%B5%AC%EA%B8%80-API-%EC%83%9D%ED%99%9C%EC%BD%94%EB%94%A9%EB%8B%98</link>
            <guid>https://velog.io/@unfamiliar_dev/oauth-2.0-%EA%B5%AC%EA%B8%80-API-%EC%83%9D%ED%99%9C%EC%BD%94%EB%94%A9%EB%8B%98</guid>
            <pubDate>Tue, 10 Sep 2024 05:50:36 GMT</pubDate>
            <description><![CDATA[<p>출처 : <a href="https://www.youtube.com/watch?v=PIlP_YX5HK8&amp;list=PLaNOfHMrthwTXwwI5MEEhcegEn29ij8XQ&amp;index=2">생활코딩 유튜브</a> </p>
<p>로그인 방식을 구글 인증방식으로 구현하기 위해 구글링하다가 생활코딩님의 유튜브를 참고하고자한다. </p>
<p>우선 OAuth 2.0이 도대체 무엇인가? Auth은 인증을 의미하는거고 O는 Open 이정도까지는 쉽게 유추가 가능할 것이다. </p>
<p>사전적 의미는 인증을 위한 개방향 표준 프로토콜이라고 나온다. 즉 우리가 앞으로 개발하는 제품에 있어 Client를 대신하여 리소스 서버에서(구글, 카카오 등) 제공하는 자원에 대한 접근 권한을 위임 받는방식이다.</p>
<hr>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/f95580f6-60a3-4371-8384-ef5d2e81af6d/image.png" alt=""></p>
<p>기존 동작 메커니즘은 보안상 문제가 생길수 있다. 왜냐면 누군지도 모르는 Resource server에게 raw한 Id/pw를 넘기기 때문</p>
<p>우선 소셜로그인을 구현하기 위해 구글 로그인을 확인해보도록 하자. </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/68be9889-57ba-4740-a40b-36ef17692c85/image.png" alt=""></p>
<p>google cloud platform에 로그인하고 API 및 서비스 - 사용자 인증정보로 진입한다. 특정사용자에 구글안에서 정보를 가져오는 것이다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[코딩자율학습 제로초의 자바스크립트 입문 (1) 기본문법(심화) & DOM]]></title>
            <link>https://velog.io/@unfamiliar_dev/%EC%BD%94%EB%94%A9%EC%9E%90%EC%9C%A8%ED%95%99%EC%8A%B5-%EC%A0%9C%EB%A1%9C%EC%B4%88%EC%9D%98-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%9E%85%EB%AC%B8-1-%EA%B8%B0%EB%B3%B8%EB%AC%B8%EB%B2%95%EC%8B%AC%ED%99%94-DOM</link>
            <guid>https://velog.io/@unfamiliar_dev/%EC%BD%94%EB%94%A9%EC%9E%90%EC%9C%A8%ED%95%99%EC%8A%B5-%EC%A0%9C%EB%A1%9C%EC%B4%88%EC%9D%98-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%9E%85%EB%AC%B8-1-%EA%B8%B0%EB%B3%B8%EB%AC%B8%EB%B2%95%EC%8B%AC%ED%99%94-DOM</guid>
            <pubDate>Thu, 29 Aug 2024 12:04:17 GMT</pubDate>
            <description><![CDATA[<p>도서관에서 제로초님의 자바스크립트 프로그래밍도서를 보고 나서,리뉴얼된 자바스크립트 책이 나왔다고 해서 도서관에 비치희망을 하였더니 1주뒤에 예약되었다고 연락이 왔다. 세상에 역시 살기 좋은 세상이다. 기존에 빌렸던 책 프로그래밍 부분이 새로나온 책에도 겹치는게 있다고해서 이책으로 다시 시작하겠다.</p>
<p>여전히 자바스크립트가 익숙하지 않아 복습하는 개념으로 이 책을 통해 다시 시작해보자. </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/7577da39-b8c5-4990-bb29-269801e6391f/image.jpeg" alt=""></p>
<hr>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/f80a9eda-f1c9-4222-bdf3-6bc2619543cf/image.png" alt=""></p>
<p>프로그래밍 사고력을 기르기 위해서는 어떤 제품이 어떤 흐름으로 흘러가는지 알아야한다. 물론 프로는 생각만으로도 코딩을 할수 있겠지만, 프로그램이 수행하는 명령에 대한 순서와 절차를 도형과 기호를 사용한 순서도를 통해 익숙해져야겠다. </p>
<hr>
<h3 id="기본-문법feat심화">기본 문법(feat.심화)</h3>
<p>이전 책에서는 간단한 문법만 소개했던 거 같은데, 조금 더 심화된 문법(?)도 소개되어 있어 정리해보겠다. </p>
<h4 id="고차-함수-사용하기">고차 함수 사용하기</h4>
<p>함수는 호출하면 어떤 값을 반환한다. 이 값은 문자열이나 숫자, 불 값 등으로 제한되지 않고 자바스크립트의 모든 자료형이 될 수 있다. 즉, 함수가 함수를 반환할 수도 있다. </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/c2397bda-4e0f-4ec0-ba47-c4d59f41e947/image.png" alt=""></p>
<p>fun()처럼 함수를 만든는 함수를 고차 함수(high order function) 라고 한다. 참고로 화살표 함수 문법에서는 함수 본문에 바로 반환되는 값이 있으면 {와 return을 생략할 수 있다. 화살표 함수가 연이어 나와도 당황하지 말 것. </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/6c659170-e240-450d-aef0-6b55c1180914/image.png" alt=""></p>
<p>예시</p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/89c0e59a-bd54-4b8e-87a0-0080f187ec52/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/f201acf6-5706-4503-b63f-cf9d5f0db72b/image.png" alt=""></p>
<h4 id="배열과-함수가-객체인-이유">배열과 함수가 객체인 이유</h4>
<p>배열과 함수가 객체인 이유는 객체의 성질을 모두 다 사용할 수 있기 때문. 배열과 함수에도 속성들을 추가하거나 수정 및 삭제할 수도 있다. 객체는 함수와 배열을 포함하는 개념이라서 중괄호({})를 사용해 만든 객체를 구분하기 위해 객체 리터럴이라고 따로 지칭하는 것. </p>
<h4 id="객체에-어떤-속성이-있는지-잘-모를-때는--연사자를-사용하자">객체에 어떤 속성이 있는지 잘 모를 때는 ?. 연사자를 사용하자</h4>
<p>옵셔널 체이닝 연산자(optional chaining operator) 라고 하는데, 존재하지 않는 속성에 접근할 때 에러가 발생하는 것을 막아준다. </p>
<h4 id="foreach-와-map">forEach() 와 map()</h4>
<p>forEach() </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/a2a106c1-df4c-4678-8468-2c4164ce46e9/image.png" alt=""></p>
<p>for문을 사용하지 않고도 배열에서 제공하는 메서드로 반복문 역할을 수행할 수 있음. 
foreach()는 인수로 받은 함수를 배열 요소에 각각 적용. 
인수로 받은 함수의 매개변수로는 요소(number)와 요소의 인덱스(index)가 들어 있음.</p>
<p>이때 (number, index) =&gt; {} 처럼 다른 메서드에 인수로 넣었을 때 실행되는 함수를 콜백함수라고 함.</p>
<p>콜백 함수의 매개변수인 number, index 워딩은 마음대로 지을 수 있다만, 첫 번째 매개변수가 배열의 요소, 두 번째 매개변수가 요소의 인덱스라는 것만 기억하자! </p>
<p>map() </p>
<p>map()은 배열 요소들을 일대일로 짝지어서 다른 값으로 변환해 새로운 배열을 반환하는 메서드이다. map()도 foreach()처럼 콜백 함수를 인수로 받지만, 새로운 배열을 반환하다는 점이 다르다. </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/efc38b90-19be-447c-bbcb-a5b57df8ca3c/image.png" alt=""></p>
<p>위 코드를 보면 길이 5인 배열을 생성하고 fill(1)로 요소를 모두 1로 채웠다. 그 다음 map() 함수를 사용하여 index에 1을 더한 값으로 바꾸라는 의미이다. </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/62975c03-8812-49ec-b195-af6102f3b1cc/image.png" alt=""></p>
<p>위 코드를 보면 원본 배열 array는 수정되지 않는다. </p>
<h4 id="find-findindex-filter">find(), findindex(), filter()</h4>
<p>배열에서 요소를 찾을 때 indexOf()나 includes() 메서드를 사용했는데 보통 2차열 배열에서는 위 메서드를 사용하는게 좋다고 함.</p>
<p>find() 는 콜백 함수의 반환값이 true인 요소를 찾는 메서드. true인 요소가 여러개일 경우에는 처음 찾는 요소를 반환</p>
<p>findIndex()는 찾은 요소의 인덱스를 반환하고, 찾지 못 했다면 -1을 반환. </p>
<p>filter()는 find()처럼 콜백 함수의 반환값이 true가 되는 요소를 찾지만, 하나만 찾는 것이 아니라 해당하는 모든 요소를 찾아 결과를 배열로 반환 </p>
<hr>
<p>함수를 여기다 하나씩 정리하는 것보다는 기존에 작성했던 함수 개념이 있다면 추가하는 방향으로 진행해야겠다. 이 책으로보고 함수를 하나씩 보고 있는데 생각보다 그냥 가볍게 넘어간게 많은거 같다. MDN 문서나 유튜브 등으로 확실히 개념에 대해서 이해하고 넘어가자,,,</p>
<hr>
<h3 id="dom-사용하기">DOM 사용하기</h3>
<h4 id="선택자-사용하기">선택자 사용하기</h4>
<p>자바스크립트로 HTMl을 조작하려면 DOM과 선택자에 대해 이해하고 있어야 한다. </p>
<pre><code>document.querySelector(&#39;선택자&#39;) </code></pre><p>위 두개의 메서드는 웹 브라우저가 미리 만들어 둔 것이라서 따로 선언하지 않아도 된다. documet 객체는 브라우저에 열려 있는 HTML 문서를 가리킨다. 여기서 &#39;선택자&#39; 라는 용어가 나오는데, 선택자(selector)는 HTML 태그를 가져오게 도와주는 문자열. </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/8a259ee5-8dfa-4763-8e6b-942597e56850/image.png" alt=""></p>
<p>태그를 저장하는 변수명을 $로 시작하도록 규칙등을 정하는게 좋겠다. 웹 브리우저가 현재 페이지의 HTML을 자바스크립트 객체로 구성해 두었기에 document 객체를 통해 HTML 태그를 선택할 수 있다. </p>
<p>여러 개의 태그를 선택하는 경우</p>
<pre><code>document.querySelectorAll(&#39;선택자&#39;) </code></pre><p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/c7b7566a-3c9b-4299-b504-b2590d721ea8/image.png" alt=""></p>
<p>우선 NodeList를 저장하는 변수명을 $$로 시작하도록 규칙을 정한정도로 이해하자. </p>
<h4 id="id-속성으로-특정-태그-선택하기">id 속성으로 특정 태그 선택하기</h4>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/c87e3a4d-f553-4ecc-adb1-5eeeaf289bd9/image.png" alt=""></p>
<pre><code>document.querySelector(&#39;#&lt;id 속성 값&gt;&#39;) </code></pre><p>id 속성의 값은 태그에 달 수 있는 고유한 값. 한 번 사용한 id 속성의 값은 다른 태그에 재사용할 수 없다. (자바스크립트 기준, HTML에서는 가능) </p>
<h4 id="class-속성으로-여러-태그-선택하기">class 속성으로 여러 태그 선택하기</h4>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/830fbe08-2cbd-44ed-b14e-5305445e59ea/image.png" alt=""></p>
<pre><code>document.querySelectorAll(&#39;.&lt;class 속성 값&gt;&#39;) </code></pre><p>class 속성 값은 여러 번 사용가능하다. </p>
<h4 id="태그-안의-태그-선택하기">태그 안의 태그 선택하기</h4>
<pre><code>document.querySelector(&#39;선택자 내부선택자 내부선택자&#39;) </code></pre><h4 id="태그의-값에-접근하기">태그의 값에 접근하기</h4>
<p>태그 자체가 아닌 태그 내부에 있는 텍스트가 필요할 때가 있다. 즉 태그 내부의 텍스트를 자바스크립트로 가져오거나 태그 내부에 접근해 텍스트를 수정해야 하는 경우이다.</p>
<pre><code>태그.textContent // 태그 내부의 문자열을 가져옴 </code></pre><p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/97d0c953-f7f6-46ec-b979-fb25f5ebc827/image.png" alt=""></p>
<p>내부의 HTML 태그까지 전부 가져오고 싶다면, texrContent 대신 innerHTML 속성을 사용한다.</p>
<pre><code>태그.innerHTML // 태그 내부의 문자열을 가져옴 </code></pre><p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/5492b954-c4ca-4e6a-9596-18321d7efe5e/image.png" alt=""></p>
<p>문자열뿐만 아니라 문자열을 둘러싼 태그도 함께 콘솔에 표시된다. </p>
<h4 id="입력-태그의-값-가져와-변경하기">입력 태그의 값 가져와 변경하기</h4>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/c91ae62c-1ca3-4abe-a275-c7b1598e6294/image.png" alt=""></p>
<p>기본적으로 태그 내부의 값을 선택할 때는 &#39;textContent&#39;를 사용하지만 입력 태그만 value를 사용한다. input은 대표적인 입력 태그이다. 다른 입력 태그로는 select와 textarea가 있다. 현재 input 태그에는 아무런 값도 입력되어 있지 않으므로 $input.value는 &#39;&#39;이다. </p>
<pre><code>&lt;입력 태그&gt;.value // 입력창의 값을 가져옴
&lt;입력 태그&gt;.value=값; // 입력창에 값을 넣음</code></pre><p>입력 태그를 선택할 때는 focus()라는 메서드를 사용한다. focus()는 입력 태크 내부에 커서를 위치하게 해서 사용자가 입력하기 편하게 도와준다. </p>
<pre><code>&lt;입력 태그&gt;.focus() // 입력창을 하이라이트함</code></pre><p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/81b59993-b6d7-4b19-8b0d-8e7f2cc89538/image.png" alt=""></p>
<hr>
<p>+++ 반복되는 내용이 있었다. 근데 이제서야 조금씩 이해가 되는거 같다. 오늘 느낀건 cs지식이 많이 부족한 상태에서 처음 보는 개념들은 단번에 이해하기 어려우니 반복해서 보도록하자,,!!!!!!</p>
<hr>
<p>09.04 내용 추가</p>
<h3 id="이벤트와-이벤트-리스너">이벤트와 이벤트 리스너</h3>
<p>자바스크립트는 이벤트를 자동으로 감지할 수 없기에 이벤트 리스너(event listener)를 추가해야 한다. </p>
<blockquote>
<p>사용자가 태그와 상호작용할 때 이벤트(evnet)는 라는 것이 발생. 실제로는 사용자가 HTML 태그와 상호작용을 하는 것.</p>
</blockquote>
<h4 id="리스너-추가하기">리스너 추가하기</h4>
<pre><code>태그.addEventListener(&#39;&lt;이벤트 이름&gt;&#39;, &lt;이벤트 리스트&gt;)</code></pre><p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/e2406a0d-0b20-4b1e-8630-368330c60cdf/image.png" alt=""></p>
<p>이벤트를 연결할 때는 함수명만 넣어야 하고, 소괄호까지 붙ㅌ이면 함수 자체가 실행되는 점에 유의할 것. </p>
<p>onClickButton() 같은 이벤트 리스너도 콜백 함수이다. addEventListener()에게 함수를 주면 클릭할 때마다 한 번씩 실행해주는,,,</p>
<p>변수를 사용하지 않고 아래처럼 코딩할 수 있지만, 위처럼 변수사용을 추천한다. 읽기가 더 쉽고 나중에 이벤트를 제거할 때도 재사용 가능하다.</p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/414064ae-27bf-4f41-812a-acffc8f990fc/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/e11f0548-172a-423d-9583-d7fe66e7e780/image.png" alt=""></p>
<p>input 태그에 글자를 입력하면 input 이벤트가 발생하게 해본 경우이다. 함수의 매개변수로 event가 존재하는데 이벤트 리스너에는 매개변수를 통해 addEventListener()가 제공하는 이벤트에 관한 정보가 전달된다. 여기서는 envet.target.value로 input 태그에 입력한 값을 알아 낼수 있다. 참고로 매개변수이기에 꼭 event라고 워딩을 한정 짓지 않아도 된다. </p>
<h4 id="이벤트-리스너-제거하기">이벤트 리스너 제거하기</h4>
<pre><code>function 함수() { 
태그.addEventListener(&#39;이벤트&#39;, 함수)
태그.removeEventListener(&#39;이벤트&#39;, 함수)</code></pre><p>이때 참조관계를 유지하기 위해서 변수를 사용해야 실행이된다. </p>
<pre><code>const fun = (값) =&gt; () =&gt; { 
    console.log(&#39;고차함수입니다.&#39;, 값); 
}
const fun1 = fun(1); 
태그.addEventListener(&#39;이벤트&#39;, fun1)
태그.removeEventListener(&#39;이벤트&#39;, fun1)</code></pre><p>fun(1)을 fun1 변수에 저장해서 같은 함수라는 것을 보장해야한다. </p>
<p>고차함수인 fun()은 항상 새로운 함수를 반환하기 때문. 같은 함수가 아니므로 이벤트가 제거되지 않는다. 따라서 이벤트를 제거하고 싶다면 fun(1)을 fun1 변수에 저장해서 같은 함수라는 것을 보장해야한다.</p>
<h4 id="키보드와-마우스-이벤트">키보드와 마우스 이벤트</h4>
<p>넓은 범위에서 붙여지는게 좋기 때문에 보통 이벤트를 window 객체에 추가하는 것</p>
<p><a href="https://www.youtube.com/watch?v=DqxgMmSTtPY">참고 링크 (제로초님 유튜브)</a></p>
<h4 id="이벤트-버블링과-캡처링">이벤트 버블링과 캡처링</h4>
<p>이벤트가 발생할 때 부모 태그에도 동일한 이벤트가 발생하는 현상을 이벤트 버블링이다. 이벤트가 발생한 태그가 아닌 이벤트를 연결한 태그에 접근하고 싶다면 event.currentTarget을 사용해야한다. </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/90422f0c-df6b-41d3-ada8-f31793ca8ca4/image.png" alt=""></p>
<p>header 자식 태그인 input까지 영향을 주고 있다 </p>
<p>이벤트 캡처링은 이벤트가 자식 태그로 전파되어 내려가는 현상인데, 실무에서는 여백(?)을 눌렀을 때 팝업을 닫고 싶을 때 말고는 잘 사용안한다고,,</p>
<p><a href="https://www.youtube.com/watch?v=nlaA1bZAkAI">참고 링크(제로초님 유튜브</a></p>
<h3 id="다양한-dom-속성">다양한 DOM 속성</h3>
<h4 id="태그-속성-다루기">태그 속성 다루기</h4>
<pre><code>태그.속성 // 조회 시 사용
태그. 속성 = 값; // 수정 시 사용</code></pre><p>HTML 태그의 속성 중에 class 속성은 자바스크립트의 class와 헷갈리는 것을 막기 위해 아래 처럼 사용한다</p>
<pre><code>태그.className = &#39;클래스1 클래수2 ...&#39;;</code></pre><p>근데 기존 클래스에 새로운 클래스를 추가하거나 삭제하려면 태그.classList 객체를 사용하는 것이 좋다.</p>
<h4 id="새로운-태그-만들기">새로운 태그 만들기</h4>
<pre><code>const $button = document.createElement(&#39;button&#39;);
$button.classList.add(&#39;login&#39;);
$button.style.fontSize = &#39;15px&#39;;
$button.textContent = &#39;버튼&#39;;
document.body.append($button);</code></pre><h3 id="window-객체">window 객체</h3>
<p>window는 웹 브라우저를 가리키는 객체로, 웹 브라우저가 제공하는 기본 객체들은 대부분 window 객체 안에 들어 있다. document, console 객체도 실제로는 window.document / window.console이다. window는 생략할수 있다.</p>
<p>대표적으로는 alert() (알림창 또는 경고창), confirm()(확인창), prompt()(입력창) 메서드가 있고, 수학 계산을 돕는 Math 객체와 날짜 계산을 돕는 Date 생성자 함수가 있다. </p>
<h4 id="대화상자-사용하기">대화상자 사용하기</h4>
<pre><code>prompt(&#39;사용자에게 표시할 메시지&#39;) </code></pre><p>단순히 prompt(&#39;<del>~</del>&#39;) 으로 대화상자를 띄우면 그 값을 입력해도 아무런 일이 일어나지 않기에 그 값을 저장시키려면 아래 처럼 변수를 지정하여 저장시킨다. </p>
<pre><code>const number = prompt(&#39;~~~&#39;);
number;</code></pre><p>다만 prompt() 함수는 문자열이 되기 때문에 숫자값을 원한다면 아래 경우로 변경할수 있다.</p>
<pre><code>const number = prompt(&#39;~~~&#39;);
Number(number);

const number = Number(prompt(&#39;~~~&#39;));
number;</code></pre><p>confirm() 함수는 사용자에게 의사를 물어볼 때 사용.<img src="https://velog.velcdn.com/images/unfamiliar_dev/post/e8479fe2-75af-43e2-89a7-076e6cc6fc90/image.png" alt=""></p>
<h4 id="date-생성자-함수">Date 생성자 함수</h4>
<p>날짜 계산을 할 때는 Date 생성자 함수를 사용한다. 생성자 함수이므로 new를 붙여 호출한다. </p>
<pre><code>const &lt;날짜 객체&gt; = new Date(연, 월, 일, 시, 분, 초, 밀리초);
const &lt;날짜 객체&gt; =new Date(타임스탬프); </code></pre><p>타임스탬프(timestamp)는 1970년 1월 1일 자정(런던시간기준)으로부터 지나온 밀리초를 의미한다. </p>
<p>현재 시간의 밀리초는 Date.now() / 타임스탬프는 사람이 읽기 어려우니 new Date()를 사용한다. </p>
<p>직접 시간을 지정하고 싶다면 </p>
<pre><code>new Date(2024, 1, 2 );
new Date(2023, 1, 2, 18, 30, 5);</code></pre><p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/f04cbc47-1189-498f-80b2-e3610018cc8f/image.png" alt=""></p>
<p>차례대로 연, 월, 일, 시, 분, 초 이다. 월은 0부터 시작이다. 그래서 인수로 1을 넣었지만 2월이 된다. </p>
<p>setFullYear(), setMonth(), setDate(), setHours(), setMinutes(), setSeconds(), setMilliseconds() 메서드는 각각 연, 월, 일, 시, 분, 초 밀리초를 수정한다. </p>
<p>setMonth()에는 0부터 11까지의 값을 넣어야하는 점 다시 생각하고,,,연을 바꾸는 메서드 이름은 setFullYear() 도 유의. </p>
<p>현재 객체를 가져오는 거는 set대신 get으로 바꾸면 된다. 요일을 구하는 getDat()메서드는 0부터 6까지 값이 나오는데 일요일이 0이고 토요일이 6이다.</p>
<p>참고로 set시작하는 메서드를 사용할 때 인수로 0이나 음수도 넣을수 있는데 2024년 1월 1일의 하루 전을 구하려면 아래와 같다.</p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/a3bd0004-c394-483b-9a35-c17d1af0f40e/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[<정보처리기사 실기> Daily 문제 (5) 배열]]></title>
            <link>https://velog.io/@unfamiliar_dev/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC-%EC%8B%A4%EA%B8%B0-Daily-%EB%AC%B8%EC%A0%9C-5-%EB%B0%B0%EC%97%B4</link>
            <guid>https://velog.io/@unfamiliar_dev/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC-%EC%8B%A4%EA%B8%B0-Daily-%EB%AC%B8%EC%A0%9C-5-%EB%B0%B0%EC%97%B4</guid>
            <pubDate>Sun, 25 Aug 2024 08:00:07 GMT</pubDate>
            <description><![CDATA[<p>출처 : <a href="https://cafe.naver.com/soojebi/214222">수제비 카페 </a></p>
<ol>
<li><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/4af31c5c-b31c-4215-b845-a4fd4dbaf296/image.png" alt=""></li>
</ol>
<p>이 줄은 크기가 4인 정수형 배열 a를 다음과 같이 초기화</p>
<p>a[0] = 3
a[1] = 1
a[2] = 2
a[3] = 0</p>
<p>답 : 2</p>
<ol start="2">
<li><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/45690b53-8751-4db1-8eb3-92f8dfbb6a2e/image.png" alt=""></li>
</ol>
<p>C 언어에서 2차원 배열은 메모리에 연속적으로 저장된다. 따라서 a[0][4]는 사실상 a[2][0]과 동일한 메모리 위치를 가리킨다.</p>
<p>이를 메모리 관점에서 다시 살펴보면:</p>
<p>a[0][0] -&gt; 1
a[0][1] -&gt; 2
a[1][0] -&gt; 3
a[1][1] -&gt; 4
a[2][0] -&gt; 5
a[2][1] -&gt; 6
따라서 a[0][4]는 a[2][0]과 같은 위치에 있는 값, 즉 5를 가리킨다. </p>
<ol start="3">
<li><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/651cca0b-ea4e-4c67-bfdf-cd251a80e33d/image.png" alt=""></li>
</ol>
<p>a[]는 문자열 &quot;HELLO&quot;로 초기화된 문자 배열입니다. 이는 메모리에서 {&#39;H&#39;, &#39;E&#39;, &#39;L&#39;, &#39;L&#39;, &#39;O&#39;, &#39;\0&#39;}로 저장.
b[]는 정수 값들로 초기화된 배열: {5, 4, 3, 2, 1, 0}.</p>
<p>루프는 문자열 a의 길이만큼 반복 (strlen(a)는 5이므로, i는 0에서 4까지 반복).</p>
<p>배열의 각 요소에 대한 연산
각 반복에서 a[i]에 b[i] 값을 더한다. 이를 통해 a의 각 문자가 변환</p>
<p>반복문을 통해 수행되는 연산:
i = 0:
a[0] = &#39;H&#39;의 ASCII 값은 72입
b[0] = 5
a[0] += b[0] → 72 + 5 = 77 → &#39;M&#39;
결과: a[0] = &#39;M&#39;</p>
<p>i = 1:
a[1] = &#39;E&#39;의 ASCII 값은 69
b[1] = 4
a[1] += b[1] → 69 + 4 = 73 → &#39;I&#39;
결과: a[1] = &#39;I&#39;</p>
<p>i = 2:
a[2] = &#39;L&#39;의 ASCII 값은 76
b[2] = 3
a[2] += b[2] → 76 + 3 = 79 → &#39;O&#39;
결과: a[2] = &#39;O&#39;</p>
<p>i = 3:
a[3] = &#39;L&#39;의 ASCII 값은 76
b[3] = 2
a[3] += b[3] → 76 + 2 = 78 → &#39;N&#39;
결과: a[3] = &#39;N&#39;</p>
<p>i = 4:
a[4] = &#39;O&#39;의 ASCII 값은 79
b[4] = 1
a[4] += b[4] → 79 + 1 = 80 → &#39;P&#39;
결과: a[4] = &#39;P&#39;</p>
<p>최종 문자열
변환이 완료되면, 배열 a[]는 &quot;MIONP&quot;로 변환</p>
<p>따라서, 이 코드의 최종 결과는 a[]가 &quot;MIONP&quot;</p>
<ol start="4">
<li><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/ad521930-2304-4fcf-9997-2317887a76d8/image.png" alt=""></li>
</ol>
<p>이 코드는 3x2 크기의 2차원 배열 a를 다음과 같이 초기화</p>
<p>a[0][0] = 1   a[0][1] = 2
a[1][0] = 3   a[1][1] = 4
a[2][0] = 5   a[2][1] = 6</p>
<p>바깥쪽 루프 (i): 열(column)을 순회. i는 0부터 1까지 변하며, 두 번 반복
안쪽 루프 (j): 행(row)을 순회. j는 0부터 2까지 변하며, 세 번 반복</p>
<p>배열 요소 접근
a[j][i]는 행(j)과 열(i)에 위치한 요소를 가리킨다.</p>
<p>루프가 실행될 때 배열의 요소를 다음 순서로 접근하게 된다.</p>
<p>i = 0, j = 0: a[0][0] = 1
i = 0, j = 1: a[1][0] = 3
i = 0, j = 2: a[2][0] = 5
i = 1, j = 0: a[0][1] = 2
i = 1, j = 1: a[1][1] = 4
i = 1, j = 2: a[2][1] = 6</p>
<p>출력 결과
각 printf(&quot;%d&quot;, a[j][i]); 호출은 해당하는 배열 요소의 값을 출력. 따라서 출력되는 값은 순서대로:</p>
<p>1 3 5 2 4 6</p>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[<정보처리기사 실기> Daily 문제 (4)    etc]]></title>
            <link>https://velog.io/@unfamiliar_dev/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC-%EC%8B%A4%EA%B8%B0-Daily-%EB%AC%B8%EC%A0%9C-4-etc</link>
            <guid>https://velog.io/@unfamiliar_dev/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC-%EC%8B%A4%EA%B8%B0-Daily-%EB%AC%B8%EC%A0%9C-4-etc</guid>
            <pubDate>Sat, 24 Aug 2024 05:40:15 GMT</pubDate>
            <description><![CDATA[<p>출처 <a href="https://cafe.naver.com/soojebi">수제비카페</a></p>
<h3 id="요구사항-확인">요구사항 확인</h3>
<ol>
<li>다음은 객체 지향 분석 방법론에 대한 설명이다. 괄호 () 안에 들어갈 용어를 쓰시오. </li>
</ol>
<ul>
<li><p>( 1 ) 은/는 프로세스들의 자료 흐름을 중심으로 처리 과정 표현하는 모델링으로 자료 흐름도(DFD)를 활용하여 표현한다.</p>
</li>
<li><p>( 2 ) 은/는 시스템에서 요구하는 객체를 찾고 객체들 간의 관계를 정의하여 ER 다이어그램을 만드는 과정까지의 모델링이다. </p>
</li>
</ul>
<p>(1) - 기능 모델링(Functional Modeling)
(2) - 객체 모델링(Object Modeling) / Information Modeling </p>
<hr>
<p>럼바우의 객체 지향 분석 절차</p>
<p>객체 모델링  =&gt; 동적 모델링 =&gt; 기능 모델링</p>
<p>객체 모델링 : 정보 모델링이라고도 하며, 시스템에서 요구하는 객체를 찾고 객체들 간의 관계를 정의하여 ER 다이어그램을 만드는 과정까지의 모델링</p>
<p>동적 모델링 : 시간의 흐름에 따라 객체들 사이의 제어 흐름, 동작 순서 등의 동적인 행위를 표현하는 모델링 / 상태 다이어그램을 활용하여 표현</p>
<p>기능 모델링 : 프로세스들의 자료 흐름을 중심으로 처리 과정 표현하는 모델링 / 자료 흐름도 (DFD)를 활용하여 표현 </p>
<hr>
<p>객체 지향 설계 원칙</p>
<p>개방 폐쇄 원칙(OCP; Open Close Principle) : 소프트웨어의 구성요서는 확장에는 열러있고, 변경에는 닫혀있어야 한다는 원칙 </p>
<p>리스코프 치환의 원칙(LSP; Liskov Substitution Principle) : 서브 타입(상속받은 하위 클래스)은 어디서나 자신의 기반 타입(상위 클래스)으로 교체할 수 있어야 한다는 원칙</p>
<hr>
<p>디자인 패턴</p>
<p>복잡한 시스템에 대하여 단순한 인터페이스를 제공함으로써 사용자와 시스템 간 또는 여타 시스템과의 결합도를 낮추어 시스템 구조에 대한 파악을 쉽게 하는 패턴</p>
<p>오류에 대해서 단위별로 확인할 수 있게 하며, 사용자의 측면에서 단순한 인터페이스 제공을 통해 접근성을 높일 수 있는 패턴</p>
<blockquote>
<p>Facade</p>
</blockquote>
<p>( ) 패턴은 어떤 작업을 처리하는 일부분을 서브 클래스로 캡슐화해서 전체 일을 수행하는 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내역을 바꾸는 디자인 패턴이다. </p>
<blockquote>
<p>Template Method</p>
</blockquote>
<p>( ) 패턴은 객체 상태를 캡슐화하여 클래스화함으로써 그것을 참조하게 하는 방식으로 상타에 따라 다르게 처리할 수 있도록 행위 내용을 변경하여, 변경 시원시 코드의 수정을 최소화할 수 있고, 유지보수의 편의성도 갖는 디자인 패턴이다. </p>
<blockquote>
<p>State</p>
</blockquote>
<p>객체 지향 구성 요소</p>
<p>클래스로부터 생성된 객체를 사용하는 방버으로 객체가 수행할 수 있는 동작이나 기능을 정의한 함수</p>
<blockquote>
<p>메서드(method) </p>
</blockquote>
<p>객체 간 상호작용을 하기 위한 수단으로 객체에게 특정 ( )를 호출하도록 요청하는 방식</p>
<blockquote>
<p>메시지(message) </p>
</blockquote>
<p>클래스라는 설계도를 기반으로 생성된 실형 객체로 각각은 같은 클래스에 속하지만, 고유한 속성과 상태를 가질수 있음 </p>
<blockquote>
<p>인스턴스(Instance) </p>
</blockquote>
<h3 id="화면설계">화면설계</h3>
<ol start="2">
<li>다음은 UML에 대한 설명이다. 괄호() 안에 들어갈 UML의 유형을 쓰시오.</li>
</ol>
<p>( 1 ) 다이어그램은 시스템이 어떤 기능을 수행하는지를 객체의 처리 로직이나 조건에 따른 처리의 흐름을 순서대로 표현하는 다이어그램 </p>
<p>(2) 다이어그램은 동작에 참여하는 객체들이 주고 받는 메시지를 표현하고, 메시지뿐만 아니라 객체 간의 연관까지 표현하는 다이어그램 </p>
<p>( 1 ) : 활동(Activity) 
( 2 ) : 커뮤니케이션(Communication)</p>
<p>( ) 하나의 유스케이스가 어떤 시점에 다른 유스케이스를 실행할 수도 있고, 그렇지 않을 수도 있는 관계이다. </p>
<blockquote>
<p>extend</p>
</blockquote>
<p>( ) 하나의 유스케이스가 어떤 시점에 반드시 다른 유스케이스를 실행하는 관계이다.</p>
<blockquote>
<p>include</p>
</blockquote>
<h3 id="데이터-입출력-구현">데이터 입출력 구현</h3>
<ol start="3">
<li>논리적 데이터 모델링</li>
</ol>
<p>계층 데이터 모델은 논리적 구조가 트리 형태로 구성된 모델로 1:N 관계만 허용한다.</p>
<p>네트워크 모델은 논리적 구조가 그래프 형태로 구성된 모델로 CODASYL DBTG 모델이라고 불린다. </p>
<hr>
<p>유일성(Unique)은 식별자에 의해 엔터티 타입 내에 모든 엔터티들이 유일하게 구분하는 키의 특성이다. </p>
<p>키의 종류 중 슈퍼 키(Super Key)는 릴레이션을 구성하는 모든 튜플에 대해 유일성(Unique)은 만족하지만, 최소성(Minimality)은 만족하지 못하는 키이다.</p>
<hr>
<p>개체(Entity)는 데이터베이스에 표현하려는 사물 또는 사건으로 피터 챈 모델에서는 사각형으로 표시한다. </p>
<p>속성(Attribute)은 개체가 가지고 있는 요소 또는 성질으로 피터 챈 모델에서는 속성을 타원형으로 표시한다.</p>
<h3 id="통합-구현">통합 구현</h3>
<ol start="4">
<li>Web Service</li>
</ol>
<p>SOAP(Simple Object Access Protocol)
: HTTP, HTTPS, SMTP 등을 사용하여 XML 기반의 메시지를 네트워크 상태에서 교환하는 프로토콜이다.</p>
<p>UDDI(Universal Description Discovery and Integration)
: 웹 서비스에 대한 정보를 등록하고 검색하기 위한 저장소로 공개적으로 접근, 검색이 가능한 레지스트리이자 표준이다.</p>
<h3 id="소프트웨어-개발-보안-구축">소프트웨어 개발 보안 구축</h3>
<ol start="5">
<li>네트워크 보안 솔루션</li>
</ol>
<p>ESM (Enterpris Security Management): 방확벽(Firewall), 침입 탐지 시스템(IDS), UTM 가상 사설망 등의 여러 보안 시스템으로부터 발생한 각종 이벤트 및 로그를 통합해서 관리, 분석, 대응하는 전사적 통합 보안 관리 시스템 </p>
<p>UTM (Unified Threat Management): 방화벽, 침입 탐지 시스템(IDS), 침입 방지 시스템(IPS), VPN, 안티 바이러스, 이메일 필터링 등 다양한 보안 장비의 기능을 하나의 장비로 통합하여 제공하는 시스템</p>
<ol start="6">
<li>데이터 암호화 전송</li>
</ol>
<p>L2f(Layer 2 Forwarding)은 시스코사(Cisco)에서 개발한 프로토콜로 ISP(인터넷 서비스 제공자)가 여러 사용자들을 인증하고 터널링을 통해 연결을 제공할 수 있는 다자간 통신이 가능한 프로토콜이다. </p>
<p>L2TP(Layer 2 Tunneling Protocol)은 PPTP(Point-to-Point Tunneling Protocol)와 L2f(Layer 2 Forwarding)의 장접을 결합하여 개발된 프로토콜로, 마이크로소프트사와 시스코에서 지원하고 있으며 호환성이 뛰어나고 원격 접속 서비스에 사용되는 프로토콜이다. </p>
<ol start="7">
<li>네트워크 보안 솔루션</li>
</ol>
<p>SIEM(Security Information and Event Management) 은 기업에서 생성되는 테라바이트급의 정형 비정형 데이터와 방화벽, 안티바이러스 시스템, 서버, 네트워크 장비 등으로부터 수집한 다양한 데이터 등을 빅데이터 기반의 로그 분석을 통하여 보안의 위협 징후를 빠르게 판단 대응할 수 있도록 해주는 보안 관제 솔루션이다. </p>
<p>ESM(Enterprise Security Management) 은 서로 다른 기종의 보안 장비들을 통합 관리하는 기능과 네트워크 자원 현황의 보안 모니터링 기능이 있고, 주로 이벤트 위주의 단시간 위협 분석 및 DMBS 기반의 보안 관리 솔루션이다. </p>
<ol start="8">
<li>보안공격 </li>
</ol>
<p>키로거 공격(Key Logger Attack) : 컴퓨터 사용자의 키보드 움직임을 탐색해서 저장하고, ID나 패스워드, 계좌 번호, 카드 번호 등과 같은 개인의 중요한 정보를 몰래 빼가는 해킹 공격이다. </p>
<p>공급망 공격(Supply Chain Attack) : 소프트웨어 개발사의 네트워크에 침투하여 소스 코드의 수정 등을 통해 악의적인 코드를 삽입하거나 배포 서버에 접근하여 악의적인 파일로 변경하는 방식을 통해 사용자 PC에 소프트웨어를 설치 또는 업데이트 시에 자동적으로 감영되도록 하는 공격기법이다.</p>
<p>악성 루틴이 숨어 있는 프로그램으로 겉보기에는 정상적인 프로그램으로 보이지만 실행하면 악성 코드를 실행하는 프로그램이다. </p>
<blockquote>
<p>트로이목마 (Trojan Horse) </p>
</blockquote>
<p>다른 실행 프로그램에 기생하지 않고, 스스로를 복제하여 네트워크 등의 연결을 통하여 전파하는 악성 소프트웨어 컴퓨터 프로그램이다.</p>
<blockquote>
<p>웜(Worm)</p>
</blockquote>
<p>( ) 컴퓨터 운영체제의 커널에 보안 기능을 추가한 솔루션으로 운영체제에 내재된 결함으로 인해 발생할 수 있는 각종 해킹 공격으로부터 시스템을 보호할 수 있다.</p>
<blockquote>
<p>보안 운영체제(Secure OS)</p>
</blockquote>
<p>( ) 조직 내부의 중요 자료가 외부로 빠져나가는 것을 탐지하고 차단하는 솔루션으로 정보 유출 방지를 위해 정보의 흐름에 대한 모니터링과 실시간 차단 기능을 제공하고 있다. </p>
<blockquote>
<p>데이터 유출 방지(DLP; Date Loss Prevention)</p>
</blockquote>
<p>( ) 멀티미디어 콘텐츠에 저작권 정보와 구매한 사용자 정보를 삽입하여 콘텐츠 불법 배포자에 대한 위치 추적이 가능한 기술(저작권 정보구매자 정보)이다. </p>
<blockquote>
<p>핑거프린팅(Finger Printing) </p>
</blockquote>
<p>( ) 디지털 콘텐츠에 저작권자 정보를 삽입하여, 불법 복제 시 워터마크를 추출, 원소유자를 증명할 수 있는 콘텐츠 보호 기술이다.</p>
<blockquote>
<p>워터마킹(Water Marking) </p>
</blockquote>
<p>TCP 연결 설정을 위한 3-way handshaking 과정에서 half-open 연결 시도가 가능하다는 취약성을 이용하는 공격 방식이다.</p>
<blockquote>
<p>STN 플러딩 </p>
</blockquote>
<p>서버와 클라이언트가 TCP 통신을 하고 있을 때, RST 패킷을 보내고 시퀀스 넘버 등을 조작하여 연결을 가로채는 공격 방식이다.</p>
<blockquote>
<p>세션 하이재킹</p>
</blockquote>
<p> IP 패킷의 재조합 과정에서 잘못된 Fragment Offset 정보로 인해 수신 시스템이 문제를 발생하도록 만드는 DoS 공격이다.</p>
<blockquote>
<p>티어 드롭</p>
</blockquote>
<p> 웹 페이지에 악의적인 스크립트를 삽입하여 방문자들이 해당 웹 페이지를 열람함으로써 방문자들의 정보를 탈취하거나, 비정상적인 기능 수행을 유발 하는 공격기법</p>
<blockquote>
<p>XSS(Cross Site Scripting)</p>
</blockquote>
<p> 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹 사이트에 요청하게 하는 공격기법</p>
<blockquote>
<p>CSRF(Cross-Site Request Forgery)</p>
</blockquote>
<p> 응용 프로그램의 보안 취약점을 이용해서 악의적인 SQL 구문을 삽입, 실행시켜서 데이터베이스(DB)의 접근을 통해 정보를 탈취하거나 조작 등의 행위를 하는 공격기법</p>
<blockquote>
<p> SQL Injection</p>
</blockquote>
<p>( ) 블루투스 장비 간 취약한 연결 관리를 악용한 공격이다. </p>
<blockquote>
<p>블루버그(BlueBug)</p>
</blockquote>
<p>( ) 블루투스 연결을 통해 무선 기기에서 무단으로 정보에 엑세스하는 공격이다.</p>
<blockquote>
<p>블루스나프(BlueSnarf) </p>
</blockquote>
<p>인증 기술은 지식 기반, (소지) 기반, 생체 기반, ( 특징 Or 행위 ) 기반 인증이 있다. 비밀번호와 같이 사용자가 기억하고 있는 지식은 지식기반 인증이라고 한다. </p>
<p>공인인증서, ( OTP, one time passward) 는 각 사용 시마다 일회용 비밀번호를 생성하여 사용하는 방식으로 보안성이 높아, 해킹이나 비밀번호 도용을 방지하는 데 효과적이다. </p>
<p>홍채, 정맥, 지문과 같이 고유한 사용자의 생체 정보는 생체 기반 인증이라고 한다. </p>
<p>서명, 발걸음, 몸짓과 같이 사용자의 행동을 이용하는 방식은 ( 특징 Or 행위 ) 기반 인증이라고 한다. </p>
<h3 id="서버-프로그램-구현">서버 프로그램 구현</h3>
<p>모듈의 ( 독립성(Independence) )은 결합도와 응집도에 의해 측정되며, ( 독립성 )을 높이려면 모듈의 결합도는 약하게(낮게) 응집도는 강하게(높게), 모듈의 크기는 작게 만들어야 한다. </p>
<p>여기에서 응집도는 모듈의 독립성을 나타내는 정도로, 모듈 내부 구성요소 간 연관 정도이다. 응집도 유형 중 ( 통신적 응집도 (Communication Cohesion) )은 동일한 입력과 출력을 사용하여 다른 기능을 수행하는 활동들이 모여 있을 경우의 응집도이다.</p>
<h3 id="애플리케이션-테스트관리">애플리케이션 테스트관리</h3>
<p>정적 분석(Static Analysis) 도구는 만들어진 애플리케이션을 실행하지 않고 분석하는 도구로 대부분의 경우 소스코드에 대한 코딩 표준, 코딩 스타일, 코드 복잡도 및 남은 결함을 발견하기 위하여 사용한다. </p>
<p>반면에 성능 테스트(Performance Test) 도구는 애플리케이션의 처리량, 응답시간, 경과시간, 자원사용률에 대해 가상의 사용자를 생성하고 테스트를 수행함으로써 성능 목표를 달성하였는지를 확인하는 테스트 자동화 도구이다. </p>
<p>( )은 데이터값들 간에 최소한 한 번씩을 조합하는 방식이며, 이는 커버해야 할 기능적 범위를 모든 조합에 비해 상대적으로 적은 양의 테스트 세트를 구성하기 위한 테스트 기법이다. </p>
<blockquote>
<p>페어와이즈 테스트(Pairwise Testing) </p>
</blockquote>
<p>( ) 결정 포인트 내의 각 개별 조건식이 적어도 한 번은 참과 거짓의 결과가 되도록 수행하는 테스트 기법이다. </p>
<blockquote>
<p>조건 커버리지(Condition Coverage) </p>
</blockquote>
<h3 id="응용-sw-기초-기술-활용">응용 SW 기초 기술 활용</h3>
<p>SNMP(Simple Network Management Protocol) : 네트워크 장비를 모니터링하고 관리하는 표준 프로토콜로 포트번호 161, 162를 사용해서 네트워크 장비의 성능, 오류, 상태 정보를 수집하는 프로토콜이다. </p>
<p>NAT(Network Address Translation) : 기업 내부에서 사설 IP를 부여해서 사용하다가 기업 외부로 통신할 때는 공인 IP로 변환해서 통신함으로써 부족한 IPv4의 주소 문제를 해결하고 기업 내부의 보안을 강화할 수 있는 프로토콜이다.</p>
<p>전송 매체 접속 제어</p>
<p>( ) IEEE802.3 기반의 매체 접속 제어 방식으로 통신 회선이 사용중이면 일정 시간 동안 대기하고, 통신 회선상에 데이터가 없을 때에만 데이터를 송신하며, 송신중에도 전송로의 상태를 계속 감시하는 방식</p>
<blockquote>
<p>CSMA/CD</p>
</blockquote>
<p>( ) IEEE802.11 기반의 매체 접속 제어 방식으로 데이터 전송 시, 매체가 비어있음을 확인한 뒤 충돌을 회피하기 위해서 임의 시간을 기다린 후 데이터를 전송하는 방식</p>
<blockquote>
<p>CSMA/CA</p>
</blockquote>
<h3 id="sql-응용">SQL 응용</h3>
<p>(외부 스키마 (External Schema) ) 은 사용자나 개발자의 관점에서 필요로 하는 데이터베이스의 논리적 구조로 사용자 뷰를 나타낸다. </p>
<p>(개념 스키마 (Conceptual Schema) ) 은 데이터베이스의 전체적인 논리적 구조로 전체적인 뷰를 나타낸다. </p>
<h3 id="신기술">신기술</h3>
<p>하나의 호스트 컴퓨터상에서 동시에 다수의 운영체제를 구동시킬 수 있는 HW와 OS 사이의 SW 가상화 플랫폼</p>
<blockquote>
<p>하이퍼바이저(Hypervisor) </p>
</blockquote>
<p>리눅스 재단에 의해 관리되는 컨테이너화된 애플리케이션의 자동 배포, 스케일링 등을 제공하는 오픈 소스 기반의 관리 시스템</p>
<blockquote>
<p>쿠버네티스(Kubernetes)</p>
</blockquote>
<p>구글의 구글 브레인 팀이 제작하여 공개한 기계 학습을 위한 오픈 소스 소프트웨어 라이브러리</p>
<blockquote>
<p>텐서플로(TensorFlow) </p>
</blockquote>
<p>블록체인의 기본 인프라를 추상화하여 블록체인 응용 프로그램을 만들수 있는 클라우드 컴퓨팅 플랫폼</p>
<blockquote>
<p>BaaS(Blockchain-as-a-Service)</p>
</blockquote>
<hr>
<h3 id="">+++</h3>
<p>*
접근 통제 보호 모델</p>
<p>주체는 자신과 같거나 자신보다 낮은 보안 수준의 객체만 읽을 수 있음
주체는 자신과 같거나 자신보다 높은 보안 수준의 객체에만 쓸 수 있음
=&gt; 벨 - 라파듈라</p>
<ul>
<li>객체지향 분석 방법론</li>
</ul>
<p>OOSE - 유스케이스에 의한 접근 방법으로 유스케이스를 모든 모델의 근간으로 활용하는 야콥슨이 만든 방법론
Coad - Yourdon - E-R 다이어그램을 사용하여 객체의 행위를 모델링하며, 객체 식별, 구조식별, 주체 정의, 속성 및 관계 정의, 서비스 정의 등의 과정으로 구성되는 방법론
wirfs-brock(워프 - 브록) - 분석과 설계 간의 구분이 없고 고객 명세서를 평가해서 설계 작업까지 연속적으로 수행하는 분석 방법론</p>
<ul>
<li>네트워크 장비</li>
</ul>
<p>Repeater(리피터) </p>
<blockquote>
<p>디지털 신호를 증폭시켜 주는 역할을 하여 신호가 약해지지 않고 컴퓨터로 수신되도록 하는 장비</p>
</blockquote>
<p>Router(라우터) </p>
<blockquote>
<p>LAN과 LAN을 연결하거나 LAN과 WAN을 연결하기 위한 인터넷 네트워킹 장비</p>
</blockquote>
<ul>
<li>메모리 교체기법</li>
</ul>
<p>사용된 횟수를 확인하여 참조 횟수가 가장 적은 페이지를 선택하여 교체하는 기법</p>
<blockquote>
<p> LFU(Least Frequently Used)</p>
</blockquote>
<p>가장 오랫동안 주기억장치에 있던 페이지 중 자주 사용되는 페이지의 교체를 방지하기 위한 기법으로 페이지마다 참조 비트를 두고, FIFO 기법을 이용하여 페이지 교체 수행 중 참조 비트가 0일 경우에 교체를 수행하는 기법</p>
<blockquote>
<p>SCR(Second Chance Replacement)</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[Let's Get IT 자바스크립트 프로그래밍 (4) 반복문 사용하기_숫자 야구게임]]></title>
            <link>https://velog.io/@unfamiliar_dev/Lets-Get-IT-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-4-%EB%B0%98%EB%B3%B5%EB%AC%B8-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0%EC%88%AB%EC%9E%90-%EC%95%BC%EA%B5%AC%EA%B2%8C%EC%9E%84</link>
            <guid>https://velog.io/@unfamiliar_dev/Lets-Get-IT-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-4-%EB%B0%98%EB%B3%B5%EB%AC%B8-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0%EC%88%AB%EC%9E%90-%EC%95%BC%EA%B5%AC%EA%B2%8C%EC%9E%84</guid>
            <pubDate>Thu, 22 Aug 2024 13:06:08 GMT</pubDate>
            <description><![CDATA[<p>출처 : Let&#39;s Get IT 자바스크립트 프로그래밍</p>
<hr>
<h4 id="1-순서도-그리기--기본-뼈대">1. 순서도 그리기 &amp; 기본 뼈대</h4>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/d583aa04-da4e-4221-81a5-21d8bfe28b14/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/7a79d0ec-58e2-498f-a11c-bc97f9e76c32/image.png" alt=""></p>
<p>input이 있으면 주로 form으로 감싼다고 한다.logs라는 div태그안에 쌓이게 될 것이다.</p>
<h4 id="2-무작위로-숫자-뽑기">2. 무작위로 숫자 뽑기</h4>
<p>우선 무작위로 숫자를 만드는 함수는 Math.random()가 있다. 이 함수는 0이상 1미만의 수를 무작위로 생성한다. 따라서 숫자야구 게임에는 1에서 9까지 숫자가 필요하므로 아래처럼 코드가 필요하다. 숫자를 자연수로 만들어야 하니 내림함수를 추가로 덮겠다.</p>
<pre><code>Math.floor(Math.random() * 9 + 1 ) // x = {1,2,3,4,5,6,7,8,9}</code></pre><p>Math.random() * 10; 이라고 가볍게 생각할 수 있지만 0.***이 나올수 있기에 0이 안나오게 하기 위해서 Math.random() * * 9  + 1을 해주는 것이다. </p>
<p>참고로 올림은 Math.ceil(), 반올림은 Math.round() 이다. </p>
<p>하지만 알다싶이 Math.random()은 암호학적으로 완전한 무작위가 아니고 알고리즘으로 해석?도 할수 있다고 해서 보완이슈가 있다. 이를 위해서 window.crypto.getRandomValues() 함수가 있다.</p>
<p>숫자야구 게임은 중복된 숫자는 허용하지 않기 때문에 중복되지 않게 뽑아야한다. </p>
<p>우선 1에서 9까지의 숫자를 먼저 모아야하는데, 이때 배열또는 객체를 사용한다. 간단하게 고르는 방법은 단순한 값들의 나열이면 배열을 사용하고, 값에 이름이 붙는다면 객체를 사용하면 된다. 숫자야구의 숫자들은 단순한 숫자의 나열이므로 배열로 충분하겠다. </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/4fe67684-7d58-4f65-b53f-bc3e8743f6da/image.png" alt=""></p>
<p>프로그래밍 세계에서 보통 숫자는 0부터 시작한다.</p>
<p>numbers라는 빈 배열을 만들고 그 안에 1부터 9까지 숫자를 넣었다. 숫자를 배열에 담아 놓았으니 여기서 네 개를 뽑아보자. </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/5594e2f3-2730-4184-94ee-06235822f198/image.png" alt=""></p>
<p>여기서 유의하게 봐야할 점은 Math.random() * 9 이다. </p>
<p>배열은 0부터 시작하기 때문에 +1을 해줄 필요가 없다. </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/b2bee6f0-a611-4506-a2be-6d21e3666b12/image.png" alt=""></p>
<p>push 할 때 numbers의 배열은 하나씩 사라지게 되는데 실제 숫자를 뽑을 때 현기준으로는 배열의 위치에 undefined가 나타날수 있다. </p>
<p>따라서 아래처럼 코드를 수정한다. </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/cafeda7e-6986-4238-a811-9d52aa204964/image.png" alt=""></p>
<h4 id="3-입력값-검증하기">3. 입력값 검증하기</h4>
<p>보통 입력창이 있으면 폼 태그로 감싸서 submit 이벤트를 사용하는 것이 좋다. 그래야 버튼을 클릭하지 않고도 enter를 눌러값을 제출할 수 있다.</p>
<p>근데 여기서 event.preventDefault()를 사용했는데 이는 폼 태그의 기본 동작을 취소하는 코드이다. 폼 태그는 submit 이벤트가 발생할 때 기본으로 브라우저를 새로고침하는게 있어서 초기화를 방지하기 위해 이 코드를 사용한다. </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/a5e2826e-ef2e-4a73-8e7d-b6441294d4cc/image.png" alt=""></p>
<p>배열 안에 요소가 존재하는지 알려주는 tries.includes, Set의 요소개수를 세면 중복된 값이 있는지 아닌지 검사할 수 있는 new Set(input)을 사용했다. 개수는 length가 아니라 size로 사용한다. </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/ff1b6c59-1c7c-4482-b2ec-1e52d1b7192d/image.png" alt="">
<img src="https://velog.velcdn.com/images/unfamiliar_dev/post/8c400e6b-ae11-49aa-9854-172f1ea5a3c8/image.png" alt=""></p>
<p>(chat에게 물어봄) </p>
<h4 id="4-입력값과-정답-비교하기">4. 입력값과 정답 비교하기</h4>
<p>홈런인짖 검사하는 부분과 시도 횟수가 10번을 넘겼는지 검사하는 부분을 추가 한다. </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/037f9451-3616-4293-ad90-f30d6b544d90/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Let's Get IT 자바스크립트 프로그래밍 (3) 계산기]]></title>
            <link>https://velog.io/@unfamiliar_dev/Lets-Get-IT-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-3-%EA%B3%84%EC%82%B0%EA%B8%B0</link>
            <guid>https://velog.io/@unfamiliar_dev/Lets-Get-IT-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-3-%EA%B3%84%EC%82%B0%EA%B8%B0</guid>
            <pubDate>Thu, 22 Aug 2024 02:59:19 GMT</pubDate>
            <description><![CDATA[<p>출처 : Let&#39;s Get IT 자바스크립트 프로그래밍</p>
<p>최대한 프로그래밍을 이해하는데 집중을 하도록 하자,,, </p>
<h4 id="1-순서도-그리기">1. 순서도 그리기</h4>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/60f2f80d-d77e-4ea5-ae69-f9ca7ccf0368/image.png" alt=""></p>
<h4 id="2-계산기-화면-만들고-이벤트-달기">2. 계산기 화면 만들고 이벤트 달기</h4>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/963fe70d-6d40-445d-89fe-bf0085c80c57/image.png" alt="">
<img src="https://velog.velcdn.com/images/unfamiliar_dev/post/dcf485b8-f237-457c-aaaf-9c902d3c9e4d/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/1ec19bba-1f50-4596-9f7f-e0e92ca5f048/image.png" alt=""></p>
<p>보통 디자인할 때 border까지 포함해서 계산한다. margin은 간격. 결과와 연산자는 사용자가 입력을 하면 안되기에 readonly 처리한다. </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/379bd7e2-958a-4e12-bc49-2a39111cbbdf/image.png" alt=""></p>
<p>각 버튼에 이벤트 리스너를 달아야 한다. 맥 기준 option+shift+아래키를 누르면 위줄의 코드가 복사가 된다. </p>
<p>js 코드를 작성할 때 순서를 기억하면서(보면서) 진행하자. </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/33843342-3d6a-4129-93a2-97538f2f69bb/image.png" alt=""></p>
<p>이 코드를 분석해보면 0버튼을 눌렀을 때 operator가 비어 있지 않다면(사용자가 이미 연산자를 선택한경우) numTwo에 0을 저장하는 것이다. 비어있다면 numOne에 0을 저장하고, 결과값으로 0을 화면에 노출 시키는 것이다. += 연산자는 &quot;덧붙여서 할당&quot;하는 연산자이다. 이를 #num-9까지 복붙한다.. </p>
<h4 id="3-고차함수로-중복-제거하기">3. 고차함수로 중복 제거하기</h4>
<p> 함수에서 중복을 제거할 때 달라지는 부분을 매개변수를 만들어보자. </p>
<p> <img src="https://velog.velcdn.com/images/unfamiliar_dev/post/5e1014c4-4176-475b-945a-3f55941f44a2/image.png" alt=""></p>
<p>참고로 고차함수에서 {와 return은 생략이 가능하다. </p>
<pre><code>const func = (msg) =&gt; () =&gt; { 
    console.log(msg);
};</code></pre><p>onClickNumber(&#39;숫자&#39;) 부분을 함수의 return 값으로 치환해보면 된다. </p>
<p>하지만 버트을 클릭할 때 버튼 내부의 문자를 event.target.textContent로도 가져올 수 있다. 다음과 같이 코드가 변경되어도 중복제거가 가능하다. </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/6b96f256-4840-4ad3-8a5e-280e6507f02e/image.png" alt=""></p>
<p>참고로 같은 위치에서 삭제를 할 때는 마우스 휠을 누르고 위치를 잡고 삭제하면 된다. </p>
<p>고차함수를 사용해도 되지만, event.target.textContent를 알았다면 이게 센스라고,,, </p>
<h4 id="4-중첩-if문-줄이기">4. 중첩 if문 줄이기</h4>
<p>지금까지 코드에서는 두 번째 숫자(numTwo)를 클릭하면 첫 번째 숫자와 합쳐지는 버그가 나타난다. </p>
<p>띠리사 numTwo에 값을 저장하기 전에 화면을 비우는 작업이 필요하다. </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/57a5b534-b3b1-471e-bc67-db343b46e3c6/image.png" alt=""></p>
<p>numTwo를 입력하는 상황이 되면 먼저 화면을 비우고 값을 입력하게 된다. </p>
<p>이때 코드를 보면 if 문 내부에 다시 is 문이 존재한다. 이런 상황을 if 문이 중첩됐다고 표현한다. if 문이 중첩될수도록 코드는 읽기가 점점 어려워줘서 아래와 같은 방법으로 중첩을 제거해보도록 하자.</p>
<blockquote>
<ol>
<li>if 문 다음에 나오는 공통된 절차를 각 분기점 내부에 넣는다.</li>
<li>분기점에서 짧은 절차부터 실행하게 if 문을 작성한다.</li>
<li>짧은 절차가 끝나면 return(함수 내부의 경우)이나 break(for 문 내부의 경우)로 중단한다. </li>
<li>else를 제거한다(이때 중첩 하나가 제거된다.)</li>
<li>다음 중첩된 분기점이 나오면 1~4의 과정을 제거한다. </li>
</ol>
</blockquote>
<p>코드에 적용을 해보면</p>
<p>$result.value += event.target.textContent; 이 부분이 if 문과 상관없이 공통적으로 실행되는 부분이기에 이 부분을 각 분기점 안에 넣는다. </p>
<p>else 뒤 부분이 더 짧기에 operator에 올리면 !operator로 변경하면 위아래 코드를 변경하는 것처럼 된다. </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/a2415c93-ad2a-4c71-9233-fa4578f2b0ee/image.png" alt=""></p>
<p>!operator일 때의 절차가 마무리되면 return으로 함수를 종료시키고 return 아랫부분은 무조건 operator일 때만 실행되므로 else 문으로 감쌀 필요가 없다.</p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/aee47fd6-a6c1-441e-884a-caf81f0fe863/image.png" alt=""></p>
<p>이게 코드정리라고 볼수 있다.</p>
<h4 id="5-결과-계산하기">5. 결과 계산하기</h4>
<p>이제 #calculate 태그에 이벤트 리스너를 달아 결과를 출력하자. 역시 순서도를 참고하자. </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/5d30b582-3f09-4d0b-b20d-7df3374a1bd7/image.png" alt=""></p>
<p>조건에 해당하는 변수가 operator로 계속 같으므로 swtich 문이 조금 더 깔끔해보이고 if문으로 바꾸면 아래와 같다. </p>
<pre><code>if (numTwo) {
  if (operator === &#39;+&#39;) {
    $result.value = parseInt(numOne) + parseInt(numTwo);
  } else if (operator === &#39;-&#39;) {
    $result.value = numOne - numTwo;
  } else if (operator === &#39;*&#39;) {
    $result.value = numOne * numTwo;
  } else if (operator === &#39;/&#39;) {
    $result.value = numOne / numTwo;
  }
} else {
  alert(&#39;숫자를 먼저 입력하세요.&#39;);
}
</code></pre><p>numOne과 numTwo는 문자열이다. + 연산자를 사용할 때는 문자열은 숫자형으로 변환하기 위해서는 반드시 parseInt로 사용한다. -, *, / 는 자동으로 문자열을 숫자로 바꾼 후에 계산된다. </p>
<p>다만 문자열을 자바스크립트에서는 코드처럼 실행하는 방법이 아래처럼 되는데 크롬에서도 막혀있고 금기어라고 넘어가자. </p>
<pre><code>eval(&#39;1 + 2&#39;); // 3</code></pre><h4 id="6-계산기-초기화하기">6. 계산기 초기화하기</h4>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/459e1ab7-b81a-4136-90de-5c93b02e0c04/image.png" alt=""></p>
<p>초기상태를 제일 위에 작성하고 그 순서대로 진행하면 빠짐없이 초기화할 수 있다. 참고로 alt 위아래 키를 누르면 코드 순서를 단축키로 바꿀수 있다. </p>
<hr>
<h4 id="요약">요약</h4>
<ol>
<li>고차 함수 사용하기 
함수를 호출할 때마다 반환 함수를 생성하는 함수를 고차 함수(high order function)라고 한다. <pre><code>const func = () =&gt; { 
 return () =&gt; {
     console.log(&#39;hello&#39;); 
 }:
};</code></pre></li>
</ol>
<p>반환된 함수는 다른 변수에 저장할 수 있고, 그 변수에 저장된 함수를 다시 호출할 수 있다. </p>
<pre><code>const innerFunc = func();
innerFunc(); // hello </code></pre><p>반환하는 값을 바꾸고 싶을 때는 매개변수를 사용한다. </p>
<pre><code>const func = (msg) =&gt; {
    return () =&gt; { 
        console.log(msg);
    };
};</code></pre><p>화살표 함수 문법에 따라 함수의 본문에서 바로 반환되는 값이 있으면 {와 return을 생략할 수 있다. </p>
<pre><code>const func = (msg) =&gt; () {
    console.log;
};</code></pre><ol start="2">
<li>if 문 중첩 제거하기</li>
</ol>
<hr>
<p>여전히 프로그래밍적 사고를 하는게 쉽지는 않지만 최대한 이해하고 반복하고,,,그냥 합시다! </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/35b76d4f-b447-4c9d-98ad-c0b50e95b646/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Let's Get IT 자바스크립트 프로그래밍 (2) 끝말잇기 게임
]]></title>
            <link>https://velog.io/@unfamiliar_dev/Lets-Get-IT-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-2-%EB%81%9D%EB%A7%90%EC%9E%87%EA%B8%B0-%EA%B2%8C%EC%9E%84</link>
            <guid>https://velog.io/@unfamiliar_dev/Lets-Get-IT-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-2-%EB%81%9D%EB%A7%90%EC%9E%87%EA%B8%B0-%EA%B2%8C%EC%9E%84</guid>
            <pubDate>Wed, 21 Aug 2024 02:57:45 GMT</pubDate>
            <description><![CDATA[<h3 id="순서도-그리기">순서도 그리기</h3>
<p>제품을 만들기 위해서는 프로그래밍적인 사고력이 필수이다. 지금이야 입문하는 단계로 함수가 어떻게 적용되는지 파악하기에도 어렵겠지만 이 함수가 왜 이렇게 쓰이는지 사고력을 키우자.</p>
<p>프로그래밍에서는 절차가 매우 중요한데, 아래 대전제를 기억하자.</p>
<ol>
<li>프로그램 절차의 개수는 정해져 있어야 한다.</li>
<li>각 절차는 항상 같은 내용이어야 한다.</li>
<li>모든 가능성을 고려해야 한다.</li>
<li>예시는 절차를 검증하는 데 사용한다.</li>
</ol>
<p>어떤 프로젝트를 구상하는데 있어 순서도를 그리는게 중요하다. </p>
<p>파워포인트도 좋지만 얼마전에 생활코딩님 유튜브 커뮤니티에 올라온 사이트가 있어 나는 해당 사이트에서 그려보았다. vscode에도 설치가 된다는데 왜 안될까,,,</p>
<p>+++ 설치가 아니라 확장자 명을 .excalidraw로 넣으면 된다 ㅇㅇ!</p>
<p><a href="https://excalidraw.com/">참고 사이트</a></p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/18363cb7-9349-47d2-a4b0-4121abc138d1/image.png" alt=""></p>
<p>위 끝말잇기 순서도를 예시를 들면 일반적인 절차는 타원형으로, 판단으로 요구하는 절차는 마름모로 표시한다. 판단 결과가 &#39;예&#39;이면 절차를 거슬러 올라가는데 이는 &#39;반복&#39;을 의미한다. </p>
<p>순서도가 어디가 시작이고 끝인지도 두 겹의  원 기호로 표시한다. 참고로 두 겹의 사각형은 특수한 상황(대기, 이벤트 발생)을 의미한다. </p>
<hr>
<h3 id="끝말잇기-게임-만들기">끝말잇기 게임 만들기</h3>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/533569ca-e85d-4139-8a44-96ec25e9973e/image.png" alt=""></p>
<p>먼저 html 간단히 만든다. 이때 script 태그는 다른 태그들보다 아래 있어야 한다. html은 위에서부터 아래로 실행되므로 환면을 그리는 태그들이 먼저 실행돼서 화면이 그려져야 script 태그에서 자바스크립트로 화면을 조작할 수 있다. </p>
<p>프로그래밍할 때는 항상 순서도를 옆에 띄어 놓고 보면서 하자. </p>
<h4 id="1-몇명이-참가할지-선택한다">1. 몇명이 참가할지 선택한다.</h4>
<p>크게 두가지로 표현할 수 있다. 입력창(input 태그) 또는 prompt 함수이다. prompt함수를 이용해보자. </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/76d0c82d-9150-45df-aa1c-48de7f33b767/image.png" alt=""></p>
<p>전달한 값을 저장하기 위해 변수를 사용한다. </p>
<pre><code>const number = prompt(&#39;몇 명이 참가하나요?&#39;);</code></pre><p>값이 변수에 제대로 저장했는지 확인하기 위해 console.log를 쓰고 prompt함수에 입력되는 값들은 전부 문자열이기 때문에 아래처럼 숫자로 변환해준다. realNumber 변수를 사용하지 않고 바로 숫자로 변환해주겠다. </p>
<pre><code>const realNumber = Number(number);
console.log(typeof realNumber);

const number = Number(prompt(&#39;몇 명이 참가하나요?&#39;));</code></pre><h4 id="2-첫-번째-사람이-어떤-단어를-말한다">2. 첫 번째 사람이 어떤 단어를 말한다.</h4>
<blockquote>
<p>주로 프로그램이 대기하는 경우에 순서도를 끊는데, 이렇게 대기하는 경우는 보통 이벤트 발생을 기다리거나 타이머의 콜백함수가 실행되길 기다리는 상황이다. 그리고 이벤트 리스너나 타이머는 대표적인 자바스크립트 비동기 코드이다. 즉 비동기 코드가 실행될 때를 기점으로 순서도를 끊는다고 생각하자</p>
</blockquote>
<p>자바스크립트에서 HTML 태그를 가져오는 것을 선택한다고 표현한다. 아래 함수를 사용하게 된다. </p>
<pre><code>document.querySelector(&#39;선택자&#39;)</code></pre><p>여러 개의 태그를 선택하고 싶다면 document.querySelectorAll(&#39;선택자&#39;)를 사용한다.</p>
<p>여러 개의 태그 중에서 특정한 태그만 사용하고 싶다면 태그에 id속성을 달아둔다. 해당 id를 가진 태그는 유일하므로 태그에 id를 달아두면 선택자로 선택하기 쉬워진다.</p>
<pre><code>document.querySelector(&#39;#아이디&#39;);</code></pre><p>두 번째와 세 번째 태그를 동시에 선택하고 싶다면 id는 하나의 태그에만 쓸 수 있으므로 class를 사용한다. </p>
<pre><code>document.querySelectorAll(&#39;.클래스&#39;);</code></pre><p>eg</p>
<pre><code>&lt;script&gt; 
    const $input = document.querySelector(&#39;input&#39;);
    console.log($input);
&lt;/script&gt;</code></pre><p>$ input 변수는 선택한 input 태그를 저장하기 위해서이다. 여러 태그를 선택하는거면 $$ 하자. (제로초님의 방법인데 유용한듯하다)</p>
<hr>
<p>사용자가 태그와 상호 작용을 할 때 <strong>이벤트</strong>라는 것이 발생한다. 자바스크립트는 이벤트를 자동으로 감지할 수 없어 <strong>이벤트리스너</strong> 라는 것을 직접 추가해야 한다.</p>
<pre><code>태그.addEventListener(&#39;이벤트이름&#39;, 리스너함수);</code></pre><p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/f5b98f00-8309-43bc-b7bd-2d9e73389ede/image.png" alt=""></p>
<p>event.target.value로 input 태그에 입력한 값을 알아낼 수 있다. 참고로 event는 매개변수이므로 다른 이므름으로 지어도 된다. 보통 e로 하는듯?</p>
<h4 id="3-첫-단어를-입력한-사람인지-판단하기">3. 첫 단어를 입력한 사람인지 판단하기</h4>
<p>사용자가 이벤트를 발생시키지 않으면 다음 절차로 넘어가지 않을수 있기에 순서도를 수정해준다.</p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/27c695c7-8258-4252-8ecc-f40ae9bf05af/image.png" alt=""></p>
<p>근데 여기서 첫 단어를 입력한 참가자인지를 판단해야하기 때문에 순서도를 아래 처럼 다시 수정한다.  </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/8cac660f-6d39-41c9-be4e-dfe1e72c6abf/image.png" alt=""></p>
<p>입력 버튼을 클릭한 사람이 첫 단어를 입력한 참가자인지 코드로 판단할려면, 무언가를 기억하고 있어야 하기에 저장할 만한 변수가 필요하다. 즉 단어를 기억하는 변수를 만든다.</p>
<p>코드에서 제시어를 #word id로 설정하였다. 제시어가 들어갈 자리인데제시어가 없으므로 빈 값으로 있다. 따라서 판단을 첫 번째 참가자인가?에서 &#39;제시어가 비어있는가&#39;로 변경하자.</p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/af106a03-006b-434f-81de-a3ce475bbddf/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/31b1a48b-9149-4fcf-b404-a60ecf1a760e/image.png" alt=""></p>
<p>제시어는 변할수 있기 때문에 let을 사용했다. </p>
<p>이제 &#39;입력된 단어가 제시어가 된다&#39;를 코딩하려면 참가자가 입력한 단어를 저장해야한다. 따라서 변수가 또 필요하다. 이 변수는 newWord로 선언하겠다. </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/a7b69898-8239-452b-9835-f83812e951ef/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/1de3fd94-f3b3-4f90-9192-dac1e8d96dd8/image.png" alt=""></p>
<pre><code>태그.textContent // 태그 내부의 문자열을 가져옴
태그.textContent = 값 // 태그 내부의 문자열을 해당 값으로 설정함</code></pre><p>word = newWord; 로 제시했으면 화면에 표시될수 있게 textContent를 이용한다. 
$input.value = &#39;&#39;; 은 제시어를 입력했을 때 사용자가 지우지 않고 바로 다음 입력할 수 있게 빈 값으로 만들어준다.</p>
<h4 id="4-올바른-단어인지-판단하기">4. 올바른 단어인지 판단하기</h4>
<p>끝말잇기에서 단어가 올바른지 판단하려면 제시어의 끝 글자와 현재 단어의 첫 글자를 비교하면 된다. </p>
<p>문자열의 길이와 상관없이 항상 마지막 문자를 가져오는 방법은 글자 수에서 1을 빼면 마지막 자릿수가 나온다. 자릿수는 0부터 시작하니.</p>
<p>다음 사람에게 순서를 넘기기위해 순서도를 다시 수정한다. number 변수에 참가자가 몇 명인지 저장하였고, #order 태그 안에는 몇 번째 참가자인지 순서가 나와 있다. </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/0b20afa9-7e95-4a45-b81b-9717738f5470/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/fc86e7a8-d6a6-4964-8d3a-cb9d75bdf433/image.png" alt=""></p>
<p>#order 태그를 선택해 $order 변수에 저장했다. #order 태그 내부의 값을 꺼내 숫자로 변환하고 이름 order 변수에 저장했다.</p>
<p>quiz) 세 글자 이상의 단어를 저장하고 있는 word라는 변수가 있을 때 뒤에서 세 번째 글자를 가져오는 코드를 작성</p>
<pre><code>word[ word.length - 3 ]</code></pre><h4 id="5-틀렸을-때-오류-표시하기">5. 틀렸을 때 오류 표시하기</h4>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/1f9bd444-eeb5-4ddf-9d78-d8cf2ba8b649/image.png" alt=""></p>
<p>올바르지 않은 단어를 입력한 경우만 처리하고, 이전 사람이 input 태그에 입력한 단어가 그대로 남아 있어서 지워야하니 아래 코드를 추가한다. 추가로 focus를 이용하여 입력 태그 내부에 커서를 위치하게 해서 다음 사용자가 입력하기 편하게 도와주게 한다.</p>
<pre><code>입력태그.value // 입력창의 값을 가져옴
입력태그.value = 값 // 입력창에 값을 넣음 

입력태그.focus() // 입력창을 하이라이트</code></pre><p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/1375a9a4-187f-462f-a5c9-64b24542f77d/image.png" alt=""></p>
<p>최종 코드 이다. </p>
<hr>
<h4 id="순서도-최적화-하기">순서도 최적화 하기</h4>
<p>마지막 순서도에서 &#39;입력창을 비우고 커서를 둔다&#39; 절차가 중복되고 코드에서는 &#39;입력한 단어가 제시어가 된다&#39; 와 &#39;다음 사람에게 순서를 넘긴다&#39; 절차에 해당되는 코드가 중복된다. </p>
<p>중복된 코드는 &#39;제시어가 비어있거나 입력한 단어가 올바른가?&#39;리는 절차로 줄일 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/94bcf385-1b14-4e04-8f2d-8aad2bbcb44d/image.png" alt=""></p>
<p>코드를 수정을 하면,, </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/d64d7d8d-1fb7-4c59-95c0-1371ba6960c6/image.png" alt=""></p>
<hr>
<h4 id="요약">요약</h4>
<ol>
<li>순서도를 그린다.
순서도를 만들 때 사용자의 이벤트(버튼 클릭, 입력창 글자 입력 등)가 필요한 곳에서 순서도를 끊어야 함을 잊지말자.</li>
<li>대화 상자 띄우기 </li>
</ol>
<ul>
<li>prompt - 대화 상자에 사용자가 입력한 메시지가 문자열 형태로 전달되고, 입력하지 않고 취소를 누르면 null 값이 전달</li>
<li>alert - 단순한 알림창으로, 호출하면 확인을 누르기 전까지 다음 스크립트 실행이 중단된다. 디버깅 용도로 사용할 때는 console.log를 사용</li>
<li>confirm - 사용자에게 확인을 받을 때 사용. 사용자가 확인을 누르면 true가 전달되고, 취소를 누르면 false가 전달</li>
</ul>
<ol start="3">
<li>HTML 태그 선택하기<pre><code>document.querySelector(&#39;선택자&#39;) 
document.querySelectorAll(&#39;선택자&#39;)
</code></pre></li>
</ol>
<p>document.querySelector(&#39;#아이디&#39;) 
document.querySelectorAll(&#39;.클래스&#39;)</p>
<pre><code>
4. 태그에 이벤트 달기

태그를 선택한 후에 addEventListener 메서드를 사용해 이벤트를 연결. </code></pre><p>테그.addEventListener(&#39;이벤트 이름&#39;, 리스너함수);</p>
<pre><code>
리스너 함수의 매개변수로 event 객체를 제공해서 이벤트와 관련된 정보를 얻을 수 있다. input 태그에 입력된 값을 가져오려면 event.target.value를 넣으면 된다. event.target은 이벤트가 발생한 대상 태그를 가르킨다. </code></pre><p>const 리스너함수 = (event) =&gt; { 
    console.log(event.target.value);
};</p>
<pre><code>입력창에 입력된 값은 value 속성으로 가져온다. value에 값을 대입하면 대입한 값으로 변경된다. 

입력태그(input, select, textarea 등)가 아닌 일반 태그들의 내부 값을 가져올 때는 textContent 속성을 사용한다. 

5. 순서도 최적화하기


책을보고 하나씩 따라하는데도 이해와 생각보다 순서도를 구상하게 정말인지 어렵다. 지속할수 있을까? 의심이 들지만 그냥 꾸준히 계속 해야할 뿐이다. 그래도 재밌다... </code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[<정보처리기사 실기> Daily 문제 (3) for 문]]></title>
            <link>https://velog.io/@unfamiliar_dev/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC-%EC%8B%A4%EA%B8%B0-Daily-%EB%AC%B8%EC%A0%9C-3-for-%EB%AC%B8</link>
            <guid>https://velog.io/@unfamiliar_dev/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC-%EC%8B%A4%EA%B8%B0-Daily-%EB%AC%B8%EC%A0%9C-3-for-%EB%AC%B8</guid>
            <pubDate>Tue, 20 Aug 2024 11:56:52 GMT</pubDate>
            <description><![CDATA[<p>정처기 공부 조금 하고 러닝하러 가야지,,, 이번주 태풍온다고 하는데 오늘까지 뛸수 있겠군,,,</p>
<hr>
<p><a href="https://cafe.naver.com/soojebi/214014">출처 : 수제비 </a></p>
<ol>
<li><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/47ca5f48-3581-4e91-aff8-316ffadbdd38/image.png" alt=""></li>
</ol>
<p>당연히 sum 인줄알고 10적었다가, i 였네,,, 이렇게 나올수 이겠구나..</p>
<p>i = 1일 때, sum = sum + 1 → sum = 1
i = 2일 때, sum = sum + 2 → sum = 3
i = 3일 때, sum = sum + 3 → sum = 6
i = 4일 때, sum = sum + 4 → sum = 10</p>
<p>루프가 종료된 후, i는 5가 되고, 조건 i &lt; 5가 성립하지 않으므로 루프가 종료</p>
<p>따라서 printf(&quot;%d&quot;, i);는 최종적으로 5를 출력</p>
<ol start="2">
<li><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/132a4485-3547-43ce-a61e-58c4f07a8757/image.png" alt=""></li>
</ol>
<p>i = 1일 때, 루프는 실행되지만 아무 동작도 하지 않음.
i = 2일 때, 루프는 다시 실행되지만 역시 아무 동작도 하지 않음.
i = 3이 되면 i &lt; 3 조건이 더 이상 충족되지 않으므로 루프가 종료.
루프가 종료된 후, i는 3</p>
<p>3.
<img src="https://velog.velcdn.com/images/unfamiliar_dev/post/76f9c819-cf5e-4997-9024-b53426175b21/image.png" alt=""></p>
<p>for(i=1; i&lt;3; i++);: i를 1로 초기화한 후, i가 3보다 작을 때까지 반복
루프 본문이 세미콜론(;)으로 끝나므로, 루프 내에서 아무런 동작도 하지 않음. 이 루프는 i를 단순히 증가시키는 역할만 수행.</p>
<p>i = 1: 루프 실행, 세미콜론 때문에 아무 동작 없이 i가 증가하여 i = 2
i = 2: 루프 실행, 마찬가지로 i가 증가하여 i = 3
i = 3: i &lt; 3 조건이 성립하지 않으므로 루프가 종료</p>
<p>루프가 종료된 후, i는 3</p>
<p>차이점 분석</p>
<p>세미콜론 없는 경우 (for(i=1; i&lt;3; i++){ })</p>
<p>이 코드에서 for 루프는 i가 1부터 2까지 증가하며 반복</p>
<p>루프 본문에 { }가 있어, 반복 시 아무 동작도 하지 않음</p>
<p>루프가 끝나고 나면 i는 3</p>
<p>마지막으로 printf(&quot;%d&quot;, i);가 호출되어 i의 값을 출력</p>
<p>세미콜론 있는 경우 (for(i=1; i&lt;3; i++);)</p>
<p>이 코드에서 for 루프 뒤에 세미콜론(;)이 붙어 있음
이 세미콜론은 루프 본문이 없는 것을 의미하며, for 루프 자체가 단독으로 동작.</p>
<p>for(i=1; i&lt;3; i++);은 사실상 for 루프가 i가 3이 될 때까지 아무런 동작 없이 반복을 수행.
루프가 종료된 후, i는 3이 되며, 그 후에 printf(&quot;%d&quot;, i);가 호출되어 3을 출력.</p>
<p>4.<img src="https://velog.velcdn.com/images/unfamiliar_dev/post/bf6d800e-8789-4538-aa22-11a722edc5f0/image.png" alt=""></p>
<p>for( ; ; ): 조건과 증감식을 모두 생략한 for 루프 이러한 루프는 조건 없이 무한히 반복</p>
<p>루프 실행 과정</p>
<p>첫 번째 반복:
i = 0이 출력되고, i는 1로 증가
조건 i == 3이 성립하지 않으므로 루프는 계속</p>
<p>두 번째 반복:
i = 1이 출력되고, i는 2로 증가
조건 i == 3이 성립하지 않으므로 루프는 계속</p>
<p>세 번째 반복:
i = 2가 출력되고, i는 3으로 증가
이제 if(i == 3) 조건이 참이 되어 break 문이 실행되고 루프가 종료</p>
<p>루프가 종료되기 전에 출력된 i의 값들은 0, 1, 2, 따라서 이 코드의 출력은 012</p>
<ol start="5">
<li><p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/a66a779e-b6ec-4b96-a705-a6d87b65b098/image.png" alt=""></p>
</li>
</ol>
<p>코드 분석</p>
<p>변수 선언 및 초기화:</p>
<p>char x = &#39;A&#39; - 1;: char형 변수 x를 선언하고 초기화
&#39;A&#39;는 아스키 코드 값으로 65에 해당합니다. 따라서 &#39;A&#39; - 1은 64
이 시점에서 x는 64로 초기화</p>
<p>for 루프:</p>
<p>for( ; x ; x /= 2): 이 루프는 조건식 없이 x가 0이 아닌 동안 계속 반복
매 반복마다 x의 값을 2로 나누고 그 결과를 x에 다시 저장
루프 내에서는 printf(&quot;%d&quot;, x);로 현재 x의 값을 정수형으로 출력</p>
<p>루프 실행 과정</p>
<p>첫 번째 반복:</p>
<p>x = 64일 때, printf(&quot;%d&quot;, x);는 64를 출력
이후 x /= 2가 실행되어 x는 32</p>
<p>두 번째 반복:</p>
<p>x = 32일 때, printf(&quot;%d&quot;, x);는 32를 출력
이후 x /= 2가 실행되어 x는 16</p>
<p>세 번째 반복:</p>
<p>x = 16일 때, printf(&quot;%d&quot;, x);는 16을 출력
이후 x /= 2가 실행되어 x는 8</p>
<p>네 번째 반복:</p>
<p>x = 8일 때, printf(&quot;%d&quot;, x);는 8을 출력
이후 x /= 2가 실행되어 x는 4</p>
<p>다섯 번째 반복:</p>
<p>x = 4일 때, printf(&quot;%d&quot;, x);는 4를 출력
이후 x /= 2가 실행되어 x는 2</p>
<p>여섯 번째 반복:</p>
<p>x = 2일 때, printf(&quot;%d&quot;, x);는 2를 출력합니다.
이후 x /= 2가 실행되어 x는 1이 됩니다.</p>
<p>일곱 번째 반복:</p>
<p>x = 1일 때, printf(&quot;%d&quot;, x);는 1을 출력
이후 x /= 2가 실행되어 x는 0</p>
<p>종료:</p>
<p>x = 0이 되면, x가 0이므로 조건식에서 거짓이 되어 루프가 종료</p>
<p>출력 결과
따라서 이 코드의 출력은 <strong>6432168421</strong></p>
<p>6.</p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/f6565a71-9893-4cae-90d6-c035a365168a/image.png" alt=""></p>
<p>외부루프 for(i=1; i&lt;3; i++) </p>
<p>첫번째 외부루프 (i=1) </p>
<p>i 1~4까지 출력되고 i=5가 되었을 때 내부루프 성립이 맞지 않으므로 내부루프 종료하고 외부루프로 가게 된다. i=5이기 때문에 외부루프 조건에 맞지 않기에 바로 i=5 출력</p>
<p>전체 출력 값 : 12345</p>
<hr>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/7285132c-01c2-447b-b14e-8a7731a3af1f/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/d843b839-49a9-4573-9ad4-d895ffff4a12/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Let's Get IT 자바스크립트 프로그래밍 (1) 기본문법]]></title>
            <link>https://velog.io/@unfamiliar_dev/Lets-Get-IT-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D</link>
            <guid>https://velog.io/@unfamiliar_dev/Lets-Get-IT-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D</guid>
            <pubDate>Tue, 20 Aug 2024 02:22:40 GMT</pubDate>
            <description><![CDATA[<p>출처 : Let&#39;s Get IT 자바스크립트 프로그래밍 (도서) </p>
<p>제로초님 유튜브를 종종보긴 하는데 마침 자바스크립트 언어가 여전히 친숙하지 않아 도서관에서 책이 있어 대여를 하였다. </p>
<p>그냥 하자. 그러다 보면 할 수 있다고 믿어 의심치 않다! JS는 어느정도(..?) 1회독을 했기에 중요한 부분과 새롭게 안 사실들 그리고 프로그래밍을 기록하도록 하자.</p>
<p>24.08.20 ~ </p>
<hr>
<h3 id="기본-문법">기본 문법</h3>
<h4 id="문자열-안에서-따옴표-사용하기">문자열 안에서 따옴표 사용하기</h4>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/9b6385a0-3a03-4e6a-8479-26707ef81a8d/image.png" alt=""></p>
<p>(백슬래시)가 붙은 따옴표는 보통의 문자로 해석된다. 이렇게 문자가 다르게 해석되게 하는 행위를 이스케이핑(escaping)이라고 하며, 따옴표를 이스케이핑한다고 표현한다. </p>
<h4 id="문자열-여러-줄로-나타내기">문자열 여러 줄로 나타내기</h4>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/e3135924-ee8d-4b3d-8c61-1d7cd042e2e6/image.png" alt=""></p>
<p>\n 문자를 사용해도 되지만 백틱(`) 문자열이 편하다. </p>
<h4 id="문자열을-숫자로-바꾸기">문자열을 숫자로 바꾸기</h4>
<p>parseInt로 문자열을 숫자로 바꿀 수 있다.
<img src="https://velog.velcdn.com/images/unfamiliar_dev/post/d26fabd8-d432-48dd-9f39-30eaf7174645/image.png" alt=""></p>
<p>parseInt는 문자열을 정수로만 바꾼다. 정수가 아닌 값을 입력하면 정수 부분만 추출해 표시한다. parseFlot을 사용하면 된다.</p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/4e9386ea-0979-4c8a-8f4e-4bb987a365ef/image.png" alt=""></p>
<p>prompt()를 사용하면 직접 값을 입력할 수 있다. 값을 입력 후 에는 prompt()자리가 입력한 값으로 대체 된다.</p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/9c5c682b-a169-4852-922b-882aa84e8345/image.png" alt="">
<img src="https://velog.velcdn.com/images/unfamiliar_dev/post/c34b510b-b449-4b63-98a7-385aa9d8e860/image.png" alt=""></p>
<p>Not a Number의 NaN은 자바스크립트에서 숫자라는 점을 기억하자.</p>
<h4 id="무한-값-알아보기">무한 값 알아보기</h4>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/de730ca3-44cd-47ab-9e26-1e334f99d057/image.png" alt=""></p>
<p>무한 값끼리 계산할 때는 NaN이 나온느건, 무한에서 무한을 빼는 것은 성립하지 않는다는 뜻. </p>
<p>Infinity 값은 자주 쓰지는 않지만 무한이라는 개념을 프로그램에서 사용할 때 유용하다.</p>
<h4 id="문자와-숫자-더하기">문자와 숫자 더하기</h4>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/388b926a-355a-4878-86bc-bbd48032450b/image.png" alt=""></p>
<p>문자열과 다른 자료형을 더하면 다른 자료형이 문자열로 바뀐 후 문자열과 더해진다. 이처럼 값의 자료형이 바뀌는 현상 또는 바꾸는 행위를 형 변환(type casting)이라고 한다.</p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/e5403c20-902a-4162-817c-60c66c716126/image.png" alt=""></p>
<ul>
<li>연산자를 사용할 때는 다른 자료형이 먼저 숫자로 형 변환된 후 빼기를 하게 된다. 문자열을 숫자로 바꾸면 NaN이 되고, 여기서 0을 빼도 그대로 NaN이므로 결괏값도 NaN이 나온다. </li>
</ul>
<h4 id="변수의-값-수정하기">변수의 값 수정하기</h4>
<p>let 변수명 = 식; </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/55db008c-c2af-487b-b287-90eabdee5048/image.png" alt=""></p>
<p>변수에 넣은 값을 비울 때도 있다. undefined을 대입하거나 null을 대입하는거다. </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/c312383b-4be7-4340-8ed8-30aff064ef92/image.png" alt=""></p>
<p>null을 대입해 값을 의도적으로 지웠다는 의미를 부여한다.</p>
<h4 id="변수-활용하기">변수 활용하기</h4>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/e2b4c7ca-2280-4911-bd62-e0f7d19410d9/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/7151a248-a419-4864-b59e-875774328260/image.png" alt=""></p>
<p>코드를 수정할 때는 string1 변수의 값만 수정하면 변수를 사용하는 부분이 한 번에 수정되어 모든 줄을 일일이 수정할 필요가 없다.</p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/c1151769-19e0-47b9-bebe-b6b3dbbf5e52/image.png" alt=""></p>
<p>temp는 변수의 값을 서로 바꿀수 있는 코드이다. </p>
<h4 id="상수-만들기">상수 만들기</h4>
<p>const는 상수(constant)의 줄임말이다. 우선 변수는 변하는 수이고, 상수는 변하지 않는 수이다. </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/a7d8504a-03fc-4263-8f68-ebc735ac27be/image.png" alt=""></p>
<p>선언한 상수도 다시 선언할 수 없으며, 한번 값을 대입하면 다른 값을 대입할 수 없다는 특성 때문에 상수 선언 시 초기화(선언과 동시에 값을 대입하는 것)하지 않으면 에러가 발생한다.</p>
<h4 id="while-문과-for-문-비교">while 문과 for 문 비교</h4>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/833f8305-817e-4f7b-9eae-13c26188af2d/image.png" alt=""></p>
<p>while 문에서 흩어져 있던 반복문 요소들을 for 문에는 모아서 표현한다고 이해하자.</p>
<p>eg 구구단을 출력하되, 결과에 짝수가 하나도 나오지 않게 continue 문을 사용해서 만들어보기 </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/9f964cbe-fe63-4f33-8c55-9ec82f3229ae/image.png" alt=""></p>
<h4 id="객체">객체</h4>
<p>객체(object)는 자료형의 일종으로 다양한 값을 모아 둔 또다른 값이며, 객체의 종류는 크게 배열(array), 함수(function), 배열이나 함수가 아닌 객체로 나눌수 있다. </p>
<p>참고로 const에 객체(배열, 함수, 객체 리터럴)가 대입되면 객체 내부의 속성이나 배열의 요소는 수정할 수 있다. </p>
<h4 id="return">return</h4>
<p>명시적으로 return문을 사용하지 않는다면 항상 함수 실행문 끝에 return undefined가 있다고 생각하면 된다. </p>
<p>아울러 함수의 실행을 중간에 멈추는 역할이 있다. </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/d8bfa8f2-cc1a-4e32-b515-ad3157ddb15e/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/6f872357-12bb-4d73-baeb-e2eea14b54df/image.png" alt=""></p>
<p>위 코드는 if문 자체가 false이기 때문에 return 문도 실행되지 않아 그 아래의 cosole.log()가 정상적으로 호출되는 것이다. </p>
<h4 id="객체-리터럴">객체 리터럴</h4>
<p>{}를 사용해 객체를 표현하는 것을 객체 리터럴이라고 한다. <img src="https://velog.velcdn.com/images/unfamiliar_dev/post/448d3c3f-4340-4b01-95f9-dadaa58c1bf4/image.png" alt=""></p>
<p>접근방법은 온점(.)을 통해 접근하거나, (변수.속성) 배열처럼 []를 사용해 (변수[속성])과 같이 접근할 수 있다. 다만 변수[&#39;속성&#39;] 해야 한다.</p>
<h4 id="참조와-복사">참조와 복사</h4>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/2526dd9e-e736-4aed-b05d-e96cda032fee/image.png" alt=""></p>
<p>객체를 사용할 때 반드시 알아야 하는 개념이 바로 참조(reference)이다. 변수 a와 b가 같은 객체를 참조하고 있다고 표현하며, 또는 a와 b 그리고 객체 간에 참조 관계가 있다고 표현한다. </p>
<p>하지만 객체가 아닌 (문자열, 숫자, 불 값, null, undefined)는 조금 다르다. </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/5657da03-5a80-490d-bef1-44da1b281fc5/image.png" alt=""></p>
<p>객체가 안닌 값을 변수에 저장한 경우에는 참조 관계가 생긱지 않는다. 이렇게 참조가 생기지 않는 상황을 복사(copy)라고 한다. 복사는 어떤 값을 다른 변수에 대입할 때 기존 값과 참조 관계가 끊기는 것을 의미한다. 객체가 아닌 값은 애초부터 참조 관계가 없으므로 그냥 복사만 된다.</p>
<p>즉 객체는 참조하고 나머지는 복사한다라고 이해하자? 아마도,,,</p>
<p>여기서 조금만 더 들어가보자. </p>
<p>객체인 값을 복사하는 방법도 있는데 객체의 속성으로 또 다른 객체가 들어 있을 수도 있다는 점이다. </p>
<pre><code>const array = [{j:&#39;k&#39;}, { i:&#39;m&#39;}];
array[0]; //{j: &#39;k&#39;}
array[1]; //{l: &#39;m&#39;} </code></pre><p>위 코드에서 reference     변수를 선언해서 array     대입을하면 reference가 array를 참조하게된다. </p>
<pre><code>const reference = array; // 참조
array === reference; //true
array[0] === reference[0]; //true</code></pre><p>따라서 객체를 복사할 때는 내부 객체까지 복사할 건지를 생각을 해봐야함.</p>
<p>여기서 나온 개념이 얕은 복사, 깊은 복사이다.</p>
<p>얕은 복사(shallow copy)는 외부 객체만 복사되고 내부 객체는 참조 관계를 유지하는 복사를 의미한다. </p>
<p>깊은 복사(deep copy)는 내부 객체까지 참조 관계가 끊기면서 복사되는 것을 의미한다. </p>
<p>얕은 복사를 할 때는 ...연산자를 이용한다. (스프레드 문법, spread syntax) </p>
<pre><code>const array = [{j:&#39;k&#39;}, { i:&#39;m&#39;}];
const shallow = [...array]; // 얕은 복사
console.log(array === shallow); false
console.log(array[0] === shallow[o]); true</code></pre><p>깊은 복사에는 JSON.parse()와 JSON.stringify()라는 메서드를 사용한다.서로의 참조를 모두 끊어내는 것이 깊은 복사이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[코딩만 따라 해도 웹페이지가 만들어지는 HTML+CSS+자바스크립트]]></title>
            <link>https://velog.io/@unfamiliar_dev/%EA%B7%B8%EB%83%A5%ED%95%98%EC%9E%90-HTML-8-vscode-github-%EC%97%B0%EB%8F%99</link>
            <guid>https://velog.io/@unfamiliar_dev/%EA%B7%B8%EB%83%A5%ED%95%98%EC%9E%90-HTML-8-vscode-github-%EC%97%B0%EB%8F%99</guid>
            <pubDate>Fri, 16 Aug 2024 08:44:38 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/b05558b5-b451-4078-9b8d-9b04f2ce3dbe/image.jpeg" alt="">
출처 : 코딩만 따라 해도 웹페이지가 만들어지는 HTML+CSS+자바스크립트 (도서) </p>
<p>반복해서 봐야지 익숙해지기에, 도서관에서 다른 도서를 대여하였다. </p>
<p>우선 새롭게 안 사실! </p>
<h3 id="프로젝트와-깃허브-리포지토리-연동">프로젝트와 깃허브 리포지토리 연동</h3>
<p>아래 명령어를 작업할 vscode프로젝트 폴더에 입력하면 된다. </p>
<pre><code>git config --global user.name 깃허브닉네임
global user.email 깃허브아이디(이메일)

git init
git add.
git commit -m &quot;first commit&quot;
git remote add origin 복사한 url
git push origin master</code></pre><p>아직 git, github 학습하지 않아서 이 도서 통해 미리 알게 되어 적재해두겠다...</p>
<p>해당 명령어 입력전에 github통해서 리포지토리를 먼저 생성해둔다. </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/5d0de3d6-4892-4406-ba11-a7d045bd9d63/image.png" alt=""></p>
<p>실제 작업 후 아래 코드를 터미널로 명령하면 github에 업로드된다. </p>
<pre><code>git add . 
git commit -m &quot;작업한 내용 문구&quot;
git push origin master</code></pre><hr>
<p>이 책을 보고 코드를 따라해보면서 메모해둔 것 들 모음이랄까?</p>
<h4 id="스타일-우선순위">스타일 우선순위</h4>
<p>선택자에도 우선순위가 있기 떄문에 어떤 선택자를 활용하여 스타일을 적용했는지에 따라 우선순위가 달라진다.</p>
<ol>
<li>아이디(ID) 선택자 # </li>
<li>클래스(Class) 선택자. </li>
<li>태그 선택자</li>
</ol>
<ul>
<li></li>
</ul>
<ol>
<li>HTML 태그 내부의 style 속성</li>
<li>HTML 코드 내부의 style 태그 </li>
<li>외부 CSS 파일 </li>
</ol>
<p>항상 위에서 아래로만 쏟아져 내리는 폭포와 같이 CSS 코드가 우선순위에 따라 적용되므로, 이를 캐스케이딩(cascading)이라 분른다. </p>
<h4 id="외부-css-불러와-아이콘-활용하기">외부 CSS 불러와 아이콘 활용하기</h4>
<p><a href="https://fontawesome.com/icons">FontAwesome</a></p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/17c4e68b-0e03-42ef-8a1c-80a41b5da905/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/f740b07c-3d52-4b7d-9eeb-ff12ea115474/image.png" alt=""></p>
<p>js코드 head 테그 안에 입력 후 body 태그 안에 적용하면 이모티콘이 불러와지게 된다. </p>
<h4 id="domcontentloaded">DOMContentLoaded</h4>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/c0dcf216-d659-4ba8-b8a1-d4401ab2a82b/image.png" alt="">
<img src="https://velog.velcdn.com/images/unfamiliar_dev/post/0f1ec426-fb11-4979-8ebd-48bf8f2ffa8b/image.png" alt=""></p>
<p>js 작성시 선캑자를 못 찾는 경우가 발생할 경우 크게 3가지 방법을 생각하자</p>
<ol>
<li>script 태그의 위치를 아래로 옮긴다</li>
<li>인라인 이벤트 모델만 사용한다.</li>
<li>DOMContentLoaded 이벤트를 사용한다. </li>
</ol>
<h4 id="setattribute">setAttribute</h4>
<p>요소의 속성 제어하할 때 setAttribute(속성, 새로운 속성값)을 활용할 수 있다.</p>
<p>eg</p>
<pre><code>document.addEventListener(&quot;DOMContentLoaded&quot;, 
    function(e){
        let input = document.querySelector(&quot;input&quot;)
        input.addEventListener(&quot;click&quot;, 
            function(e){
                console.log(e.target.setAttribute(&quot;type&quot;))
            }
        )
    }
)
</code></pre><p>클릭 이벤트에 대한 이벤트 핸들러로 setAttribute()를 활성화시키고 있다. 버튼을 클릭하면 input 태그의 타입을 &#39;text&#39;로 변경하게 된다.</p>
<h4 id="응용">응용</h4>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/4d2568a9-a890-4958-afa1-e32d5a666c5b/image.png" alt=""></p>
<p>첫번째 div태그는 초기에 화면에 표시될 내용을 정의. 3번째 줄에서는 화면에 표시될 글자를 표현하고 있으며, 추후 JS를 활용해 글자를 변경하기 위하여 span 태그로 이름을 감싸주었다. </p>
<p>7번째 줄부터는 두 번째 div태그로 display 스타일 속성이 none으로 정의되었다. </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/9db74138-9828-4caa-b68d-8eb81ab2e2f3/image.png" alt=""></p>
<p>JS코드를보면, (feat. chat)</p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/20561131-8aa9-4f05-95d5-18c1998da381/image.png" alt="">
<img src="https://velog.velcdn.com/images/unfamiliar_dev/post/71527588-c348-40a7-87dc-912c24243941/image.png" alt="">
<img src="https://velog.velcdn.com/images/unfamiliar_dev/post/ed368173-0105-46fb-a09d-9364e40f2551/image.png" alt="">
<img src="https://velog.velcdn.com/images/unfamiliar_dev/post/2b0e2520-8a49-4635-b068-8e46e5749bd1/image.png" alt="">
<img src="https://velog.velcdn.com/images/unfamiliar_dev/post/8510711f-9909-495f-aead-e6fc3c6ab71e/image.png" alt=""></p>
<h4 id="실습예시">실습예시</h4>
<p>계정명 수정</p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/8b17483f-0942-4572-aa93-8cbd41f04fb9/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/ab952a51-377a-4c6a-85dc-d438ece2ac2f/image.png" alt=""></p>
<hr>
<h3 id="지킬-템플릿">지킬 템플릿</h3>
<p><a href="https://bhban.kr/frontend/">도서 관련 저자 url</a></p>
<p><a href="https://jekyllthemes.io/">지킬 템플릿</a></p>
<p>책 마무리에는 지킬 템플릿을 활용하여 클론코딩 예시를 두고 있다. 실습을 끝까지 하지는 못 했지만 참고하고 따라하기 위해 적재해두겠다..!</p>
<p><a href="https://formspree.io/">이메일 자동 발송 관련 사이트</a></p>
<p><a href="https://github.com/needleworm/gunbam">예제 웹페이지 소스코드</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[<그냥하자> 처음만난 리액트 (6) 이벤트 핸들링
]]></title>
            <link>https://velog.io/@unfamiliar_dev/%EA%B7%B8%EB%83%A5%ED%95%98%EC%9E%90-%EC%B2%98%EC%9D%8C%EB%A7%8C%EB%82%9C-%EB%A6%AC%EC%95%A1%ED%8A%B8-6-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%ED%95%B8%EB%93%A4%EB%A7%81</link>
            <guid>https://velog.io/@unfamiliar_dev/%EA%B7%B8%EB%83%A5%ED%95%98%EC%9E%90-%EC%B2%98%EC%9D%8C%EB%A7%8C%EB%82%9C-%EB%A6%AC%EC%95%A1%ED%8A%B8-6-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%ED%95%B8%EB%93%A4%EB%A7%81</guid>
            <pubDate>Fri, 16 Aug 2024 07:24:36 GMT</pubDate>
            <description><![CDATA[<p>출처 : 소플의 처음 만난 리액트</p>
<h3 id="이벤트-처리하기">이벤트 처리하기</h3>
<p>DOM에서 클릭 이벤트를 처리하는 방법</p>
<pre><code>&lt;button onclick=&quot;activate()&quot;&gt;
    Activate
&lt;/button&gt;</code></pre><p>리액트에서의 이벤트 처리</p>
<pre><code>&lt;button onClick={activate}&gt;
    Activate
&lt;/button&gt;</code></pre><p>이벤트의 이름인 onclick이 onClick으로 카멜 표기법을 적용한다.</p>
<p>어떤 이벤트가 발생했을 때 해당 이벤트를 처리하는 함수를 이벤트 핸들러(Event Handler)라고 부른다. 이벤트가 발생하는 것을 계속 듣고 있는다는 의미로 이벤트리스너(Event Listener)라고 부르기도 한다. </p>
<p>함수 컴포넌트 내부에서 이벤트 핸들러를 정의하는 방법은 함수 안에 또 다른 함수로 정의하는 방법과, arrow function을 사용하여 정의하는 방법이 있다. </p>
<h3 id="arguments-전달하기">Arguments 전달하기</h3>
<p>Arguments 주장, 논쟁, 말다툼 즉 리액트에서는 함수에 주장할 내용이라고 이해하자. 다시 말해 함수에 전달할 데이터이다. 우리말로는 매개변수라고 부른다. </p>
<p>사용예시</p>
<pre><code>function MyButton(props) {
  const handleDelete = (id, event) =&gt; {
    console.log(id, event.target);
  };

  return(
    &lt;button onClick={(event) =&gt; handleDelete(1,event)}&gt;삭제하기&lt;/button&gt;
  )
}</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[<그냥하자> 처음만난 리액트 (5) Hook]]></title>
            <link>https://velog.io/@unfamiliar_dev/%EA%B7%B8%EB%83%A5%ED%95%98%EC%9E%90-%EC%B2%98%EC%9D%8C%EB%A7%8C%EB%82%9C-%EB%A6%AC%EC%95%A1%ED%8A%B8-5-Hook</link>
            <guid>https://velog.io/@unfamiliar_dev/%EA%B7%B8%EB%83%A5%ED%95%98%EC%9E%90-%EC%B2%98%EC%9D%8C%EB%A7%8C%EB%82%9C-%EB%A6%AC%EC%95%A1%ED%8A%B8-5-Hook</guid>
            <pubDate>Thu, 15 Aug 2024 10:43:30 GMT</pubDate>
            <description><![CDATA[<p>출처 : 소플의 처음 만난 리액트(도서)</p>
<h3 id="훅이란-무엇인가">훅이란 무엇인가?</h3>
<p>Hook 이라는 영단어는 갈고리라는 뜻을 갖고 있는데, 보통 프로그래밍에서는 원래 존재하는 어떤 기능에 마치 갈고리를 거는 것처럼 끼어 들어가 같이 수행되는 것을 의미한다.</p>
<p>리액트의 state 생명주기 기능에 갈고리를 걸어 원하는 시점에 정해진 함수를 실행되도록 만드는 것. </p>
<p>이러한 훅의 이름은 모든 use로 시작한다. 훅이 수행하는 기능에 따라서 이름을 짓게 되었는데 각 기능을 사용하겠다는 의미로 use를 앞에 붙였다고 한다.</p>
<hr>
<h3 id="usestate">useState</h3>
<p>state를 사용하기 위한 훅이다. 함수 컴포넌트에서는 기본적으로 state라는 것을 제공하지 않기 때문에 클래스 컴포넌트처럼 state를 사용하고 싶으면 useState() 훅을 사용해야 한다. </p>
<pre><code>const [변수명, set함수명] = useState(초깃값);</code></pre><p>eg)</p>
<pre><code>import React, { useState } from &quot;react&quot;;

function Counter(props) {
        const [ count, setCount] = useState(0); 

        return(
            &lt;div&gt; 
                &lt;p&gt; 총 {count} 번 클릭하였습니다. &lt;/p&gt;
                &lt;button onClick={() =&gt; setCount(count+1)}&gt; 
                클릭
                &lt;/ button&gt;
            &lt;/div&gt;
       );
}</code></pre><p>useState()를 사용하여 카운트 값을 state로 관리하도록 만든 것. </p>
<p>버튼이 눌렀을 때 setCount()함수를 호출해서 카운트를 1 증가시킨다. 
그리고 count의 값이 변경되면 컴포넌트가 재렌더링되면서 화면에 새로운 카운트 값이 표시된다. </p>
<p>useState()를 사용하는 방법에서는 변수 각각에 대해 set함수가 따로 존재한다는 것을 기억하자.</p>
<hr>
<h3 id="useeffect">useEffect</h3>
<pre><code>useEffect(이펙트 함수, 의존성배열);.</code></pre><p>useEffect() 는 리액트의 함수 컴포넌트에서 사이드 이펙트를 실행할 수 있도록 해 주는 훅이다. 여기서 리액트의 사이드 이펙트의 의미는 그냥 효과 혹은 영향 정도라고 기억하자.</p>
<p>uesEffect() 훅만으로 생명주기 함수와 동일한 기능을 수행할 수 있다. </p>
<pre><code>import React, { useState, useEffect} from &#39;react&#39;;

function Counter (props) {
  const [count, setCount] = useState(0);

  // componentDidMount, componentDidUpdate와 비슷하게 작동합니다.

  useEffect( () =&gt; {

    // 브라우저 API를 사용해서 document의 title을 업데이트 합니다.
    document.title = `총 ${count}번 클릭했습니다.`;
  });

  return (
    &lt;div&gt;
      &lt;p&gt; 총 {count} 번 클릭하였습니다. &lt;/p&gt;
      &lt;button onClick={() =&gt; setCount(count+1)}&gt; 
                클릭
      &lt;/ button&gt;
    &lt;/div&gt;
  );
}

export default Counter;</code></pre><p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/c28c1e3b-fd6f-4def-888c-cde8d9ee9d8f/image.png" alt=""></p>
<pre><code>useEffect( () =&gt; {
  // 컴포넌트가 마운트 된 이후,
  // 의존성 배열에 있는 변수들 중 하나라도 값이 변경되었을 때 실행됨
  // 의존성 배열에 빈 배열([])을 넣으면 마운트와 언마운트시에 단 한 번씩만 실행됨
  // 의존성 배열 생략 시 컴포넌트 업데이트 시마다 실행됨

  ...

  return () =&gt; { 
    // 컴포넌트가 마운트 해제되기 전에 실행됨
  }
}, [의존성변수1, 의존성 변수2, ...]);</code></pre><hr>
<h3 id="usememo">useMemo</h3>
<pre><code>const memoizedValue = useMemo(
  () =&gt; {
    // 연산량이 높은 작업을 수행하여 결과를 반환
    return computeExpensiveValue(의존성 변수1, 의존성 변수2);
  },
  [의존성 변수1, 의존성 변수2]
);</code></pre><p>useMemo()로 전달된 함수는 렌더링이 일어나는 동안 실행되어서 일반적으로 렌더링이 일어나는 동안 실행돼서는 안된다.</p>
<p><a href="https://www.npmjs.com/package/eslint-plugin-react-hooks">eslint-plugin-react-hook</a></p>
<p>의존성 배열이 잘못 되어 있는 경우에 자동으로 경고 표시를 해 주면 고칠 방법을 제안해줌</p>
<hr>
<h3 id="usecallback">useCallback</h3>
<p>useMemo() 훅과 유사하지만, 값이 아닌 함수를 반환하다는 점이 다르다. </p>
<pre><code>const memoizedCallback = useCallback(
    () =&gt; {
            doSomething(의존성 변수1, 의존성 변수2);
         },
          [의존성 변수1, 의존성 변수2]
);</code></pre><h3 id="useref">useRef</h3>
<p>useRef() 훅은 레퍼런스를 사용하기 위한 훅이다. 리액트에서 레퍼런스란 특정 컴포넌트에 접근할 수 있는 객체를 의미한다. useRef() 훅은 바로 레퍼런스 객체를 반환한다. </p>
<pre><code>const refContainer = useRef(초깃값);</code></pre><hr>
<h3 id="훅의-규칙">훅의 규칙</h3>
<p>1.</p>
<p>훅은 무조건 최상위 레벨에서만 호출해야 한다. 여기에서 말하는 최상위 레벨은 리액트 함수 컴포넌트의 최상위 레벨을 의미한다.</p>
<p>반복문이나 조건문 또는 중첩된 함수들 안에서 훅을 호출하면 안 된다. </p>
<p>훅은 컴포넌트가 렌더링 될 때마다 매번 같은 순서로 호출되어야 한다. </p>
<ol start="2">
<li></li>
</ol>
<p>리액트 함수 컴포넌트에서만 훅을 호출해야 한다. 혹은 리액트 함수 컴포넌트에서 호출하거나 직접 만든 커스텀 훅에서만 호출할 수 있다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[<그냥하자> 처음만난 리액트 (5) State
]]></title>
            <link>https://velog.io/@unfamiliar_dev/%EA%B7%B8%EB%83%A5%ED%95%98%EC%9E%90-%EC%B2%98%EC%9D%8C%EB%A7%8C%EB%82%9C-%EB%A6%AC%EC%95%A1%ED%8A%B8-5-State</link>
            <guid>https://velog.io/@unfamiliar_dev/%EA%B7%B8%EB%83%A5%ED%95%98%EC%9E%90-%EC%B2%98%EC%9D%8C%EB%A7%8C%EB%82%9C-%EB%A6%AC%EC%95%A1%ED%8A%B8-5-State</guid>
            <pubDate>Wed, 14 Aug 2024 07:25:27 GMT</pubDate>
            <description><![CDATA[<p>출처 : 소플의 처음만난 리액트 (도서)</p>
<h3 id="state-란">State 란?</h3>
<blockquote>
<p>리액트에서의 state는 리액트 컴포넌트의 상태를 의미한다.</p>
</blockquote>
<p>리액트 컴포넌트의 변경 가능한 데이터를 state 라고 부른다. state는 사전에 미리 정해진 것이 아니라 리액트 컴포넌트를 개발하는 각 개발자가 직접 정의하는 것이다. </p>
<p>렌더링이나 데이터 흐름에 사용되는 값만 state에 포함시켜야 한다.</p>
<h4 id="특징">특징</h4>
<blockquote>
<p>state는 자바스크립트의 객체이다.</p>
</blockquote>
<p>정의한 state는 이후 일반적인 자바스크립트 변수를 다루듯이 직접 수정할 수는 없다. 사실 수정은 가능하지면 그렇게 해서는 안되고,</p>
<p>setState() 함수를 통해 수정한다. state는 직접적인 변경은 불가능하고 state를 변경하고자 할 때에는 꼭 setState()함수를 사용해야 한다. </p>
<h4 id="생명주기에-대해-알아보기">생명주기에 대해 알아보기</h4>
<p>생명주기의 경우 최근에는 클래스 컴포넌트를 거의 사용하지 않기 때문에 이런 개념이 있다는 정도만 넘어가지만 state는 리액트의 핵심중의 핵심이기에 중요하다. </p>
<p><img src="https://velog.velcdn.com/images/unfamiliar_dev/post/8cbc5d3d-3f11-41da-845b-c44fe9b243ec/image.png" alt=""></p>
]]></description>
        </item>
    </channel>
</rss>