<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>ci___der.log</title>
        <link>https://velog.io/</link>
        <description>게임을 좋아하는 사람 입니다!</description>
        <lastBuildDate>Mon, 31 Mar 2025 01:42:19 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>ci___der.log</title>
            <url>https://velog.velcdn.com/images/ci___der/profile/9908f5b1-b512-472b-90da-363144e61a92/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. ci___der.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/ci___der" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[이진 검색 트리(Binary Search Tree, BST)]]></title>
            <link>https://velog.io/@ci___der/%EC%9D%B4%EC%A7%84-%EA%B2%80%EC%83%89-%ED%8A%B8%EB%A6%ACBinary-Search-Tree-BST</link>
            <guid>https://velog.io/@ci___der/%EC%9D%B4%EC%A7%84-%EA%B2%80%EC%83%89-%ED%8A%B8%EB%A6%ACBinary-Search-Tree-BST</guid>
            <pubDate>Mon, 31 Mar 2025 01:42:19 GMT</pubDate>
            <description><![CDATA[<p>자, 96번째 키워드인 이진 검색 트리(BST)를 알아볼 것이다.</p>
<p><img src="https://velog.velcdn.com/images/ci___der/post/37b85aac-2639-49bb-a0c8-6551fecca794/image.png" alt=""></p>
<p>이진 검색 트리는 Binary Tree의 한 종류로, 각 노드가 최대 두 개의 자식노드를 가지는 것을 의미한다.</p>
<p>만족하는 조건은 왼쪽 서브트리가 항상 루트보다 작고, 오른쪽 서브트리는 항상 루트보다 크다는
조건을 만족하게 된다.</p>
<p>이러한 구조는 트리의 <strong>탐색, 삽입, 삭제</strong> 등의 연산을 효율적으로 수행이 가능하다.</p>
<h1 id="설명">설명</h1>
<p>BST의 정렬된 상태를 Tree 구조로 유지를 한다는 점이 핵심이다. 재귀적인 성질이 강하며
중복을 허용하지 않는 경우가 많다. 
왜냐하면 정렬된 구조에서 중복이 된다면 탐색회수가 늘어나기 때문이다.</p>
<ul>
<li>삽입 연산시에는 현재 노드와 값을 비교해 왼쪽 또는 오른쪽으로 이동한다.</li>
<li>탐색 시도 시에도 같은 방식으로 깊이를 따라 이동한다.</li>
<li>삭제는 자식 노드의 개수(0개, 1개, 2개)에 따라 처리 방식이 달라지게 된다.</li>
</ul>
<p>Tree의 높이에 따라 성능은 천차 만별이 된다. 최악의 경우는 선형 탐색 수준으로 떨어질 우려가 있다.
이 단점을 해결하기 위해 나온 방안은 AVL Tree, Red-BlackTree 등의 <strong>균형이진검색트리</strong>가 나오게 되었다.</p>
<h2 id="장점">장점</h2>
<ol>
<li>평균적으로 탐색, 삽입, 삭제 <strong>O(log n)</strong>의 성능</li>
<li>정렬된 데이터의 계층적 구조 표현에 적합</li>
<li>중위 순회를 통해 정렬된 순서 출력 가능</li>
<li>재귀적 구조로 분할 정복 등 다양한 알고리즘과 결합 용이</li>
</ol>
<h2 id="단점">단점</h2>
<ol>
<li>데이터가 정렬된 상태로 삽입이 되면 트리 불균형 발생 -&gt; <strong>O(n)</strong>으로 성능 저하</li>
<li>균형 유지 알고리즘이 없다면 실 사용에 제약이 많음</li>
<li>메모리 사용량이 배열 기반 구조보다 많음</li>
</ol>
<h2 id="사용-예시">사용 예시</h2>
<ul>
<li>탐색 기반 알고리즘 구현 (예 : 캐릭터 Status 의 우선순위 처리)</li>
<li>자동 완성 시스템에서 문자열 트리와 결합</li>
<li>컴파일러나 해석기에서 식 평가를 위한 트리구조</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[게임 프로그래밍 패턴 - 공간분할]]></title>
            <link>https://velog.io/@ci___der/%EA%B2%8C%EC%9E%84-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%8C%A8%ED%84%B4-%EA%B3%B5%EA%B0%84%EB%B6%84%ED%95%A0</link>
            <guid>https://velog.io/@ci___der/%EA%B2%8C%EC%9E%84-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%8C%A8%ED%84%B4-%EA%B3%B5%EA%B0%84%EB%B6%84%ED%95%A0</guid>
            <pubDate>Mon, 24 Mar 2025 14:04:32 GMT</pubDate>
            <description><![CDATA[<p>95번째 키워드 &#39;게임프로그래밍 패턴 - 공간분할&#39;이다.</p>
<h1 id="정의">정의</h1>
<p>공간분할 패턴은 객체들의 위치정보를 효율적으로 관리하여 프로그램의 성능을 향상 시키고 관리가 용이하게 하는 기법이다.
이를 통해, 객체간의 상호작용을 최적화하여 불필요한 계산을 줄이고 자원을 효율적으로 사용할 수 있게 된다.</p>
<p>사용하게 되면 객체들 간 불필요한 모든 쌍 확인을 피하게 되고, 넓은 범위 충돌감지(Borad-Phase)나 
시야 절두체 컬링(Frustum Culling)등을 효율적으로 수행할 수 있게 된다.</p>
<h1 id="사용-범위-및-분야">사용 범위 및 분야</h1>
<ul>
<li>컴퓨터 그래픽스 : 높은 그래픽 처리를 위해 많은 자원을 요구하게 되는데 자원들을 효율적으로 관리하기 위해 사용</li>
<li>렌더링 최적화 : 게임 개발에서 플레이어의 시야에만 들어오는 객체만 렌더링 하도록 공간을 분할하여 관리</li>
<li>AI 및 경로 탐색 : AI가 경로를 탐색할 때 전체맵을 탐색하는 것 보단 공간분할을 통해 범위를 제한하여 사용</li>
</ul>
<h2 id="1인칭-슈팅fps-게임에서의-공간-분할">1인칭 슈팅(FPS) 게임에서의 공간 분할</h2>
<p><strong>BSP Tree</strong> 를 이용한 공간분할이 핵심기술로 도입된 게임은 대표적인 사례료 <strong>둠(Doom)과 퀘이크엔진(Quake)</strong> 이 있다.</p>
<p>두 개의 프로그램은 <strong>이진 공간분할 트리(BSP)</strong>를 사전에 생성하여 레벨의 벽과 지형을 분할하였다.
트리는 공간을 두 부분으로 재귀적으로 잘라나가며 최종적으로 볼록(convex)과 구역(subsector)들로 분할을 하게 된다.</p>
<ul>
<li>최종적으로 분할 된 잎 노드들은 나눌 필요가 없는 작은 볼록공간이 되며 이는 시야에서 보이는 면만 그리도록 최적화 함</li>
</ul>
<p>이는 렌더링이 복잡한 레벨에서 보이는 면과 보이지 않는 면을 실시간으로 판정하는 문제를 효율적으로 해결한 것이라 한다.</p>
<ul>
<li>Doom의 첫 레벨인 E1M1을 BSP로 분할한 결과
<img src="https://velog.velcdn.com/images/ci___der/post/1daa2802-1053-4aa7-ba84-709a2aaaac75/image.png" alt=""><ul>
<li>각 색깔 영역이 BSP Tree의 한 서브섹터(leaf Node)에 해당하며, 이를 바탕으로 렌더링 순서 결정</li>
</ul>
</li>
</ul>
<h2 id="실시간-전략rts-게임에서의-공간-분할">실시간 전략(RTS) 게임에서의 공간 분할</h2>
<p><strong>RTS</strong>장르는 한 화명에서 수십에서 수백 개의 해당하는 오브젝트들이 상호작용을 하게 되는 장르이다.
한 시야 안에서 플레이어가 수 많은 오브젝트들을 컨드롤 할 수 있끼 때문에 각 연산에 대해서 최적화가 필수가 된다.</p>
<h3 id="유닛-충돌-및-범위-판단-최적화">유닛 충돌 및 범위 판단 최적화</h3>
<pre><code>- RTS 유닛들은 이동중이나 공격할 때 서로 겹치지 않는다거나 아군과 적군을 나눈다거나 서로 상호작용이 되어야하는 등 많은 계산이 필요하게된다.
  유닛의 쌍이 100쌍이라고 했을 때, 100 * 100을 일일히 하게 되면 많은 연산이 되기 때문에 성능이 많이 저하 된다.


  이를 해결하기 위해서 &quot;격자 그리드&quot;기반 또는 &quot;쿼드 트리&quot; 기반 공간분할을 사용하게 된다.
  유닛들은 자신의 위치에 해당하는 타일이나 셀(공간)안에 속해 있고, 충돌이나 공격 판정시에는 해당 셀과 인접한 셀의 유닛만 검사하면 충분하다.

  이렇게 하게 되면 서로 셀이 다른 유닛끼라는 건너 뛰게 되어 불필요한 연산은 줄어들게 된다.</code></pre><h3 id="쿼드-트리의-활용">쿼드 트리의 활용</h3>
<ul>
<li><p>쿼드트리는 2D 공간을 재귀적으로 4등분 하면서 한 노드의 너무 많은 객체가 들어있느면 다시 네 구역으로 쪼개는 방식으로 구성한다.</p>
</li>
<li><p>유닛들이 군집해 있는 지역은 세밀하게 분할되어 관리되고 많이 없는 지역은 크게 묶어 관리되므로 밀도에 따른 계층 구조가 만들어진다.
<img src="https://velog.velcdn.com/images/ci___der/post/549a1c0b-d45d-45ae-9f6e-9782ec45e2f5/image.png" alt=""></p>
</li>
<li><p>재귀적으로 4분할을 하여 색상구역을 표현한 것</p>
</li>
</ul>
<h1 id="생각나는-사용-예시">생각나는 사용 예시</h1>
<ul>
<li>현재 만들고 있는 언리얼 C++ 프로젝트에서 공간별로 나누어 적의 밀집도를 판단. 판단한 구역을 미니맵의 위험도 표시</li>
<li>프러스텀 컬링을 사용</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[오브젝트 풀링이 무엇일까?]]></title>
            <link>https://velog.io/@ci___der/%EC%98%A4%EB%B8%8C%EC%A0%9D%ED%8A%B8-%ED%92%80%EB%A7%81%EC%9D%B4-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C</link>
            <guid>https://velog.io/@ci___der/%EC%98%A4%EB%B8%8C%EC%A0%9D%ED%8A%B8-%ED%92%80%EB%A7%81%EC%9D%B4-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C</guid>
            <pubDate>Wed, 13 Nov 2024 06:51:26 GMT</pubDate>
            <description><![CDATA[<p>자 94번째 키워드인 &#39;오브젝트 풀링&#39;에 대해서 알아 볼 것이다.</p>
<p>유니티로 개발 할 때 사용했었 던 적이 있어서 접근이 쉬웠다.</p>
<p><img src="https://velog.velcdn.com/images/ci___der/post/7ef994f7-4807-4448-ab25-9010908db69c/image.png" alt=""></p>
<h1 id="오브젝트-풀링이-뭐에요">오브젝트 풀링이 뭐에요?</h1>
<p>오브젝트 풀링은 객체를 미리 생성해 두고, 필요할 때 재사용하는 자원 관리 기법이다. </p>
<ul>
<li>이를 통해 객체를 새로 생성하거나 소멸시키는 비용을 줄여 성능을 높일 수 있다. 
오브젝트 풀링은 특히 짧은 시간 동안 빈번하게 생성되고 파괴되는 객체에 유리하다.</li>
</ul>
<h2 id="작동-원리">작동 원리</h2>
<p>프로그램이 시작되거나 특정 시점에 객체를 미리 생성하여 풀(Pool)에 보관한다.
객체가 필요할 때마다 풀에서 꺼내어 사용하며, 사용이 끝난 객체는 다시 풀에 반환되어 재사용된다.
새 객체를 생성하는 대신 풀에서 꺼내 재사용하기 때문에 메모리 할당과 해제를 줄일 수 있다.</p>
<h2 id="사용-예">사용 예</h2>
<p>게임 엔진: 게임에서 총알, 적, 파티클과 같이 자주 생성되고 파괴되는 객체를 오브젝트 풀링으로 관리하면 성능을 크게 향상할 수 있다.</p>
<p>서버 연결: 데이터베이스 연결 객체를 풀링하면 연결을 반복 생성/소멸하지 않고 필요한 순간에 풀에서 가져와 빠르게 사용할 수 있다.</p>
<p>스레드 풀: 여러 스레드를 미리 생성해 두고 필요할 때 활용하는 것으로, 서버가 동시에 여러 클라이언트 요청을 빠르게 처리하는 데 유리하다.</p>
<h2 id="장점">장점</h2>
<p>메모리 효율성 증가: 객체 생성 및 해제를 반복하지 않으므로 메모리 누수를 줄이고 자원을 효율적으로 사용한다.
성능 향상: 객체를 매번 생성할 때의 부하가 줄어 프로그램 속도가 개선된다.</p>
<h2 id="단점">단점</h2>
<p>메모리 사용량 증가 가능성: 너무 많은 객체를 미리 생성해 두면 오히려 메모리를 불필요하게 차지할 수 있다.
객체 관리의 복잡성 증가: 풀에서 객체를 제대로 반환하지 않으면 리소스가 낭비되거나 프로그램이 정상적으로 작동하지 않을 수 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[데이터 통신과 전송 방법에 관해서 뭐가 있을까?]]></title>
            <link>https://velog.io/@ci___der/%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%86%B5%EC%8B%A0%EA%B3%BC-%EC%A0%84%EC%86%A1-%EB%B0%A9%EB%B2%95%EC%97%90-%EA%B4%80%ED%95%B4%EC%84%9C-%EB%AD%90%EA%B0%80-%EC%9E%88%EC%9D%84%EA%B9%8C</link>
            <guid>https://velog.io/@ci___der/%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%86%B5%EC%8B%A0%EA%B3%BC-%EC%A0%84%EC%86%A1-%EB%B0%A9%EB%B2%95%EC%97%90-%EA%B4%80%ED%95%B4%EC%84%9C-%EB%AD%90%EA%B0%80-%EC%9E%88%EC%9D%84%EA%B9%8C</guid>
            <pubDate>Wed, 13 Nov 2024 06:22:25 GMT</pubDate>
            <description><![CDATA[<p>자 93번째 키워드인 &#39;데이터 통신과 전송 방법&#39;에 관해서 어떤 것이 있는지 알아 볼 것이다.</p>
<p>태그에 나와있듯, 바이트 스트림과 폴링에 대해서 알아보았다.</p>
<h1 id="바이트-스트림-byte-stream">바이트 스트림 (Byte Stream)</h1>
<p>바이트 스트림은 데이터를 바이트 단위로 순차적으로 전송하는 방식이다. 
바이트 스트림을 통해 데이터는 일련의 바이트로 변환되어 전송되며, 이 방식은 파일 I/O나 네트워크 통신에서 자주 사용된다. 
바이트 스트림을 사용하면 데이터를 연속적으로 전송할 수 있어, 매우 큰 파일이나 멀티미디어 데이터도 문제없이 다룰 수 있다.</p>
<h2 id="특징">특징</h2>
<p>순차적 전송: 데이터가 한 바이트씩 순차적으로 전송되므로 데이터의 순서가 중요할 때 유용하다.
다양한 매체 지원: 파일, 네트워크, 메모리 등 다양한 매체 간에 데이터 전송이 가능하다.</p>
<h2 id="사용-예">사용 예</h2>
<p>파일 전송: 대용량 파일을 서버로 전송할 때 바이트 스트림을 통해 데이터를 순차적으로 보내기 때문에 메모리 과부하를 방지할 수 있다.
네트워크 통신: TCP 프로토콜을 사용하는 네트워크 통신은 바이트 스트림을 통해 데이터를 전송한다. 이를 통해 대용량 데이터를 안정적으로 전송할 수 있다.</p>
<h2 id="장점">장점</h2>
<p>효율적 메모리 사용: 데이터를 한 번에 전부 로드하지 않고, 필요한 만큼만 읽어 메모리를 절약할 수 있다.
대용량 데이터 처리 가능: 데이터를 순차적으로 처리하기 때문에, 파일이나 스트리밍 서비스처럼 대용량 데이터에도 유리하다.</p>
<h2 id="단점">단점</h2>
<p>복잡한 구조의 데이터 처리 어려움: 바이트 단위로 데이터를 다루기 때문에 구조화된 데이터(예: JSON, XML 등)를 처리하려면 추가적인 파싱 과정이 필요하다.
전송 순서 유지 필수: 바이트 단위로 순차 전송이기 때문에 데이터 순서가 틀어지면 정보가 깨질 위험이 있다.</p>
<h1 id="폴링-polling">폴링 (Polling)</h1>
<p>폴링은 이벤트가 발생했는지 확인하기 위해 일정 간격으로 상태를 점검하는 방식다. 
폴링은 주기적으로 특정 자원의 상태를 확인하여 변화가 있으면 작업을 수행한다. </p>
<ul>
<li>예를 들어, 프로그램이 특정 서버나 디바이스의 상태를 확인하기 위해 폴링을 사용하여 업데이트를 주기적으로 확인하는 식이다.</li>
</ul>
<h2 id="특징-1">특징</h2>
<p>주기적 확인: 정해진 시간 간격으로 반복적으로 상태를 확인한다.
응답성 지연 가능성: 폴링 간격이 길 경우 이벤트가 발생했더라도 다음 폴링 주기까지 응답하지 못할 수 있다.
CPU 사용 증가 가능성: 폴링을 자주 실행하면 CPU 자원이 많이 소모될 수 있다.</p>
<h2 id="사용-예-1">사용 예</h2>
<p>네트워크 연결 상태 확인: 네트워크 연결이 활성 상태인지 주기적으로 확인하여 연결 상태가 변경되면 프로그램이 적절한 조치를 취한다.
입력 장치 상태 확인: 게임에서 입력 장치(키보드, 마우스 등)가 특정 버튼을 눌렀는지 확인할 때 폴링이 사용될 수 있이다.
큐 모니터링: 메시지 큐에서 새로운 메시지가 있는지 확인하는 데 폴링을 사용할 수 있다.</p>
<h2 id="장점-1">장점</h2>
<p>간단한 구현: 상대적으로 단순한 코드로 주기적인 상태 확인을 구현할 수 있다.
비동기 이벤트 지원 없는 환경에서 유용: 일부 시스템이나 네트워크 장비가 이벤트 기반 기능을 제공하지 않는 경우, 폴링을 통해 상태를 확인할 수 있다.</p>
<h2 id="단점-1">단점</h2>
<p>CPU 자원 낭비: 폴링 간격이 짧을 경우 CPU를 과도하게 사용해 성능 저하를 초래할 수 있다.
응답 지연: 폴링 간격이 길 경우, 중요한 이벤트에 빠르게 반응하지 못할 수 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[프로세스 & 스레드 관리엔 뭐가 있을까?]]></title>
            <link>https://velog.io/@ci___der/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C-%EA%B4%80%EB%A6%AC%EC%97%94-%EB%AD%90%EA%B0%80-%EC%9E%88%EC%9D%84%EA%B9%8C</link>
            <guid>https://velog.io/@ci___der/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C-%EA%B4%80%EB%A6%AC%EC%97%94-%EB%AD%90%EA%B0%80-%EC%9E%88%EC%9D%84%EA%B9%8C</guid>
            <pubDate>Wed, 13 Nov 2024 06:07:02 GMT</pubDate>
            <description><![CDATA[<p>자 92번째 키워드인 &#39;프로세스 &amp; 스레드 관리&#39;에 대해서 알아 볼 것이다.</p>
<p>여태 키워드에서 프로세스와 스레드는 다뤘고 관리 측면은 작성한 것이 없어서 알아보았다.</p>
<p><img src="https://velog.velcdn.com/images/ci___der/post/1268f369-2a51-460e-9e66-a43f7c0da5cb/image.png" alt=""></p>
<h1 id="1-병행성-concurrency">1. 병행성 (Concurrency)</h1>
<p>병행성은 여러 작업을 동시에 처리할 수 있는 능력을 의미한다. 그러나 병행성은 꼭 여러 작업이 실제로 동시에 수행되는 것은 아니다. 
병행성은 여러 작업을 순차적으로 또는 중첩하여 처리하면서 마치 동시에 진행되는 것처럼 보이게 만든다.</p>
<h2 id="사용-예">사용 예</h2>
<ol>
<li><p>비동기 프로그래밍: 웹 서버가 여러 사용자의 요청을 병행하여 처리할 때, 각 요청을 독립적으로 수행하고 결과를 반환한다.</p>
</li>
<li><p>멀티스레딩: 한 프로그램에서 여러 스레드가 각기 다른 작업을 수행하면서도 하나의 CPU가 빠르게 스레드를 전환하여 병행성을 구현할 수 있다.</p>
</li>
</ol>
<h2 id="장점">장점</h2>
<p>자원 사용 최적화: 하나의 자원을 여러 작업이 공유할 수 있다.
빠른 응답성: 시스템이 많은 작업을 동시에 처리하는 것처럼 보여 사용자 경험을 개선할 수 있다.</p>
<h2 id="단점">단점</h2>
<p>복잡한 구현: 병행성 관리가 어려우며, 교착 상태나 경쟁 상태가 발생할 수 있다.
디버깅 어려움: 여러 작업이 병행으로 실행되므로 에러 추적이 복잡할 수 있다.</p>
<h1 id="2-병렬성-parallelism">2. 병렬성 (Parallelism)</h1>
<p>병렬성은 실제로 여러 작업이 동시에 실행되는 것을 의미한다. 
병렬성은 주로 멀티코어 프로세서 환경에서 구현된다. 여러 코어를 가진 CPU는 병렬 처리를 통해 성능을 극대화할 수 있다.</p>
<h2 id="사용-예-1">사용 예</h2>
<ol>
<li>멀티코어 CPU: 각 코어가 서로 다른 작업을 동시에 처리할 수 있다.</li>
<li>분산 컴퓨팅: 여러 컴퓨터에서 하나의 큰 작업을 나누어 처리해 성능을 높인다.</li>
</ol>
<h2 id="장점-1">장점</h2>
<p>높은 성능: 병렬 처리를 통해 작업 속도가 크게 향상된다.
확장성: 컴퓨터 자원이 늘어나면 더 많은 작업을 동시에 처리할 수 있다.</p>
<h2 id="단점-1">단점</h2>
<p>자원 낭비 가능성: 작업이 병렬화되지 않으면 비효율적으로 작동할 수 있다.
복잡한 동기화 필요: 여러 작업이 동시에 동일 자원에 접근할 때 동기화가 필요하다.</p>
<h1 id="3-직렬화-serialization">3. 직렬화 (Serialization)</h1>
<p>직렬화는 데이터를 저장하거나 전송하기 위해 특정 포맷으로 변환하는 과정이다. 
직렬화는 데이터의 구조를 연속된 바이트 형태로 만들어 전송 및 저장을 쉽게 한다. 
반대로 역직렬화(Deserialization)는 직렬화된 데이터를 원래의 객체 형태로 되돌리는 과정이다.</p>
<h2 id="사용-예-2">사용 예</h2>
<ol>
<li>네트워크 통신: 데이터 전송을 위해 객체를 직렬화하여 보낸다. JSON, XML 등이 직렬화 포맷으로 사용된다.</li>
<li>데이터 저장: 프로그램이 종료된 후에도 데이터를 유지하기 위해 파일에 직렬화하여 저장한다.</li>
</ol>
<h2 id="장점-2">장점</h2>
<p>데이터 전송 용이성: 직렬화된 데이터는 네트워크를 통해 쉽게 전송될 수 있다.
호환성: 데이터 포맷이 표준화되어 다양한 시스템에서 사용할 수 있다.</p>
<h2 id="단점-2">단점</h2>
<p>성능 문제: 직렬화와 역직렬화 과정에서 성능 저하가 발생할 수 있다.
포맷 종속성: 특정 포맷에 종속될 경우 다른 포맷으로 전환하기 어려울 수 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[폰노이만 구조의 병목현상이 무엇일까?]]></title>
            <link>https://velog.io/@ci___der/%ED%8F%B0%EB%85%B8%EC%9D%B4%EB%A7%8C-%EA%B5%AC%EC%A1%B0%EC%9D%98-%EB%B3%91%EB%AA%A9%ED%98%84%EC%83%81%EC%9D%B4-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C</link>
            <guid>https://velog.io/@ci___der/%ED%8F%B0%EB%85%B8%EC%9D%B4%EB%A7%8C-%EA%B5%AC%EC%A1%B0%EC%9D%98-%EB%B3%91%EB%AA%A9%ED%98%84%EC%83%81%EC%9D%B4-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C</guid>
            <pubDate>Tue, 12 Nov 2024 08:16:38 GMT</pubDate>
            <description><![CDATA[<p>자 91번째 키워드인 폰노이만 구조 병목현상에 대해서 알아보겠다.</p>
<p>약 두 달 반동안 키워드 공부를 안하고 다른거에 집중하느라 다시 감을
찾아 보겠다.</p>
<h1 id="폰노이만-구조의-병목현상이-뭐에요">폰노이만 구조의 병목현상이 뭐에요?</h1>
<p><img src="https://velog.velcdn.com/images/ci___der/post/fb90538a-8684-4265-8127-72d786295f81/image.png" alt=""></p>
<p>폰 노이만 구조의 병목현상(Von Neumann bottleneck)은 컴퓨터 시스템에서 <strong>CPU(중앙 처리 장치)</strong> 와 메모리 간의 데이터 전송 속도가 낮아 발생하는 성능 저하 문제를 말한다.</p>
<h2 id="병목현상-과정">병목현상 과정</h2>
<p>폰 노이만 구조에서는 프로그램 명령어와 데이터를 한 가지 메모리에 저장하고, CPU가 이를 하나의 버스를 통해 순차적으로 처리한다. 
이로 인해 CPU는 명령어를 실행하기 위해 필요한 데이터를 메모리에서 가져오는 과정에서 대기하게 되어 시스템 성능이 제한된다.</p>
<h2 id="병목현상-원인">병목현상 원인</h2>
<ol>
<li><p>하나의 버스: CPU와 메모리가 하나의 데이터 버스를 공유하므로 동시에 데이터를 주고받을 수 없다. 즉, CPU가 데이터를 요청하면 메모리에서 해당 데이터를 가져오는 동안 기다려야 한다.</p>
</li>
<li><p>데이터 전송 속도의 차이: CPU의 처리 속도는 매우 빠르지만 메모리의 전송 속도는 상대적으로 느리기 때문에, CPU는 메모리 대기 시간 때문에 잠시 멈추거나 저하된 속도로 실행된다.</p>
</li>
</ol>
<h1 id="정리">정리</h1>
<p>폰 노이만 병목현상은 CPU가 높은 처리 속도를 갖고 있음에도 불구하고 메모리의 상대적으로 느린 속도와 단일 데이터 버스의 한계 때문에 전체 시스템 성능이 저하되는 문제이다. 
이를 해결하기 위해 캐시 메모리, 파이프라이닝, 하버드 아키텍처, 멀티코어 및 병렬 컴퓨팅 등의 기술이 발전해오고 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[데이터베이스 시스템이 무엇일까?]]></title>
            <link>https://velog.io/@ci___der/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%9D%B4-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C</link>
            <guid>https://velog.io/@ci___der/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%9D%B4-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C</guid>
            <pubDate>Mon, 19 Aug 2024 16:13:26 GMT</pubDate>
            <description><![CDATA[<p>자 90번째 키워드인 &#39;데이터베이스 시스템&#39;를 알아 볼 것이다.</p>
<p>데이터베이스 시스템은 서비스를 운영하기 위해선 당연시 알아야하는 분야이므로 알아보았다.</p>
<h1 id="database-system이-뭐에요">Database System이 뭐에요?</h1>
<p><img src="https://velog.velcdn.com/images/ci___der/post/35e9954d-4b76-47fc-9fae-554ecb7f951f/image.png" alt=""></p>
<ul>
<li><p>데이터베이스 시스템(Database System)은 데이터를 체계적으로 저장, 관리, 그리고 활용할 수 있도록 설계된 시스템이다. </p>
</li>
<li><p>시스템은 데이터를 효율적으로 관리하고, 다양한 응용 프로그램이 데이터를 쉽게 이용할 수 있도록 돕는다. </p>
</li>
<li><p>데이터베이스 시스템은 여러 구성 요소로 이루어져 있으며, 각 요소는 데이터의 무결성, 일관성, 보안, 그리고 성능을 보장하기 위해 중요한 역할을 한다.</p>
</li>
</ul>
<h2 id="데이터베이스database">데이터베이스(Database)</h2>
<p>정의: 데이터베이스는 여러 사용자 또는 응용 프로그램이 공유하고 사용할 수 있는 데이터의 조직화된 집합이다. 데이터베이스는 구조화된 방식으로 데이터를 저장하며, 데이터를 쉽게 검색하고 조작할 수 있도록 설계된다.</p>
<p><strong>특징</strong>
중복 최소화: 데이터를 한 번만 저장하고 여러 응용 프로그램이 공유할 수 있다.
데이터 독립성: 데이터베이스의 물리적 구조를 변경하더라도 응용 프로그램에 영향을 미치지 않는다.
데이터 무결성: 제약 조건을 통해 데이터의 정확성과 일관성을 유지한다.</p>
<h2 id="데이터베이스-관리-시스템-dbms">데이터베이스 관리 시스템 (DBMS)</h2>
<p>정의: 데이터베이스 관리 시스템(Database Management System, DBMS)은 데이터베이스를 생성하고 관리하기 위한 소프트웨어이다. DBMS는 데이터의 저장, 검색, 수정, 삭제 등의 작업을 효율적으로 처리하며, 여러 사용자와 응용 프로그램이 데이터를 안전하고 효율적으로 사용할 수 있도록 지원한다.</p>
<p><strong>주요 기능</strong></p>
<ol>
<li>데이터 정의: 테이블, 인덱스, 뷰 등을 정의하고, 데이터의 구조를 설계한다.</li>
<li>데이터 조작: SQL을 통해 데이터를 삽입, 삭제, 수정, 검색한다.</li>
<li>데이터 보안: 권한을 설정하여 사용자별로 데이터 접근을 제어한다.</li>
<li>데이터 무결성: 제약 조건과 트리거를 통해 데이터의 무결성을 보장한다.</li>
<li>트랜잭션 관리: ACID 속성을 보장하여 트랜잭션을 관리한다.</li>
<li>백업 및 복구: 데이터 손실을 방지하기 위해 주기적으로 백업하고, 시스템 장애 시 데이터를 복구할 수 있다.</li>
</ol>
<h2 id="데이터베이스-모델">데이터베이스 모델</h2>
<ul>
<li><p>관계형 모델 (Relational Model): 데이터가 테이블(릴레이션) 형태로 저장되며, 테이블 간의 관계를 통해 데이터를 연결한다. 이 모델은 현재 가장 널리 사용되는 데이터베이스 모델이다.</p>
</li>
<li><p>계층형 모델 (Hierarchical Model): 데이터가 트리 구조로 조직된다. 각 노드는 데이터 항목을 나타내며, 부모-자식 관계로 연결된다.</p>
</li>
<li><p>네트워크 모델 (Network Model): 데이터가 그래프 구조로 조직되며, 계층형 모델보다 복잡한 관계를 표현할 수 있다. 각 데이터 항목은 여러 부모와 자식 관계를 가질 수 있다.</p>
</li>
<li><p>객체지향 모델 (Object-Oriented Model): 데이터베이스가 객체지향 프로그래밍의 개념을 사용하여 데이터를 모델링한다. 데이터와 동작(메소드)이 결합된 객체 단위로 데이터를 관리한다.</p>
</li>
</ul>
<h2 id="관계형-데이터베이스-관리-시스템-r-dbms">관계형 데이터베이스 관리 시스템 (R-DBMS)</h2>
<p>정의: 관계형 데이터베이스 관리 시스템(R-DBMS)은 데이터가 테이블 형태로 저장되며, SQL을 사용해 데이터를 정의하고 조작하는 시스템이다. 관계형 모델의 기본 개념은 테이블 간의 관계를 키(key)를 통해 표현하는 것이다.</p>
<p><strong>주요 기능</strong></p>
<ol>
<li>스키마 정의 : 데이터베이스의 구조와 제약 조건을 정의한다.</li>
<li>데이터 무결성 : 참조 무결성, 고유성, 도메인 제약 등을 통해 데이터를 보호한다.</li>
<li>복잡한 쿼리 처리 : 조인(Join), 서브쿼리(Subquery) 등을 통해 복잡한 데이터를 효율적으로 검색한다.</li>
<li>트랜잭션 관리 : 트랜잭션의 ACID 속성을 보장한다.</li>
<li>동시성 제어 : 여러 사용자가 동시에 데이터를 접근할 때 데이터의 일관성을 유지한다.</li>
</ol>
<h2 id="데이터베이스-정규화-normalization">데이터베이스 정규화 (Normalization)</h2>
<p>정의: 데이터베이스 정규화는 데이터를 잘못된 중복을 제거하고 데이터 무결성을 보장하기 위해 테이블을 구조화하는 과정이다. 정규화는 주로 여러 단계로 이루어지며, 각 단계는 특정 문제를 해결한다.</p>
<p><strong>정규화 단계</strong></p>
<ol>
<li>제1정규형(1NF): 테이블의 모든 필드가 원자값을 갖도록 테이블을 구성한다. 즉, 각 열이 더 이상 분해할 수 없는 값을 가져야 한다.</li>
<li>제2정규형(2NF): 1NF를 만족하면서 기본 키에 대해 완전 함수 종속성을 가지도록 테이블을 분해한다.</li>
<li>제3정규형(3NF): 2NF를 만족하면서 기본 키에 비종속적인 속성을 제거한다.</li>
</ol>
<h2 id="데이터베이스-트리거-trigger">데이터베이스 트리거 (Trigger)</h2>
<p>정의: 트리거는 특정 이벤트가 발생할 때 자동으로 실행되는 SQL 명령어 집합이다. 주로 데이터 삽입, 수정, 삭제 등의 작업이 발생할 때 특정 동작을 수행하도록 설정된다.</p>
<p>사용 예시: 트리거는 예를 들어, 데이터베이스에서 특정 테이블에 레코드가 삽입될 때 자동으로 로그를 기록하거나, 가격이 변경될 때 관련 데이터를 자동으로 업데이트하는 데 사용된다.</p>
<h2 id="데이터베이스-시스템의-중요성">데이터베이스 시스템의 중요성</h2>
<ol>
<li>데이터 관리 효율성: 대량의 데이터를 체계적으로 관리하여 데이터를 쉽게 저장, 검색, 분석할 수 있다.</li>
<li>데이터 무결성 및 일관성: 다양한 무결성 제약 조건을 통해 데이터의 정확성과 일관성을 유지한다.</li>
<li>데이터 보안: 사용자 권한 관리 및 접근 제어를 통해 데이터의 기밀성과 안전성을 보장한다.</li>
<li>데이터 공유 및 동시성 제어: 여러 사용자가 동시에 데이터를 사용할 수 있도록 하면서도 데이터의 일관성을 유지한다.</li>
<li>확장성: 데이터베이스 시스템은 데이터의 증가에 따라 확장 가능하며, 다양한 요구 사항을 처리할 수 있다.</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[ACID가 무엇일까?]]></title>
            <link>https://velog.io/@ci___der/ACID%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C</link>
            <guid>https://velog.io/@ci___der/ACID%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C</guid>
            <pubDate>Mon, 19 Aug 2024 08:47:08 GMT</pubDate>
            <description><![CDATA[<p>자 89번째 키워드인 &#39;ACID&#39;를 알아 볼 것이다.</p>
<p>ACID는 트랜잭션과 연관성이 있는 키워드 이므로 트랜잭션과 연관지어 알아보았다.</p>
<h1 id="acid가-뭐에요">ACID가 뭐에요?</h1>
<p>ACID 속성은 데이터베이스 트랜잭션의 신뢰성과 일관성을 보장하기 위한 네 가지 핵심 속성을 말한다. 
각각의 속성은 데이터베이스 시스템이 트랜잭션을 처리할 때 반드시 준수해야 할 규칙들을 정의한다. </p>
<p>우선 ACID를 알기 위해서 트랜잭션부터 알아보았다.</p>
<h2 id="트랜잭선에-대해서">트랜잭선에 대해서</h2>
<h3 id="개념">개념</h3>
<ul>
<li><p>트랜잭션은 데이터베이스에서 하나의 논리적 작업 단위로, 여러 개의 연관된 데이터베이스 작업들을 하나로 묶은 것이다. </p>
</li>
<li><p>트랜잭션은 데이터베이스의 일관성을 유지하기 위해 ACID 속성(원자성, 일관성, 독립성, 지속성)을 만족해야 한다. </p>
</li>
<li><p>일반적으로 트랜잭션은 데이터베이스에 대한 여러 개의 연산(예: 데이터 삽입, 삭제, 갱신, 조회)을 묶어 하나의 작업으로 처리하며, 이 작업은 반드시 모두 성공적으로 완료되거나 전혀 수행되지 않은 상태로 유지되어야 한다.</p>
</li>
</ul>
<h3 id="트랜잭션의-상태">트랜잭션의 상태</h3>
<ol>
<li><p>활동 상태 (Active): 트랜잭션이 시작되고 작업이 수행되는 상태이다.</p>
</li>
<li><p>부분 완료 상태 (Partially Committed): 트랜잭션의 마지막 연산이 실행된 상태이다.</p>
</li>
<li><p>완료 상태 (Committed): 트랜잭션이 성공적으로 완료되어 그 결과가 데이터베이스에 영구적으로 반영된 상태이다.</p>
</li>
<li><p>실패 상태 (Failed): 트랜잭션이 오류로 인해 실패한 상태이다.</p>
</li>
<li><p>철회 상태 (Aborted): 트랜잭션이 실패하여 롤백된 상태이다. 트랜잭션의 모든 작업이 취소되고, 데이터베이스는 트랜잭션이 시작되기 전의 상태로 돌아간다.</p>
</li>
</ol>
<h2 id="트랜잭션-속성--원자성-atomicity">트랜잭션 속성 : 원자성 (Atomicity)</h2>
<ul>
<li>원자성은 트랜잭션이 &quot;모두 수행되거나 전혀 수행되지 않아야 한다&quot;는 속성이다. </li>
<li>트랜잭션 내의 작업이 일부만 실행되거나 일부만 실패하는 일이 없어야 한다. </li>
<li>트랜잭션의 모든 작업이 성공적으로 완료되면 커밋(commit)되어 데이터베이스에 영구적으로 반영된다. </li>
<li>하나라도 실패하면 모든 작업이 원래 상태로 복구(롤백, rollback)된다.</li>
</ul>
<h3 id="동작-방식">동작 방식</h3>
<ol>
<li><p>트랜잭션 시작: 트랜잭션이 시작되면 DBMS는 해당 트랜잭션의 작업을 하나의 작업 단위로 관리한다.</p>
</li>
<li><p>로그 기록: 작업을 수행하면서 DBMS는 로그를 기록합니다. 이 로그는 트랜잭션이 실패할 경우, 상태를 원래대로 복구하는 데 사용된다.</p>
</li>
<li><p>커밋 또는 롤백: 모든 작업이 성공적으로 완료되면 커밋을 통해 변경 사항이 영구적으로 적용된다. 만약 어떤 작업에서 오류가 발생하면, 로그를 사용해 모든 작업이 트랜잭션 시작 전의 상태로 롤백된다.</p>
</li>
</ol>
<h2 id="트랜잭션-속성--일관성-consistency">트랜잭션 속성 : 일관성 (Consistency)</h2>
<ul>
<li>일관성은 트랜잭션이 실행된 후에도 데이터베이스가 항상 일관된 상태를 유지해야 한다는 속성이다. </li>
<li>일관성은 데이터베이스의 모든 무결성 제약 조건이 트랜잭션 전후에 유지됨을 보장한다. </li>
<li>트랜잭션이 시작되기 전과 완료된 후의 데이터베이스 상태가 비즈니스 규칙과 제약 조건을 위반하지 않아야 한다.</li>
</ul>
<h3 id="동작-방식-1">동작 방식</h3>
<ol>
<li><p>무결성 제약 조건 검사: 트랜잭션 수행 중에 데이터베이스는 외래 키, 고유성 제약, 체크 제약 등 다양한 무결성 제약 조건을 준수하는지 검사한다.</p>
</li>
<li><p>트랜잭션 종료 시 검증: 트랜잭션이 끝난 후, 데이터베이스가 이전과 동일하게 모든 제약 조건을 만족하는지 확인한다. 만약 제약 조건이 위반되면, 트랜잭션은 롤백된다.</p>
</li>
</ol>
<h2 id="트랜잭션-속성--독립성-isolation">트랜잭션 속성 : 독립성 (Isolation)</h2>
<ul>
<li>독립성은 여러 트랜잭션이 동시에 실행될 때 각 트랜잭션이 다른 트랜잭션의 중간 결과를 볼 수 없도록 보장하는 속성이다. </li>
<li>각 트랜잭션은 독립적으로 수행되어야 하며, 동시에 수행되더라도 결과는 트랜잭션들이 순차적으로 실행된 것과 동일해야 한다.</li>
</ul>
<h3 id="동작-방식-2">동작 방식</h3>
<ol>
<li><p>트랜잭션 격리 수준: DBMS는 트랜잭션 격리 수준을 통해 트랜잭션 간의 상호 작용을 제어한다. 격리 수준이 높을수록 트랜잭션 간 간섭이 적어지지만, 성능 저하가 발생할 수 있다.</p>
<ul>
<li><p>READ UNCOMMITTED: 가장 낮은 격리 수준으로, 트랜잭션이 커밋되지 않은 데이터를 읽을 수 있다.</p>
</li>
<li><p>READ COMMITTED: 트랜잭션이 커밋된 데이터만 읽을 수 있다.</p>
</li>
<li><p>REPEATABLE READ: 트랜잭션이 시작된 이후부터 읽은 데이터는 트랜잭션이 종료될 때까지 변경되지 않는다.</p>
</li>
<li><p>SERIALIZABLE: 가장 높은 격리 수준으로, 모든 트랜잭션이 순차적으로 실행된 것처럼 보이게 한다.</p>
</li>
</ul>
</li>
</ol>
<h2 id="트랜잭션-속성--지속성-durability">트랜잭션 속성 : 지속성 (Durability)</h2>
<ul>
<li>지속성은 트랜잭션이 성공적으로 커밋된 후 그 결과가 영구적으로 데이터베이스에 반영되어, 시스템 오류나 장애가 발생하더라도 해당 결과가 보존된다는 속성이다. </li>
<li>트랜잭션의 결과는 영구적으로 기록되며 손실되지 않는다.</li>
</ul>
<h3 id="동작-방식-3">동작 방식</h3>
<ol>
<li><p>로그 및 백업: DBMS는 트랜잭션이 커밋될 때 그 내용을 로그 파일에 기록한다. 시스템 장애가 발생하면 로그 파일을 사용해 트랜잭션 결과를 복구한다.</p>
</li>
<li><p>디스크 쓰기: 트랜잭션이 커밋되면 DBMS는 변경 사항을 디스크에 기록한다. 이는 데이터베이스가 전원을 잃거나 시스템이 충돌해도 트랜잭션 결과가 유지되도록 보장한다.</p>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[Port Number 가 무엇일까?]]></title>
            <link>https://velog.io/@ci___der/Port-Number-%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C</link>
            <guid>https://velog.io/@ci___der/Port-Number-%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C</guid>
            <pubDate>Mon, 19 Aug 2024 07:50:54 GMT</pubDate>
            <description><![CDATA[<p>자 88번째 키워드인 &#39;Port Number&#39;을 알아 볼 것이다.</p>
<p>Port Number 네트워크 및 통신과 관련이 있기 때문에 알아보았다.</p>
<h1 id="port-number가-뭐에요">Port Number가 뭐에요??</h1>
<p><img src="https://velog.velcdn.com/images/ci___der/post/c5c72e35-8a28-47a0-86a0-2f87d4f5abea/image.png" alt=""></p>
<p>포트 번호는 네트워크에서 IP 주소와 결합되어 특정 애플리케이션이나 서비스를 식별하는 역할을 한다. 
IP 주소가 네트워크 상의 장치(예: 컴퓨터, 서버)를 식별하는 반면, 포트 번호는 해당 장치 내에서 실행되는 특정 프로세스를 식별한다.</p>
<h2 id="동작-방식">동작 방식</h2>
<p>범위에 해당하는 포트 번호는 0부터 65535까지의 16비트 숫자이다.</p>
<p>0~1023번 포트: &#39;잘 알려진 포트(Well-Known Ports)&#39;로, HTTP(80), HTTPS(443), FTP(21) 등 널리 알려진 서비스에 사용된다.</p>
<p>1024~49151번 포트: &#39;등록된 포트(Registered Ports)&#39;로, 특정 애플리케이션이 사용할 수 있도록 등록된 포트 번호이다</p>
<p>49152~65535번 포트: &#39;동적/사설 포트(Dynamic/Private Ports)&#39;로, 주로 클라이언트 애플리케이션이 동적으로 사용하는 포트이다.</p>
<p>TCP/UDP 프로토콜: 포트 번호는 TCP와 UDP 프로토콜에서 사용되며, 네트워크 통신의 종단점을 식별한다. 예를 들어, 클라이언트가 서버에 웹 페이지를 요청할 때, 서버의 IP 주소와 포트 번호(예: 192.168.1.1:80)를 통해 연결이 이루어진다.</p>
<h2 id="사용-예시">사용 예시</h2>
<p>웹 서버: 웹 서버는 일반적으로 포트 80(HTTP)과 443(HTTPS)을 사용한다.</p>
<p>메일 서버: SMTP는 포트 25, IMAP은 포트 143, POP3는 포트 110을 사용한다.</p>
<p>클라이언트 애플리케이션: 클라이언트가 동적 포트를 사용해 서버와의 통신을 시작할 수 있다. 
예를 들어, 웹 브라우저가 동적 포트를 사용해 웹 서버에 연결한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[해밍코드가 무엇일까?]]></title>
            <link>https://velog.io/@ci___der/%ED%95%B4%EB%B0%8D%EC%BD%94%EB%93%9C%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C</link>
            <guid>https://velog.io/@ci___der/%ED%95%B4%EB%B0%8D%EC%BD%94%EB%93%9C%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C</guid>
            <pubDate>Mon, 19 Aug 2024 07:37:33 GMT</pubDate>
            <description><![CDATA[<p>자 87번째 키워드인 &#39;해밍코드&#39;을 알아 볼 것이다.</p>
<p>해밍코드는 네트워크 및 통신과 관련이 있기 때문에 알아보았다.</p>
<h1 id="해밍코드가-뭐에요">해밍코드가 뭐에요?</h1>
<p><img src="https://velog.velcdn.com/images/ci___der/post/4070ba02-4157-4083-a0c9-a6fbb1766ca0/image.png" alt=""></p>
<p>개념: 해밍 코드는 리처드 해밍(Richard Hamming)이 개발한 오류 검출 및 교정 코드이다. 
데이터에 오류 검출 및 교정 비트를 추가하여 오류가 발생한 위치를 식별하고 수정할 수 있는 기능을 제공한다.</p>
<h2 id="동작-방식">동작 방식</h2>
<p>비트 추가: 해밍 코드는 데이터 비트에 패리티 비트를 추가하는데, 이 패리티 비트들은 데이터 비트의 특정 조합을 확인한다. 
예를 들어, 4개의 데이터 비트에 대해 3개의 패리티 비트를 추가하여 총 7비트로 구성된 해밍 코드를 생성한다.</p>
<p>오류 검출 및 교정: 전송된 코드에서 오류가 발생하면, 수신자는 추가된 패리티 비트의 값을 확인하여 오류가 발생한 위치를 정확히 파악할 수 있다. 
이 위치를 바탕으로 오류가 발생한 비트를 반전시켜 원래의 데이터를 복구한다.</p>
<p>한계: 해밍 코드는 단일 비트 오류를 교정하고, 다중 비트 오류를 검출할 수 있지만, 다중 비트 오류를 교정하지는 못한다.</p>
<p>사용 예시: 해밍 코드는 메모리 시스템, 위성 통신, 데이터 전송 프로토콜 등에서 사용된다. 특히, 단일 비트 오류가 자주 발생할 수 있는 환경에서 유용하다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[패리티 비트가 무엇일까?]]></title>
            <link>https://velog.io/@ci___der/%ED%8C%A8%EB%A6%AC%ED%8B%B0-%EB%B9%84%ED%8A%B8%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C</link>
            <guid>https://velog.io/@ci___der/%ED%8C%A8%EB%A6%AC%ED%8B%B0-%EB%B9%84%ED%8A%B8%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C</guid>
            <pubDate>Mon, 19 Aug 2024 06:46:16 GMT</pubDate>
            <description><![CDATA[<p>자 86번째 키워드인 &#39;패리티 비트&#39;을 알아 볼 것이다.</p>
<p>패리티 비트는 네트워크 및 통신과 관련이 있기 때문에 알아보았다.</p>
<h1 id="패리티-비트가-뭐에요">패리티 비트가 뭐에요?</h1>
<p><img src="https://velog.velcdn.com/images/ci___der/post/e868afe4-6298-4448-bd99-19b8a49ccfb5/image.png" alt=""></p>
<p>패리티 비트는 전송된 데이터에서 오류를 검출하기 위한 가장 단순한 형태의 오류 검출 메커니즘이다. 데이터가 전송될 때 데이터 비트와 별도로 추가된 비트로, 전송된 데이터의 비트 값에 따라 설정된다.</p>
<h2 id="동작-방식">동작 방식</h2>
<h3 id="짝수-패리티even-parity">짝수 패리티(Even Parity)</h3>
<p>데이터 비트의 1의 개수가 짝수가 되도록 패리티 비트를 설정한다. 
예를 들어, 데이터가 10101010(1의 개수 4개)일 때 패리티 비트는 0이 된다. 
데이터가 10101011(1의 개수 5개)일 때는 패리티 비트를 1로 설정해 1의 개수를 짝수로 만든다.</p>
<h3 id="홀수-패리티odd-parity">홀수 패리티(Odd Parity)</h3>
<p>데이터 비트의 1의 개수가 홀수가 되도록 패리티 비트를 설정한다. 
예를 들어, 데이터가 10101010(1의 개수 4개)일 때 패리티 비트는 1로 설정한다.
홀수 패리티 비트도 짝수와 같이 4개라면 패리티비트를 1로 설정하여 1의 개수를 홀수로 만든다.</p>
<p>한계: 패리티 비트는 단일 비트 오류를 검출할 수 있지만, 다중 비트 오류(예: 두 개의 비트가 동시에 오류 발생)는 검출할 수 없다. 또한, 오류를 교정하는 기능은 없다.</p>
<p>사용 예시: 패리티 비트는 전송 오류를 최소화해야 하는 간단한 통신 시스템에서 사용된다. 예를 들어, 초기 모뎀 통신이나 일부 메모리 오류 검출 메커니즘에서 사용된다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Socket이 과연 무엇일까?]]></title>
            <link>https://velog.io/@ci___der/Socket%EC%9D%B4-%EA%B3%BC%EC%97%B0-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C</link>
            <guid>https://velog.io/@ci___der/Socket%EC%9D%B4-%EA%B3%BC%EC%97%B0-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C</guid>
            <pubDate>Wed, 07 Aug 2024 05:05:58 GMT</pubDate>
            <description><![CDATA[<p>자 85번째 키워드인 &#39;Socket&#39;을 알아 볼 것이다.</p>
<p>소켓프로그래밍은 네트워크 및 통신, 클라이언트과 서버 관련이 있기 때문에 알아보았다.</p>
<h1 id="socket이-뭐에요">Socket이 뭐에요?</h1>
<p><img src="https://velog.velcdn.com/images/ci___der/post/0a91f8fe-35c1-4e11-a391-de0021c87e84/image.png" alt=""></p>
<p>Socket은 컴퓨터 네트워크에서 통신을 수행하기 위한 양 끝단을 의미한다. </p>
<p>소켓은 네트워크에서 데이터를 보내고 받기 위한 인터페이스로서, 클라이언트와 서버 간의 통신을 가능하게 한다.</p>
<h2 id="1-소켓의-기본-개념">1. 소켓의 기본 개념</h2>
<ul>
<li><p>소켓(Socket): 네트워크를 통해 데이터를 주고받기 위한 양 끝단의 하나이다. 
소켓은 IP 주소와 포트 번호를 조합하여 통신의 종착지를 지정한다.</p>
</li>
<li><p>IP 주소: 인터넷에 연결된 각 기기를 식별하는 고유한 주소이다.</p>
</li>
<li><p>포트 번호: 한 컴퓨터 내에서 여러 네트워크 서비스를 구분하는 숫자이다. </p>
</li>
</ul>
<h2 id="2-소켓의-종류">2. 소켓의 종류</h2>
<ol>
<li><p>스트림 소켓 (Stream Socket): TCP 프로토콜을 기반으로 하며, 신뢰성 있는 데이터 전송을 보장한다. 데이터는 순차적으로 전송되며 손실되지 않는다.</p>
</li>
<li><p>데이터그램 소켓 (Datagram Socket): UDP 프로토콜을 기반으로 하며, 신뢰성이 없지만 빠른 전송을 제공한다. 데이터가 순서대로 도착하지 않을 수도 있고, 손실될 수도 있다는 점이 있다.</p>
</li>
</ol>
<h2 id="3-소켓-프로그래밍">3. 소켓 프로그래밍</h2>
<p>소켓 프로그래밍은 소켓을 사용하여 네트워크 상에서 데이터를 주고받는 프로그래밍 기법이라고 한다. 
소켓 프로그래밍을 통해 클라이언트와 서버 간의 통신을 구현할 수 있다.</p>
<h3 id="클라이언트---서버-모델">클라이언트 - 서버 모델</h3>
<ul>
<li><p>서버: 서비스를 제공하는 컴퓨터 또는 프로그램이다. 서버는 특정 포트에서 클라이언트의 요청을 기다진다.</p>
</li>
<li><p>클라이언트: 서비스를 요청하는 컴퓨터 또는 프로그램이다. 클라이언트는 서버에 연결 요청을 보낸다.</p>
</li>
</ul>
<h2 id="4-소켓의-동작-방식">4. 소켓의 동작 방식</h2>
<ol>
<li><p>서버 소켓 생성: 서버는 socket 함수를 사용하여 소켓을 생성한다.</p>
</li>
<li><p>바인딩: 서버 소켓은 bind 함수를 사용하여 특정 IP 주소와 포트에 바인딩된다.</p>
</li>
<li><p>리스닝: 서버는 listen 함수를 호출하여 클라이언트의 연결 요청을 기다린다.</p>
</li>
<li><p>연결 수락: 클라이언트가 연결을 요청하면, 서버는 accept 함수를 사용하여 연결을 수락한다.</p>
</li>
<li><p>데이터 송수신: 서버와 클라이언트는 send 및 recv 함수를 사용하여 데이터를 주고받는다.</p>
</li>
<li><p>연결 종료: 통신이 끝나면 close 함수를 사용하여 소켓을 닫는다.</p>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[MAC Address가 무엇일까?]]></title>
            <link>https://velog.io/@ci___der/MAC-Address%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C</link>
            <guid>https://velog.io/@ci___der/MAC-Address%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C</guid>
            <pubDate>Wed, 07 Aug 2024 04:21:34 GMT</pubDate>
            <description><![CDATA[<p>자 84번째 키워드인 &#39;MAC Address&#39;를 알아 볼 것이다.</p>
<p>최근 키워드 들이 네트워크 관련하여 알아 보았는데, 관련된 키워드라서 알아보게 되었다.</p>
<h1 id="mac-address가-뭐에요">MAC Address가 뭐에요?</h1>
<p><img src="https://velog.velcdn.com/images/ci___der/post/abf8e872-252d-4b36-ad7a-4227f79817b8/image.png" alt=""></p>
<p>MAC 주소(Media Access Control address)는 네트워크 인터페이스 카드(NIC)에 할당된 고유 식별자이다. </p>
<p>이 주소는 네트워크 장치 간의 통신을 가능하게 하며, 네트워크의 데이터 링크 계층(Layer 2)에서 사용된다. </p>
<p>MAC 주소는 일반적으로 제조업체에 의해 하드웨어에 내장되어 있으며, 네트워크에서 장치를 식별하
는 데 사용된다.</p>
<h2 id="mac-주소의-구성">MAC 주소의 구성</h2>
<ul>
<li><p>길이: MAC 주소는 48비트 길이의 주소이다. 이를 6바이트로 표현할 수 있다(8 x 6).</p>
</li>
<li><p>표기 방식: 일반적으로 16진수로 표현되며, 두 자리씩 콜론(:)이나 하이픈(-)으로 구분한다. </p>
<blockquote>
<p>예: 00:1A:2B:3C:4D:5E 또는 00-1A-2B-3C-4D-5E</p>
</blockquote>
</li>
<li><p>제조사 코드: 첫 24비트는 OUI(Organizationally Unique Identifier)로, 네트워크 장비 제조사에게 고유하게 할당된 코드이다. 이는 IEEE에서 관리하게 된다.</p>
</li>
<li><p>장치 식별자: 나머지 24비트는 제조사가 자체적으로 관리하며, 해당 제조사가 생산하는 각 장치에 고유한 식별자를 부여한다.</p>
</li>
</ul>
<h2 id="mac-주소의-동작-방식">MAC 주소의 동작 방식</h2>
<ol>
<li><p>네트워크 데이터 링크 계층: MAC 주소는 OSI 모델의 데이터 링크 계층에서 작동한다. 데이터 링크 계층은 물리적 네트워크의 데이터 전송을 담당한다.</p>
</li>
<li><p>프레임 전송: 데이터는 네트워크를 통해 전송될 때, 프레임이라는 단위로 나눠진다. 이 프레임에는 출발지와 목적지의 MAC 주소가 포함된다.</p>
</li>
<li><p>ARP (Address Resolution Protocol): IP 네트워크에서 ARP는 IP 주소를 MAC 주소로 변환하는 역할을 한다. 이는 로컬 네트워크 내에서 데이터가 올바른 장치로 전달되도록 한다.</p>
</li>
</ol>
<h2 id="mac-주소의-주요-기능">MAC 주소의 주요 기능</h2>
<ul>
<li><p>유니캐스트: 대부분의 MAC 주소는 단일 장치에 대한 유니캐스트 주소이다. 이 주소는 특정 장치 하나를 식별한다.</p>
</li>
<li><p>멀티캐스트: 특정 그룹의 장치들에게 데이터를 전송하기 위해 사용되는 멀티캐스트 주소가 있다. 예를 들어, 01:00:5E:xx:xx:xx 형식이다.</p>
</li>
<li><p>브로드캐스트: 네트워크의 모든 장치에게 데이터를 전송하기 위한 브로드캐스트 주소는 FF:FF:FF:FF:FF:FF이다.</p>
</li>
</ul>
<h2 id="mac-주소의-중요성">MAC 주소의 중요성</h2>
<ol>
<li><p>고유 식별: MAC 주소는 각 네트워크 장치에 고유한 식별자를 부여하여 네트워크 상의 충돌을 방지한다.</p>
</li>
<li><p>네트워크 보안: 네트워크 관리자는 MAC 주소를 통해 특정 장치의 네트워크 접근을 제어하고, 이를 통해 네트워크 보안을 강화할 수 있다.</p>
</li>
<li><p>장치 추적: MAC 주소는 네트워크 트래픽을 모니터링하고 분석하는 데 유용하다. 
예를 들어, 네트워크 관리자나 보안 팀은 MAC 주소를 통해 특정 장치의 활동을 추적할 수 있다.</p>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[Packet 과 Router는 무엇일까?]]></title>
            <link>https://velog.io/@ci___der/Packet-%EA%B3%BC-Router%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C</link>
            <guid>https://velog.io/@ci___der/Packet-%EA%B3%BC-Router%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C</guid>
            <pubDate>Wed, 07 Aug 2024 02:33:03 GMT</pubDate>
            <description><![CDATA[<p>자 83번째 키워드인 &#39;Packet 과 Router&#39; 를 알아 볼 것이다.</p>
<p>이전 키워드에서 프로토콜과 통신 관련되서 알아 보았기에 데이터 통신에 관련 하여 알아 보았다.</p>
<h1 id="packet이-뭔가요">Packet이 뭔가요?</h1>
<p>패킷(packet)은 데이터 통신에서 사용되는 기본 단위라고 한다. </p>
<p>컴퓨터 네트워크에서 데이터를 효율적으로 전송하기 위해 큰 데이터를 작은 조각으로 나누고, 
이 조각들을 패킷이라 부른다. </p>
<p>각 패킷은 전송되어야 할 데이터의 일부분과 그 데이터를 목적지로 전달하기 위한 여러 가지 정보를 포함한다.</p>
<h2 id="packet의-구조">Packet의 구조</h2>
<p>헤더(Header): 패킷의 앞부분으로, 제어 정보와 메타데이터가 포함되어 있다.</p>
<h3 id="packet---header">Packet - Header</h3>
<ul>
<li><p>송신자와 수신자의 IP 주소: 데이터가 어디에서 어디로 가는지를 나타낸다.</p>
</li>
<li><p>프로토콜 정보: 패킷이 어떤 프로토콜(TCP, UDP 등)을 사용하는지 명시한다.</p>
</li>
<li><p>패킷 번호: 데이터가 여러 패킷으로 나누어질 때 각 패킷의 순서를 나타낸다.</p>
</li>
<li><p>오류 검출 코드: 데이터 전송 중에 발생할 수 있는 오류를 검출하기 위한 정보이다.</p>
</li>
</ul>
<p>페이로드(Payload): 실제 전송되는 데이터 부분으로, 사용자가 보낸 메시지, 파일의 일부 이며, 패킷의 크기나 네트워크 조건에 따라 이 부분의 크기가 결정된다.</p>
<p>트레일러(Trailer): 선택적인 부분으로, 데이터 무결성을 확인하기 위한 추가 정보가 포함될 수 있다.</p>
<h3 id="packet---전송-과정">Packet - 전송 과정</h3>
<ul>
<li><p>분할: 큰 데이터를 전송하기 전에 작은 패킷으로 나누어진다.</p>
</li>
<li><p>전송: 각 패킷은 독립적으로 네트워크를 통해 목적지로 전송된다. </p>
</li>
<li><p>재조립: 목적지에 도착한 패킷들은 원래의 순서대로 재조립되어 원본 데이터를 복원한다.</p>
</li>
<li><p>오류 검출 및 수정: 전송 중에 발생한 오류는 헤더나 트레일러에 포함된 오류 검출 정보를 통해 확인되고 수정된다.</p>
</li>
</ul>
<h1 id="router가-뭔가요">Router가 뭔가요?</h1>
<p>라우터(Router)는 컴퓨터 네트워크에서 패킷을 전송하는 장치라고 한다. </p>
<p>라우터는 네트워크 간의 데이터 패킷을 목적지로 전달하는 역할을 하며, 각 패킷이 가장 효율적으로 전달될 수 있는 경로를 결정하게 된다.</p>
<h2 id="router-기능-수행">Router 기능 수행</h2>
<ol>
<li><p><strong>패킷 포워딩(Packet Forwarding)</strong>: 라우터는 들어오는 패킷을 분석하고, 목적지 IP 주소를 기반으로 패킷을 적절한 출력 포트로 전달한다.</p>
</li>
<li><p><strong>라우팅(Route Determination)</strong>: 라우터는 네트워크 내의 최적 경로를 결정하기 위해 라우팅 테이블을 사용한다. 라우팅 테이블에는 각 네트워크에 대한 경로 정보가 저장되어 있다. 이 정보는 정적(static)으로 설정되거나 동적(dynamic)으로 라우팅 프로토콜을 통해 갱신된다.</p>
</li>
<li><p><strong>라우팅 프로토콜 사용</strong>: 라우터는 네트워크 간의 경로 정보를 교환하기 위해 다양한 라우팅 프로토콜을 사용한다. </p>
<blockquote>
<p>대표적인 라우팅 프로토콜로는 OSPF(Open Shortest Path First), BGP(Border Gateway Protocol), RIP(Routing Information Protocol) 등이 있다. </p>
</blockquote>
</li>
<li><p><strong>네트워크 주소 변환(Network Address Translation, NAT)</strong>: 라우터는 사설 IP 주소와 공인 IP 주소 간의 변환을 수행할 수 있다. 이는 내부 네트워크의 사설 IP 주소를 외부 네트워크에 공개하지 않고, 하나의 공인 IP 주소로 여러 장치가 인터넷에 접속할 수 있게 한다.</p>
</li>
<li><p><strong>방화벽 기능</strong>: 일부 라우터는 기본적인 방화벽 기능을 포함하여 네트워크 보안을 강화할 수 있다. 이를 통해 불필요한 트래픽이나 잠재적인 위협을 차단할 수 있다.</p>
</li>
<li><p><strong>품질 보장(QoS, Quality of Service)</strong>: 라우터는 다양한 유형의 트래픽에 대해 우선순위를 설정하여 네트워크 성능을 최적화할 수 있다. 예를 들어, 실시간 스트리밍이나 VoIP(Voice over IP) 트래픽을 우선 처리하여 지연을 최소화할 수 있다.</p>
</li>
</ol>
<h1 id="두-사이의-연관성">두 사이의 연관성</h1>
<h2 id="데이터-전송-과정">데이터 전송 과정</h2>
<p>패킷: 네트워크를 통해 데이터를 전송할 때 사용되는 기본 단위이다. 큰 데이터를 작은 조각으로 나눈 후 각 패킷에 목적지 정보와 같은 메타데이터를 포함시켜 전송한다.</p>
<p>라우터: 네트워크 내에서 패킷을 목적지까지 전달하는 역할을 한다. 라우터는 패킷의 목적지 주소를 읽고, 이를 기반으로 최적의 경로를 결정하여 패킷을 다음 네트워크 장치로 전달한다.</p>
<h2 id="경로-결정과-전달">경로 결정과 전달</h2>
<p>패킷: 각 패킷은 목적지에 도달하기 위해 여러 네트워크 장치를 거치게 된다. 이 과정에서 패킷들은 서로 다른 경로를 통해 전송될 수 있으며, 각 패킷은 독립적으로 처리된다.</p>
<p>라우터: 라우터는 패킷의 목적지 IP 주소를 분석하여, 해당 패킷을 다음에 어느 경로로 보낼지 결정한다. 라우터는 라우팅 테이블과 라우팅 프로토콜을 사용하여 네트워크 상태를 파악하고, 가장 효율적인 경로를 선택한다.</p>
<h2 id="네트워크-효율성-및-안정성">네트워크 효율성 및 안정성</h2>
<p>패킷: 데이터 전송을 효율적으로 하기 위해 큰 데이터를 작은 패킷으로 나눔으로써 네트워크 혼잡을 줄이고, 데이터 손실 시 일부 패킷만 재전송하면 되므로 전체 데이터의 재전송을 피할 수 있다.</p>
<p>라우터: 라우터는 패킷을 최적의 경로로 전달하여 네트워크 혼잡을 줄이고, 패킷이 빠르고 안정적으로 목적지에 도달할 수 있도록 한다. 또한, 장애가 발생할 경우 대체 경로를 찾아 패킷을 전달할 수 있어 네트워크의 신뢰성을 높인다.</p>
<h2 id="오류-검출-및-수정">오류 검출 및 수정</h2>
<p>패킷: 각 패킷에는 오류 검출을 위한 정보가 포함되어 있어, 데이터 전송 중에 발생할 수 있는 오류를 검출하고 수정할 수 있다.</p>
<p>라우터: 라우터는 패킷을 전송하면서 오류가 있는 패킷을 감지하고, 필요한 경우 재전송을 요청하거나 다른 경로를 통해 패킷을 재전송한다.</p>
<h2 id="통신-프로토콜">통신 프로토콜</h2>
<p>패킷: 다양한 통신 프로토콜(TCP, UDP 등)을 통해 전송됩니다. 각 프로토콜은 패킷의 형식과 전송 방식을 정의한다.
라우터: 라우터는 이러한 프로토콜을 이해하고 처리할 수 있으며, 특정 프로토콜에 따라 패킷을 올바르게 전달한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[통신 방식 종류엔 뭐가 있을까?]]></title>
            <link>https://velog.io/@ci___der/%ED%86%B5%EC%8B%A0-%EB%B0%A9%EC%8B%9D-%EC%A2%85%EB%A5%98%EC%97%94-%EB%AD%90%EA%B0%80-%EC%9E%88%EC%9D%84%EA%B9%8C</link>
            <guid>https://velog.io/@ci___der/%ED%86%B5%EC%8B%A0-%EB%B0%A9%EC%8B%9D-%EC%A2%85%EB%A5%98%EC%97%94-%EB%AD%90%EA%B0%80-%EC%9E%88%EC%9D%84%EA%B9%8C</guid>
            <pubDate>Tue, 06 Aug 2024 05:28:26 GMT</pubDate>
            <description><![CDATA[<p>자 82번째 키워드인 &#39;통신 방식&#39;에 대해서 알아볼 것이다.</p>
<p>일반적인 통신 방식 즉, Cast종류에 대해서는 4가지 정도가 있는데 4가지의 대해서 상세히 알아보았다.</p>
<h1 id="통신-방식이-뭔가요">통신 방식이 뭔가요?</h1>
<p><img src="https://velog.velcdn.com/images/ci___der/post/1222546c-2641-4f5a-b9e3-943b067d55f0/image.png" alt=""></p>
<p>통신은 여러가지 데이터를 어떻게 받고 주느냐에 방식의 차이를 나눠 놓은 것이며 4가지로 분류할 수 있다.</p>
<h2 id="1-unicast">1. Unicast</h2>
<ul>
<li><p>설명: Unicast는 네트워크 통신에서 하나의 송신자가 하나의 특정 수신자에게 데이터를 전송하는 방식이다.</p>
</li>
<li><p>특징
1:1 통신: 송신자와 수신자 간에 직접적인 연결이 이루어진다.
효율성: 네트워크 자원이 수신자 하나에 집중되어 사용된다.</p>
</li>
<li><p>사용 범위</p>
<ol>
<li>웹 브라우징: 웹 페이지 요청 및 응답</li>
<li>이메일: 개인 간 이메일 송수신</li>
<li>파일 전송: FTP(파일 전송 프로토콜)를 통한 파일 전송</li>
<li>VoIP 통화: 인터넷 전화 서비스</li>
</ol>
</li>
</ul>
<h2 id="2-multicast">2. Multicast</h2>
<ul>
<li><p>설명: Multicast는 하나의 송신자가 특정 그룹의 다수 수신자에게 데이터를 전송하는 방식이다.</p>
</li>
<li><p>특징
1:다 통신: 송신자와 수신자 그룹 간에 데이터가 전송된다.
효율성: 동일한 데이터를 여러 수신자에게 전송할 때 네트워크 자원을 절약할 수 있다.</p>
</li>
<li><p>사용 범위</p>
<ol>
<li>비디오 스트리밍: IPTV, 실시간 방송</li>
<li>온라인 회의: 다자간 화상 회의 시스템</li>
<li>네트워크 게임: 다자간 멀티플레이어 게임</li>
<li>소프트웨어 업데이트: 여러 장치에 동시에 업데이트 전송</li>
</ol>
</li>
</ul>
<h2 id="3-anycast">3. Anycast</h2>
<ul>
<li><p>설명: Anycast는 하나의 송신자가 동일한 주소를 가진 여러 수신자 중 가장 가까운 수신자에게 데이터를 전송하는 방식이다.</p>
</li>
<li><p>특징
가장 가까운 수신자: 네트워크 경로 상에서 가장 가까운 수신자에게 데이터를 전송한다.
효율성: 트래픽 부하를 분산하고, 지연 시간을 최소화할 수 있다.</p>
</li>
<li><p>사용 범위</p>
<ol>
<li>DNS 서버: 가장 가까운 DNS 서버로 요청을 전달하여 응답 시간을 단축</li>
<li>콘텐츠 전송 네트워크(CDN): 사용자와 가장 가까운 서버에서 콘텐츠를 제공</li>
<li>부하 분산: 서버 로드 밸런싱</li>
</ol>
</li>
</ul>
<h2 id="4-broadcast">4. Broadcast</h2>
<ul>
<li><p>설명: Broadcast는 하나의 송신자가 네트워크 내의 모든 수신자에게 데이터를 전송하는 방식이다.</p>
</li>
<li><p>특징
1:전체 통신: 네트워크 내의 모든 장치가 데이터를 수신한다.
효율성 부족: 불필요한 네트워크 트래픽이 발생할 수 있다.</p>
</li>
<li><p>사용 범위</p>
<ol>
<li>ARP 요청: IP 주소를 MAC 주소로 변환하기 위한 요청</li>
<li>DHCP 요청: 네트워크 초기 설정 시 IP 주소를 할당받기 위한 요청</li>
<li>라우팅 정보 전달: 라우터 간에 라우팅 정보를 전달할 때</li>
</ol>
</li>
</ul>
<h2 id="요약">요약</h2>
<ol>
<li>Unicast: 1:1 통신 방식으로, 주로 웹 브라우징, 이메일, 파일 전송, VoIP 통화 등에 사용</li>
<li>Multicast: 1:다 통신 방식으로, 비디오 스트리밍, 온라인 회의, 네트워크 게임, 소프트웨어 업데이트 등에 사용</li>
<li>Anycast: 가장 가까운 수신자에게 데이터를 전송하는 방식으로, DNS 서버, CDN, 부하 분산 등에 사용</li>
<li>Broadcast: 1:전체 통신 방식으로, ARP 요청, DHCP 요청, 라우팅 정보 전달 등에 사용</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[Protocol 종류엔 뭐가 있을까?]]></title>
            <link>https://velog.io/@ci___der/Protocol-%EC%A2%85%EB%A5%98%EC%97%94-%EB%AD%90%EA%B0%80-%EC%9E%88%EC%9D%84%EA%B9%8C</link>
            <guid>https://velog.io/@ci___der/Protocol-%EC%A2%85%EB%A5%98%EC%97%94-%EB%AD%90%EA%B0%80-%EC%9E%88%EC%9D%84%EA%B9%8C</guid>
            <pubDate>Tue, 06 Aug 2024 05:05:25 GMT</pubDate>
            <description><![CDATA[<p>자 81 번째 키워드인 &#39;Protocol&#39;을 알아 볼 것이다.</p>
<p>이번 키워드는 네트워크 관련된 기술 프로토콜도 알아보고 주요로 뭐가 있는지 알아 볼 것이다.</p>
<h1 id="protocol이-뭐에요">Protocol이 뭐에요?</h1>
<p><img src="https://velog.velcdn.com/images/ci___der/post/881e6ee6-0d90-497a-bad5-0bc154f10fbb/image.png" alt=""></p>
<p>프로토콜은 데이터 통신을 수행하는 동안 두 장치가 데이터를 어떻게 교환할지를 정의한 규칙 및 표준의 모음이라고 한다. 프로토콜은 데이터 형식, 신호 타이밍, 오류 검출 및 수정 방법 등을 규정한다.</p>
<p>네트워크 프로토콜은 일반적으로 계층 구조로 구성되어 있다. 이전에 알아본 계층 구조인 OSI(Open Systems Interconnection) 7계층 모델과 TCP/IP 4계층 모델로 구성이 된다.</p>
<h2 id="protocol의-역할">Protocol의 역할</h2>
<ul>
<li><p>데이터 포맷 지정: 데이터를 어떻게 형식화하고 해석할지를 규정한다. 예를 들어, 데이터의 시작과 끝을 구분하는 방법, 헤더와 페이로드의 구성을 정의한다.</p>
</li>
<li><p>동기화: 송신자와 수신자가 데이터를 동일한 타이밍에 주고받을 수 있도록 동기화한다.</p>
</li>
<li><p>오류 검출 및 수정: 데이터 전송 중 발생할 수 있는 오류를 검출하고 수정하는 방법을 제공한다.</p>
</li>
<li><p>흐름 제어: 데이터의 흐름을 제어하여 네트워크의 혼잡을 방지한다.</p>
</li>
<li><p>라우팅: 데이터 패킷이 목적지에 도달하는 경로를 결정한다.</p>
</li>
</ul>
<h2 id="주요-protocol">주요 Protocol</h2>
<p>각 레이어이 속한 프로토콜이 있는게, 각 계층에 속해있는 주요 프로토콜을 알아 보았다.</p>
<h3 id="udp-user-datagram-protocol">UDP (User Datagram Protocol)</h3>
<ul>
<li><p>계층: 전송 계층 (Transport Layer)</p>
</li>
<li><p>설명: UDP는 TCP/IP 프로토콜 스위트의 전송 계층에 속하는 프로토콜이다. 연결 지향적이지 않고 데이터그램 방식을 사용하여 데이터를 전송한다.</p>
</li>
<li><p>특징</p>
<ol>
<li>비연결형: 연결 설정 과정이 필요 없으며, 데이터 전송 전에 수신자와의 연결을 
설정하지 않는다.</li>
<li>신뢰성 없음: 데이터 전송의 신뢰성을 보장하지 않으며, 패킷 손실, 중복, 순서 
오류가 발생할 수 있다.</li>
<li>빠른 전송 속도: 오버헤드가 적어 빠른 데이터 전송이 가능하며, 실시간 애플리케이션
(예: 스트리밍, 온라인 게임)에서 많이 사용된다.</li>
</ol>
</li>
</ul>
<h3 id="tcp-transmission-control-protocol">TCP (Transmission Control Protocol)</h3>
<ul>
<li><p>계층: 전송 계층 (Transport Layer)</p>
</li>
<li><p>설명: TCP는 TCP/IP 프로토콜 스위트의 전송 계층에 속하는 프로토콜로, 신뢰성 있는 데이터 전송을 보장한다.</p>
</li>
<li><p>특징</p>
<ol>
<li>연결형: 데이터 전송 전에 송신자와 수신자 간에 연결을 설정한다.</li>
<li>신뢰성: 데이터의 순서 보장, 오류 검출 및 수정, 흐름 제어 등을 통해 
신뢰성 있는 데이터 전송을 제공한다.</li>
<li>혼잡 제어: 네트워크 혼잡을 방지하기 위한 제어 메커니즘을 포함한다.</li>
</ol>
</li>
</ul>
<h3 id="arp-address-resolution-protocol">ARP (Address Resolution Protocol)</h3>
<ul>
<li><p>계층: 네트워크 계층 (Network Layer)</p>
</li>
<li><p>설명: ARP는 IP 주소를 물리적 하드웨어 주소(MAC 주소)로 변환하는 프로토콜이다.</p>
</li>
<li><p>특징</p>
<ol>
<li>IP-MAC 매핑: 로컬 네트워크에서 IP 주소를 해당 장치의 MAC 주소로 매핑한다.</li>
<li>캐싱: ARP 테이블을 사용하여 변환된 주소를 캐싱하고, 동일한 주소 변환 요청을 줄인다.</li>
</ol>
</li>
</ul>
<h3 id="rarp-reverse-address-resolution-protocol">RARP (Reverse Address Resolution Protocol)</h3>
<ul>
<li><p>계층: 네트워크 계층 (Network Layer)</p>
</li>
<li><p>설명: RARP는 MAC 주소를 기반으로 IP 주소를 알아내는 프로토콜이다. 주로 디스크가 없는 컴퓨터가 부팅 시 자신의 IP 주소를 얻기 위해 사용한다.</p>
</li>
<li><p>특징</p>
<ol>
<li>역방향 매핑: MAC 주소를 IP 주소로 변환한다.</li>
<li>디스크 없는 장치 지원: 초기 네트워크 설정 시 IP 주소가 없는 장치가 IP 주소를 얻도록 돕는다.</li>
</ol>
</li>
</ul>
<h3 id="http-hypertext-transfer-protocol">HTTP (HyperText Transfer Protocol)</h3>
<ul>
<li><p>계층: 응용 계층 (Application Layer)</p>
</li>
<li><p>설명: HTTP는 웹 브라우저와 웹 서버 간에 데이터를 주고받기 위한 프로토콜이다.</p>
</li>
<li><p>특징</p>
<ol>
<li>비연결형: 요청과 응답이 완료되면 연결을 끊는다.</li>
<li>무상태: 각 요청은 독립적이며, 서버는 이전 요청의 상태를 기억하지 않는다.</li>
<li>메시지 형식: 요청(Request)과 응답(Response) 메시지 형식을 사용한다.</li>
</ol>
</li>
</ul>
<h3 id="dns-domain-name-system">DNS (Domain Name System)</h3>
<ul>
<li><p>계층: 응용 계층 (Application Layer)</p>
</li>
<li><p>설명: DNS는 도메인 이름을 IP 주소로 변환하는 시스템이다.</p>
</li>
<li><p>특징</p>
<ol>
<li>이름 해석: 인간이 읽을 수 있는 도메인 이름을 숫자로 된 IP 주소로 변환한다.</li>
<li>분산 구조: 중앙 집중식 데이터베이스가 아닌 분산된 데이터베이스 구조를 사용한다.</li>
<li>계층적 네임스페이스: 도메인 이름을 계층적으로 관리한다.</li>
</ol>
</li>
</ul>
<h3 id="ipv6-internet-protocol-version-6">IPv6 (Internet Protocol version 6)</h3>
<ul>
<li><p>계층: 네트워크 계층 (Network Layer)</p>
</li>
<li><p>설명: IPv6는 IP의 최신 버전으로, IPv4의 주소 부족 문제를 해결하고 다양한 향상된 기능을 제공한다.</p>
</li>
<li><p>특징</p>
<ol>
<li>확장된 주소 공간: 128비트 주소를 사용하여 사실상 무제한의 주소를 제공한다.</li>
<li>향상된 라우팅 및 자동 구성: 더 효율적인 라우팅과 네트워크 자동 구성을 지원한다.</li>
<li>보안 기능 내장: IPsec을 기본적으로 지원한다.</li>
</ol>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[TCP/IP 4 Layer가 과연 무엇일까?]]></title>
            <link>https://velog.io/@ci___der/TCPIP-4-Layer%EA%B0%80-%EA%B3%BC%EC%97%B0-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C</link>
            <guid>https://velog.io/@ci___der/TCPIP-4-Layer%EA%B0%80-%EA%B3%BC%EC%97%B0-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C</guid>
            <pubDate>Mon, 05 Aug 2024 08:35:53 GMT</pubDate>
            <description><![CDATA[<p>자 여든 번째 키워드인 &#39;TCP/IP 4 Layer&#39;를 알아 볼 것이다.</p>
<p>이전 키워드에 나왔던 &#39;OSI 7 Layer&#39;와 연관되는 개념이기 때문에 알아보았다.</p>
<h1 id="tcpip-4-layer-가-뭐에요">TCP/IP 4 Layer 가 뭐에요?</h1>
<p><img src="https://velog.velcdn.com/images/ci___der/post/da51467b-7cc4-40b4-b56c-b9c5eb71bdd0/image.png" alt=""></p>
<p>TCP/IP 4 Layer 모델은 인터넷 프로토콜 스위트(TCP/IP)의 네트워크 모델로, 네트워크 통신을 계층적으로 설명하기 위해 사용된다.</p>
<h2 id="network-interface-layer-네트워크-인터페이스-계층">Network Interface Layer (네트워크 인터페이스 계층)</h2>
<p>이 계층은 물리적인 네트워크 매체를 통해 데이터가 어떻게 전송되는지 다룬다. 데이터 링크 계층과 물리 계층을 포함하며, 이더넷, 와이파이 같은 기술들이 이 계층에서 동작한다.</p>
<ul>
<li>주요 기능: 물리적 전송, MAC 주소를 통한 데이터 링크 관리</li>
</ul>
<h2 id="internet-layer-인터넷-계층">Internet Layer (인터넷 계층)</h2>
<p>이 계층은 패킷이 발신지에서 목적지까지 어떻게 라우팅되는지에 대한 문제를 다룬다. IP(Internet Protocol) 주소를 사용하여 데이터그램을 라우팅하고 전달한다.</p>
<ul>
<li><p>주요 프로토콜: IP(Internet Protocol), ICMP(Internet Control Message Protocol), ARP(Address Resolution Protocol)</p>
</li>
<li><p>주요 기능: 패킷 주소 지정 및 라우팅, 네트워크 간 연결</p>
</li>
</ul>
<h2 id="transport-layer-전송-계층">Transport Layer (전송 계층)</h2>
<p>이 계층은 호스트 간의 데이터 전송을 담당하며, 데이터의 신뢰성, 흐름 제어, 오류 복구 등을 관리한다.</p>
<ul>
<li><p>주요 프로토콜: TCP(Transmission Control Protocol), UDP(User Datagram Protocol)</p>
</li>
<li><p>주요 기능: 데이터 전송 보장(TCP), 비연결성 데이터 전송(UDP), 포트 번호를 통한 통신 세션 관리</p>
</li>
</ul>
<h2 id="application-layer-응용-계층">Application Layer (응용 계층)</h2>
<p>이 계층은 사용자와 직접 상호작용하는 응용 프로그램이 위치하며, 다양한 네트워크 서비스와 프로토콜을 제공한다.</p>
<ul>
<li><p>주요 프로토콜: HTTP(HyperText Transfer Protocol), FTP(File Transfer Protocol), SMTP(Simple Mail Transfer Protocol), DNS(Domain Name System)</p>
</li>
<li><p>주요 기능: 사용자 인터페이스 제공, 데이터 표현, 응용 프로토콜을 통한 통신</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[OSI 7 Layer가 무엇일까?]]></title>
            <link>https://velog.io/@ci___der/OSI-7-Layer%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C</link>
            <guid>https://velog.io/@ci___der/OSI-7-Layer%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C</guid>
            <pubDate>Mon, 05 Aug 2024 08:17:36 GMT</pubDate>
            <description><![CDATA[<p>자 일흔 아홉 번째 키워드인 &#39;OSI 7 Layer&#39;를 알아 볼 것이다.</p>
<p>기사 공부를 하면서 많이 외웠던 키워드인데 새롭게 다시 알아볼겸 알아 볼 것이다.</p>
<h1 id="osi-7-layer가-뭐에요">OSI 7 Layer가 뭐에요?</h1>
<p><img src="https://velog.velcdn.com/images/ci___der/post/3009f81c-622a-4b49-b61b-731bf9084353/image.png" alt=""></p>
<p>OSI 모델(OSI 7 계층 모델)은 네트워크 통신을 7개의 계층으로 나누어 설명하는 모델이다. 
OSI는 &quot;Open Systems Interconnection&quot;의 약자로, ISO(국제표준화기구)에서 제정한 표준이다. 
각 계층은 특정한 네트워킹 기능을 담당하며, 계층 간의 인터페이스를 통해 통신이 이루어진다. </p>
<h2 id="물리-계층-physical-layer">물리 계층 (Physical Layer)</h2>
<p>전기적, 기계적, 기능적 인터페이스의 특성을 정의하며, 실제 데이터 전송 매체와 관련된 물리적 연결을 담당한다. 케이블, 스위치, 허브 등이 이 계층에 속한다.</p>
<h2 id="데이터-링크-계층-data-link-layer">데이터 링크 계층 (Data Link Layer)</h2>
<p>물리 계층에서 받은 데이터를 프레임 단위로 처리하며, 오류 감지 및 수정 기능을 제공한다. 
MAC 주소를 사용하여 장치 간의 데이터 전송을 관리한다. 이더넷, 스위치 등이 이 계층에 속한다.</p>
<h2 id="네트워크-계층-network-layer">네트워크 계층 (Network Layer)</h2>
<p>데이터 패킷의 주소 지정 및 경로 선택을 담당하며, 논리적인 주소(IP 주소)를 사용하여 데이터 전송 경로를 결정한다. 라우터가 이 계층에 해당한다.</p>
<h2 id="전송-계층-transport-layer">전송 계층 (Transport Layer)</h2>
<p>종단 간 데이터 전송을 제어하며, 데이터의 분할 및 재조립, 오류 수정, 흐름 제어 등을 담당한다. TCP, UDP 프로토콜이 이 계층에서 작동한다.</p>
<h2 id="세션-계층-session-layer">세션 계층 (Session Layer)</h2>
<p>통신 세션을 설정, 유지, 종료하는 역할을 한다. 세션 복구와 체크포인트 기능도 제공한다.</p>
<h2 id="표현-계층-presentation-layer">표현 계층 (Presentation Layer)</h2>
<p>데이터의 표현 형식을 담당하며, 암호화, 압축, 인코딩 등을 통해 응용 계층에서 받은 데이터를 처리힌다. 데이터 포맷 변환, 문자 인코딩 등이 이 계층에서 이루어진다.</p>
<h2 id="응용-계층-application-layer">응용 계층 (Application Layer)</h2>
<p>사용자가 네트워크에 접근할 수 있도록 애플리케이션 인터페이스를 제공한다. 웹 브라우저, 이메일 클라이언트, FTP 프로그램 등과 같은 다양한 응용 프로그램이 이 계층에 속한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[프로세스 상태전이가 무엇일까?]]></title>
            <link>https://velog.io/@ci___der/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EC%83%81%ED%83%9C%EC%A0%84%EC%9D%B4%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C</link>
            <guid>https://velog.io/@ci___der/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EC%83%81%ED%83%9C%EC%A0%84%EC%9D%B4%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C</guid>
            <pubDate>Mon, 05 Aug 2024 08:06:18 GMT</pubDate>
            <description><![CDATA[<p>자 일흔 여덟 번째 키워드인 &#39;프로세스 상태전이&#39;를 알아 볼 것이다.</p>
<p>이전 시리즈는 CPU 관련 키워드 인데 프로세스 개념이 같이 연관되므로 알아보았다.</p>
<h1 id="프로세스-상태-전이가-뭐에요">프로세스 상태 전이가 뭐에요?</h1>
<p><img src="https://velog.velcdn.com/images/ci___der/post/9ef82ba9-d00c-412c-9a52-99945e7ad93d/image.png" alt=""></p>
<p>프로세스 상태 전이는 운영체제에서 프로세스가 실행되는 동안 다양한 상태 간에 전환되는 과정을 말한다.
프로세스 상태 전이는 컴퓨터 시스템의 효율적인 자원 관리와 응답성을 유지하기 위해 필수적이라고 한다.</p>
<h2 id="주요-프로세스-상태">주요 프로세스 상태</h2>
<ul>
<li><p>생성 (New)
프로세스가 처음 생성되어 시스템에 등록된 상태이다.
이 상태에서는 아직 준비 상태로 전환되지 않은 것이다.</p>
</li>
<li><p>준비 (Ready)
프로세스가 실행 준비가 되었지만, CPU가 할당되기를 기다리는 상태이다.
여러 프로세스가 준비 상태에 있을 수 있으며, 준비 큐에 대기한다.</p>
</li>
<li><p>실행 (Running)
프로세스가 CPU를 할당받아 실제로 실행 중인 상태이다.
한 순간에 하나의 프로세스만이 이 상태에 있을 수 있다. (단일 CPU 시스템 기준)</p>
</li>
<li><p>대기 (Blocked or Waiting)
프로세스가 실행 중 입출력(I/O) 작업 등으로 인해 일시적으로 중단된 상태이다.
해당 작업이 완료되기를 기다린다.</p>
</li>
<li><p>완료 (Terminated)
프로세스가 모든 작업을 마치고 종료된 상태이다.
시스템 자원을 해제하고, 프로세스 제어 블록(PCB)을 삭제한다.</p>
</li>
</ul>
<h2 id="상태-전이">상태 전이</h2>
<ol>
<li><p>생성 → 준비
프로세스가 생성되면, 초기화 작업을 마친 후 준비 상태로 전이된다.</p>
</li>
<li><p>준비 → 실행
스케줄러가 준비 큐에서 프로세스를 선택하여 CPU를 할당하면 실행 상태로 전이된다.</p>
</li>
<li><p>실행 → 준비
프로세스가 실행 중 타임 슬라이스가 종료되거나, 선점 스케줄링에 의해 CPU를 반납하면 다시 준비 상태로 전이된다.</p>
</li>
<li><p>실행 → 대기
프로세스가 입출력 작업을 요청하거나, 특정 이벤트를 기다려야 하는 경우 대기 상태로 전이된다.</p>
</li>
<li><p>대기 → 준비
대기 상태에 있던 프로세스가 요청한 작업이 완료되면 준비 상태로 전이된다.</p>
</li>
<li><p>실행 → 완료
프로세스가 자신의 작업을 모두 완료하면 종료 상태로 전이된다.</p>
</li>
</ol>
<h2 id="추가-상태">추가 상태</h2>
<p>운영체제의 따라 상태가 추가적으로 나오게 되는데 아래와 같다.</p>
<ul>
<li><p>준비 대기 (Ready Suspended)
준비 상태의 프로세스가 메모리에서 스왑 아웃된 상태이다.</p>
</li>
<li><p>대기 대기 (Blocked Suspended)
대기 상태의 프로세스가 메모리에서 스왑 아웃된 상태이다.</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[CPU 스케쥴링 종류엔 뭐가 있을까?]]></title>
            <link>https://velog.io/@ci___der/CPU-%EC%8A%A4%EC%BC%80%EC%A5%B4%EB%A7%81-%EC%A2%85%EB%A5%98%EC%97%94-%EB%AD%90%EA%B0%80-%EC%9E%88%EC%9D%84%EA%B9%8C</link>
            <guid>https://velog.io/@ci___der/CPU-%EC%8A%A4%EC%BC%80%EC%A5%B4%EB%A7%81-%EC%A2%85%EB%A5%98%EC%97%94-%EB%AD%90%EA%B0%80-%EC%9E%88%EC%9D%84%EA%B9%8C</guid>
            <pubDate>Mon, 05 Aug 2024 07:49:48 GMT</pubDate>
            <description><![CDATA[<p>자 일흔 일곱 번째 키워드인 &#39;CPU 스케줄링 종류&#39;를 알아 보았다.</p>
<p>이번 키워드는 이전 키워드들의 CPU 스케쥴링 종류에 연관되는 키워드이므로 알아보았다.</p>
<h1 id="선점형-스케줄링-종류엔-뭐가있나요">선점형 스케줄링 종류엔 뭐가있나요?</h1>
<h2 id="1-round-robin-스케줄링-rr">1. Round Robin 스케줄링 (RR)</h2>
<ul>
<li><p>개념: 모든 프로세스가 동일한 시간 할당량(Time Quantum)을 받고 순환 방식으로 CPU를 할당받는 방식이다.</p>
</li>
<li><p>작동 방식
준비 상태의 프로세스는 순서대로 CPU를 할당받는다.
각 프로세스는 일정 시간(Time Quantum) 동안 실행된다.
할당 시간이 끝나면 현재 프로세스는 준비 큐의 끝으로 이동하고 다음 프로세스가 CPU를 할당받는다.</p>
</li>
<li><p>장점
공정성: 모든 프로세스가 균등하게 CPU 시간을 할당받는다.
응답 시간: 짧은 시간 내에 모든 프로세스가 최소한 한 번은 CPU를 할당받는다.</p>
</li>
<li><p>단점
컨텍스트 스위칭 오버헤드: 잦은 프로세스 전환으로 인해 성능 저하가 발생할 수 있다.
시간 할당량 선택이 중요: 너무 짧으면 오버헤드가 크고, 너무 길면 대기 시간이 길어진다.</p>
</li>
</ul>
<h2 id="2-우선순위-큐-스케줄링-priority-queue-scheduling">2. 우선순위 큐 스케줄링 (Priority Queue Scheduling)</h2>
<ul>
<li><p>개념: 프로세스마다 우선순위가 부여되고, 우선순위가 높은 프로세스가 먼저 실행되는 방식이다.</p>
</li>
<li><p>작동 방식
준비 상태의 프로세스는 우선순위에 따라 정렬된다.
현재 실행 중인 프로세스보다 높은 우선순위의 프로세스가 도착하면 CPU가 선점된다.
우선순위가 동일한 경우, FCFS(First Come First Served) 방식으로 스케줄링된다.</p>
</li>
<li><p>장점
중요한 프로세스를 빠르게 처리할 수 있다.
긴급한 작업을 신속하게 처리할 수 있다.</p>
</li>
<li><p>단점
기아 현상(Starvation): 낮은 우선순위의 프로세스가 실행되지 못하고 무한정 대기할 수 있다.
우선순위 역전(Priority Inversion): 낮은 우선순위 프로세스가 높은 우선순위 프로세스를 블록할 수 있다.</p>
</li>
</ul>
<h2 id="3-다단계-피드백-큐-스케줄링-multilevel-feedback-queue-scheduling">3. 다단계 피드백 큐 스케줄링 (Multilevel Feedback Queue Scheduling)</h2>
<ul>
<li><p>개념: 여러 단계의 큐를 사용하여 프로세스의 우선순위를 동적으로 조정하며, 프로세스가 한 큐에서 다른 큐로 이동할 수 있는 방식다.</p>
</li>
<li><p>작동 방식
프로세스는 첫 번째 큐에서 시작하며, 각 큐마다 우선순위와 시간 할당량이 다르다.
첫 번째 큐에서 시간 할당량을 다 사용하면 다음 큐로 이동한다.
낮은 큐로 갈수록 시간 할당량이 길어지고 우선순위가 낮아진다.
특정 조건이 충족되면 다시 높은 우선순위 큐로 이동할 수 있다.</p>
</li>
<li><p>장점
유연성: 다양한 우선순위와 시간 할당량을 조정할 수 있어 다양한 프로세스 특성을 고려할 수 있다.
공정성: 자주 CPU를 필요로 하는 프로세스는 낮은 우선순위로 이동하여 CPU 독점을 방지한다.</p>
</li>
<li><p>단점
복잡성: 큐의 수와 스케줄링 정책을 결정하는 것이 복잡하다.
조정 필요: 각 큐의 시간 할당량과 이동 조건을 적절히 설정해야 효과적이다.</p>
</li>
</ul>
<h1 id="비선점형-스케줄링-종류엔-뭐가있나요">비선점형 스케줄링 종류엔 뭐가있나요?</h1>
<h2 id="1-fcfs-first-come-first-served">1. FCFS (First Come First Served)</h2>
<ul>
<li><p>개념: 가장 먼저 도착한 프로세스가 먼저 CPU를 할당받는 방식이다.</p>
</li>
<li><p>작동 방식
준비 상태의 프로세스는 도착 순서대로 대기 큐에 삽입된다.
CPU가 비어 있으면, 대기 큐의 첫 번째 프로세스가 CPU를 할당받아 완료될 때까지 실행된다.
완료된 후에는 다음 프로세스가 CPU를 할당받는다.</p>
</li>
<li><p>장점
간단하고 구현이 용이하다.
공정하게 모든 프로세스를 도착 순서대로 처리한다.</p>
</li>
<li><p>단점
평균 대기 시간이 길어질 수 있다.
긴 작업이 먼저 도착하면 뒤에 도착한 짧은 작업들이 오랫동안 대기할 수 있다(Convoy Effect).</p>
</li>
</ul>
<h2 id="2-sjf-shortest-job-first">2. SJF (Shortest Job First)</h2>
<ul>
<li><p>개념: 실행 시간이 가장 짧은 프로세스가 먼저 CPU를 할당받는 방식이다.</p>
</li>
<li><p>작동 방식
준비 상태의 프로세스는 실행 시간을 기준으로 정렬된다.
CPU가 비어 있으면, 대기 중인 프로세스 중 실행 시간이 가장 짧은 프로세스가 CPU를 할당받는다.
해당 프로세스가 완료된 후에는 다음으로 실행 시간이 짧은 프로세스가 CPU를 할당받는다.</p>
</li>
<li><p>장점
평균 대기 시간을 최소화할 수 있다.
CPU 활용 효율성이 높다.</p>
</li>
<li><p>단점
실행 시간을 사전에 정확히 예측하기 어려울 수 있다.
기아 현상(Starvation): 긴 작업들이 짧은 작업들에 밀려 무한정 대기할 수 있다.</p>
</li>
</ul>
<h2 id="3-deadline-scheduling">3. Deadline Scheduling</h2>
<ul>
<li><p>개념: 각 프로세스에 데드라인(마감시간)을 설정하고, 데드라인이 임박한 프로세스가 먼저 CPU를 할당받는 방식이다.</p>
</li>
<li><p>작동 방식
프로세스는 각각의 데드라인을 가지고 준비 상태에서 대기한다.
CPU가 비어 있으면, 데드라인이 가장 임박한 프로세스가 CPU를 할당받아 실행된다.
프로세스가 완료될 때까지 실행되고, 이후 다음으로 데드라인이 임박한 프로세스가 CPU를 할당받는다.</p>
</li>
<li><p>장점
실시간 시스템에서 매우 유용하며, 데드라인 내에 작업을 완료할 수 있다.
중요한 작업이 제시간에 완료되도록 보장한다.</p>
</li>
<li><p>단점
모든 작업의 데드라인을 관리하고 예측하는 것이 어렵다.
데드라인을 충족시키지 못할 경우 시스템의 안정성에 문제가 발생할 수 있다.</p>
</li>
</ul>
<h1 id="다단계-스케줄링은-뭐에요">다단계 스케줄링은 뭐에요?</h1>
<ul>
<li><p>다단계 스케줄링 (Multilevel Queue Scheduling)은 프로세스를 여러 개의 큐로 분류하여 각 큐마다 다른 스케줄링 알고리즘을 적용하는 방식이다. </p>
</li>
<li><p>각 큐는 서로 다른 우선순위를 가지며, 특정 유형의 프로세스가 특정 큐에 배정된다. 
다단계 스케줄링은 다양한 프로세스의 요구를 충족시키기 위해 설계되었다고 한다.</p>
</li>
<li><p>선점형 또는 비선점형으로 구성할 수 있으며, 각 큐는 다른 우선순위를 가질 수 있다. </p>
</li>
</ul>
<h2 id="다단계-스케줄링의-개념">다단계 스케줄링의 개념</h2>
<ul>
<li><p>여러 큐를 사용하여 프로세스를 분류하고 각 큐마다 다른 스케줄링 알고리즘을 적용하는 방식이다.</p>
</li>
<li><p>다단계 스케줄링에서는 시스템의 프로세스를 여러 큐로 분류하고, 각 큐는 고유한 우선순위와 스케줄링 정책을 가진다. </p>
<ul>
<li>예를 들어, 인터랙티브 프로세스는 빠른 응답이 필요하므로 높은 우선순위 큐에 배정되고, 배치 작업은 긴 실행 시간이 필요하므로 낮은 우선순위 큐에 배정된다.</li>
</ul>
</li>
</ul>
<h2 id="다단계-스케줄링의-구조">다단계 스케줄링의 구조</h2>
<ul>
<li><p>여러 개의 큐
시스템에는 여러 개의 큐가 있다.
각 큐는 다른 종류의 작업이나 우선순위를 처리한다.</p>
</li>
<li><p>큐 간 우선순위
각 큐는 고유한 우선순위를 가지며, 높은 우선순위 큐가 비어있지 않으면 낮은 우선순위 큐의 프로세스는 실행되지 않는다.
예를 들어, 인터랙티브 작업이 있는 큐가 비어있지 않으면, 배치 작업이 있는 큐의 프로세스는 실행되지 않는다.</p>
</li>
<li><p>큐 내 스케줄링
각 큐는 자체적인 스케줄링 알고리즘을 사용한다.
예를 들어, 높은 우선순위 큐는 Round Robin 스케줄링을 사용할 수 있고, 낮은 우선순위 큐는 FCFS를 사용할 수 있다.</p>
</li>
</ul>
<h2 id="다단계-스케줄링의-작동-방식">다단계 스케줄링의 작동 방식</h2>
<ol>
<li><p>큐에 프로세스 할당
새로 생성된 프로세스는 우선순위와 특성에 따라 적절한 큐에 배정된다.
인터랙티브 작업은 높은 우선순위 큐에, 배치 작업은 낮은 우선순위 큐에 할당된다.</p>
</li>
<li><p>CPU 할당
스케줄러는 높은 우선순위 큐부터 프로세스를 선택하여 CPU를 할당한다.
높은 우선순위 큐가 비어있으면 다음 우선순위 큐에서 프로세스를 선택한다.</p>
</li>
<li><p>큐 내 스케줄링
각 큐 내에서 정의된 스케줄링 알고리즘에 따라 프로세스가 선택되고 실행된다.
예를 들어, 높은 우선순위 큐는 Round Robin을 사용하여 프로세스를 순환하며 실행하고, 낮은 우선순위 큐는 FCFS를 사용하여 도착 순서대로 실행한다.</p>
</li>
</ol>
<h2 id="장점">장점</h2>
<ul>
<li><p>유연성
다양한 프로세스의 요구를 충족시키기 위해 여러 스케줄링 정책을 적용할 수 있다.
시스템의 성능을 최적화할 수 있다.</p>
</li>
<li><p>응답 시간 향상
중요한 프로세스(예: 인터랙티브 작업)가 높은 우선순위를 가지므로 빠르게 처리된다.
사용자 경험이 향상된다.</p>
</li>
<li><p>분리된 큐 관리
프로세스 종류에 따라 큐를 분리하여 관리할 수 있다.
특정 유형의 프로세스가 시스템 전체에 영향을 미치는 것을 방지다.</p>
</li>
</ul>
<h2 id="단점">단점</h2>
<ul>
<li><p>복잡성
큐의 수와 스케줄링 정책을 설정하는 것이 복잡합다.
시스템 설정 및 유지 관리가 어렵다.</p>
</li>
<li><p>기아 현상 (Starvation)
낮은 우선순위 큐의 프로세스가 높은 우선순위 큐의 프로세스에 의해 계속 대기할 수 있다.
낮은 우선순위 작업이 오랫동안 실행되지 않을 수 있다.</p>
</li>
</ul>
]]></description>
        </item>
    </channel>
</rss>