반응형

1. PDU (Protocol Data Unit)이란?


  • 네트워크의 계층과 계층 사이에 데이터가 전달될 때 한 덩어리의 단위를 PDU라고 합니다.
  • PDU는 헤더와 페이로드로 구성되어 있고, 계층마다 부르는 명칭이 다릅니다.

계충 별로 불리는 PDU 명칭

 

(1) 헤더 (Header)

  • 각 계층마다 필요한 정보 및 기능이 담겨있습니다.
  • 제어 관련 정보들이 포함되어 있습니다.
  • (송신) 상위 계층에서 전달된 PDU에 자신의 계층에서 만든 헤더를 추가해서 하위 계층으로 전달합니다.
  • (수신) 각 층에서 생성한 헤더 정보는 각 층에서 해결합니다.

 

 

(2) 페이로드 (Payload)

  • 송신 측에서 보내고자 하는 실제 데이터를 의미합니다.
  • 택배를 예로 들면 박스, 송장, 포장지 등은 페이로드에 속하지 않고, 받기로 한 택배물이 페이로드라고 생각하면 됩니다.
반응형
반응형

1. 네트워크 프로토콜이란?


  • 다른 장치들끼리 데이터를 주고받기 위해 설정된 공통된 인터페이스를 말합니다.
  • 쉽게 생각해 보면 장치와 장치 사이에 데이터 통신을 해야 하는데, 미리 정해놓은 어떤 규약(약속)에 따라서 통신을 하게 됩니다. 이때 이 규약(약속)을 네트워크 프로토콜이라고 합니다.

 

 

 

2. 프로토콜의 표준화가 필요한 이유?


  • 모든 송신자와 모든 수신자가 표준화된 프로토콜을 지키기만 한다면 서로 통신이 가능하도록 해줍니다.
  • 하지만 프로토콜이 표준화되어 있지 않다면, 특정 송신자는 자신의 프로토콜과 일치한 특정 수신자에게만 데이터를 송신할 수 있게 됩니다.

 

 

 

3. 프로토콜의 종류


  • 많이 들어본 프로토콜 위주로 정리해보면 TCP, IP, UDP, HTTP 등이 있습니다. 여기서 마지막에 붙은 'P'가 Protocol의 약자입니다.

 

 

(1) TCP (Transmission Control Protocol)

  • OSI 참조 모델 4계층의 전송 계층에서 사용되는 네트워크 프로토콜입니다.
  • TCP는 데이터의 손실이 없이 확실하게 상대방에게 전송하기 때문에 신뢰성이 높은 프로토콜입니다. (수신 확인을 진행)
  • 현재는 TCP와 IP를 조합한 TCP/IP 프로토콜이 사용되고 있습니다.

 

 

(2) IP (Internet Protocol)

  • OSI 참조 모델의 3 계층인 네트워크 계층에서 사용되는 네트워크 프로토콜입니다.
  • 각 장치(기기)에 주소를 할당하고 경로를 선택하여 데이터를 전송하기 위해 사용되는 프로토콜입니다.
  • 상위 계층에서 패킷을 보내주면, 패킷을 수신한 뒤에 IP 헤더를 추가하여 네트워크에 전송하게 됩니다.
  • IP 헤더에는 보내는 사람(수신자)의 IP 주소, 받는 사람(송신자)의 IP 주소와 같은 정보들이 모여있고, 이 정보를 가지고 경로를 선택하여 물통 릴레이 방식으로 목적지로 패킷이 전달됩니다.

 

 

(3) UDP (User Datagram Protocol)

  • TCP와 마찬가지로 OSI 참조 모델 4 계층의 전송 계층에서 사용되는 네트워크 프로토콜입니다.
  • TCP에서는 신뢰성을 확보하기 위해서 송신 측은 수신 측에 패킷이 정상적으로 도달했는지 확인을 진행합니다.
  • UDP에서는 단순히 패킷을 보내기만 할 뿐 수신측에 패킷이 정상적으로 도달했는지 확인하지 않습니다.
  • 도중에 패킷이 분신되어도 알 수 있는 방법이 없어 신뢰성은 떨어지지만 처리가 가벼워서 속도가 빠르다는 장점이 있습니다.
  • 동영상과 같이 도중에 일부가 끊어지는 것보다는 실시간으로 전송되는 것이 중요한 경우에 유용하게 사용될 수 있는 프로토콜입니다.

 

 

(4) HTTP (Hyper Text Transfer Protocol)

  • WWW 클라이언트(웹 브라우저)와 WWW 서버 사이의 통신에 사용되는 네트워크 프로토콜입니다.
  • 웹 브라우저에서 요청이 들어오면 WWW 서버는 응답하는 방식으로 작동되는 간단한 프로토콜입니다.
  • 일반적인 통신 포트는 80번 포트를 사용합니다.

 

 

 

💡 면접에서 나올 수 있는 질문

  1. 네트워크 프로토콜이 무엇인가요?
  2. 네트워크 프로토콜의 표준화가 필요한 이유에 대해서 설명해 보세요.
  3. TCP와 UDP을 비교하여 설명해 보세요.

 

반응형

'📘 Computer Science > 네트워크' 카테고리의 다른 글

[네트워크] HTTPS와 SSL/TLS  (0) 2023.06.22
[네트워크] PDU (Protocol Data Unit)  (0) 2023.06.03
반응형

1. 중첩 루프 조인 (NLJ, Nested Loop Join)


  • 중첩 for 문과 같은 원리로 조건에 맞는 조인을 하는 방법을 말합니다.
  • Index에 의한 Random Access 비용이 많이 증가하기 때문에 대용량 데이터를 다루기에는 적절하지 않습니다.

 

중첩 루프 조인의 작동

# CS 전공지식 노트 226 page

for each row in t1 matching reference key {
    for each row in t2 matching reference key {
        if row satisfies join conditions, send to client
    }
}
  • 위에 있는 코드는 중첩 루프 조인을 사용하여 t1 테이블과 t2 테이블을 조인하는 의사 코드입니다.
  • t1 테이블에서 행을 한 번에 하나씩 읽고, t2 테이블에서도 행을 하나씩 읽으며 조건에 맞는 데이터를 찾아서 반환하게 됩니다.
  • 여기서 t1을 Driving Table이라고 하며, t2를 Driven Table이라고 합니다. 
  • 중첩 루프 조인에서는 Driving Table을 적절하게 선택해야 합니다. 처음 Driving Table에 해당되는 row가 너무 많다면, 그만큼의 반복을 해줘야하기 때문에 Driving Table에서 Where절로 row 수를 최대한 줄일 수 있어야 합니다.
  • Driving Table의 Join Column에 index가 존재하는지도 확인해봐야 합니다. 존재하지 않는다면 Random Access가 아닌 Full Table Scan을 통해서 모두 비교해야 하기 때문에 index를 생성하는 것이 좋습니다.

 

[출처] https://dataonair.or.kr/db-tech-reference/d-guide/sql/?mod=document&uid=356

 

* Driving Table : Join 할 때, 먼저 Access되어 Access Path를 주도하는 테이블
* Driven Table : Join 할 때, 나중에 Access되는 테이블

 

 

 

2. 정렬 병합 조인 (Sort Merge Join)


  • 각각의 테이블을 조인할 필드 기준으로 정렬한 후 조인 작업을 수행하는 조인 방법입니다.
  • 조인할 때 사용할 적절한 인덱스가 존재하지 않고, 대용량 테이블을 조인하는 데 사용됩니다.
  • 조인 조건으로 비교 연산자(>, <, >=, <=)가 있을 때도 사용됩니다.
  • 조회 범위가 좁을 때 유리했던 Nested Loop Join과는 다르게 조회 범위가 많을 때 주로 선택되어 사용합니다.

 

정렬 병합 조인의 작동

  • 각 테이블에 대해서 독립적으로 데이터를 읽어옵니다. 인덱스가 존재하는 컬럼의 테이블은 Random Access, 인덱스가 존재하지 않는 컬럼의 테이블은 Full Table Scan을 사용합니다.
  • 읽힌 각 테이블의 데이터를 조인을 위한 연결고리에 대하여 정렬을 수행합니다.
  • 정렬이 모두 끝난 뒤 정렬된 데이터를 차례로 Scan 하면서 연결고리의 조건으로 Merge하여 데이터를 반환합니다.

 

[출처]&nbsp;https://dataonair.or.kr/db-tech-reference/d-guide/sql/?mod=document&uid=356

 

 

 

3. 해시 조인 (Hash Join)


  • 조인할 두 테이블 중 하나를 해시 테이블로 선정하여 조인에 사용되는 컬럼 값을 해시 알고리즘으로 비교하여 조인하는 방법입니다.
  • 동등(=) 조인에서만 사용할 수 있습니다.
  • Sort Merge Join을 할 때, 테이블 크기가 너무 커서 Sort에 드는 부하가 너무 클 때 해시 조인가 사용됩니다.
  • 조인에 사용되는 컬럼에 적절한 index가 존재하지 않아서 Nested Loop Join을 사용하기에 효율적이지 못할 때 사용됩니다.

 

해시 조인의 작동

  • A 테이블과 B 테이블을 조인할 때, 둘 중 바이트가 더 작은 테이블을 읽어서 Hash Area에 해시 테이블을 생성합니다. 이때 해시 테이블의 Key는 조인에 사용되는 필드가 됩니다.
  • 만약 A 테이블이 해시 테이블로 생성되었다면, A 테이블은 Build Input이라고 하고, B 테이블은 Probe Input이라고 합니다.
  • B 테이블을 스캔하며 조인 컬럼을 해시 함수에 넣고, 반환되는 버킷 주소로 찾아가 해시 체인을 스캔하며 Join 할 데이터를 찾아서 반환합니다.

 

[출처]&nbsp;https://dataonair.or.kr/db-tech-reference/d-guide/sql/?mod=document&uid=356

 

 

 

💡 나올 수 있는 질문

  1. 중첩 루프 조인(Nested Loop Join)에 대해서 설명해보세요.

 

반응형
반응형

백준 문제를 IDE로 풀고 있었는데, 사소한 오타로 계속 시간을 허비하게 되어서 인텔리제이 설정을 하면서 기록해 두려고 이 글을 작성합니다.

 

발생했던 휴먼에러는 i와 j를 구분하지 못했던 것. i와 j 밑에 밑줄이 그어지니깐 구분을 못하겠어서 불편해 죽겠다.

 

이건 아마도 Material Dark 테마를 설정하고 있는 사람만 해당될 문제라고 생각된다.

 

뭐가 i이고, 뭐가 j인지 거북목 생길 거 같다.

 

위 사진처럼 확대하면 구분할 수 있을거 같지만 작은 글씨로 보면 i와 j 밑에 밑줄이 있으면 구분을 못하겠다. j를 써야 할 자리에 자꾸 i를 쓴다던가 하는 오류를 줄이기 위해서 밑줄을 없애버리자.

 

 

설정하기

  • 설정창을 열기 위해서 command + , 을 눌러 준다.
  • 검색창에 "color scheme" 검색
  • Langauge Defaults -> Identifiers -> Reassigned local variable 선택
  • Effects 체크 풀어주기
  • Apply 후 저장

한 눈에 보는 설정 방법

 

이제 다시 에디터를 보면 지역변수에 밑줄이 사라진 것을 볼 수 있다. 편 - 안

밑줄이 제거된 모습

 

반응형
반응형

1. 관계형 데이터베이스 (RDBMS)


  • 행과 열로 구성된 표 형식 데이터를 저장하는 데이터베이스입니다.
  • SQL이라는 언어를 써서 조작할 수 있습니다.
  • 관계형 데이터베이스의 종류에는 MySQL, Oracle, PostgreSQL, MSSQL 등이 있습니다.
  • 관계형 데이터베이스는 표준 SQL을 지키기는 하지만 각 제품에서 특화시킨 SQL을 사용합니다.

 

(1) MySQL

  • 세계에서 가장 많이 사용되고 있는 오픈소스 관계형 데이터베이스입니다.
  • MySQL의 최고 장점은 오픈소스이기 때문에 무료라는 것입니다.
  • 문자열 비교에 있어서 대소문자를 구분하지 않습니다. BINARY 설정 등을 이용하면 추가 설정이 가능합니다.
  • nested loop join만을 제공한다는 단점이 있습니다. MySQL 8.0.18 릴리스 버전 이후로는 hash join도 제공하게 되었습니다.
nested loop join (중첩 루프 조인)
: 바깥 테이블의 처리 범위를 하나씩 접근하며 추출된 값으로 안쪽 테이블을 조인하는 방법입니다.
중첩 for문과 비슷한 동일한 원리라고 생각하면 됩니다. 비용이 많이 들어서 대용량 테이블에서는 사용하지 않습니다.

hash Join (해시 조인)
: 해시 테이블을 기반으로 조인하는 방법을 말합니다. 2개의 테이블을 조인할 때, 하나의 테이블을 해시 테이블로서 사용합니다.
동등(=) 조인에서만 사용이 가능하고, 테이블의 크기가 너무 크다면 디스크를 사용하는 비용이 증가할 수 있습니다.

 

 

(2) Oracle DB

  • Oracle 사에서 만든 관계형 데이터베이스입니다.
  • MySQL, MSSQL 보다 대용량 정보를 관리할 때 성능이 좋습니다.
  • 고성능 트랜잭션 처리를 제공하여 속도가 빠릅니다.
  • SQL문을 실행하는 가장 효율적인 방법을 제공합니다. 쿼리비용 최소화를 위해서 테이블 인덱싱 분석을 합니다.
  • 과거 시점의 데이터 조회도 가능하고, 커밋 이전의 상태로 되돌릴 수 있는 기능이 존재합니다.
  • 메모리를 너무 많이 차지하기 때문에 고사양 장비가 요구된다는 단점이 있습니다.

 

 

(3) PostgreSQL

  • 다양한 Join 방법을 제공합니다. (nested loop join, hash join, sort merge join)
  • update 시에는 기존에 있던 행을 지우고, 변경된 데이터를 가지는 새로운 행을 추가하는 방식을 사용하여 update 성능은 비교적 좋지 않습니다.
  • 데이터베이스 클러스터 백업 기능을 제공합니다.
  • hot backup과 wal replay를 활용하여 원하는 시점의 데이터 복구가 가능합니다.
  • SQL 뿐만 아니라 JSON을 이용해서도 데이터에 접근할 수 있습니다.
sort merge join (정렬 병합 조인)
: 각각의 테이블에서 조인할 필드 기준으로 정렬한 후 조인 작업을 수행하는 조인방법입니다.

hot backup
: 데이터베이스가 실행 중인 상태에서 데이터를 백업받는 방식입니다. 

 

(4) MSSQL

  • 마이크로소프트 사에서 사이베이스(Sybase)를 기반으로 개발한 관계형 데이터베이스입니다.
  • 윈도우 개발환경에서 DB가 필요할 경우 MSSQL을 사용합니다.
  • windows 기반 서버에서만 작동되도록 설계되어 있고, 라이센스 비용이 비싸다는 단점이 있습니다.
  • 하지만 우수한 데이터 복구 지원을 제공한다는 장점이 존재합니다.

 

 

 

2. NoSQL 데이터베이스


  • SQL를 사용하지 않는 데이터베이스를 말합니다.
  • 대표적으로 알려진 NoSQL 데이터베이스는 MongoDB와 Redis가 존재합니다.

 

(1) MongoDB

  • JSON을 통해서 데이터에 접근할 수 있습니다.
  • 데이터가 저장될 때는 Binary JSON 형태로 데이터가 저장되며 도큐먼트 기반의 데이터베이스입니다.
  • 확장성이 뛰어나고, 빅데이터를 저장할 때 성능이 좋습니다.
  • 스키마를 정해 놓지 않고 데이터를 삽입하기 때문에 다양한 도메인의 데이터베이스를 기반으로 분석할 수 있습니다.
  • 도큐먼트를 생성할 때마다 다른 컬렉션과 구별하기 위해서 유니크한 ObjectId가 생성됩니다.

[출처] CS 전공지식 노트 p.216

 

(2) Redis

  • 인메모리 데이터베이스이며, Key-Value 데이터 모델 기반의 데이터베이스입니다.
  • 다른 데이터베이스를 앞단에 두어 사용하는 캐싱 계층으로 사용됩니다.
  • 기본적인 데이터 타입은 문자열이며 최대 512MB까지 저장할 수 있습니다. 이외에도 Set과 Hash 등을 지원합니다.

 

 

 

🔗 참고 자료

주요 RDBMS의 종류

면접을 위한 CS 전공지식 노트

반응형
반응형

지난 3주 차 회고를 작성한 지 벌써 6주가 흘러 9주 차 회고를 쓰게 되었습니다. 준비할 건 많고, 하루는 부족하고... 하루하루가 정말 빠르게 지나가는 것 같습니다.

 

 

👋🏻 Java 실시간 강의 종료

9주 차에 회고를 쓰게 된 이유는 Java 실시간 강의가 끝났기 때문입니다. 사실 여러 부트캠프를 보면 Java를 엄청 빠르게 끝내는 부트캠프들이 많은데, 제가 듣고 있는 과정에서는 화요일, 목요일에 Java 실시간 강의를 진행했었습니다.

 

언어를 너무 오랫동안 하는 거 아닌가에 대한 의문도 있었지만, 강사님이 Java의 상당히 깊은 부분까지 고려하면서 강의를 진행해 주셔서 저는 오히려 좋았던 거 같습니다. 어설프게 알고 있었던 부분들을 확실히 짚고 넘어가는 시간이 됐었습니다.

 

 

 

🥈 백준 실버 달성

이미 골드, 플래티넘이신 분들에게는 가소로워 보일 수도 있지만 실버를 달성했습니다. 골드를 향해서 빠르게 달려가고 있습니다. 😆

 

Solved.ac 티어

 

3주 차와 비교했을 때 자료구조, 알고리즘 제대로 학습을 한 뒤부터는 문제를 보는 눈이 조금은 달라졌다고 생각합니다. 문제를 읽었을 때, 입력 범위를 보고 나올 수 있는 시간 복잡도를 생각해 보고 어떤 자료구조가 적합할지 고민해 보는 노력을 하고 있어서 그런 거 같습니다.

 

기존에는 문제를 보면 그냥 바로 코드부터 치면서 시작했었는데, 경험해 보신 분들은 아시겠지만 이렇게 작성하다가 중간에 막히면 정말 답도 없습니다. 코딩 테스트 부분에서는 패스트캠퍼스에서 지정된 멘토님의 영향을 조금 받았다고 생각합니다. 사실 매일 적어도 1문제씩은 풀어보기라는 과제를 내주신 분이기도 하고, 알고리즘 문제 접근법이나 좋은 습관을 형성하는 데 있어서 도움을 많이 받았습니다. 다음 회고 글에서는 골드가 되어있었으면 좋겠습니다. 😄

 

 

 

📖 그룹 CS 스터디

이 부분은 부트캠프 정규 커리큘럼에는 존재하지 않지만, 각자 4명에서 5명으로 지정된 피어 그룹이 있는데, 저희 그룹원들과 따로 진행하고 있는 스터디입니다. 도서는 면접을 위한 CS 전공지식 노트라는 책을 사용해서 하고 있고, 전체적으로 짜여 있는 구성은 좋지만 면접 대비 도서라서 그런지 들어가 있는 내용은 다소 학습을 하는 데 있어서는 부족할 수 있다고 생각됩니다.

 

하지만 오히려 각자 맡은 부분에 있어서 책에 있는 내용 이외에도 추가적으로 학습해서 정리해서 발표를 진행했어서 부족함 없이 진행하고 있는 스터디라고 생각합니다. 다들 많은 내용을 공유해 주고, 학습하고 싶다는 열정이 있어서 가능한 스터디라고 생각됩니다. 

 

스터디 규칙은 매주 맡은 부분에 대해서 발표를 하고, 자신이 맡은 부분이 아니어도 해당 내용을 모두 숙지하고 오자는 규칙을 정했습니다. 그리고 따로 Github Organization을 만들어서 레포지토리를 만들고, 각자 정리한 내용을 Pull Request 하는 방식으로 스터디를 진행하고 있습니다.

Github Repository Readme 파일

 

 

 

 

👥 타 그룹과의 교류

부트캠프 후반부에 협업으로 진행하는 프로젝트가 존재합니다. 그래서 같은 기수에 교육을 듣고 계신 많은 분들과 소통해 볼 수 있는 자리가 있었으면 좋겠어서 저희 그룹 조장님을 앞세워 타 그룹과의 교류를 진행했었습니다.

 

모든 사람들과 교류해보지는 못했지만 그래도 많은 분들이 참여를 희망하셔서 다양한 분들을 만나볼 수 있었던 시간이 있었습니다. 교류를 하는데 이용했던 시간은 주로 1주일에 2번 존재하는 그룹 활동 시간을 이용했습니다. 

 

그때의 연이 닿아서 지금은 다른 그룹원분들과 함께 진행하고 있는 발표 스터디도 진행 중에 있습니다. "아니 무슨 스터디를 이렇게 많이 해?"라고 생각하시는 분들도 있을 거 같아서 다른 그룹원분들과 진행하고 있는 발표 스터디는 강제성이 없는 가벼운 스터디로 만들었습니다.

 

이 발표 스터디는 자신이 한 주 동안 학습한 내용들 중에 궁금했었던 내용이나 공유하고 싶은 내용들을 자유롭게 발표하는 스터디입니다. 발표할 내용이 없으면 굳이 하지 않아도 되고, 가볍게 시작했던 스터디인데 생각보다 다양한 주제를 가져오시는 것을 보고 나름 흥미를 느끼고 있는 스터디입니다.

 

발표 스터디 진행 노션

 

이외에도 많은 일들이 있었지만 저번 회고글과 조금 달라진 점을 위주로 작성해 봤습니다. 다음에도 작성할 내용이 생기면 회고록 작성하러 달려오겠습니다. 🙇🏻‍♂️

 

반응형

+ Recent posts