<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>mingle-mongle.log</title>
        <link>https://velog.io/</link>
        <description>망곰이를 좋아하는 백엔드 개발자 지망생</description>
        <lastBuildDate>Tue, 05 Sep 2023 05:23:51 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>mingle-mongle.log</title>
            <url>https://velog.velcdn.com/images/mingle-mongle/profile/a8e7f523-5e8a-4753-a66d-c4e33faf0b34/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. mingle-mongle.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/mingle-mongle" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[트러블슈팅]]></title>
            <link>https://velog.io/@mingle-mongle/%ED%8A%B8%EB%9F%AC%EB%B8%94%EC%8A%88%ED%8C%85</link>
            <guid>https://velog.io/@mingle-mongle/%ED%8A%B8%EB%9F%AC%EB%B8%94%EC%8A%88%ED%8C%85</guid>
            <pubDate>Tue, 05 Sep 2023 05:23:51 GMT</pubDate>
            <description><![CDATA[<h3 id="트러블슈팅">트러블슈팅</h3>
<h4 id="db-buffer-memory-문제">DB Buffer Memory 문제</h4>
<pre><code class="language-javascript">{
&quot;error&quot;: &quot;Error: target: chatting.-.primary: vttablet: rpc error: code = ResourceExhausted desc = Out of sort memory, consider increasing server sort buffer size (errno 1038)
}</code></pre>
<p>SELECT * FROM data ORDER BY created DESC LIMIT 20 OFFSET 0;
를 사용했을 시 sort buffer size가 부족하다는 문제가 발생했다.</p>
<p>MySQL에서는 데이터를 정렬(ORBER BY)하기 위해 별도의 메모리 공간을 할당하는데 이때 사용되는 메모리가 Sort buffer이다. 
이 메모리는 정렬이 필요할 경우에만 할당되며, 쿼리 실행이 완료되면 시스템으로 즉시 반납된다. 
Soft buffer의 크기는 시스템 설정 변수인 sort_buffer_size로 조정 할 수 있다. 
sort_buffer_size는 byte단위로 표시된다.</p>
<p>data의 컬럼 중 image 컬럼의 사이즈가 문제였다.</p>
<p>기본 sort buffer size는 262144로 262KB였다.</p>
<p>프론트에서 이미지 크기를 최대 50KB로 넣을 수 있게끔 줄였기 때문에 25장 이상의 이미지를 sotring 하면 오류가 발생했다.</p>
<p>sort buffer size를 늘리는 방법으로도 문제를 해결할 수 있었지만, buffer size를 늘리는 방법은 CPU의 사용을 늘리는 방법이기 때문에 느려질 수 있다.
그래서 이 방법은 좋은 방법이라고 생각되지 않았다.</p>
<p>sort buffer size를 늘리는 방법으로도 문제를 해결할 수 있었지만, sort_buffer_size를 늘리면 메모리 부족현상을 겪을 수 있다. </p>
<p>또한 메모리가 부족할시 OS에서는 강제적으로 프로세스를 Kill할 수 있으므로 MySQL의 프로세스가 중지될 수도 있기 때문에 주의해야 한다.</p>
<p>///
 Sort Buffer : MySQL이 정렬을 수행하기 위한 별도 메모리 공간. 정렬에만 이용, 가변적으로 증가하지만 최대 사이즈는 soft_buffer_size 시스템 변수, 그리고소트 완료후 즉시 시스템으로 반납되는 메모리공간이다. (이 사이즈를 넘길 경우 이제 문제가 된다)</p>
<p> 읽고-&gt;SortBuffer에서정렬-&gt;Disk에 임시저장 -&gt; 다음 읽고 -&gt; 정렬 -&gt; 임시저장 (Multi- Merge방식) 512K가 적당(P334)</p>
<p> SOrtBuffer를 크게한다고 해서 빨리 지지는 않지만, DISK I/O의 횟수를 줄일수 있다.</p>
<p>///</p>
<p>그래서 sort buffer size를 늘리지 않고 해결할 수 있는 방법을 찾기 위해 노력했다.</p>
<p>처음에는 서브쿼리의 임시테이블을 활용해 sort buffer memory 문제가 나지 않게끔 하는 방법을 생각했다.</p>
<pre><code>SELECT 
    *
FROM (
        SELECT * 
        FROM data
        ORDER BY msg_id DESC
        ) AS Data
LIMIT 20 
OFFSET 0;</code></pre><p>위 방법은 서브쿼리를 사용한 방법으로 해결을 한 방법이였다.
서브쿼리(임시 테이블)을 활용해 해결한 방법이였지만, 똑같이 ORDER BY를 사용한 sorting이기 때문에 추후에 메모리 문제가 날 것이라고 생각했다.</p>
<p>그래서 인덱스를 사용하기로 했다.
mysql 8.0 이상부터는 descending index가 적용된다. 연산이 더 빨리 될 수 있도록 unix time(int) 컬럼에 Descending Index를 만들어 정렬하게끔 시도했다.</p>
<pre><code>SELECT 
       BIN_TO_UUID(msg_id, 1) AS msg_id,
       content, 
       type, 
       time, 
       image, 
       created, 
       updated, 
       user, 
       version 
FROM 
       bufferTest 
WHERE 
       time &gt;= (
                SELECT 
                       time 
                FROM                                                bufferTest 
                LIMIT 1 
                OFFSET &quot;subOffset추가&quot;
               ) 
LIMIT 20 
OFFSET &quot;mainOffset추가&quot;;

subOffset = page  x limit(20);
mainOffset = (page - 1) x limit(20);</code></pre><p>Descending Index의 장점은 Forward Index Scan 방식이기 때문에 Backward Index Scan보다 속도가 훨씬 빠르다.</p>
<p>커서를 time 기준으로 최신순 정렬한 데이터에서 n번째로 잡았기 때문에 그 기준점보다 크거나 같은 데이터를 가져온다.
그렇기 때문에 속도적으로 조금 더 빠른 페이지네이션이 가능하다.</p>
<p>ASC로 정렬해서 커서값을 찾아야할 경우 
전체 row 값을 받아오는 쿼리를 요청 후 
다시 DB에 LIMIT과 OFFSET, 총 2번 쿼리요청을 해야했기 때문에 시간이 평균적으로 180~220 ms가 나왔다.</p>
<p>DESC 정렬 후 page 요청값 기준으로 검색하는 방법은 평균 80~100 ms로 훨씬 더 빠른 결과물이 나왔다.</p>
<p>그럼 왜 PK(msg_id)를 인덱스로 사용하지 않았는지?
-&gt; Primary Key는 기본적으로 생성될 때 ASC 정렬이 되게끔 생성된다.
그래서 제가 추가적으로 DESC 정렬 인덱스를 msgid에 걸어봤는데  DESC 정렬이 되지 않았다.
그래서 쿼리에 &quot;ORDER BY DESC&quot;를 붙일 경우, Backward Index Scan이 들어가게 되는데
이 경우에는 Forward Index Scan 보다 느리게 검색된다.</p>
<p><a href="https://tech.kakao.com/2018/06/19/mysql-ascending-index-vs-descending-index/">https://tech.kakao.com/2018/06/19/mysql-ascending-index-vs-descending-index/</a>
카카오 테크 블로그에서 테스트해본 결과 28.9% 정도 느려진다고 한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[모의면접3 DB]]></title>
            <link>https://velog.io/@mingle-mongle/%EB%AA%A8%EC%9D%98%EB%A9%B4%EC%A0%913-DB</link>
            <guid>https://velog.io/@mingle-mongle/%EB%AA%A8%EC%9D%98%EB%A9%B4%EC%A0%913-DB</guid>
            <pubDate>Fri, 11 Aug 2023 14:39:25 GMT</pubDate>
            <description><![CDATA[<h3 id="랜덤-io와-순차-io에-대해서-설명해주세요">랜덤 I/O와 순차 I/O에 대해서 설명해주세요.</h3>
<p><a href="https://velog.io/@ddangle/%EC%88%9C%EC%B0%A8Sequential-IO%EC%99%80-%EB%9E%9C%EB%8D%A4Random-IO">https://velog.io/@ddangle/%EC%88%9C%EC%B0%A8Sequential-IO%EC%99%80-%EB%9E%9C%EB%8D%A4Random-IO</a>
우선, 랜덤 I/O(Random I/O, direct accss)는 하드 디스크 드라이브의 플래터(원판)을 돌려서 읽어야 할 데이터가 저장된 위치로 디스크 헤더(disk arm)를 이동시킨 다음 데이터를 읽는 것을 의미합니다. 그리고 순차 I/O(Sequential I/O) 또한 이 과정은 같습니다.</p>
<h3 id="인덱스에-대해서-설명해주세요">인덱스에 대해서 설명해주세요.</h3>
<p><a href="https://mangkyu.tistory.com/96">https://mangkyu.tistory.com/96</a>
인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다. 만약 우리가 책에서 원하는 내용을 찾는다고 하면, 책의 모든 페이지를 찾아 보는것은 오랜 시간이 걸린다. 그렇기 때문에 책의 저자들은 책의 맨 앞 또는 맨 뒤에 색인을 추가하는데, 데이터베이스의 index는 책의 색인과 같다.</p>
<p>데이터베이스에서도 테이블의 모든 데이터를 검색하면 시간이 오래 걸리기 때문에 데이터와 데이터의 위치를 포함한 자료구조를 생성하여 빠르게 조회할 수 있도록 돕고 있다.
<img src="https://velog.velcdn.com/images/mingle-mongle/post/73d5d5eb-0a16-4bd3-8313-9f488e45c156/image.png" alt=""></p>
<h3 id="인덱스를-사용해본-경험에-대해서-설명해주세요">인덱스를 사용해본 경험에 대해서 설명해주세요.</h3>
<p>아직 없습니다.</p>
<h3 id="인덱스의-동작-방식에-대해서-설명해주세요">인덱스의 동작 방식에 대해서 설명해주세요.</h3>
<p><a href="https://brunch.co.kr/@skeks463/25">https://brunch.co.kr/@skeks463/25</a></p>
<h3 id="어떤-기준으로-인덱스를-설정해야할까요">어떤 기준으로 인덱스를 설정해야할까요?</h3>
<p><a href="https://velog.io/@jwpark06/%ED%9A%A8%EA%B3%BC%EC%A0%81%EC%9D%B8-DB-index-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0">https://velog.io/@jwpark06/%ED%9A%A8%EA%B3%BC%EC%A0%81%EC%9D%B8-DB-index-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0</a></p>
<ul>
<li>카디널리티 (Cardinality)</li>
<li>선택도 (Selectivity)</li>
<li>조회 활용도</li>
<li>수정 빈도</li>
</ul>
<h3 id="인덱스가-잘-동작하고-있는지-어떻게-확인할-수-있을까요">인덱스가 잘 동작하고 있는지 어떻게 확인할 수 있을까요?</h3>
<h3 id="테이블에-인덱스를-많이-설정하면-좋을까요">테이블에 인덱스를 많이 설정하면 좋을까요?</h3>
<p><a href="https://velog.io/@jwpark06/%ED%9A%A8%EA%B3%BC%EC%A0%81%EC%9D%B8-DB-index-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0">https://velog.io/@jwpark06/%ED%9A%A8%EA%B3%BC%EC%A0%81%EC%9D%B8-DB-index-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0</a></p>
<p>&#39;위의 (1) 어떤 컬럼에 인덱스를 설정해야 할까?&#39;를 보았다면 인덱스를 많이 설정하면 안되는 이유를 어렴풋하게 이해할 수도 있습니다.</p>
<p>① 인덱스 설정 시, 데이터베이스에 할당된 메모리를 사용하여 테이블 형태로 저장되게 됩니다.
(즉, 인덱스가 많아지면 데이터베이스의 메모리를 많이 잡아먹게 됩니다.)
② 인덱스로 지정된 컬럼의 값이 바뀌게 되면 인덱스 테이블이 갱신되어야 하므로 느려질 수 있습니다.</p>
<p>위와 같은 이유로 인덱스를 계속해서 만드는 것이 하나의 쿼리문을 빠르게 만들 수는 있지만, 전체적인 데이터베이스의 성능 부하를 초래합니다.</p>
<h3 id="쿼리-실행-계획에-대해서-설명해주세요-실행-계획을-확인해본적이-있나요">쿼리 실행 계획에 대해서 설명해주세요. 실행 계획을 확인해본적이 있나요?</h3>
<p><a href="https://jeong-pro.tistory.com/243">https://jeong-pro.tistory.com/243</a></p>
<h3 id="커버링-인덱스covering-index에-대해서-설명해주세요">커버링 인덱스(covering index)에 대해서 설명해주세요.</h3>
<p><a href="https://velog.io/@boo105/%EC%BB%A4%EB%B2%84%EB%A7%81-%EC%9D%B8%EB%8D%B1%EC%8A%A4">https://velog.io/@boo105/%EC%BB%A4%EB%B2%84%EB%A7%81-%EC%9D%B8%EB%8D%B1%EC%8A%A4</a>
커버링 인덱스란, 쿼리를 충족시키는데 필요한 모든 데이터를 갖고 있는 인덱스를 말합니다.</p>
<h3 id="다중-컬럼-인덱스multi-column-index에-대해서-설명해주세요">다중 컬럼 인덱스(Multi-column index)에 대해서 설명해주세요.</h3>
<p><a href="https://code-factory.tistory.com/24">https://code-factory.tistory.com/24</a></p>
<h3 id="인덱스에서-사용되는-b-tree와-btree에-대해서-설명해주세요">인덱스에서 사용되는 B-Tree와 B+Tree에 대해서 설명해주세요.</h3>
<p><a href="https://code-lab1.tistory.com/217">https://code-lab1.tistory.com/217</a></p>
<p>보통 B 트리라고 하면 B- 트리를 의미한다. B 트리는 트리 자료구조의 일종으로 이진트리를 확장해 하나의 노드가 가질 수 있는 자식 노드의 최대 숫자가 2보다 큰 트리 구조이다. </p>
<h3 id="인덱스에서-사용되는-hashtable에-대해서-설명해주세요">인덱스에서 사용되는 HashTable에 대해서 설명해주세요.</h3>
<p><a href="https://mangkyu.tistory.com/102">https://mangkyu.tistory.com/102</a>
해시 테이블은 (Key, Value)로 데이터를 저장하는 자료구조 중 하나로 빠르게 데이터를 검색할 수 있는 자료구조이다. 해시 테이블이 빠른 검색속도를 제공하는 이유는 내부적으로 배열(버킷)을 사용하여 데이터를 저장하기 때문이다. 해시 테이블은 각각의 Key값에 해시함수를 적용해 배열의 고유한 index를 생성하고, 이 index를 활용해 값을 저장하거나 검색하게 된다. 여기서 실제 값이 저장되는 장소를 버킷 또는 슬롯이라고 한다.</p>
<h3 id="클러스터드-인덱스와-논클러스터드-인덱스의-차이는-무엇일까요">클러스터드 인덱스와 논클러스터드 인덱스의 차이는 무엇일까요?</h3>
<p><a href="https://junghn.tistory.com/entry/DB-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0-%EC%9D%B8%EB%8D%B1%EC%8A%A4%EC%99%80-%EB%84%8C%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0-%EC%9D%B8%EB%8D%B1%EC%8A%A4-%EA%B0%9C%EB%85%90-%EC%B4%9D%EC%A0%95%EB%A6%AC">https://junghn.tistory.com/entry/DB-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0-%EC%9D%B8%EB%8D%B1%EC%8A%A4%EC%99%80-%EB%84%8C%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0-%EC%9D%B8%EB%8D%B1%EC%8A%A4-%EA%B0%9C%EB%85%90-%EC%B4%9D%EC%A0%95%EB%A6%AC</a></p>
<ul>
<li><p>클러스터
테이블당 1개씩만 허용된다.
물리적으로 행을 재배열한다.
PK설정 시 그 칼럼은 자동으로 클러스터드 인덱스가 만들어진다.
인덱스 자체의 리프 페이지가 곧 데이터이다. 즉 테이블 자체가 인덱스이다. (따로 인덱스 페이지를 만들지 않는다.)
데이터 입력, 수정, 삭제 시 항상 정렬 상태를 유지한다.
비 클러스형 인덱스보다 검색 속도는 더 빠르다. 하지만 데이터의 입력. 수정, 삭제는 느리다.
30% 이내에서 사용해야 좋은 선택도를 가진다.</p>
</li>
<li><p>넌클러스터
테이블당 약 240개의 인덱스를 만들 수 있다.
인덱스 페이지는 로그파일에 저장된다.
레코드의 원본은 정렬되지 않고, 인덱스 페이지만 정렬된다.
인덱스 자체의 리프 페이지는 데이터가 아니라 데이터가 위치하는 포인터(RID)이기 때문에 클러스터형보다 검색 속도는 더 느리지만 데이터의 입력, 수정, 삭제는 더 빠르다.
인덱스를 생성할 때 데이터 페이지는 그냥 둔 상태에서 별도의 인덱스 페이지를 따로 만들기 때문에 용량을 더 차지한다
3% 이내에서 사용해야 좋은 선택도를 가진다.</p>
</li>
</ul>
<h3 id="인덱스-스캔-방식에-대해서-설명해주세요">인덱스 스캔 방식에 대해서 설명해주세요.</h3>
<p><a href="https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;blogId=gglee0127&amp;logNo=221336088285">https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;blogId=gglee0127&amp;logNo=221336088285</a>
Index Range Scan, Index Full Scan, Index Unique Scan, Index Skip Scan 등이 있다.</p>
<h3 id="인덱스-사용시-주의해야할-점에-대해서-알려주세요">인덱스 사용시 주의해야할 점에 대해서 알려주세요.</h3>
<p><a href="https://bcp0109.tistory.com/365">https://bcp0109.tistory.com/365</a>
. 인덱스 사용 시 주의사항
다중 인덱스를 사용할 때 범위 조건은 인덱스를 타지만 이후 컬럼들은 인덱스를 타지 않음 범위 조건으로 사용할 때 주의
인덱스로 지정한 컬럼은 그대로 사용해야 함 WHERE age * 10 &gt; 20 처럼 조회조건에 있는 컬럼을 변경하면 안됨</p>
<h3 id="group-by-사용시-인덱스가-걸리는-조건에-대해-설명해주세요">GROUP BY 사용시 인덱스가 걸리는 조건에 대해 설명해주세요.</h3>
<p><a href="https://jojoldu.tistory.com/476">https://jojoldu.tistory.com/476</a>
GROUP BY 절에 명시된 컬럼이 인덱스 컬럼의 순서와 같아야 한다. 
인덱스 컬럼 중 뒤에 있는 컬럼이 GROUP BY 절에 명시되지 않아도 인덱스는 사용할 수 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[모의면접 3]]></title>
            <link>https://velog.io/@mingle-mongle/%EB%AA%A8%EC%9D%98%EB%A9%B4%EC%A0%91-3</link>
            <guid>https://velog.io/@mingle-mongle/%EB%AA%A8%EC%9D%98%EB%A9%B4%EC%A0%91-3</guid>
            <pubDate>Fri, 11 Aug 2023 14:28:21 GMT</pubDate>
            <description><![CDATA[<h3 id="슬라이딩-윈도우가-뭘까요">슬라이딩 윈도우가 뭘까요?</h3>
<p><img src="https://velog.velcdn.com/images/mingle-mongle/post/58b4c966-56ad-4737-8eb8-d4ffd1150caf/image.png" alt=""></p>
<h3 id="go-back-n에-대해-설명해주세요">Go Back N에 대해 설명해주세요.</h3>
<p>Go-Back-N 방식은 receiver 측에서 순서대로 받지 못한 패킷이 있다면 해당 패킷부터 다시 재전송 하는 방식이다.</p>
<h3 id="selective-repeat에-대해-설명해주세요">Selective Repeat에 대해 설명해주세요.</h3>
<p>손상되거나 분실되지 않아도, NAK 혹은 타임아웃 등의 이유로 인해 재전송 되는 이후의 모든 프레임을 재전송해야 하는 GBn ARQ의 비효율적 문제점을 개선한 방식이 SR ARQ입니다.
SR ARQ 방식은 GBn ARQ 방식과 다르게 손상되거나 분실된 프레임만을 재전송하게 됩니다.</p>
<p>그렇기 때문에 SR ARQ 방식은 별도의 데이터 재정렬을 수행해야 하며, 이러한 이유로 별도의 버퍼를 필요로 합니다.</p>
<h3 id="tcp에-대해-설명해주세요">TCP에 대해 설명해주세요.</h3>
<p>TCP (전송 제어 프로토콜)은 두 개의 호스트를 연결하고 데이터 스트림을 교환하게 해주는 중요한 네트워크 프로토콜이다. TCP는 데이터와 패킷이 보내진 순서대로 전달하는 것을 보장해준다</p>
<h3 id="3-way-handshake에-대해-설명해주세요">3 way handshake에 대해 설명해주세요.</h3>
<p><img src="https://velog.velcdn.com/images/mingle-mongle/post/f0252108-9630-4863-b422-d273357f89a3/image.png" alt=""></p>
<p>TCP는 장치들 사이에 논리적인 접속을 성립(establish)하기 위하여 three-way handshake를 사용한다.</p>
<p>TCP 3 Way Handshake는 TCP/IP프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에 </p>
<p>먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다.</p>
<p>Client &gt; Server : TCP SYN</p>
<p>Server &gt; Client : TCP SYN ACK</p>
<p>Client &gt; Server : TCP ACK</p>
<p>여기서 SYN은 &#39;synchronize sequence numbers&#39;, 그리고 ACK는&#39;acknowledgment&#39; 의 약자이다.</p>
<p>이러한 절차는 TCP 접속을 성공적으로 성립하기 위하여 반드시 필요하다.</p>
<h3 id="4-way-handshake에-대해-설명해주세요">4 way handshake에 대해 설명해주세요.</h3>
<p>3-Way handshake는 TCP의 연결을 초기화 할 때 사용한다면, </p>
<p>4-Way handshake는 세션을 종료하기 위해 수행되는 절차입니다.</p>
<p><img src="https://velog.velcdn.com/images/mingle-mongle/post/2e9e3f5d-95e8-46a3-8149-b90a3d4fa634/image.png" alt=""></p>
<h3 id="congestion-control에-대해-설명해주세요">Congestion control에 대해 설명해주세요.</h3>
<ul>
<li>너무 많은 출발지(네트워크 장비)에서 네트워크가 감당하기에는 너무 많은 데이터를 너무 빠르게 전송하여 발생하는 네트워크 혼잡 현상이다.</li>
<li>징후
라우터에서 버퍼가 오버플로우되어 패킷 손실의 발생
라우터 버퍼에서 긴 큐잉 지연(Queueing delay) 발생</li>
<li>흐름 제어(Flow Control)와는 다르다.</li>
</ul>
<h3 id="flow-control에-대해-설명해주세요">Flow control에 대해 설명해주세요.</h3>
<ol>
<li><p>Flow control은  (호스트와 호스트 간의 데이터 처리를 효율적으로 하기 위한 기법, End to End)</p>
<p>송신측과 수신측의 데이터처리 속도 차이를 해결하기 위한 기법이다.</p>
<p>수신측이 송신측보다 속도가 빠른 것은 아무 문제가 되지 않는다.</p>
<p>송신측이 수신측보다 속도가 빠르면 문제가 발생한다.</p>
<p>수신측에서 수신된 데이터를 처리해서 윗 계층으로 서비스 하는 속도보다 송신측에서 보내는 데이터 속도가 더 빠르다면, 수신측에서 제한된 저장용량(일반적으로 큐)을 초과하여 이후에 도착하는 데이터의 손실을 가져올 수있다.</p>
<p>그렇다면 불필요하게 응답과 재전송의 데이터가 다시 송신측과 수신측간에 비번히 이동해야한다.</p>
<p>따라서, 이러한 위험을 줄이기 위해 강제로 송신측의 데이터 전송을 줄인다.</p>
<p>1-1) Stop and wait 방식
매번 전송한 패킷에 대해 확인응답을 받아야만 그 다음 패킷을 전송하는 방법</p>
<p>1-2) 슬라이딩 윈도우 기법
수신 측에서 설정한 윈도우 크기만큼 송신 측에서 확인 응답 없이 세그먼트를 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하여 제어하는 기법이다.</p>
<p>이 처럼 슬라이딩 윈도우 기법을 통하여 송신 버퍼의 범위는 수신 측의 여유 버퍼 공간을 반영하여 동적으로 바뀜으로써 흐름제어를 수행한다.</p>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[네트워크 2]]></title>
            <link>https://velog.io/@mingle-mongle/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-2</link>
            <guid>https://velog.io/@mingle-mongle/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-2</guid>
            <pubDate>Fri, 04 Aug 2023 14:09:56 GMT</pubDate>
            <description><![CDATA[<h3 id="https에-대해서-설명해주세요">HTTPS에 대해서 설명해주세요.</h3>
<p>웹 브라우저와 웹 사이트 간에 데이터를 전송하는 데 사용되는 기본 프로토콜인 HTTP의 보안 버전입니다. 
HTTPS는 데이터 전송의 보안을 강화하기 위해 암호화됩니다. 
모든 웹 사이트, 특히 로그인 자격 증명이 필요한 웹 사이트는 HTTPS를 사용해야 합니다. 
크롬 등 최신 웹 브라우저에서는 HTTPS를 사용하지 않는 웹 사이트가 HTTPS를 사용하는 웹 사이트와 다르게 표시됩니다. </p>
<h3 id="ssltls이-뭔가요">SSL/TLS이 뭔가요?</h3>
<p>SSL(Secure Scokets Layer)은 암호화 기반 인터넷 보안 프로토콜이다. 전달되는 모든 데이터를 암호화하고 특정한 유형의 사이버 공격도 차단한다. SSL은 TLS(Transport Layer Security) 암호화의 전신이기도 한다.</p>
<p>SSl/TLS 를 사용하는 웹사이트 URL은 HTTP 대신 HTTPS가 사용된다.</p>
<p><strong>SSL/TLS 의 작동 방식</strong></p>
<ul>
<li>SSL은 개인정보 보호를 제공하기 위해, 웹에서 전송되는 데이터를 암호화 한다. 따라서, 데이터를 가로채려해도 거의 복호화가 불가능하다.</li>
<li>SSL은 클라이언트와 서버간에 핸드셰이크를 통해 인증이 이루어진다. 또한 데이터 무결성을 위해 데이터에 디지털 서명을 하여 데이터가 의도적으로 도착하기 전에 조작된 여부를 확인한다.</li>
</ul>
<p>출처 : <a href="https://kanoos-stu.tistory.com/46">https://kanoos-stu.tistory.com/46</a></p>
<h3 id="https-암호화-과정에-대해-설명해주세요-ssl-핸드셰이크에-대해-설명해주세요">HTTPS 암호화 과정에 대해 설명해주세요. (SSL 핸드셰이크에 대해 설명해주세요.)</h3>
<p><a href="https://kanoos-stu.tistory.com/46">https://kanoos-stu.tistory.com/46</a>
핸드셰이크 부분 참고해서 공부</p>
<h3 id="dns가-뭔가요">DNS가 뭔가요?</h3>
<p>도메인 이름 시스템(DNS)은 사람이 읽을 수 있는 도메인 이름(예: <a href="http://www.amazon.com)%EC%9D%84">www.amazon.com)을</a> 머신이 읽을 수 있는 IP 주소(예: 192.0.2.44)로 변환합니다.</p>
<p>출처 : <a href="https://aws.amazon.com/ko/route53/what-is-dns/">https://aws.amazon.com/ko/route53/what-is-dns/</a></p>
<h3 id="dns-작동-방식에-대해-설명해주세요">DNS 작동 방식에 대해 설명해주세요.</h3>
<p><img src="https://velog.velcdn.com/images/mingle-mongle/post/e95aa0f3-6ad0-4161-907f-59cf03fc85ba/image.png" alt=""></p>
<h3 id="udp에-대해-설명해주세요">UDP에 대해 설명해주세요.</h3>
<p>UDP는 비연결형 프로토콜로써, 인터넷상에서 서로 정보를 주고받을 때 정보를 보낸다는 신호나 받는다는 신호 절차를 거치지 않고 보내는 쪽에서 일방적으로 데이터를 전달하는 통신 프로토콜입니다. 
TCP와는 다르게 연결 설정이 없으며, 혼잡 제어를 하지 않기 때문에 TCP보다 전송 속도가 빠릅니다. 
그러나 데이터 전송에 대한 보장을 하지 않기 때문에 패킷 손실이 발생할 수 있습니다.</p>
<p>출처 : <a href="https://cocoon1787.tistory.com/757">https://cocoon1787.tistory.com/757</a></p>
<h3 id="전송후-대기-프로토콜이-뭘까요">전송후 대기 프로토콜이 뭘까요?</h3>
<p>전송 후 대기 프로토콜(Stop-and-Wait Protocol)은 데이터 통신에서 가장 간단한 형태의 흐름 제어 프로토콜입니다.
이 프로토콜은 송신자가 한 개의 프레임을 전송하고, 수신자로부터 응답을 받을 때까지 기다리는 방식으로 동작합니다.
수신자는 전송받은 프레임에 대해 확인(ACK) 또는 부정(NAK) 신호를 송신자에게 되돌려 보냅니다. 송신자는 ACK 신호를 받으면 다음 프레임을 전송하고, NAK 신호를 받으면 같은 프레임을 재전송합니다.</p>
<p>출처 : <a href="https://velog.io/@yoonuk/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%A0%84%EC%86%A1-%ED%9B%84-%EB%8C%80%EA%B8%B0-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C">https://velog.io/@yoonuk/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%A0%84%EC%86%A1-%ED%9B%84-%EB%8C%80%EA%B8%B0-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C</a></p>
<h3 id="파이프라인-프로토콜이-뭘까요">파이프라인 프로토콜이 뭘까요?</h3>
<p>패킷 송수신 측면에서 파이프라인 프로토콜은 일련의 단계 또는 처리 단계를 통해 데이터를 전송하는 방법입니다.
데이터를 더 작은 부분으로 나누고 각 부분을 차례로 처리하는 것을 의미합니다. 이 방법은 데이터가 한 컴퓨터에서 다른 컴퓨터로 전송되는 네트워크 통신에서 자주 사용됩니다.
파이프라인 프로토콜은 더 빠른 전송 속도와 네트워크 정체를 개선해 네트워크 성능을 향상시키는 데 사용됩니다.</p>
<p>출처 : <a href="https://velog.io/@yoonuk/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%ED%8C%8C%EC%9D%B4%ED%94%84%EB%9D%BC%EC%9D%B8-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C">https://velog.io/@yoonuk/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%ED%8C%8C%EC%9D%B4%ED%94%84%EB%9D%BC%EC%9D%B8-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[데이터베이스 2]]></title>
            <link>https://velog.io/@mingle-mongle/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-2</link>
            <guid>https://velog.io/@mingle-mongle/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-2</guid>
            <pubDate>Fri, 04 Aug 2023 13:58:41 GMT</pubDate>
            <description><![CDATA[<h3 id="sql에-대해서-설명해주세요-c언어와-같은-프로그래밍-언어와-어떤차이가-있나요">SQL에 대해서 설명해주세요. C언어와 같은 프로그래밍 언어와 어떤차이가 있나요?</h3>
<p>관계형 데이터베이스에 정보를 저장하고 처리하기 위한 프로그래밍 언어입니다.
SQL은 구조화된 질의 언어 Structured Query Language의 약자로 DBMS 상에서 데이터를 읽고 쓰고 삭제하는 등 데이터를 관리하기 위한 일종의 프로그램 언어입니다. 
C나 자바와 같은 일반 프로그래밍 언어는 절차적 언어라고 할 수 있는데 반해, SQL은 집합적 언어입니다.</p>
<p>출처 : <a href="https://thebook.io/006696/0019/">https://thebook.io/006696/0019/</a></p>
<h3 id="개발자가-작성한-sql이-어떤-과정을-통해-실행-되는지-설명해주세요">개발자가 작성한 SQL이 어떤 과정을 통해 실행 되는지 설명해주세요.</h3>
<ol>
<li>구문 분석(Parsing)<ul>
<li>해당 쿼리가 문법적으로 틀리지 않은지 확인. 해당 구문을 SQL 서버가 이해할 수 있는 단위들로 분해하는 과정.</li>
<li>만약 구문이 부정확하다면 여기서 처리를 중단. 이 문장이 일괄 처리(batch) 내에 있다면 일괄 처리 전체를 중단.(Batch abort : Batch 중 하나라도 syntax error가 있다면 전체 batch가 실행되지 않는다.)</li>
</ul>
</li>
<li>표준화(Standardization)<ul>
<li>실제로 필요없는 부분들이 제거. 표준화된 쿼리 트리(Standard Query Tree)가 만들어 진다.</li>
</ul>
</li>
<li>최적화(Optimization)<ul>
<li>통계나 조각 정보 등을 바탕으로 실행 계획을 만들어 낸다. 쿼리처리에서 매우 중요한 단계
① 쿼리 분석 : 검색 제한자(SARG)인지 조인 조건인지 판단.
② 인덱스 선택 : 분포 통계 정보를 이용하여 인덱스검색이나 테이블 스캔 중의 하나를 선택. 여러 인덱스 중 가장 효율적인 인덱스를 선택
③ 조인 처리 : JOIN, UNION, GROUP BY, ORDER BY 절을 가지고 있는지 확인하여 적절한 작업 순서를 선택</li>
<li>이 단계의 출력은 실행 계획(Execution Plan) 이다.</li>
</ul>
</li>
<li>컴파일(Compilation)<ul>
<li>컴파일을 하면 이진 코드가 생성된다. 일반적인 경우에는 컴파일하고 나면 .exe, .dll 등의 이진 파일이 만들어 지는데, SQL Server에서는 그냥 메모리(프로시저 캐시)에만 올린다. 그래서 컴파일 속도가 매우 빠르다.</li>
</ul>
</li>
<li>실행(Execute)<ul>
<li>엑세스 루틴으로 가서 실제 처리를 하고 결과를 돌려준다.</li>
</ul>
</li>
</ol>
<p>출처 : <a href="https://heewon26.tistory.com/187">https://heewon26.tistory.com/187</a></p>
<h3 id="dml은-무엇인가요-어떤-구문이-있는지도-설명해주세요">DML은 무엇인가요? 어떤 구문이 있는지도 설명해주세요.</h3>
<p><img src="https://velog.velcdn.com/images/mingle-mongle/post/0a6b8dc5-7dba-4a29-af72-46839a4925c4/image.png" alt=""></p>
<p>출처 : <a href="https://brownbears.tistory.com/180">https://brownbears.tistory.com/180</a></p>
<h3 id="ddl은-무엇인가요-어떤-구문이-있는지도-설명해주세요">DDL은 무엇인가요? 어떤 구문이 있는지도 설명해주세요.</h3>
<p><img src="https://velog.velcdn.com/images/mingle-mongle/post/3985d917-85c1-4a15-86a7-fb8b352ae965/image.png" alt=""></p>
<p>출처 : <a href="https://brownbears.tistory.com/180">https://brownbears.tistory.com/180</a></p>
<h3 id="dcl은-무엇인가요-어떤-구문이-있는지도-설명해주세요">DCL은 무엇인가요? 어떤 구문이 있는지도 설명해주세요.</h3>
<p><img src="https://velog.velcdn.com/images/mingle-mongle/post/6f822dec-e068-4d77-87b1-5a13288ce2d5/image.png" alt=""></p>
<p>출처 : <a href="https://brownbears.tistory.com/180">https://brownbears.tistory.com/180</a></p>
<h3 id="cascade-설정에-대해서-설명해주세요">CASCADE 설정에 대해서 설명해주세요.</h3>
<p>관계형 데이터베이스를 다루다보면 CASCADE를 활용할 일이 많습니다.
참조의 관계를 맺은 데이터베이스를 신뢰성 있는 상태로 유지하기 위함인데요!
DB의 값을 수정/삭제할 때, 해당 값을 참조하고 있는 레코드 역시 종속적으로 수정/삭제를 가능하게 해줍니다.
[수정 - ON UPDATE CASCADE]
[삭제 - ON DELETE CASCADE]</p>
<p>출처 : <a href="https://joel-dev.site/90">https://joel-dev.site/90</a></p>
<h3 id="view에-대해서-설명해주세요">VIEW에 대해서 설명해주세요.</h3>
<ol>
<li>뷰는 사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 위해 하나 이상의 기본 테이블로부터 유도된, 이름을 가지는 가상 테이블이다.</li>
<li>뷰는 저장장치 내에 물리적으로 존재하지 않지만 사용자에게 있는 것처럼 간주된다.</li>
<li>뷰는 데이터 보정작업, 처리과정 시험 등 임시적인 작업을 위한 용도로 활용된다.</li>
<li>뷰는 조인문의 사용 최소화로 사용상의 편의성을 최대화 한다.</li>
</ol>
<p>출처 : <a href="https://coding-factory.tistory.com/224">https://coding-factory.tistory.com/224</a></p>
<h3 id="select-절의-처리순서에-대해서-설명해주세요">SELECT 절의 처리순서에 대해서 설명해주세요.</h3>
<p><img src="https://velog.velcdn.com/images/mingle-mongle/post/2b5dd546-2c32-4027-9903-4263af0225cf/image.png" alt=""></p>
<p>출처 : <a href="https://myjamong.tistory.com/172">https://myjamong.tistory.com/172</a></p>
<h3 id="select--for-update-구문에-대해서-설명해주세요">SELECT ~ FOR UPDATE 구문에 대해서 설명해주세요.</h3>
<p>SELECT ~ FOR UPDATE를 실행하면 특정 세션이 데이터에 대해 수정을 할 때까지 LOCK이 걸려 다른 세션이 데이터에 접근할 수 없습니다.</p>
<p>출처 : <a href="https://dololak.tistory.com/446">https://dololak.tistory.com/446</a></p>
<h3 id="group-by절에-대해서-설명해주세요">GROUP BY절에 대해서 설명해주세요.</h3>
<p>GROUP BY 는 같은 값을 가진 행끼리 하나의 그룹으로 뭉쳐줍니다.</p>
<p>출처 : <a href="https://kimsyoung.tistory.com/entry/SQL-GROUP-BY-%E4%B8%8A-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%8B%A4%EC%A0%9C-%EC%A0%81%EC%9A%A9-%EB%B0%A9%EB%B2%95">https://kimsyoung.tistory.com/entry/SQL-GROUP-BY-%E4%B8%8A-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%8B%A4%EC%A0%9C-%EC%A0%81%EC%9A%A9-%EB%B0%A9%EB%B2%95</a></p>
<h3 id="order-by절에-대해서-설명해주세요">ORDER BY절에 대해서 설명해주세요.</h3>
<p>ORDER BY 절은 SQL 문장으로 조회된 데이터들을 다양한 목적에 맞게 특정 칼럼을 기준으로 정렬하여 출력하는데 사용한다.</p>
<p>출처 : <a href="https://dataonair.or.kr/db-tech-reference/d-guide/sql/?mod=document&amp;uid=344">https://dataonair.or.kr/db-tech-reference/d-guide/sql/?mod=document&amp;uid=344</a></p>
<h3 id="inner-join과-outer-join의-차이점에-대해서-설명해주세요">INNER JOIN과 OUTER JOIN의 차이점에 대해서 설명해주세요.</h3>
<p><img src="https://velog.velcdn.com/images/mingle-mongle/post/57962afc-402e-46fd-8b35-ed2dae35f45d/image.png" alt="">
이너조인</p>
<p><img src="https://velog.velcdn.com/images/mingle-mongle/post/3fe6294d-ea5f-42aa-a7a0-9cca9d477a3a/image.png" alt="">
레프트 아우터조인
<img src="https://velog.velcdn.com/images/mingle-mongle/post/d8235085-b7ec-4013-87f8-5d413fc84d39/image.png" alt="">
라이트 아우터조인
<img src="https://velog.velcdn.com/images/mingle-mongle/post/adbe02e9-0639-4dea-a14e-0ece3eff3394/image.png" alt="">
풀 아우터조인</p>
<p>INNER JOIN은 위에 설명 했듯이 교집합이라는 개념으로 생각하면 이해하기 편할듯.
OUTER JOIN은 INNER JOIN에서 일치하지 않는 레코드는 모두 버렸지만 OUTER JOIN에서는 일치하지 않더라도 버리지 않고 NULL로 채워서 결과를 응답한다.</p>
<p>출처 : <a href="https://velog.io/@welchs1423/INNER-JOIN-OUTER-JOIN-%EC%B0%A8%EC%9D%B4">https://velog.io/@welchs1423/INNER-JOIN-OUTER-JOIN-%EC%B0%A8%EC%9D%B4</a>
<a href="https://ybeaning.tistory.com/87">https://ybeaning.tistory.com/87</a></p>
<h3 id="left-outer-join-right-outer-join에-대해서-설명해주세요">LEFT OUTER JOIN, RIGHT OUTER JOIN에 대해서 설명해주세요.</h3>
<p>위에 설명</p>
<h3 id="cross-join에-대해서도-설명해주세요">CROSS JOIN에 대해서도 설명해주세요.</h3>
<p>CROSS JOIN(상호 조인)은 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인하는 기능이다.</p>
<p>출처 : <a href="https://hongong.hanbit.co.kr/sql-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95-joininner-outer-cross-self-join/">https://hongong.hanbit.co.kr/sql-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95-joininner-outer-cross-self-join/</a></p>
<h3 id="서브쿼리에-대해서-설명해주세요">서브쿼리에 대해서 설명해주세요.</h3>
<p>하나의 SQL 문에 포함되어 있는 또 다른 SQL 문을 말합니다.</p>
<p>출처 : <a href="https://mozi.tistory.com/233">https://mozi.tistory.com/233</a></p>
<h3 id="drop-truncate-delete에-각각에-대해-설명해주세요-어떤차이가-있나요">DROP, TRUNCATE, DELETE에 각각에 대해 설명해주세요. 어떤차이가 있나요?</h3>
<p>DELETE : WHERE절을 사용하여 테이블에 있는 데이터를 하나하나 선택하여 제거하는 방식</p>
<p>TRUNCATE : 전체 데이터를 한번에 삭제하는 방식 ( &lt;-&gt; DELETE)</p>
<p>DROP : 테이블 자체를 완전히 날려버리는 방식 -&gt; 처음부터 없었던 테이블처럼</p>
<p>출처 : <a href="https://prinha.tistory.com/entry/SQL-DELETE-TRUNCATE-DROP-%EC%B0%A8%EC%9D%B4%EC%A0%90">https://prinha.tistory.com/entry/SQL-DELETE-TRUNCATE-DROP-%EC%B0%A8%EC%9D%B4%EC%A0%90</a></p>
<h3 id="distinct에-대해서-설명해주세요-사용해본-경험도-설명해주세요">DISTINCT에 대해서 설명해주세요. 사용해본 경험도 설명해주세요.</h3>
<p>DISTINCT란 중복제거 키워드입니다. SELECT로 DB에서 컬럼을 조회할 때, 중복되는 값을 제거하고 조회할 때 사용합니다. 즉, DISTINCT 키워드를 붙인 필드(컬럼)는 중복 값을 합쳐 한 번만 출력합니다.</p>
<p>출처 : <a href="https://bio-info.tistory.com/110">https://bio-info.tistory.com/110</a></p>
<h3 id="sql-injection-공격이-무엇인지-어떻게-공격을-예방할-수-있는지-설명해주세요">SQL Injection 공격이 무엇인지 어떻게 공격을 예방할 수 있는지 설명해주세요.</h3>
<p>SQL Injection 이란 악의적인 사용자가 보안상의 취약점을 이용하여, 임의의 SQL 문을 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 행위 입니다. </p>
<p>대응방안 : Error Message 노출 금지</p>
<p>출처 : <a href="https://noirstar.tistory.com/264">https://noirstar.tistory.com/264</a></p>
<h3 id="알고-있는-sql-안티패턴이-있다면-설명해주세요">알고 있는 SQL 안티패턴이 있다면 설명해주세요.</h3>
<p>이 부분은 추가적으로 더 공부가 필요할 것 같다.</p>
<h3 id="페이지네이션을-구현한다고-했을때-쿼리를-어떻게-작성해야할까요">페이지네이션을 구현한다고 했을때 쿼리를 어떻게 작성해야할까요?</h3>
<p>이 부분은 추가적으로 더 공부가 필요할 것 같다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[데이터베이스 모의면접 정리]]></title>
            <link>https://velog.io/@mingle-mongle/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EB%AA%A8%EC%9D%98%EB%A9%B4%EC%A0%91-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@mingle-mongle/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EB%AA%A8%EC%9D%98%EB%A9%B4%EC%A0%91-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Fri, 28 Jul 2023 19:41:33 GMT</pubDate>
            <description><![CDATA[<h2 id="1-파일시스템과-데이터베이스의-차이점에-대해서-설명해주세요">1. 파일시스템과 데이터베이스의 차이점에 대해서 설명해주세요.</h2>
<p>파일시스템은 <code>별도의 구입비용이 들지 않는다는 장점</code>이 있지만 <code>데이터 중복저장과, 응용프로그램이 데이터 파일에 종속적이고, 동시공유, 보안, 회복기능이 부족</code>합니다.</p>
<p>이러한 단점을 보완하여 나온 시스템이 <code>데이터베이스 관리 시스템</code>입니다.</p>
<p>데이터베이스 관리 시스템은 응용 프로그램을 대신하여 데이터베이스에 존재하는 <code>데이터의 검색, 삽입, 삭제, 수정을 가능</code>하게 하고, <code>모든 응용 프로그램이 데이터베이스를 공유</code>할 수 있게 합니다.</p>
<p>그렇지만 <code>비용이 많이 들고, 백업과 회복 방법이 복잡하다는 단점</code>이 있습니다.</p>
<h2 id="데이터베이스의-특징에-대해-설명해주세요">데이터베이스의 특징에 대해 설명해주세요.</h2>
<p>데이터베이스는 4가지 특징이 있습니다.</p>
<p>첫번째로 <code>실시간 접근이 가능</code>합니다. 사용자의 데이터 요구에 실시간으로 응답할 수 있어야 합니다.</p>
<p>두번째로 <code>계속 변화</code>합니다. 현실의 데이터는 계속 변하므로 삽입, 수정, 삭제를 통해 현재의 정확한 데이터를 유지해야 합니다.</p>
<p>세번째로 <code>동시 공유가 가능</code>합니다. 여러 사용자가 동시에 이용할 수 있어야 합니다.</p>
<p>네번째로 <code>내용으로 참조가 가능</code>합니다. 저장된 주소나 위치가 아닌 값으로 참조할 수 있습니다.</p>
<h2 id="dbms는-뭘까요-특징에-대해-설명해주세요">DBMS는 뭘까요? 특징에 대해 설명해주세요.</h2>
<p><code>DataBase Management System</code>의 약자로 데이터베이스 관리 시스템입니다.</p>
<p>데이터베이스 관리 시스템은 <code>조직에 필요한 데이터를 데이터베이스에 통합하여 저장하고 이에 대한 관리를 집중적으로 담당</code>합니다.</p>
<p>데이터베이스 관리 시스템의 주요 기능으로는 <code>데이터베이스 정의, 조작, 제어 기능</code>이 있습니다.</p>
<p><code>장점</code>으로는 데이터 중복 통제, 독립성 확보, 동시 공유, 보안 향상, 데이터 무결성 유지, 회복 가능 등이 있고,
<code>단점</code>으로는 비용 문제와 백업과 회복 방법이 복잡하다는 점이 있습니다.</p>
<h2 id="스키마가-뭘까요-3단계-데이터베이스-구조에-대해-설명해주세요">스키마가 뭘까요? 3단계 데이터베이스 구조에 대해 설명해주세요.</h2>
<p>스키마는 <code>데이터베이스에 저장되는 데이터 구조와 제약조건을 정의한 것</code>입니다.</p>
<p>정의된 스키마에 따라 데이터베이스에 <code>실제로 저장된 값이 인스턴스</code>입니다.</p>
<p>3단계 데이터베이스 구조는 <code>외부 단계, 개념 단계, 내부 단계</code>로 나누어 집니다.</p>
<p><code>외부 스키마</code>는 사용자가 보는 관점으로 사용자에 따라 달라지고, 여러 개가 존재합니다.</p>
<p><code>개념 스키마</code>는 모든 사용자가 생각하는 데이터베이스의 모습을 하나로 합친 모습입니다.
데이터들의 관계와 제약조건, 접근권한과 보안 정책에 대해 정의합니다.</p>
<p><code>내부 스키마</code>는 전체 데이터베이스가 저장 장치에 실제로 저장되는 방법을 정의합니다.
데이터베이스의 물리적인 저장 구조를 표현합니다.</p>
<h2 id="데이터-독립성에-대해서-설명해주세요">데이터 독립성에 대해서 설명해주세요.</h2>
<p>데이터 독립성은 <code>하위 스키마를 변경하더라도 상위 스키마가 영향을 받지 않는 특성</code>입니다.</p>
<p><code>3단계 데이터베이스 구조의 목적은 데이터 독립성을 실현하기 위해서</code>인데, 논리적 데이터 독립성과 물리적 데이터 독립성이 존재합니다.</p>
<p><code>논리적 데이터 독립성</code>은 개념 스키마가 변경되더라도 외부 스키마가 영향을 받지 않는 것입니다.</p>
<p><code>물리적 데이터 독립성</code>은 내부 스키마가 변경되더라도 개념 스키마가 영향을 받지 않는 것입니다.
그래서 결과적으로는 외부 스키마도 영향을 받지 않습니다.</p>
<h2 id="rdbms관계형-데이터베이스-관리시스템는-뭘까요">RDBMS(관계형 데이터베이스 관리시스템)는 뭘까요?</h2>
<p><code>테이블을 기반으로 사용하는 데이터베이스 관리시스템</code>입니다.</p>
<p><code>장점</code>은 
모델이 간단하여 이해하기 쉬우며, 
사용자는 자신이 원하는 것만 명시하고, 
데이터가 어디에 있는지, 어떻게 접근해야 하는지는 관계형 데이터베이스 관리시스템에서 결정한다는 것입니다.</p>
<h2 id="릴레이션-스키마와-릴레이션-인스턴스에-대해서-설명해주세요">릴레이션 스키마와 릴레이션 인스턴스에 대해서 설명해주세요.</h2>
<p><code>릴레이션 스키마는 릴레이션의 이름과 릴레이션에 포함된 모든 속성의 이름으로 정의하는 릴레이션의 논리적 구조</code>입니다.</p>
<p>릴레이션 스키마를 보면 릴레이션의 이름이 무엇이고, 어떤 속성들로 구성되어 있는지 <code>전체 구조를 쉽게 파악할 수 있습니다.</code></p>
<p><code>릴레이션 인스턴스는 어느 한 시점에 릴레이션에 존재하는 투플들의 집합</code>입니다.</p>
<p><code>각 속성에 대응하는 실제 값으로 구성</code>되어 있습니다.</p>
<p>릴레이션 인스턴스를 보면 <code>현재 릴레이션의 실제 내용을 쉽게 파악</code>할 수 있습니다.</p>
<p>집의 전체 구조는 자주 바뀌지 않지만 집에 사는 사람은 수시로 바뀔 수 있는 것처럼 논리적 구조를 정의하는 <code>릴레이션 스키마는 자주 변하지 않는다는 정적인 특징</code>이 있지만, <code>릴레이션 인스턴스는 투플의 삽입, 삭제, 수정이 자주 발생한다는 동적인 특징</code>이 있습니다.</p>
<h2 id="릴레이션의-차수와-카니덜리티에-대해-설명해주세요">릴레이션의 차수와 카니덜리티에 대해 설명해주세요.</h2>
<p>하나의 릴레이션에서 <code>속성(열)의 전체 개수</code>를 릴레이션의 차수(degree)라고 합니다.</p>
<p><code>모든 릴레이션은 최소 1 이상의 차수를 유지해야 하고, 자주 변하지 않는다는 정적인 특징</code>이 있습니다.</p>
<p>하나의 릴레이션에서 <code>투플(행)의 전체 개수</code>를 릴레이션의 카디널리티(cardinality)라고 합니다.</p>
<p>투플이 없는 릴레이션이 존재할 수도 있고, 새로운 투플이 계속 삽입되거나 기존 투플이 삭제될 수 있으므로 <code>릴레이션의 카디널리티는 일반적으로 자주 변한다는 동적인 특징</code>이 있습니다.</p>
<h2 id="키key에-대해서-설명해주세요-슈퍼키-후보키-기본키-대리키-외래키">키(Key)에 대해서 설명해주세요. (슈퍼키, 후보키, 기본키, 대리키, 외래키)</h2>
<p>키는 <code>관계 데이터 모델에서 중요한 제약조건을 정의</code>합니다.</p>
<p><code>슈퍼키</code>는 각 행을 유일하게 식별할 수 있는 속성들의 집합입니다. 
서로 구분만 할 수 있다면 &#39;슈퍼키&#39;라고 할 수 있습니다.</p>
<p><code>후보키</code>는 각 행을 유일하게 식별할 수 있는 &quot;최소한의&quot; 속성들의 집합이다. 
서로 구분할 수 있으면서 불필요한 속성들이 없어야 &#39;후보키&#39;라고 할 수 있다.</p>
<p><code>기본키</code>는 최소성을 가지고 있고, 후보키들 중에서 하나를 메인으로 선택한 키 입니다.</p>
<p><code>대체키</code>는 기본키를 제외한 나머지 후보키들을 의미합니다.</p>
<p><code>외래키</code>는 한 테이블이 다른 테이블의 기본키를 참조해서 테이블 간의 관계를 만드는 것을 의미합니다.</p>
<h2 id="무결성-제약조건에-대해서-설명해주세요-도메인-무결성-개체-무결성-참조-무결성">무결성 제약조건에 대해서 설명해주세요. (도메인 무결성, 개체 무결성, 참조 무결성)</h2>
<p><code>데이터를 정확하고 유효하게 유지하는 무결성을 보장해야 된다는 규칙</code>입니다.</p>
<p>도메인 무결성, 개체 무결성, 참조 무결성 제약조건이 있습니다.</p>
<p><code>도메인 무결성 제약조건</code>은 속성값은 해당 속성 도메인에 속한 값들 중 하나여야 한다는 것입니다.</p>
<p><code>개체 무결성 제약조건</code>은 기본키를 구성하는 모든 속성은 널 값을 가질 수 없다는 것입니다.</p>
<p><code>참조 무결성 제약조건은 외래키</code>는 참조할 수 없는 값을 가질 수 없다는 것입니다.</p>
<h2 id="어떤-데이터베이스를-사용해보셨나요-사용해본-데이터베이스에-대해서-설명해주세요-오라클db-mysql-mariadb-mongodb-등">어떤 데이터베이스를 사용해보셨나요? 사용해본 데이터베이스에 대해서 설명해주세요. (오라클DB, MySQL, MariaDB, MongoDB 등)</h2>
<p>MySQL은 가장 널리 사용되고 있는 <code>관계형 데이터베이스 관리 시스템(RDBMS)</code>입니다.</p>
<p><code>DB 서버마다 독립적인 스토리지를 할당하는 방식</code>입니다.</p>
<p>장점으로는 <code>무료</code>로 사용 가능하다는 점이 있고, 
<code>처리 속도가 빠르고 대용량 데이터 처리에 용이</code>합니다.
거의 <code>모든 운영체제 사용을 지원</code>합니다.</p>
<p>그렇지만 <code>단점</code>으로는 
<code>복잡한 쿼리는 성능이 저하</code>될 수 있고, 트랜잭션 지원이 완벽하지 않고, 
사용자정의 함수의 사용이 쉽지 않고 유연하지 않습니다.</p>
<hr>
<p>출처: <a href="https://velog.io/@00yubin00/DB-%ED%82%A4%EC%9D%98-%EC%A2%85%EB%A5%98-%EC%8A%88%ED%8D%BC%ED%82%A4-%ED%9B%84%EB%B3%B4%ED%82%A4-%EA%B8%B0%EB%B3%B8%ED%82%A4-%EB%8C%80%EC%B2%B4%ED%82%A4-%EC%99%B8%EB%9E%98%ED%82%A4">https://velog.io/@00yubin00/DB-%ED%82%A4%EC%9D%98-%EC%A2%85%EB%A5%98-%EC%8A%88%ED%8D%BC%ED%82%A4-%ED%9B%84%EB%B3%B4%ED%82%A4-%EA%B8%B0%EB%B3%B8%ED%82%A4-%EB%8C%80%EC%B2%B4%ED%82%A4-%EC%99%B8%EB%9E%98%ED%82%A4</a></p>
<p>데이터베이스 개론</p>
<p><a href="http://www.tcpschool.com/mysql/mysql_intro_intro">http://www.tcpschool.com/mysql/mysql_intro_intro</a></p>
<p><a href="https://velog.io/@alicesykim95/Oracle%EA%B3%BC-MySQL%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90">https://velog.io/@alicesykim95/Oracle%EA%B3%BC-MySQL%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[네트워크 (1)]]></title>
            <link>https://velog.io/@mingle-mongle/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-1%EC%A3%BC%EC%B0%A8-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@mingle-mongle/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-1%EC%A3%BC%EC%B0%A8-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Fri, 28 Jul 2023 12:43:41 GMT</pubDate>
            <description><![CDATA[<h3 id="컴퓨터-네트워크란">컴퓨터 네트워크란?</h3>
<p>컴퓨터 네트워크는 통신 및 데이터 교환을 허용하는 연결된 장치의 시스템이며 인터넷과 WWW는 현대 컴퓨터 네트워크의 핵심 구성 요소입니다.</p>
<h3 id="현대-컴퓨터-네트워크에서-데이터를-어떻게-전달할까">현대 컴퓨터 네트워크에서 데이터를 어떻게 전달할까?</h3>
<h4 id="회선교환방식">회선교환방식</h4>
<p>회선교환 방식은 회선 독점을 통한 통신방식이라고 볼 수 있습니다.
회선교환 방식의 가장 큰 특징은 전용선 할당에 있습니다.
송수신을 연결하는 전용선을 설정하고 전송을 하는게 핵심입니다.</p>
<h4 id="패킷교환방식">패킷교환방식</h4>
<p>패킷교환은 회선교환과 다르게 전용선의 개념이 없습니다.
패킷교환은 전송하려는 데이터를 패킷이라는 단위로 나눠 네트워크망으로 뿌려주게 됩니다.
따라서 특정한 데이터가 100개의 패킷으로 분해되어 전송된다면, 100개의 패킷들은 라우터에의해 서로다른 경로로 전송될 수 있고, 최종적으로 목적지에 100개의 패킷이 전달되면 패킷의 순서를 통해 다시 원래의 데이터로 합쳐지는 방식입니다.</p>
<h3 id="라우터와-스위치">라우터와 스위치</h3>
<h4 id="스위치">스위치</h4>
<p>목적지로 출발한 데이터를 중간에 적합한 경로로 스위칭해주는 역할을 하는것이 스위치이고 스위치는 데이터링크 계층에 속한다. 스위치는 데이터링크 계층에 속해 있으므로 MAC주소 기반으로 동작한다.</p>
<h4 id="라우터">라우터</h4>
<p>라우터 또한 목적지로 가는 적합한 경로를 찾아주는 라우팅 기능을 한다. 라우터는 IP주소를 기반으로 작동하여 네트워크 계층에 속해있다.</p>
<h4 id="둘의-차이점">둘의 차이점</h4>
<ul>
<li>가장 대표적인 차이는 계층의 차이이다. 라우터는 네트워크계층에서 IP주소를 기반으로 동작하며 스위치는 MAC주소를 기반으로 데이터링크 계층에서 동작한다.</li>
<li>스위치는 브로드캐스트 도메인을 구분할 수 없는 반면 라우터는 브로드캐스트 도메인을 구분하여 서로 다른 네트워크 대역을 구분한다.</li>
<li>스위치는 불명확한 목적지를 가진 데이터를 처리할 때 모든 포트로 데이터를 퍼뜨리는 브로드캐스트를 하지만 라우터는 해당 데이터를 버린다.</li>
<li>스위치는 관리자의 설정이 필요 없지만 라우터는 관리자의 설정으로 라우팅 테이블 생성과 통신을 해야한다.</li>
</ul>
<h3 id="프로토콜이-뭔가요-프로토콜-스택에-대해서-설명해주세요">프로토콜이 뭔가요? 프로토콜 스택에 대해서 설명해주세요.</h3>
<p>컴퓨터 네트워크에서의 프로토콜은 서로 다른 기종의 컴퓨터끼리 통신하기 위해서 미리 정해놓은 통신 규약 및 통신 약속입니다.
참고공부내용
<a href="https://velog.io/@mingle-mongle/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C">https://velog.io/@mingle-mongle/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C</a></p>
<h3 id="osi-7-layer">OSI 7 Layer</h3>
<p>OSI 7 계층은 네트워크에서 통신이 일어나는 과정을 7단계로 나눈 것을 말한다. 
참고 공부 내용
<a href="https://shlee0882.tistory.com/110">https://shlee0882.tistory.com/110</a></p>
<h3 id="tcpip">TCP/IP</h3>
<p><img src="https://velog.velcdn.com/images/mingle-mongle/post/c858233a-5d86-49da-9a6d-0ca8b9018569/image.png" alt="">
현재 수많은 프로그램들이 인터넷으로 통신하는 데 있어 가장 기반이 되는 프로토콜. 실제 대다수 프로그램은 TCP와 IP로 통신(정확히는 &#39;네트워킹&#39;)하고 있다.</p>
<h3 id="osi-7-layer-또는-tcpip-처럼-프로토콜들을-계층화하면-어떤-장점이-있을까요">OSI 7 Layer 또는 TCP/IP 처럼 프로토콜들을 계층화하면 어떤 장점이 있을까요?</h3>
<p>통신이 일어나는 과정을 단계별로 파악할 수 있다.
흐름을 한눈에 알아보기 쉽고, 사람들이 이해하기 쉽고, 7단계 중 특정한 곳에 이상이 생기면 다른 단계의 장비 및 소프트웨어를 건들이지 않고도 이상이 생긴 단계만 고칠 수 있다.</p>
<h3 id="사용해봤던-프로토콜">사용해봤던 프로토콜</h3>
<h4 id="http">HTTP</h4>
<p><img src="https://velog.velcdn.com/images/mingle-mongle/post/e55e9089-5d30-45e9-be23-0519c068371d/image.png" alt="">
출처 : <a href="https://joshua1988.github.io/web-development/http-part1/">https://joshua1988.github.io/web-development/http-part1/</a></p>
<h3 id="http-프로토콜이란">HTTP 프로토콜이란?</h3>
<p>클라이언트와 서버 간 통신을 위한 통신 규칙 세트 또는 프로토콜입니다. 사용자가 웹 사이트를 방문하면 사용자 브라우저가 웹 서버에 HTTP 요청을 전송하고 웹 서버는 HTTP 응답으로 응답합니다.</p>
<h3 id="http의-요청응답-모델">HTTP의 요청/응답 모델</h3>
<p><img src="https://velog.velcdn.com/images/mingle-mongle/post/178523cc-508f-4498-9932-9c2f79d3e9fb/image.png" alt="">
HTTP는 서버/클라이언트 모델을 따르는데 클라이언트에서 요청(Request)를 보내면 서버는 요청을 처리해서 응답(response)를 합니다.</p>
<ul>
<li>요청 : GET/POST/PUT/PATCH/DELETE</li>
<li>응답: 상태코드 상태메세지
200 : 성공
300 : 리디렉션
400 : 실패(클라이언트)
500 : 실패(서버)</li>
</ul>
<h3 id="http-메서드중-get과-post의-차이점">HTTP 메서드중 GET과 POST의 차이점</h3>
<p>GET 은 클라이언트에서 서버로 어떠한 리소스로부터 정보를 요청하기 위해 사용되는 메서드이다.
POST는 클라이언트에서 서버로 리소스를 생성하거나 업데이트하기 위해 데이터를 보낼 때 사용 되는 메서드다.
POST는 전송할 데이터를 HTTP 메시지 body 부분에 담아서 서버로 보낸다.
GET은 서버의 리소스에서 데이터를 요청할 때, POST는 서버의 리소스를 새로 생성하거나 업데이트할 때 사용한다.
DB로 따지면 GET은 SELECT 에 가깝고, POST는 Create 에 가깝다고 보면 된다.</p>
<h3 id="http-메서드중-put과-patch의-차이점">HTTP 메서드중 PUT과 PATCH의 차이점</h3>
<p>리소스를 업데이트 한다는 점에서는 같은 역할을 하는 메소드처럼 보이지만 두개의 요청에는 약간의 차이가 있다.
PUT : 리소스의 모든 것을 업데이트 한다.
PATCH : 리소스의 일부를 업데이트 한다.</p>
<h3 id="http-상태-코드">HTTP 상태 코드</h3>
<p>1로 시작하는 경우 = Informational responses
: 요청을 받았으며 프로세스를 계속함
2로 시작하는 경우 = Success
: 요청을 성공적으로 받았으며 인식했고 수용했음
3로 시작하는 경우 = Redirection
: 클라이언트의 요청에 대해 적절한 위치를 제공하거나 대안의 응답을 제공
4로 시작하는 경우 = Client Error
: 클라이언트의 잘못된 요청
5로 시작하는 경우 = Server Error
: 정상적인 클라이언트의 요청에 대해 서버의 문제로 인해 응답할 수 없음</p>
<p>201 created
200 ok
404 not found : 해당 오류는 서버 자체는 존재하지만 서버에서 요청한 것을 찾을 수 없을 때</p>
<h3 id="http-헤더">HTTP 헤더</h3>
<p>HTTP 헤더는 클라이언트와 서버가 요청 또는 응답으로 부가적인 정보를 전송할 수 있도록 해줍니다.</p>
<ul>
<li>General header : 요청과 응답 모두에 적용되지만 바디에서 최종적으로 전송되는 데이터와는 관련이 없는 헤더.</li>
<li>Request header : 페치될 리소스나 클라이언트 자체에 대한 자세한 정보를 포함하는 헤더. == 내가 보내는 메세지의 헤더</li>
<li>Response header : 위치 또는 서버 자체에 대한 정보(이름, 버전 등)와 같이 응답에 대한 부가적인 정보를 갖는 헤더. == 내가 받은 메세지의 헤더</li>
<li>Entity header: 컨텐츠 길이나 MIME 타입과 같이 엔티티 바디에 대한 자세한 정보를 포함하는 헤더.</li>
</ul>
<h3 id="http의-무상태성stateless">HTTP의 무상태성(Stateless)</h3>
<p>HTTP는 서버가 클라이언트의 상태를 보존하지 않는 무상태 프로토콜</p>
<h4 id="장점--서버-확장성-높음-무한한-서버-증설-가능-스케일-아웃">장점 : 서버 확장성 높음. 무한한 서버 증설 가능 (스케일 아웃)</h4>
<h4 id="단점-클라이언트가-추가-데이터를-전송해야-함-서버에-저장되어-있지-않으므로">단점: 클라이언트가 추가 데이터를 전송해야 함 (서버에 저장되어 있지 않으므로)</h4>
<p>-&gt; 단순한 서비스 소개 화면 같은 경우엔 무상태로 설계할 수 있지만, 로그인 등 유저의 상태를 유지해야 하는 서비스라면 브라우저 쿠키, 서버 세션, 토큰 등을 이용해 상태를 유지해야 한다.</p>
<ul>
<li>클라이언트가 요청할 때 필요한 데이터를 다 담아서 보내기 때문에 같은 기능을 하는 아무 서버나 호출해도 된다.
<img src="https://velog.velcdn.com/images/mingle-mongle/post/3cbef17a-7a84-4886-9d77-06871476f2cd/image.png" alt=""></li>
<li>서버에 장애가 생겨도 다른 서버에서 응답을 전달하기 때문에 클라이언트는 다시 요청할 필요가 없다.
<img src="https://velog.velcdn.com/images/mingle-mongle/post/1684bcdf-d7c5-431d-948f-81eb76c300cc/image.png" alt=""></li>
<li>응답 서버를 쉽게 바꿀 수 있기 때문에 무한한 서버 증설이 가능하다.
<img src="https://velog.velcdn.com/images/mingle-mongle/post/7046acfe-bfb9-48bc-901b-09afb333c421/image.png" alt="">
이미지 출처: <a href="https://velog.io/@pikadev1771/HTTP-pdptvkgo">https://velog.io/@pikadev1771/HTTP-pdptvkgo</a></li>
</ul>
<h3 id="http-keep-alive">HTTP Keep-Alive</h3>
<p>HTTP 프로토콜의 Keep-Alive 기능은 클라이언트와 서버 간 요청 및 응답 과정을 효율적으로 유지하기 위해 사용됩니다. keep-alive를 활성화하면 하나의 TCP 연결을 여러 번 재사용하며 응답과 요청을 수행할 수 있습니다.</p>
<p>HTTP 프로토콜에서 클라이언트와 서버 간 여러 요청을 단일 TCP 연결을 재사용하는 방식으로 처리하는 기능을 말합니다. HTTP/1.1 프로토콜부터 도입됐습니다. 이 기능을 활성화하면 여러 HTTP 요청 및 응답 과정에서 발생하는 네트워크 오버헤드를 줄일 수 있습니다.</p>
<p>keep-alive를 사용하는 경우 HTTP 요청 헤더에 Connection: Keep-Alive라는 값을 포함시킵니다.</p>
<h4 id="장점">장점</h4>
<p>keep-alive가 없으면 클라이언트와 서버는 각 요청과 응답에 대해 매번 새로운 TCP 연결을 생성하고 닫아야 합니다. 이 방식은 네트워크 리소스가 비효율적으로 사용됩니다. 반면 keep-alive를 사용하면 단일 TCP 연결에서 여러 요청과 응답이 이루어지기 때문에 네트워크 지연 시간이 줄어들고 웹 사이트 성능이 좋아집니다.</p>
<h4 id="예시">예시</h4>
<p>keep-alive의 상황을 비유하자면, 전화 통화하는 상황을 떠올릴 수 있습니다. 한 고객이 고객센터에 전화를 걸어 제품에 대해 궁금한 정보를 하나씩 묻는다고 해봅시다. 이때 하나의 질문을 할 때마다 대답을 듣고 전화가 끊어진다고 생각해 보세요. 전화를 걸고 다시 물어보는 과정이 반복된다면 매우 피곤할 것입니다. 한번 연결된 전화를 통해 모든 궁금증을 해결할 수 있는 편이 훨씬 효율적입니다.</p>
<h3 id="http-파이프라이닝">HTTP 파이프라이닝</h3>
<p>HTTP 파이프라이닝은 응답을 기다리지 않고 단일 TCP 연결을 통해 여러 HTTP 요청을 보내는 기술입니다. 이를 통해 더 빠른 데이터 전송이 가능하고 클라이언트와 서버 간의 왕복 시간으로 인한 대기 시간이 줄어듭니다.
<img src="https://velog.velcdn.com/images/mingle-mongle/post/31a161d0-b872-4daf-898d-a73933d7b3bc/image.png" alt="">
이미지출처: <a href="https://seonghui.github.io/TIL/docs/http/keep-alive-and-pipelining.html">https://seonghui.github.io/TIL/docs/http/keep-alive-and-pipelining.html</a></p>
<p>최초의 요청이 완료되기 전에 다음 요청을 보내는 기술이다. 다음 요청까,지의 대기 시간을 없앰으로써, 네트워크 가동율을 높이고 성능을 향상시킨다. Keep-Alive 이용을 전제로 하며, 서버는 요청이 들어온 순서대로 응답을 반환한다.</p>
<h3 id="http11-http2-http3-각각의-특징">HTTP/1.1, HTTP/2, HTTP/3 각각의 특징</h3>
<h4 id="http11">HTTP/1.1</h4>
<p>연결(Connection) 하나 당 하나의 요청을 처리하도록 설계되어 있습니다.(요청과 응답이 순차적으로 처리)
이런 설계 방식으로 다수의 리소스(image, css, script)를 처리하기 위해선 요청할 리소스 개수에 비례해서 Latency가 길어지게 됩니다.(동시전송, 속도, 성능문제)</p>
<h4 id="http2">HTTP/2</h4>
<p>HTTP1.1의 성능에 초점을 맞추어 수정한 버전입니다. latency, 네트워크, 서버 리소스 사용량 등과 같은 성능 위조로 개선했습니다.</p>
<h4 id="http3">HTTP/3</h4>
<p>가장 큰 특징은 TCP가 아닌 UDP를 사용한다는 것이다.</p>
<p>정확히 말하면 HTTP3는 QUIC라는 프로토콜 위에서 돌아가는 HTTP인데, QUIC는 Quick UDP Internet Connection의 약자로 UDP를 사용하는 프로토콜이다.</p>
<p>출처</p>
<ul>
<li><a href="https://velog.io/@jihoon97/%EC%8A%A4%EC%9C%84%EC%B9%98-%EB%9D%BC%EC%9A%B0%ED%84%B0%EC%9D%98-%EC%B0%A8%EC%9D%B4">https://velog.io/@jihoon97/%EC%8A%A4%EC%9C%84%EC%B9%98-%EB%9D%BC%EC%9A%B0%ED%84%B0%EC%9D%98-%EC%B0%A8%EC%9D%B4</a></li>
<li><a href="https://shlee0882.tistory.com/110">https://shlee0882.tistory.com/110</a></li>
<li><a href="https://namu.wiki/w/TCP/IP">https://namu.wiki/w/TCP/IP</a></li>
<li><a href="https://velog.io/@fejigu/HTTP%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%9A%94%EC%B2%AD%EA%B3%BC-%EC%9D%91%EB%8B%B5">https://velog.io/@fejigu/HTTP%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%9A%94%EC%B2%AD%EA%B3%BC-%EC%9D%91%EB%8B%B5</a></li>
<li><a href="https://blog.naver.com/lw_10page/221640822337">https://blog.naver.com/lw_10page/221640822337</a></li>
<li><a href="https://velog.io/@pikadev1771/HTTP-pdptvkgo">https://velog.io/@pikadev1771/HTTP-pdptvkgo</a></li>
<li><a href="https://change-words.tistory.com/entry/HTTP-Keep-Alive">https://change-words.tistory.com/entry/HTTP-Keep-Alive</a></li>
<li><a href="https://wiki.yowu.dev/ko/Knowledge-base/Network/http-pipelining-how-to-improve-web-performance-with-multiple-requests">https://wiki.yowu.dev/ko/Knowledge-base/Network/http-pipelining-how-to-improve-web-performance-with-multiple-requests</a></li>
<li><a href="https://jjam89.tistory.com/148">https://jjam89.tistory.com/148</a></li>
<li><a href="https://velog.io/@kcwthing1210/HTTP-1.1-vs-HTTP-2.0-vs-HTTP-3.0">https://velog.io/@kcwthing1210/HTTP-1.1-vs-HTTP-2.0-vs-HTTP-3.0</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[DB] 데이터베이스]]></title>
            <link>https://velog.io/@mingle-mongle/DB-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4</link>
            <guid>https://velog.io/@mingle-mongle/DB-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4</guid>
            <pubDate>Thu, 27 Jul 2023 06:25:29 GMT</pubDate>
            <description><![CDATA[<h2 id="데이터베이스란">데이터베이스란?</h2>
<ul>
<li>데이터베이스는 여러 사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합</li>
<li>즉, 자료 파일들을 조직적으로 통합하여 항목의 중복을 없애고 자료를 구조화하여 기억시켜 놓은 자료의 집합체</li>
</ul>
<h2 id="데이터베이스의-특징">데이터베이스의 특징</h2>
<ol>
<li>데이터베이스는 실시간 접근이 가능하다.
 : 사용자의 데이터 요구에 실시간으로 응답할 수 있어야 한다.</li>
<li>데이터베이스는 계속 변화한다.
 : 현실 세계의 상태를 정확히 반영해야 의미가 있다.</li>
<li>데이터베이스는 동시 공유가 가능하다.
 : 동시 공유는 사용자가 서로 다른 데이터를 동시에 사용하는 것 뿐만 아니라, 같은 데이터를 동시에 사용하는 것도 모두 지원한다는 의미다.</li>
<li>데이터베이스는 내용으로 참조가 가능하다.
 : 저장된 주소나 위치가 아닌 데이터의 내용, 즉 값으로 참조할 수 있다.</li>
</ol>
<ul>
<li>실시간 접근성</li>
<li>생성, 수정, 삭제를 통한 최신 데이터 유지</li>
<li>사용자들 간의 동시 공유</li>
<li>사용자가 원하는 데이터를 주소가 아닌 내용에 따라 참조 가능</li>
<li>데이터 논리적 독립성</li>
</ul>
<h2 id="파일시스템과-데이터베이스의-차이점">파일시스템과 데이터베이스의 차이점</h2>
<table>
<thead>
<tr>
<th align="center"></th>
<th align="center">파일 시스템</th>
<th align="center">데이터베이스</th>
</tr>
</thead>
<tbody><tr>
<td align="center">구조</td>
<td align="center">특정한 구조가 존재하지 않음</td>
<td align="center">table 형태로 저장</td>
</tr>
<tr>
<td align="center">접근방식</td>
<td align="center">순차적 접근만 가능</td>
<td align="center">비순차적 접근도 가능</td>
</tr>
<tr>
<td align="center">중복</td>
<td align="center">O</td>
<td align="center">비교적 덜 발생</td>
</tr>
<tr>
<td align="center">불일치</td>
<td align="center">O</td>
<td align="center">비교적 덜 존재</td>
</tr>
<tr>
<td align="center">트랜잭션</td>
<td align="center">X</td>
<td align="center">존재</td>
</tr>
<tr>
<td align="center">다중 사용자의 접속</td>
<td align="center">X</td>
<td align="center">O</td>
</tr>
<tr>
<td align="center">보안 및 권리</td>
<td align="center">각 프로그램마다 데이터를 가지고 있기 때문에 보안이 까다로움</td>
<td align="center">사용자들마다 다른 권한 부여 가능</td>
</tr>
<tr>
<td align="center">질의어</td>
<td align="center">X</td>
<td align="center">SQL</td>
</tr>
<tr>
<td align="center">회복</td>
<td align="center">X</td>
<td align="center">O</td>
</tr>
</tbody></table>
<h2 id="데이터베이스-관리-시스템datavse-management-system-dbms란">데이터베이스 관리 시스템(DataVse Management System, DBMS)란?</h2>
<ul>
<li>다수의 사용자들이 데이터베이스 내의 데이터를 접근할 수 있도록 해주는 응용 소프트웨어 프로그램</li>
<li>데이터베이스 생성, 조회, 수정, 삭제와 같은 환경과 각종 응용프로그램이 데이터베이스에 접근할 수 있는 인터페이스를 제공하며 복구, 권한 관리와 같은 보안성 기능도 제공함
<img src="https://velog.velcdn.com/images/mingle-mongle/post/d2ee27a0-32b5-44dc-840a-152254504ab9/image.png" alt="DBMS">
그림1. DBMS(출처 <a href="https://maily.so/queryaddict/posts/692ff5">https://maily.so/queryaddict/posts/692ff5</a>)</li>
</ul>
<h2 id="dbms-특징">DBMS 특징</h2>
<h3 id="장점">장점</h3>
<ul>
<li>데이터 중복 최소화</li>
<li>데이터 공유(일관성 유지)</li>
<li>정합성, 무결성, 보안성 유지</li>
<li>사용자 중심의 데이터 처리</li>
<li>데이터 표준화 적용 가능</li>
<li>데이터 접근 용이</li>
<li>데이터 저장 공간 공유로 인한 절약</li>
</ul>
<h3 id="단점">단점</h3>
<ul>
<li>데이터베이스(DBA) 전문가 필요</li>
<li>DBMS 구축 서버 필요 및 유지비</li>
<li>데이터 백업과 복구 어려움</li>
<li>시스템의 복잡성 증가</li>
<li>대용량 디스크로 엑세스 집중 시 병목현상으로 과부하 발생</li>
<li>대용량 데이터 처리 어려움</li>
</ul>
<h2 id="dbms-언어">DBMS 언어</h2>
<p>SQL은 데이터베이스에서 데이터를 정의, 조작, 제어하기 위해 사용하는 언어</p>
<table>
<thead>
<tr>
<th align="center">속성</th>
<th align="center">설명</th>
<th align="center">주요 명령어</th>
</tr>
</thead>
<tbody><tr>
<td align="center">DDL(Data Definition Language)</td>
<td align="center">데이터베이스나 테이블 등을 생성, 삭제하거나 그 구조를 변경하기 위한 명령어</td>
<td align="center">CREATE, ALTER, DROP, TRUNCATE</td>
</tr>
<tr>
<td align="center">DML(Data Manipulation Language)</td>
<td align="center">데이터베이스에 저장된 데이터를 처리하거나 조회, 검색하기 위한 명령어</td>
<td align="center">INSERT, UPDATE, DELETE, SELECT 등</td>
</tr>
<tr>
<td align="center">DCL(Data Control Language)</td>
<td align="center">데이터베이스에 저장된 데이터를 관리하기 위하여 데이터의 보안성 및 무결성 등을 제어하기 위한 명령어</td>
<td align="center">GRANT, REVOKE 등</td>
</tr>
</tbody></table>
<h2 id="스키마">스키마</h2>
<p>영상 참고하여 공부
<a href="https://www.youtube.com/watch?v=6XRenPgDEbo">https://www.youtube.com/watch?v=6XRenPgDEbo</a>
<img src="https://velog.velcdn.com/images/mingle-mongle/post/0ec410b3-e7d6-4856-ab1c-ed6b8a2ff47b/image.png" alt=""></p>
<h2 id="데이터-독립성">데이터 독립성</h2>
<p>데이터의 논리적 구조나 물리적 구조가 변경되더라도 응용 프로그램이 영향을 받지 않는 것</p>
<p>출처</p>
<ul>
<li><a href="https://cocoon1787.tistory.com/722#recentComments">https://cocoon1787.tistory.com/722#recentComments</a></li>
<li><a href="http://www.incodom.kr/DBMS">http://www.incodom.kr/DBMS</a></li>
<li><a href="https://ssungkang.tistory.com/entry/DATABASE-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-VS-%ED%8C%8C%EC%9D%BC%EC%B2%98%EB%A6%AC-%EC%8B%9C%EC%8A%A4%ED%85%9C">https://ssungkang.tistory.com/entry/DATABASE-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-VS-%ED%8C%8C%EC%9D%BC%EC%B2%98%EB%A6%AC-%EC%8B%9C%EC%8A%A4%ED%85%9C</a></li>
<li>데이터베이스 개론(김연희 지음)</li>
<li><a href="http://jidum.com/jidums/view.do?jidumId=84">http://jidum.com/jidums/view.do?jidumId=84</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[에러일기] 204 No Content 상태코드]]></title>
            <link>https://velog.io/@mingle-mongle/%EC%97%90%EB%9F%AC%EC%9D%BC%EA%B8%B0-204-No-Content-%EC%83%81%ED%83%9C%EC%BD%94%EB%93%9C</link>
            <guid>https://velog.io/@mingle-mongle/%EC%97%90%EB%9F%AC%EC%9D%BC%EA%B8%B0-204-No-Content-%EC%83%81%ED%83%9C%EC%BD%94%EB%93%9C</guid>
            <pubDate>Mon, 29 May 2023 17:24:58 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/mingle-mongle/post/936be6a4-e8c7-43d4-a961-226ba7d0a64b/image.png" alt=""></p>
<h2 id="에러메시지">에러메시지</h2>
<p><img src="https://velog.velcdn.com/images/mingle-mongle/post/9f5bec68-3532-4b82-8967-0f923dcf273f/image.png" alt=""></p>
<blockquote>
<p>SyntaxError: Unexpected end of JSON input</p>
</blockquote>
<p>트위터 클론코딩을 진행하다 만난 에러였다.
트위터 글을 삭제할 때마다 나타났다.
수정, 조회 시에는 나타나지 않아서 삭제 부분에 문제가 있다고 판단했다.</p>
<h2 id="문제점">문제점</h2>
<pre><code class="language-javascript">res.sendStatus(204);</code></pre>
<p>삭제 API의 마지막 응답을 204 상태코드로 보낸게 문제가 됐다.
204 상태코드의 경우 HTTP Response body가 아예 존재하지 않는 경우에 사용해야 한다.
<strong>express에서 자동으로 204상태코드에 대해 리스폰스바디를 보여주지 않고 넘어간다고 한다.</strong></p>
<p>나의 경우에는 프론트에서 fetch로 데이터를 받아왔을 때 body가 없을 경우 
에러를 반환하는 코드가 있었어서 이 에러가 계속 뜨는거였다!</p>
<h3 id="204-상태코드-사용-시-주의할-점">204 상태코드 사용 시 주의할 점</h3>
<p>204 상태코드가 가지는 의미는 좀 더 상세히 보자면 
204 No Content 클라이언트의 요청은 정상적이다. 
하지만 컨텐츠를 제공하지 않는다.
200으로 응답하고 응답 body에 null, false 등으로 응답하는 것과 다르다.</p>
<p>204의 경우 HTTP Response body가 아예 존재하지 않는 경우에 사용한다.
삭제 요청으로 자원을 삭제하여 더 이상 존재하지 않고 그 자원을 참조하는 모든 자원도 삭제되어 더 이상 <strong>HTTP body를 응답하는 것이 무의미해졌을 때 사용</strong>한다고 한다!!</p>
<p>참고자료 : <a href="https://velog.io/@server30sopt/204-NOCONTENT%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%84%EC%8B%9C%EB%82%98%EC%9A%94">https://velog.io/@server30sopt/204-NOCONTENT%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%84%EC%8B%9C%EB%82%98%EC%9A%94</a></p>
<h2 id="해결방법">해결방법</h2>
<pre><code class="language-javascript">res.status(204).json({ message: `삭제가 완료되었습니다.` });</code></pre>
<p><img src="https://velog.velcdn.com/images/mingle-mongle/post/630248bd-cff3-4ce4-827d-fc038467ba69/image.png" alt="">
상태코드를 204로 하고 뒤에 데이터를 보냈을 때는 응답값이 아무 것도 뜨지 않았다.</p>
<p>그래서 상태코드 자체를 200 으로 수정했을 경우에는 데이터가 들어오는지 확인해봤다.
<img src="https://velog.velcdn.com/images/mingle-mongle/post/46caf87a-b385-4236-9f21-3cf00ec4fc21/image.png" alt="">
(아주 잘 들어온다!!)</p>
<pre><code class="language-javascript">res.status(200).json({ message: `삭제가 완료되었습니다.` });</code></pre>
<p>상태코드를 200으로 수정하고 응답 데이터를 전송하여 오류가 발생하지 않게끔 수정했다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[에러일기] CORS]]></title>
            <link>https://velog.io/@mingle-mongle/%EC%97%90%EB%9F%AC-%EC%9D%BC%EC%A7%80-CORS</link>
            <guid>https://velog.io/@mingle-mongle/%EC%97%90%EB%9F%AC-%EC%9D%BC%EC%A7%80-CORS</guid>
            <pubDate>Thu, 25 May 2023 19:10:05 GMT</pubDate>
            <description><![CDATA[<h2 id="에러메시지">에러메시지</h2>
<p><img src="https://velog.velcdn.com/images/mingle-mongle/post/7e2a60df-1700-48c5-9686-94d768b85461/image.png" alt=""></p>
<blockquote>
</blockquote>
<p>Access to fetch at &#39;<a href="http://localhost:8080/tweets&#39;">http://localhost:8080/tweets&#39;</a> from origin &#39;<a href="http://localhost:3000&#39;">http://localhost:3000&#39;</a> has been blocked by CORS policy: No &#39;Access-Control-Allow-Origin&#39; header is present on the requested resource. If an opaque response serves your needs, set the request&#39;s mode to &#39;no-cors&#39; to fetch the resource with CORS disabled.</p>
<p>트위터 클론코딩을 진행하다 마주쳤다.
postman 에서는 발생하지 않는 에러였고, 프론트쪽에서 발생하는 에러였다.
CORS 에러라고 떠서 백쪽의 CORS를 설정해주었는데도 에러가 해결되지 않았었다.</p>
<h2 id="문제점">문제점</h2>
<p><img src="https://velog.velcdn.com/images/mingle-mongle/post/252b9170-c5ca-4dd6-9681-8a3b84f69467/image.png" alt="">
트윗을 등록하는 API의 response 객체의 body를 JOSN 형식으로 바꾸지 않았다.</p>
<h2 id="해결방법">해결방법</h2>
<p><img src="https://velog.velcdn.com/images/mingle-mongle/post/5ee4e375-bdfe-4b36-9b7b-6bd29724f10f/image.png" alt="">
<code>JSON.stringify()</code>를 활용해 감싸주어 에러를 해결했다.</p>
<h2 id="알게된-점">알게된 점</h2>
<p>CORS에러는 출처가 다를 때만 발생하는 줄 알았는데, response객체를 잘못 전달했을 때도 발생한다는 사실을 처음 알았다.
--&gt; 근데 이 부분에서 왜 CORS 에러가 발생하는지 잘 모르겠다..</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[네트워크 모의면접 스터디 회고]]></title>
            <link>https://velog.io/@mingle-mongle/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EB%AA%A8%EC%9D%98%EB%A9%B4%EC%A0%91-%EC%8A%A4%ED%84%B0%EB%94%94-%ED%9A%8C%EA%B3%A0</link>
            <guid>https://velog.io/@mingle-mongle/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EB%AA%A8%EC%9D%98%EB%A9%B4%EC%A0%91-%EC%8A%A4%ED%84%B0%EB%94%94-%ED%9A%8C%EA%B3%A0</guid>
            <pubDate>Sat, 06 May 2023 17:40:18 GMT</pubDate>
            <description><![CDATA[<h2 id="활동-내용">활동 내용</h2>
<p>참여한 스터디는 jscode의 &#39;CS 면접 끝장내기 - 컴퓨터 네트워크편&#39;이다.
<a href="https://jscode.notion.site/CS-b785e7a9d0a94411917d442c436a13f8">CS 면접 끝장내기 - 컴퓨터 네트워크편</a>
2023.04.11 ~ 2023.05.06</p>
<p>1주일에 2회, 2시간씩 진행되었고,실제 면접에서 물어보는 질문들을 회차별로 나눠서 공부하고 모의면접을 실시했다.</p>
<p>개발자가 되기 위해 필요한 기본적인 컴퓨터 네트워크 지식을 학습하고, 팀 단위 모의 면접을 통해 내가 학습한 것들을 직접 말해보는 연습을 하는 방식으로 진행되는 스터디였다.</p>
<p><img src="https://velog.velcdn.com/images/mingle-mongle/post/72b61152-dac4-473e-bd4f-984b2841b4f9/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/mingle-mongle/post/aa8582f0-c4e7-47ea-934d-c0b0d00e5b06/image.png" alt=""></p>
<p>한 회차에 공부할 분량을 주고 다음 회차에서 공부한 부분에 대해서 팀원들과 서로 모의면접을 진행했었다.</p>
<p>필수적으로 공부하고 준비해야되는 부분과 더 깊게 공부하면 좋은 부분으로 나누어져 있어서 실질적으로 이 부분이 많은 도움이 되었다.
컴퓨터 네트워크 공부를 처음 진행해보았기 때문에 개념적으로 어려웠던 부분이 많았지만 <strong>&#39;어려워도 일단 필수지식은 꼭 챙겨가자!&#39;</strong> 라는 마음으로 공부할 수 있었다.</p>
<p><strong>지원자와 면접자, 관찰자 형식</strong>으로 진행되어서 서로서로 지원자와 면접자가 될 수 있었다. 서로 순서를 정해서 지원자와 면접자, 관찰자를 돌아가며 진행했다.
개인당 면접시간은 20분정도로 잡고 진행했다.</p>
<p>초반 회차엔 네트워크 지식만 물어보는 방식으로 진행됐지만 회차가 늘어가며 서로에 대한 인성면접 질문도 추가하며 인성면접도 모의면접을 해보는 방식으로 진행했다.</p>
<ul>
<li><strong>지원자</strong>가 됐을 때는 실제 면접상황을 대비할 수 있어서 좋았다.</li>
<li><strong>면접자</strong>가 됐을 때는 면접관의 입장이 되어보기 때문에 지원자가 어떻게 답변하면 인상에 남는지, 어떤 부분에 대해 자세히 꼬리질문을 할 것인지에 대해서 생각해볼 수 있어서 도움이 됐다.</li>
<li><strong>관찰자</strong>가 됐을 때는 제 3자의 입장에서 지원자를 객관적으로 바라볼 수 있기 때문에 어떤 점이 부족하고, 어떤 부분을 장점으로 살리면 좋을지 볼 수 있어서 도움이 됐다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/mingle-mongle/post/082966c5-d3c2-454a-89c8-445f5a202672/image.png" alt=""></p>
<p>1달간 공부하며 &#39;네트워크 모의면접 스터디&#39; 시리즈에 44개의 포스트를 작성했다.
그렇지만 부족한 부분들이 많아 현재는 공부한 부분들을 다시 &#39;컴퓨터 네트워크&#39; 시리즈에 포스팅하며 다시 한번 정리하는 시간을 갖고 있다.</p>
<p><img src="https://velog.velcdn.com/images/mingle-mongle/post/054ef9eb-5296-4397-bc43-60cb0670b098/image.png" alt=""></p>
<h6 id="스터디-첫-날👐🏻">스터디 첫 날!👐🏻</h6>
<p><img src="https://velog.velcdn.com/images/mingle-mongle/post/4d4598c5-ee5b-4654-b11f-446f86108204/image.png" alt=""></p>
<h6 id="스터디-마지막날-인증샷✌🏻흰색햄터가-나다ㅎ">스터디 마지막날 인증샷✌🏻(흰색햄터가 나다!ㅎ)</h6>
<hr>
<h2 id="성과">성과</h2>
<ul>
<li>컴퓨터 네트워크 지식에 대한 전반적인 기초 개념이 잡혔다.</li>
<li>면접 돌발상황에 대해 조금이나마 미리 경험해 본 느낌이다.</li>
<li>내가 당황하면 어떻게 행동하는지 미리 알 수 있었다.</li>
<li>면접을 어떻게 준비해야되는지 알게되었다.</li>
<li>어떤 부분이 부족하고, 어떤 부분을 채워야되는지 알 수 있었다.</li>
<li>컴퓨터 네트워크 뿐만 아니라 다른 전공지식들도 어떻게 공부해야하는지 배울 수 있었다.</li>
<li>나의 단점 뿐만 아니라 장점도 알 수 있었다.</li>
</ul>
<hr>
<h2 id="팀원들이-나를-바라본-이미지-및-장점">팀원들이 나를 바라본 이미지 및 장점</h2>
<ul>
<li>차분히 대화하듯이 이야기 해주는 느낌이여서 좋았다.</li>
<li>예시를 들어 설명하는게 좋았고, 이해를 하고 잘 설명해줘서 좋았다.</li>
<li>실제 프로젝트 경험을 통해 개념을 설명하는 부분이 좋았다.</li>
<li>끝까지 아는 부분을 말하려는 의지가 보여서 좋았다.</li>
<li>잘못 알고 있는 부분을 빠르게 인정한 점이 좋았다.</li>
<li>모르는 부분에 대해서는 공부가 필요하다고 인지한 점이 좋았다.</li>
</ul>
<hr>
<h2 id="배운-점-느낀-점-깨달은-점">배운 점, 느낀 점, 깨달은 점</h2>
<ul>
<li>타인의 단점을 캐치해내서 고치는 것도 좋지만 장점을 캐치해서 그 장점을 살리는 방향으로 피드백을 해주는게 좋았다.<ul>
<li>이 방법을 실천하며 내 가치관에도 많은 영향이 생겼다.</li>
<li>타인을 바라볼 때 단점을 찾기보단 장점을 더 보려고 하는 눈이 생겼다.</li>
</ul>
</li>
<li>실제 경험해본 사례를 연결시켜 개념을 공부하는게 가장 효과적이었다.</li>
<li>내가 부족한 부분들에 대해서 다시 한번 상기시킬 수 있었다.</li>
<li>다른 팀원들의 면접을 보며 좋은 점을 배워갈 수 있었다.</li>
<li>주어진 개념에 대해 그냥 무작정 &#39;공부해야되니까&#39; 라고 생각하고 공부했었다.
그런데 다른 팀원이 저에게 &#39;이걸 왜 사용하는지 생각해보셨나요?/A와 B 둘 중에 어떤게 더 좋은 방법이라고 생각하세요?/왜 B가 새로 나왔는데 아직도 A를 사용할까요?&#39; 라는 질문들을 받으며 한가지의 개념에 대해 이것이 왜 필요한지에 대해 생각해보게 되는 계기가 생겼다.<ul>
<li>내가 사용해 본 기술들에 대해서도 왜 그 기술을 사용했는지에 대해 고민해보는 시간을 가질 수 있었다.</li>
<li>생각을 할 때나 무언가를 해야될 때, &#39;왜?&#39;라는 질문을 던지는게 매우 중요하다고 생각이 들었다.</li>
</ul>
</li>
</ul>
<hr>
<h2 id="힘들었던-점-→-극복-및-대처한-방법">힘들었던 점 → 극복 및 대처한 방법</h2>
<p>네트워크 개념에 대한 공부가 처음이라 단어들에 대해 익숙해지기까지 시간이 조금 필요했다. 그래서 초반(1-2회차)에 공부할 때 너무너무너무 어려웠다😭</p>
<p>초반에는 무작정 암기하는 방식으로 공부했었다.
무작정 암기하는 방식의 단점은 개념에 대해 이해하지 못했기 때문에 답변이 술술 안나오고 계속 막힌다는 점이다.</p>
<p>점점 단어들이 익숙해지기 시작하고나서는 개념에 대해 이해가 되기 시작했고, 답변하는 부분들도 점점 많아졌다.
실제로 경험해봤던 부분들을 개념에 대입하여 공부하니 더 잘 이해되고 설명하기 수월해지는 것 같았다.</p>
<p>개념에 대해 이해를 했어도 머릿속에서 개념들이 넓게 퍼져있는 느낌이었다.
그래서 모의면접때도 조금 버벅이며 답변을 했고, 정확하게 1-2줄로 정리가 되어있지 않아 여러가지 내가 알고있는 개념들에 대해 최대한 모두 다 전달하려고 노력했던 것 같다.</p>
<p>이 부분에 대해 <strong>팀원분들이 피드백</strong> 해줬던게 매우 도움이 됐다.</p>
<ul>
<li>끝까지 아는 부분을 말하려는 의지가 보여서 좋았다. 그렇지만 두괄식으로 말하는 연습을 하면 같은 내용이라도 좀 더 깔끔하게 답변할 수 있을 것 같다.</li>
<li>말과 말 사이에 텀이 조금 있어서 모든 걸 말하기 위해 버벅거리며 말하기 보다는 빠르게 핵심적인 것 또는 알고 있는 것만 말하고, 추가적으로 꼬리질문이 들어오면 그때 나머지 정보를 대답할지 말지 결정하는 것도 방법이 될 것 같다.</li>
</ul>
<p><strong>개인적인 피드백</strong>으로는 알고있는 개념에 대해서 1-2줄로 두괄식으로 정리하는게 전체적으로 필요할 것 같다.
이건 네트워크 지식 뿐만 아니라 내가 진행했던 프로젝트와 다른 컴퓨터 전공지식에 대해서도 필요할 것 같다.</p>
<hr>
<h2 id="아쉬웠던-점-반성하고-싶은-점-→-앞으로-더-나아지기-위한-각오-및-다짐">아쉬웠던 점, 반성하고 싶은 점 → 앞으로 더 나아지기 위한 각오 및 다짐</h2>
<ul>
<li>나의 암기능력이 너무 아쉬웠다.<ul>
<li>키워드를 잡고 전체적으로 1-2줄로 개념정리를 해둬야겠다.</li>
</ul>
</li>
<li>공부를 너무 조급하게 했던 점을 반성하고 싶다.<ul>
<li>공부할 양이 많다보니 마음이 조급해져서 불안함이 더욱 커지고 그러다보니 공부에 집중이 더욱 안됐던 것 같다.</li>
<li>천천히 꾸준하게 하면 성공한다는 마음가짐으로 꾸준하게 계속 하는걸 중요시 해야겠다. </li>
</ul>
</li>
<li>네트워크 개념 뿐만 아니라 데이터베이스, 운영체제에 대해서도 추가적으로 많은 공부가 필요할 것 같다.</li>
</ul>
<hr>
<h2 id="마지막으로-나의-생각-정리">마지막으로 나의 생각 정리</h2>
<p>정말 얻어가는 점이 많았던 스터디였다.
처음에는 패닉과 공포 그자체였다...
전공지식에 대해서 처음으로 공부해봐서 그런지 모르는게 너무나 많았고, 이걸 어떻게 다 공부하지? 싶고, 내가 이렇게나 모르는데 개발자를 정말로 도전해도 되는걸까? 싶어서 엄청나게 무서웠고 자괴감이 들었었다..
그런데 지금 생각해보면 조금 웃긴다 ㅎ 왜그렇게 울었징?ㅎ
1-2회차 부분에 대해서 다시 공부해보니까 사실 별거 아니였다.ㅋ
처음이 어렵지 해보면 별거아니다!(사실은 별거임,,,그래도 견디고 계속 하다보면 조금은 나아지더라!)</p>
<p>스터디를 처음 해봐서 그런지 같이 공부하는 팀원들이 있다는 것이 정말 이렇게나 도움이 많이 될 줄 몰랐다.
공부하다가 마음이 해이해져도 팀원들한테 민폐끼치면 안되겠다는 생각에 포기하지 않고 더욱 더 공부할 수 있었던 것 같다.
중간중간 토마스님께 모르는 부분에 대해 질문할 수 있는 시간도 매우 좋았고, 네트워크에 관련된 질문이 아니라 개인적으로 공부를 하며 궁금했던 부분들도 시원하게 답변해주셔서 너무 좋았다. 진정한 멘토의 느낌이었다.</p>
<p>다른 팀원들에게서도 배울 점이 정말 많았다.
답변하는 방식과 생각들, 그리고 그 분들의 멋있는 모습들을 보며 나도 많은 자극을 받을 수 있었다.
나도 다른 사람들에게 자극을 줄 수 있는 사람이 되고 싶다는 욕구가 생겼다.</p>
<p>나에겐 정말로 뜻깊은 시간이었다. 다음 스터디도 얼른 참여하고 싶다!😆</p>
<img src="https://velog.velcdn.com/images/mingle-mongle/post/0b162596-34bc-473b-a1ca-0a104a1792df/image.jpg" width="50%" height="50%"/>
<img src="https://velog.velcdn.com/images/mingle-mongle/post/f6c5a1dc-8fae-40f1-9295-b2afe85b79c9/image.jpg" width="50%" height="50%"/>
<img src="https://velog.velcdn.com/images/mingle-mongle/post/1cd4efc4-7c4a-4871-a1cc-49d118ea5f10/image.jpg" width="50%" height="50%"/>


]]></description>
        </item>
        <item>
            <title><![CDATA[[네트워크] 프로토콜]]></title>
            <link>https://velog.io/@mingle-mongle/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C</link>
            <guid>https://velog.io/@mingle-mongle/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C</guid>
            <pubDate>Thu, 04 May 2023 20:29:00 GMT</pubDate>
            <description><![CDATA[<h2 id="프로토콜의-의미">프로토콜의 의미</h2>
<h3 id="프로토콜이란">프로토콜이란?</h3>
<p>컴퓨터 네트워크에서의 <span style='background-color: #fff5b1'>프로토콜은 서로 다른 기종의 컴퓨터끼리 통신하기 위해서 미리 정해놓은 통신 규약 및 통신 약속</span>입니다.</p>
</br>

<h3 id="프로토콜의-기본-요소">프로토콜의 기본 요소</h3>
<ul>
<li>구문(Syntax)
전송하고자 하는 데이터의 형식(Format), 부호화(Coding), 신호 레벨(Signal Level) 등을 규정</li>
<li>의미(Semantics)
두 기기 간의 효율적이고 정확한 정보 전송을 위한 협조 사항과 오류 관리를 위한 제어 정보를 규정</li>
<li>시간(Timing)
두 기기 간의 통신 속도, 메시지의 순서 제어 등을 규정</li>
</ul>
</br>

<h3 id="프로토콜-종류">프로토콜 종류</h3>
<table>
<thead>
<tr>
<th align="left">계층</th>
<th align="left">프로토콜</th>
</tr>
</thead>
<tbody><tr>
<td align="left">응용(Application)</td>
<td align="left">HTTP, SMTP, FTP, Telnet</td>
</tr>
<tr>
<td align="left">표현(Presentation)</td>
<td align="left">ASCII, MPEG, JPEG, MIDI</td>
</tr>
<tr>
<td align="left">세션(Session)</td>
<td align="left">NetBIOS, SAP, SDP, NWLink</td>
</tr>
<tr>
<td align="left">전송(Transport)</td>
<td align="left">TCP, UDP, SPX</td>
</tr>
<tr>
<td align="left">네트워크(Network)</td>
<td align="left">IP, IPX</td>
</tr>
<tr>
<td align="left">데이터 링크(Data Link)</td>
<td align="left">Ethernet, Token Ring, FDDI, Apple Talk</td>
</tr>
<tr>
<td align="left">물리(Physical)</td>
<td align="left">없음</td>
</tr>
</tbody></table>
</br>

<h3 id="프로토콜의-기능">프로토콜의 기능</h3>
<h4 id="단편화fragmentation와-재합성assembly">단편화(Fragmentation)와 재합성(Assembly)</h4>
<p>단편화 : 송신 측에서는 긴 데이터 블록을 손쉽게 전송할 수 있도록 크기가 똑같은 작은 블록으로 나누어 전송
재합성 : 수신 측에서 쪼개진 작은 데이터 블록을 재합성하여 원래의 메시지로 복원하는 기능 </p>
<h4 id="캡슐화encapsulation">캡슐화(Encapsulation)</h4>
<p>각 프로토콜에 적합한 데이터 블록을 만들려고 데이터에 정보를 추가하는 것
플래그, 주소, 제어 정보, 오류 검출 부호 등을 부착하는 기능</p>
<h4 id="연결-제어connection-control">연결 제어(Connection Control)</h4>
<p>비연결 데이터 전송(데이터그램)과 연결 위주 데이터 전송(가상회선)을 위한 통신로를 개설·유지·종결하는 기능</p>
<h4 id="흐름-제어flow-control">흐름 제어(Flow Control)</h4>
<p>데이터양이나 통신속도 등이 수신 측의 처리 능력을 초과하지 않도록 조정하는 기능</p>
<h4 id="오류-제어error-control">오류 제어(Error Control)</h4>
<p>데이터 전송 중 발생할 수 있는 오류나 착오 등을 검출하고 정정하는 기능</p>
<h4 id="순서-결정sequencing">순서 결정(Sequencing)</h4>
<p>연결 위주의 데이터를 전송할 때 송신 측이 보내는 데이터 단위 순서대로 수신 측에 전달하는 기능</p>
<h4 id="주소-설정addressing">주소 설정(Addressing)</h4>
<p>발생지, 목적지 등의 주소를 명기하여 데이터를 정확하게 전달하는 기능</p>
<h4 id="동기화synchronization">동기화(Synchronization)</h4>
<p>두 통신 객체의 상태(시작, 종류, 검사 등)를 일치시키는 기능</p>
<h4 id="다중화multiplexing">다중화(Multiplexing)</h4>
<p>하나의 통신로를 여러 개로 나누거나 회선 여러 개를 하나의 통신로로 변환시켜 다수의 가입자가 동시에 사할 수 있도록 하는 기능</p>
<h4 id="전송-서비스transmission-service">전송 서비스(Transmission Service)</h4>
<p>통신 객체를 사용하기 쉽도록 별도로 추가 서비스(패리티 검사, 보안도, 서비스 등급, 우선순위 등)를 제공하는 기능</p>
</br>

<h3 id="프로토콜의-예시">프로토콜의 예시</h3>
<h4 id="httphyper-text-transfer-protocol">HTTP(Hyper Text Transfer Protocol)</h4>
<p>포트번호: 80
packet 사용 (header와 body로 구성)</p>
<p>HTTP는 클라이언트와 서버 사이에 이루어지는 요청/응답(request/response) 프로토콜이다. 
주로 W3 상에서 정보를 주고받을 수 있는 프로토콜이다. 
주로 HTML 문서를 주고받는 데에 쓰인다. 
예를 들면, 클라이언트인 웹 브라우저가 HTTP를 통하여 서버로부터 웹페이지(HTML)나 그림 정보를 요청하면, 서버는 이 요청에 응답하여 필요한 정보를 해당 사용자에게 전달하게 된다. 
이 정보가 모니터와 같은 출력 장치를 통해 사용자에게 나타나는 것이다.</p>
<h4 id="httpshyper-text-transfer-protocol-secure">HTTPS(Hyper Text Transfer Protocol Secure)</h4>
<p>포트번호: 443</p>
<p>월드 와이드 웹 통신 프로토콜인 HTTP의 보안이 강화된 버전이다. 
HTTPS는 통신의 인증과 암호화를 위해 넷스케이프 커뮤니케이션즈 코퍼레이션이 개발한 넷스케이프 웹 프로토콜이며, 전자 상거래에서 널리 쓰인다. 
HTTPS는 소켓 통신에서 일반 텍스트를 이용하는 대신에, SSL이나 TLS 프로토콜을 통해 세션 데이터를 암호화한다. 
따라서 데이터의 적절한 보호를 보장한다.</p>
<h4 id="ftpfile-transfer-protocol">FTP(File Transfer Protocol)</h4>
<p>포트번호: 21</p>
<p>TCP/IP 프로토콜을 가지고 서버와 클라이언트 사이의 파일 전송을 하기 위한 프로토콜이다. 
파일 전송 프로토콜은 TCP/IP 프로토콜 테이블의 응용 계층에 속하며, 역사는 오래 되었지만 지금도 인터넷에서 자주 사용된다.
최초의 FTP 클라이언트 애플리케이션들은 운영 체제가 그래픽 사용자 인터페이스를 갖추기 이전에 개발된 명령 줄 프로그램이었으며, 대부분의 윈도우, 유닉스, 리눅스 운영 체제에 현재도 기본 포함되어 있다. 
그 뒤로 수많은 FTP 클라이언트 및 오토메이션 유틸리티들이 데스크톱, 서버, 모바일 장치, 하드웨어용으로 개발되고 있으며, FTP는 웹 페이지 편집기와 같은 생산성 응용 프로그램들에 통합되고 있다.</p>
<h4 id="sftpsecure-file-transfer-protocol">SFTP(Secure File Transfer Protocol)</h4>
<p>포트번호: 22</p>
<p>신뢰할 수 있는 데이터 스트림을 통해 파일 접근, 파일 전송, 파일 관리를 제공하는 네트워크 프로토콜이다. 
국제 인터넷 표준화 기구(IETF)가 보안 파일 전송 기능을 제공할 목적으로 시큐어 셸 프로토콜 (SSH) 버전 2.0의 확장으로 설계하였다. 
IETF 인터넷 초안에 따르면 이 프로토콜이 SSH-2 프로토콜의 문맥 안에 기술되어 있지만 전송 계층 보안(TLS)를 통하는 보안 파일 전송 프로그램이나 VPN 응용 프로그램의 관리 정보 전송과 같은 다른 수많은 응용 프로그램들에도 사용할 수 있다고 언급되어 있다. 
이 프로토콜은 SSH와 같은 보안 채널을 통해 수행되는데, 이 말은 서버가 이미 클라이언트와 인증이 되어 있으면서, 클라이언트 사용자 증명을 프로토콜에 이용할 수 있는 상태여야 한다는 것을 뜻한다.</p>
<h4 id="mysql">MYSQL</h4>
<p>포트번호: 3306</p>
<p>MySQL에서는 접속할 때라든지 SQL문실행을 할 때의 갖은 처리에 있어서 클라이언트⇔서버 사이에 MySQL독자의 규칙에 따른 패킷송수신을 한다.</p>
<h4 id="sshsecure-socket-layer">SSH(Secure Socket Layer)</h4>
<p>포트번호: 22</p>
<p>네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해 주는 응용 프로그램 또는 그 프로토콜을 가리킨다. 
기존의 rsh, rlogin, 텔넷 등을 대체하기 위해 설계되었으며, 강력한 인증 방법 및 안전하지 못한 네트워크에서 안전하게 통신을 할 수 있는 기능을 제공한다. 
SSH는 암호화 기법을 사용하기 때문에, 통신이 노출된다고 하더라도 이해할 수 없는 암호화된 문자로 보인다.</p>
</br>

<hr>
<h2 id="프로토콜-스택">프로토콜 스택</h2>
<h3 id="프로토콜-스택이란">프로토콜 스택이란?</h3>
<p>프로토콜 스택이란 <span style='background-color: #fff5b1'>데이터 통신에 활용되는 프로토콜의 구조에 관한 개념으로, 계층화된 구조(스택 구조)로 모여 있는 프로토콜의 집합</span>을 의미합니다.</p>
<p>계층을 나누는 목적은 매우 복잡한 네트워크에서 프로토콜들의 역할을 분담하기 위해서입니다. </p>
<p>한 계층에 속하는 하나의 프로토콜이 인접한 계층의 다른 프로토콜과 통신을 합니다. </p>
<p>이러한 방식으로 꼭대기 계층에서부터 가장 아래에 있는 계층까지 또는 그 반대 방향으로 프로토콜 스택 내에서 통신이 이루어집니다. </p>
<p>컴퓨터 간의 물리적인 데이터 송수신은 가장 아래 계층에서 이루어집니다.</p>
</br>

<h3 id="프로토콜-스택의-구조">프로토콜 스택의 구조</h3>
<p><img src="https://velog.velcdn.com/images/mingle-mongle/post/88bdf115-0377-40c3-855c-e788c0f37aac/image.png" alt=""></p>
<h4 id="application응용-계층">Application(응용) 계층</h4>
<p>프로토콜 : HTTP, FTP, SMTP, POP, Telnet</p>
<p>송수신측 사이에 어떤 종류의 (사용자가 사용하는) 데이터를 주거나 받기 위한 서비스를 정의하는 계층입니다.</p>
<h4 id="transport전송-계층">Transport(전송) 계층</h4>
<p>프로토콜 : TCP, UDP</p>
<p>송수신측 사이 데이터 전송의 신뢰성을 보장하기 위한 계층입니다.</p>
<ul>
<li>수행하는 일들<ol>
<li>송신측에서 수신측으로 패킷이 정상적으로 전달되었는지 확인합니다.</li>
<li>패킷이 정상적으로 전달되지 못 했다면, 재전송합니다.</li>
<li>망에 과부하가 걸리면, 전송 속도를 조절합니다.<h4 id="network네트워크-계층">Network(네트워크) 계층</h4>
프로토콜 : IP</li>
</ol>
</li>
</ul>
<p>송수신 기기 사이에는 라우터(router)라는 네트워크 장비들이 있으며, 패킷들은 이들을 거쳐 수신측으로 전달됩니다.</p>
<p>네트워크 계층은 패킷들이 어떤 라우터들을 거쳐 전달되어야 하는지를 결정합니다. </p>
<p>아래 그림은 송신 및 수신 기기 사이에 전달 경로가 결정된 것을 보여 줍니다. 주황색 선이 경로입니다.
<img src="https://velog.velcdn.com/images/mingle-mongle/post/4ffd9574-f882-4c35-97a0-e782e9361b07/image.png" alt=""></p>
<h4 id="link링크-계층">Link(링크) 계층</h4>
<p>프로토콜 : Ethernet, 토큰 링, FDDI, PPP</p>
<p>송수신측 사이에 경로가 결정되었으면, 링크 계층은 한 노드에서 인접한 노드로 패킷을 보내기 위한 역할을 합니다. </p>
<p><strong>노드</strong>는 송신 기기, 수신 기기, 그 사이에 있는 네트워크 장비 등을 모두 일컫는 용어입니다.</p>
<p>이 계층이 만드는 패킷을 <strong>프레임</strong>(frame)이라고 하며, 이것이 실제로 망에 전송할 패킷입니다. </p>
<p>아래 그림과 같이 경로가 있다고 가정해 봅시다. 
송신 기기의 링크 계층은 송신 기기에서 라우터 A로 프레임을 전송하기 위한 작업을 수행합니다. 
마찬가지로 라우터 A는 라우터 B로 프레임을 보내기 위해 링크 계층을 실행합니다.
<img src="https://velog.velcdn.com/images/mingle-mongle/post/0467fa86-c3b7-45e2-9fc8-31de43295550/image.jpg" alt=""></p>
<h4 id="physical물리적-계층">Physical(물리적) 계층</h4>
<p>프로토콜 : IEEE 802.3u</p>
<p>물리적 계층은 한 노드의 링크 계층에서 생성한 프레임을 인접한 노드로 보내는 역할을 수행합니다.</p>
<p>이 때 각 비트는 전기적인 신호로 변조(modulate)되고, 이것이 유선이나 무선을 통해 다른 노드로 전달됩니다. </p>
<p>수신 노드는 이를 원래의 데이터로 복원을 합니다. 이것을 복조(demodulate)라고 합니다.</p>
</br>

<h3 id="계층들-사이에-주고-받는-데이터">계층들 사이에 주고 받는 데이터</h3>
<p>송신 기기가 통신을 하기 위해 수신 기기로 <strong>패킷</strong>을 보낸다고 가정해 봅시다. </p>
<p>이 때 <strong>송신측 프로토콜 스택</strong>에서는 다음과 같은 작업들이 실행됩니다.</p>
<ol>
<li>어플리케이션 계층은 트랜스포트 계층으로 메시지를 보냅니다.</li>
<li>트랜스포트 계층은 네트워크 계층으로 세그먼트를 보냅니다.</li>
<li>네트워크 계층은 링크 계층으로 데이터그램을 보냅니다.</li>
<li>링크 계층은 물리적 계층으로 프레임을 보냅니다.</li>
<li>물리적 계층은 수신측 물리적 계층으로 프레임의 비트들을 보냅니다.</li>
</ol>
<p><strong>수신측 프로토콜 스택</strong>에서는 다음과 같은 작업들이 실행됩니다.</p>
<ol>
<li>물리적 계층은 송신측 물리적 계층으로부터 프레임의 비트들을 받습니다.</li>
<li>링크 계층은 물리적 계층으로부터 프레임들을 받습니다.</li>
<li>네트워크 계층은 링크 계층으로부터 데이터그램을 받습니다.</li>
<li>트랜스포트 계층은 네트워크 계층으로부터 세그먼트를 받습니다.</li>
<li>어플리케이션 계층은 트랜스포트 계층으로부터 메시지를 받습니다.
<img src="https://velog.velcdn.com/images/mingle-mongle/post/74886d41-4eb2-4b11-a546-230dcd0552db/image.png" alt=""></li>
</ol>
</br>

<h3 id="송수신-기기들-사이-동일-계층들이-주고-받는-데이터">송수신 기기들 사이 동일 계층들이 주고 받는 데이터</h3>
<p>위 그림에서 프로토콜 스택들의 계층들 사이에 전달되는 데이터의 흐름을 보여드렸습니다. </p>
<p>이를 달리 해석하면, 동일한 계층 간의 통신이 이루어진다고도 볼 수 있습니다.</p>
<p>예를 들어, 어플리케이션 계층들과 통신을 할 수 있으며, 송신측 어플리케이션 계층이 수신측 어플리케이션 계층에 메시지를 보냅니다. </p>
<p>이는 송수신측의 하위 계층들이 잘 동작함을 전제로 합니다. </p>
<p>마찬가지로 송신측 트랜스포트 계층은 수신측 트랜스포트 계층과 통신을 합니다. </p>
<p>전자가 세그먼트를 보내면, 후자가 그것을 받습니다. </p>
<p>이하 계층들 역시 이와 같은 방식으로 작동합니다. </p>
<p>이를 그림으로 표현하면, 아래와 같습니다.</p>
<p><img src="https://velog.velcdn.com/images/mingle-mongle/post/f97fde25-4011-477d-b4a6-30e7bd152693/image.png" alt=""></p>
</br>

<h3 id="프로토콜-스택의-계층들이-주고-받는-데이터의-종류">프로토콜 스택의 계층들이 주고 받는 데이터의 종류</h3>
<table>
<thead>
<tr>
<th align="center">계층</th>
<th align="center">데이터 종류</th>
<th align="left">설명</th>
<th align="center">형태</th>
</tr>
</thead>
<tbody><tr>
<td align="center">어플리케이션</td>
<td align="center">메시지</td>
<td align="left">어플리케이션 계층이 보낼 데이터 </br>파일 전송을 목적으로 하는 FTP의 경우 파일의 일부가 메시지에 포함된다.</td>
<td align="center"><img src="https://velog.velcdn.com/images/mingle-mongle/post/a84be7a5-f6c1-4ab1-a819-a40b863cf40a/image.png" alt=""></td>
</tr>
<tr>
<td align="center">트랜스포트</td>
<td align="center">세그먼트</td>
<td align="left">메시지에 세그먼트 헤더를 결합하여 세그먼트가 생성된다. </br>세그먼트 헤더는 이 계층들 사이의 통신에 필요한 부가적인 데이터들을 담는다.</td>
<td align="center"><img src="https://velog.velcdn.com/images/mingle-mongle/post/e3575d2a-8368-4297-a4d5-33b6117a43a1/image.png" alt=""></td>
</tr>
<tr>
<td align="center">네트워크</td>
<td align="center">데이터그램</td>
<td align="left">세그먼트에 데이터그램 헤더를 결합하여 데이터그램이 생성된다. </br>데이터그램 헤더도 이 계층들의 통신에 필요한 부가적인 데이터들을 담습니다. </br>IP 프로토콜의 경우 IP 주소가 데이터그램의 헤더에 포함됩니다.</td>
<td align="center"><img src="https://velog.velcdn.com/images/mingle-mongle/post/6838958e-b267-4584-83ec-5cdb5d5b7abc/image.png" alt=""></td>
</tr>
<tr>
<td align="center">링크</td>
<td align="center">프레임</td>
<td align="left">데이터그램에 프레임 헤더를 결합하여 프레임이 생성된다.  </br>프레임 헤더 역시 링크 계층들의 통신에 필요한 데이터들을 갖는다.</td>
<td align="center"><img src="https://velog.velcdn.com/images/mingle-mongle/post/bb882b32-2615-4d43-9ba8-ec0280e992ba/image.png" alt=""></td>
</tr>
<tr>
<td align="center">물리적</td>
<td align="center">비트</td>
<td align="left">프레임을 구성하는 비트들이다. </br>이들이 유선/무선으로 전송하기 위해 신호로 바뀐다. </br>수신측에서는 이들을 다시 비트로 원복한다.</td>
<td align="center"><img src="https://velog.velcdn.com/images/mingle-mongle/post/dd80436f-2ee9-4352-b8e0-5ba9d2fc8c41/image.png" alt=""></td>
</tr>
<tr>
<td align="center">송신 기기가 패킷을 보낼 때 위 계층으로부터 아래 계층으로 내려가면서 헤더들이 차례로 추가됩니다.</td>
<td align="center"></td>
<td align="left"></td>
<td align="center"></td>
</tr>
</tbody></table>
<p>반대로 수신 기기가 패킷을 받을 때에는 아래에서 위 계층으로 올라가면서 헤더들이 반대 순서로 제거됩니다. </p>
<p>그 결과, 송신 기기가 보냈던 메시지가 수신 기기에서 그대로 복원됩니다.</p>
</br>

<h3 id="실제-데이터-전송-과정">실제 데이터 전송 과정</h3>
<p><img src="https://velog.velcdn.com/images/mingle-mongle/post/b64e49cc-16b4-4d25-bb96-d6f4ec50fe05/image.png" alt=""></p>
</br>

<hr>
<h2 id="네트워크-레이어의-장점">네트워크 레이어의 장점</h2>
<p>OSI 또는 TCP/IP 모델과 같은 프로토콜 스택에서 네트워크 계층의 장점에는 <span style='background-color: #fff5b1'>모듈화, 추상화, 오버헤드 감소 및 복잡성 관리</span>가 포함되며, 이는 보다 효율적이고 확장 가능하며 관리 가능한 네트워크 통신에 집합적으로 기여합니다.</p>
<h3 id="모듈화">모듈화</h3>
<p>네트워크 계층은 네트워크 통신을 고유한 기능과 책임이 있는 별개의 계층으로 <strong>분리</strong>할 수 있도록 합니다.
이 모듈화를 통해 다른 레이어에 영향을 주지 않고 한 레이어를 변경하거나 업데이트할 수 있으므로 네트워킹 프로토콜의 개발, 유지 관리 및 문제 해결이 더 쉬워집니다.
또한 동일한 네트워크 계층 프로토콜을 준수하는 한 서로 다른 네트워킹 기술 및 장치 간의 상호 운용성을 향상시킬 수 있습니다.</p>
<h3 id="추상화">추상화</h3>
<p>네트워크 계층은 상위 계층이 상호 작용할 수 있도록 표준화된 인터페이스와 프로토콜 집합을 제공하여 네트워크 인프라의 근본적인 복잡성을 추상화합니다.
이 추상화를 통해 전송 및 애플리케이션 계층과 같은 상위 계층이 기본 네트워크 기술 및 토폴로지와 독립적일 수 있습니다.
이러한 관심사의 분리는 네트워크 인프라의 복잡성에 대해 걱정할 필요가 없기 때문에 응용 프로그램의 개발 및 관리를 단순화합니다.</p>
<h3 id="오버헤드-감소">오버헤드 감소</h3>
<p>네트워크 계층은 네트워크 통신의 오버헤드를 최소화하는 데 도움이 됩니다.
주소 지정, 라우팅 및 혼잡 제어와 같은 기능을 제공함으로써 네트워크 계층은 네트워크에서 데이터 패킷의 라우팅을 최적화하여 데이터 전송과 관련된 오버헤드를 줄일 수 있습니다.
이를 통해 네트워크 리소스를 보다 효율적으로 사용하고 성능을 향상시킬 수 있습니다.</p>
<h3 id="복잡성-관리">복잡성 관리</h3>
<p>네트워크 계층은 네트워크 통신을 더 작고 관리 가능한 구성 요소로 나누어 네트워크 통신의 복잡성을 관리하는 데 도움이 됩니다.
프로토콜 스택의 각 계층에는 표준화된 프로토콜에 의해 정의된 고유한 기능 및 책임 집합이 있습니다.
이러한 작업 분할을 통해 전체 시스템에 영향을 주지 않고 적절한 계층에서 변경 또는 업데이트를 수행할 수 있으므로 네트워크 통신의 문제 해결, 유지 관리 및 확장성이 더 쉬워집니다.</p>
<p><span style='background-color: #fff5b1'></span></p>
</br>

</br>

</br>

</br>

</br>

<hr>
<p>참고자료</p>
<ul>
<li><a href="https://computer-science-student.tistory.com/377">https://computer-science-student.tistory.com/377</a></li>
<li><a href="https://joonfluence.tistory.com/96">https://joonfluence.tistory.com/96</a></li>
<li><a href="https://rotoma-code.tistory.com/entry/Protocol-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C-%EC%A0%95%EC%9D%98-%EC%9A%94%EC%86%8C-%EC%A2%85%EB%A5%98-%EA%B8%B0%EB%8A%A5-%EC%98%88%EC%8B%9C">https://rotoma-code.tistory.com/entry/Protocol-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C-%EC%A0%95%EC%9D%98-%EC%9A%94%EC%86%8C-%EC%A2%85%EB%A5%98-%EA%B8%B0%EB%8A%A5-%EC%98%88%EC%8B%9C</a></li>
<li><a href="https://whwl.tistory.com/154">https://whwl.tistory.com/154</a></li>
<li><a href="https://velog.io/@yoonuk/Protocol-%EC%9D%B4%EB%9E%80">https://velog.io/@yoonuk/Protocol-%EC%9D%B4%EB%9E%80</a></li>
<li><a href="https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;blogId=netrance&amp;logNo=110112688107">https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;blogId=netrance&amp;logNo=110112688107</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[네트워크] 컴퓨터 네트워크란?]]></title>
            <link>https://velog.io/@mingle-mongle/%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC</link>
            <guid>https://velog.io/@mingle-mongle/%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC</guid>
            <pubDate>Wed, 03 May 2023 16:36:03 GMT</pubDate>
            <description><![CDATA[<h2 id="컴퓨터-네트워크의-개념">컴퓨터 네트워크의 개념</h2>
<p><img src="https://velog.velcdn.com/images/mingle-mongle/post/c9034371-3b4e-45f8-9336-bcc60561f5c8/image.png" alt=""></p>
<h3 id="컴퓨터-네트워크란">컴퓨터 네트워크란?</h3>
<p>컴퓨터 네트워크는 통신 및 데이터 교환을 용이하게 하기 위해 함께 연결된 컴퓨터, 서버, 라우터, 스위치 및 기타 네트워킹 장비와 같은 상호 연결된 장치의 모음입니다. 
이러한 장치는 유선 또는 무선 연결을 통해 연결되어 정보와 리소스를 공유할 수 있습니다.</p>
<p>가장 널리 사용되는 컴퓨터 네트워크는 상호 연결된 네트워크의 글로벌 네트워크인 인터넷입니다. 
인터넷은 사용자가 전 세계 웹사이트의 정보와 서비스에 액세스할 수 있도록 WWW(World Wide Web)를 비롯한 다양한 프로토콜을 사용합니다. 
WWW는 인터넷을 통해 액세스되는 상호 연결된 하이퍼텍스트 문서 시스템으로, 사용자가 하이퍼링크를 사용하여 웹 페이지 사이를 탐색할 수 있습니다.</p>
<p>요약하면 <span style='background-color: #fff5b1'>컴퓨터 네트워크는 통신 및 데이터 교환을 허용하는 연결된 장치의 시스템</span>이며 <span style='background-color: #fff5b1'>인터넷과 WWW는 현대 컴퓨터 네트워크의 핵심 구성 요소</span>입니다.</p>
</br>

<h3 id="네트워크의-목적">네트워크의 목적</h3>
<p><strong>1. 프로그램이나 데이터를 공유하여 사용할 수 있습니다.</strong>
    독립적으로 사용하는 컴퓨터(Stand-alone 방식)에서 작성된 데이터를 전송하려면 플래시 메모리 등의 이동식 저장매체를 사용해야 합니다.
    하지만 네트워크를 구성하게 되면 데이터를 쉽게 전송하거나 다운로드 받을 수 있습니다. 
    따라서 멀리 떨어져 있어도 네트워크로 연결이 되어있으면 쉽게 데이터를 공유할 수 있는 것입니다.</p>
<p><strong>2. 프린터 또는 스캐너 등의 주변장치를 공유하여 사용할 수 있습니다.</strong>
    사무실에 있는 모든 컴퓨터마다 프린터를 구매하여 직접 연결하게 되면 엄청난 비용이 소모될 것입니다. 
    따라서 한 대의 프린터를 네트워크에 연결하여 여러 컴퓨터에서 공유하여 사용함으로써 업무의 효율성을 높일 수 있습니다. 
    예를 들어, 학교 어디서든 컴퓨터를 교내 네트워크에 연결하면 교내 네트워크의 연결된 모든 프린터를 사용할 수 있는 것입니다.</p>
<p><strong>3. 인터넷 회선을 공유하여 여러 대의 컴퓨터가 편리하게 인터넷을 사용할 수 있습니다.</strong>
    전용선을 사용하는 학교에서 실습실에 네트워크로 연결된 여러 대의 컴퓨터가 동시에 인터넷을 사용할 수 잇습니다.</p>
<p><strong>4. 데이터를 쉽게 백업할 수 있습니다.</strong>
    컴퓨터에서 중요한 데이터를 네트워크에 연결된 공유 저장장치(클라우드 등)에 저장해 두면, 바이러스나 컴퓨터 고장 등으로 인하여 컴퓨터에 있는 데이터가 손상이 되더라도 쉽게 복원할 수 있습니다. 
    또한 요즘 백업서버 중 좋은 백업서버는 파일을 덮어쓰지 않고 시간대별로 저장해 둡니다. 
    따라서 어느 시점으로 복원하는 것도 가능한 것입니다.</p>
<p>정리하자면 인터넷에서 네트워크의 목적은 <span style='background-color: #fff5b1'>쉽고 간편하며 빠른, 자원(정보) 공유</span>입니다.</p>
</br>

<h3 id="네트워크의-장단점">네트워크의 장단점</h3>
<p><strong>장점</strong></p>
<ul>
<li>네트워크 데이터 통신을 통해 방대한 자료를 공유할 수 있다.</li>
<li>사진, 음악, 영상 등의 디지털 미디어를 볼 수 있다.</li>
<li>프로세스 분배를 통한 성능 향상</li>
</ul>
<p><strong>단점</strong></p>
<ul>
<li>바이러스나, 악성코드로인한 해킹으로 개인정보 유출 피해, 보안상의 문제</li>
<li>데이터 변조가 가능</li>
</ul>
</br>

<h3 id="네트워크의-종류">네트워크의 종류</h3>
<p><img src="https://velog.velcdn.com/images/mingle-mongle/post/033d1516-ba3d-47ff-85d7-715c1b9483ff/image.png" alt=""></p>
<ul>
<li><p>WAN(Wide Area Network) : 광대역 네트워크
지역 간 또는 대륙간의 넓은 지역의 컴퓨터를 연결. 인터넷은 전 세계 수십억 대의 컴퓨터를 연결하는 가장 큰 WAN.</p>
</li>
<li><p>MAN(Metropolitan Area Network) : 대도시 영역 네트워크
일반적으로 도시 및 정부기관이 소유, 관리함</p>
</li>
<li><p>LAN(Local Area Network) : 근거리 영역 네트워크
상대적으로 짧은 거리에 있는 컴퓨터를 연결. 예를 들어 사무실 , 학원, 병원의 모든 컴퓨터 연결 가능</p>
</li>
<li><p>PAN(Personal Area Network) : 가장 작은 규모의 네트워크, 개인 네트워크
약 5m 전후의 인접 통신. 예를 들어 아이폰과 맥에서 정보를 공유하는 형태</p>
</li>
</ul>
<p>추가적인 네트워크 종류로는 WLAN, CAN, SAN, GAN, VPN, ISDN, Intranet, Extranet 등등으로 분류됩니다.</p>
</br>

<h3 id="네트워크의-회선구성-방식">네트워크의 회선구성 방식</h3>
<p>회선 구성 방식은 <span style='background-color: #fff5b1'>컴퓨터와 여러대의 단말기들을 연결하는 방식</span>을 말합니다.</p>
<ul>
<li><p>포인트 투 포인트(Point-To-Point) 방식
중앙 컴퓨터와 단말기를 일대일로 연결하여 언제든지 데이터 전송이 가능</p>
</li>
<li><p>멀티 드롭(Multi-Drop) 방식
멀티 포인트(Multi-Point) 방식이라고도 하며 다수의 단말기들을 한 개의 통신 회선에 연결</p>
</li>
<li><p>회선 다중 방식
여러 대의 단말기들을 다중화 장치를 통해 중앙 컴퓨터와 연결하는 방식</p>
</li>
</ul>
</br>

<h3 id="네트워크의-데이터-교환-방식">네트워크의 데이터 교환 방식</h3>
<ul>
<li><p>회선 교환 방식
  통신을 원하는 두 지점을 교환기를 이용하여 물리적으로 접속시키는 방법 
  (ex: 음성 전화망)</p>
</li>
<li><p>공간 분할 교환 방식
  기계식 접점과 전자교환기의 전자식 접정 등을 이용하여 교환을 수행하는 방식. 
  (ex: 음성 전화용 교환기)</p>
</li>
<li><p>시분할 교환 방식
  전자부품이 갖는 고속성과 디지털 교환 기술을 사용하여 다수의 디지털 신호를 시분할적으로 동작시켜 다중화하는 방식</p>
</li>
</ul>
</br>

<h3 id="네트워크-통신-방식">네트워크 통신 방식</h3>
<ul>
<li><p>유니 캐스트
  네트워크에 다수의 대상이 있을 때 그중 특정 대상이랑만 <span style='background-color: #fff5b1'>1:1</span> 통신하는 방법</p>
</li>
<li><p>멀티 캐스트 
네트워크에 다수의 대상이 있을 때, 그중 특정 대상들이랑만 <span style='background-color: #fff5b1'>1:N</span> 통신하는 방법</p>
</li>
<li><p>브로드 캐스트 
네트워크에 다수의 대상이 있을 때, 그 <span style='background-color: #fff5b1'>모든 대상</span>과 통신하는 방법</p>
</li>
</ul>
</br>

<hr>
<h2 id="네트워크와-관련된-핵심-개념">네트워크와 관련된 핵심 개념</h2>
<p><img src="https://velog.velcdn.com/images/mingle-mongle/post/a4b74300-d3dc-4584-ad3b-e46dca2dbf66/image.png" alt=""></p>
<p><strong>라우터</strong>
라우터는 LAN(Local Area Network) 내의 여러 장치를 연결하거나 LAN을 인터넷에 연결하는 것과 같이 <span style='background-color: #fff5b1'>서로 다른 네트워크 간에 데이터 패킷을 전달하는 네트워킹 장치</span>입니다.
라우터는 라우팅 테이블과 프로토콜을 사용하여 데이터 패킷이 목적지에 도달하는 가장 효율적인 경로를 결정합니다.</p>
<p><strong>호스트</strong>
컴퓨터 네트워킹에서 호스트는 네트워크에 연결되어 있고 컴퓨터, 서버 또는 기타 네트워크 지원 장치와 같이 <span style='background-color: #fff5b1'>데이터를 보내거나 받을 수 있는 모든 장치</span>를 의미합니다.</p>
<p><strong>클라이언트</strong>
클라이언트-서버 모델에서 클라이언트는 <span style='background-color: #fff5b1'>서버에 서비스 또는 리소스를 요청하는 장치 또는 소프트웨어 응용 프로그램</span>입니다.
클라이언트는 데스크톱 컴퓨터, 랩톱, 스마트폰 또는 네트워크를 통해 서비스에 액세스하는 기타 장치일 수 있습니다.</p>
<p><strong>서버</strong>
서버는 호스팅 웹 사이트, 이메일 서버 또는 파일 서버와 같은 <span style='background-color: #fff5b1'>네트워크의 다른 장치에 서비스 또는 리소스를 제공하는 컴퓨터 또는 소프트웨어 응용 프로그램</span>입니다.
서버는 클라이언트의 여러 요청을 처리하도록 설계되었으며 대량의 데이터를 저장하고 관리할 수 있습니다.</p>
<p><strong>IP 주소</strong>
인터넷 프로토콜 주소의 줄임말인 IP 주소는 <span style='background-color: #fff5b1'>네트워크에 연결된 각 장치에 할당된 숫자 식별자</span>입니다.
IP 주소는 네트워크에서 장치를 식별하고 찾는 데 사용되어 데이터 패킷을 보내고 받을 수 있습니다.</p>
<p><strong>스위치</strong>
스위치는 <span style='background-color: #fff5b1'>근거리 통신망(LAN) 내의 장치를 연결하고 장치 간에 데이터 패킷을 전달하는 네트워킹 장치</span>입니다.
스위치는 MAC 주소를 사용하여 데이터 패킷을 식별하고 적절한 대상 장치로 전달하여 네트워크 통신의 효율성을 향상시킵니다.</p>
<p><strong>스위칭</strong>
스위칭은 <span style='background-color: #fff5b1'>네트워크 내의 장치 간에 데이터 패킷을 전달하는 프로세스</span>를 말합니다.
네트워크 내에서 데이터 패킷이 전달되는 방식을 결정하는 이더넷 스위칭, VLAN 스위칭 및 라우팅을 비롯한 다양한 유형의 스위칭이 있습니다.</p>
</br>

<hr>
<h2 id="데이터를-주고받는-방식">데이터를 주고받는 방식</h2>
<h3 id="회선교환circuit-switching-방식">회선교환(Circuit Switching) 방식</h3>
<p>회선교환 방식은 <span style='background-color: #fff5b1'>회선 독점을 통한 통신방식</span>이라고 볼 수 있습니다.
회선교환 방식의 가장 큰 특징은 <span style='background-color: #fff5b1'>전용선 할당</span>에 있습니다.
<img src="https://velog.velcdn.com/images/mingle-mongle/post/8d4320cd-dae5-4752-b24e-77ef543c1b8c/image.png" alt=""></p>
<h6 id="📌image--회선교환-방식">📌image : 회선교환 방식</h6>
<p>전송할 데이터가 있다고 하면 위와 같이 전송을 위한 전용선을 할당하고 해당 선로로 모든 데이터를 전송합니다.</p>
<p>위 그림과 같이 <span style='background-color: #fff5b1'>송수신을 연결하는 전용선을 설정하고 전송을 하는게 핵심</span>입니다.</p>
<h4 id="회선교환의-특징">회선교환의 특징</h4>
<ul>
<li>회선교환은 통신 회선을 설정하여 데이터를 교환하는 방식</li>
<li>회선 교환방식으로 <strong>음성 전화 시스템</strong>에 사용됨</li>
<li>송신자의 모든 데이터는 <strong>동일한 경로</strong>로 전송됨</li>
<li>안정적인 통신이 가능함</li>
<li>Point-To-Point 방식으로 연결됨</li>
<li>통신중 중간경로에 문제가 발생할 경우 전체 연결이 끊어짐 (새로운 경로를 통한 새로운 회선할당 필요)</li>
</ul>
<h4 id="회선교환의-장점">회선교환의 장점</h4>
<ul>
<li>대용량 + 고속 데이터 처리에 우수</li>
<li>고정적인 대역폭을 사용</li>
<li>연속적인 데이터 처리에 우수</li>
</ul>
<h4 id="회선교환의-단점">회선교환의 단점</h4>
<ul>
<li>회선 이용 효율이 떯어짐 (대역폭 낭비)</li>
<li>통신과정에서 회선문제시 회선할당부터 다시해야함</li>
<li>통신비용이 고가임</li>
</ul>
</br>

<h3 id="패킷교환packet-switching-방식">패킷교환(Packet switching) 방식</h3>
<p>패킷교환은 회선교환과 다르게 <span style='background-color: #fff5b1'>전용선의 개념이 없습니다.</span></p>
<p>패킷교환은 전송하려는 데이터를 패킷이라는 단위로 나눠 네트워크망으로 뿌려주게 됩니다.</p>
<p>이때 패킷에는 해당 데이터가 어떤 데이터의 몇번째 데이터인지의 정보와 최종 목적지에 대한 정보가 들어있습니다.</p>
<p>위의 정보를 라우터가 보고 패킷을 최적경로를 향해 전달하게 됩니다. </p>
<p>이때 최적경로는 단순하게 거리만을 계산하는 것이아니라, 망의 혼잡도(대역폭 사용율), 연결상태, 기타 설정등에 따라 그때그때 변경될 수 있기 때문에 경로는 수시로 변경될 수 있습니다.</p>
<p>따라서 특정한 데이터가 100개의 패킷으로 분해되어 전송된다면, 100개의 패킷들은 라우터에의해 서로다른 경로로 전송될 수 있고, <span style='background-color: #fff5b1'>최종적으로 목적지에 100개의 패킷이 전달되면 패킷의 순서를 통해 다시 원래의 데이터로 합쳐지는 방식</span>입니다.</p>
<p><img src="https://velog.velcdn.com/images/mingle-mongle/post/0cda56b2-fd60-4ed6-92b5-bfb92b08b70a/image.png" alt="패킷교환방식"></p>
<h6 id="📌image--패킷교환-방식">📌image : 패킷교환 방식</h6>
<p>위의 그림과 같이 3개의 패킷이 [왼쪽]에서 [오른쪽]으로 전송될 때, 각각의 패킷은 서로 다른 경로로 전송될 수 있습니다.</p>
<p>또한 이러한 특성 때문에 <span style='background-color: #fff5b1'>전송되는 패킷은 순서와 다르게 수신될 수 있습니다.</span></p>
<h4 id="패킷교환의-특징">패킷교환의 특징</h4>
<ul>
<li>전송되는 패킷은 여러 경로를 이용가능(패킷별로 최적의 경로 선택)</li>
<li>송신 패킷의 순서와, 수신 패킷의 순서가 다를 수 있음</li>
<li>전송 속도 및 흐름 제어가 가능</li>
<li>에러 탐지가 가능(패킷정보를 통해)</li>
<li>일반적인 인터넷 망에서 사용됨</li>
</ul>
<h4 id="패킷교환의-장점">패킷교환의 장점</h4>
<ul>
<li>회선의 이용률이 높음</li>
<li>에러 및 장애에 강함
(라우터 고장시 다른 경로를 즉각적으로 이용, 애러에 대해 특정 패킷만 재전송 가능)</li>
<li>인터넷 뿐만 아닌 다양한 통신망에서 사용가능(전화도 가능)</li>
</ul>
<h4 id="패킷교환의-단점">패킷교환의 단점</h4>
<ul>
<li>경로 탐색과정에서 지연이 발생됨</li>
<li>전송량 증가에 따라 지연율이 급격하게 상승</li>
<li>패킷헤더 추가로 인한 오버헤드 발생이 가능함</li>
</ul>
</br>

<h3 id="회선교환-방식과-패킷교환-방식-차이점">회선교환 방식과 패킷교환 방식 차이점</h3>
<table>
<thead>
<tr>
<th align="left">구분</th>
<th align="left">회선 교환 방식</th>
<th align="left">패킷 교환 방식</th>
</tr>
</thead>
<tbody><tr>
<td align="left"><strong>전용 전송로</strong></td>
<td align="left">있음</td>
<td align="left">없음</td>
</tr>
<tr>
<td align="left"><strong>전송 단위</strong></td>
<td align="left">연속적인 데이터</td>
<td align="left">패킷</td>
</tr>
<tr>
<td align="left"><strong>전송 경로</strong></td>
<td align="left">동일한 전송 경로</td>
<td align="left">가상 회선 방식 : 전체 패킷에 대해 동일한 전송경로 </br> 데이터그램 방식 : 각 패킷마다 임의의 전송 경로</td>
</tr>
<tr>
<td align="left"><strong>전송 데이터와 </br>수신 데이터의 순서</strong></td>
<td align="left">일치</td>
<td align="left">가상 회선 방식 : 일치 </br>데이터그램 방식 : 불일치</td>
</tr>
<tr>
<td align="left"><strong>적합한 전송 형태</strong></td>
<td align="left">연속적 전송</td>
<td align="left">일시적 전송</td>
</tr>
<tr>
<td align="left"><strong>오버헤드</strong></td>
<td align="left">연결 설정 후 불필요</td>
<td align="left">각 패킷마다 필요</td>
</tr>
</tbody></table>
<p><span style='background-color: #fff5b1'></span></p>
</br>

</br>

</br>

</br>

</br>

</br>

</br>

<hr>
<details>
<summary>참고자료</summary>
<div markdown="1">

<ul>
<li><a href="https://youngq.tistory.com/72">https://youngq.tistory.com/72</a></li>
<li><a href="https://coding-factory.tistory.com/340">https://coding-factory.tistory.com/340</a></li>
<li><a href="https://m.blog.naver.com/PostView.naverisHttpsRedirect=true&amp;blogId=qorckddls010&amp;logNo=220987650350">https://m.blog.naver.com/PostView.naverisHttpsRedirect=true&amp;blogId=qorckddls010&amp;logNo=220987650350</a></li>
<li><a href="https://velog.io/@yoonuk/%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC%EB%9E%80">https://velog.io/@yoonuk/%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC%EB%9E%80</a></li>
<li><a href="https://catsbi.oopy.io/ce77a5c6-a2bd-4a87-a5dd-6c73293d8efb">https://catsbi.oopy.io/ce77a5c6-a2bd-4a87-a5dd-6c73293d8efb</a></li>
<li><a href="https://life-of-panda.tistory.com/73">https://life-of-panda.tistory.com/73</a></li>
</ul>
</div>
</details>]]></description>
        </item>
    </channel>
</rss>