전체 글
HTTP vs HTTPS
What is HTTP? HTTP는 Hyper Text Transfer Protocol의 약자로, 네트워크를 통해 데이터를 전송하기 위해 사용되는 프로토콜이다. 웹 사이트 콘텐츠 또는 API 호출을 포함해서 인터넷을 통해 전송되는 대부분의 정보는 HTTP 프로토콜을 사용한다. HTTP 메시지에는 요청과 응답의 두 가지 주요 유형이 있다. 서로 다른 종단 시스템에서 수행되는 클라이언트 프로그램과 서버 프로그램은 서로 HTTP 메시지를 교환하여 통신한다. HTTP는 메시지의 구조와 더불어 클라이언트와 서버가 메시지를 어떻게 교환해야 하는지에 대해 정의하고 있다. HTTP의 문제점 & 해결 방법 1. 도청 가능 HTTP 전송은 TCP/IP를 통한 직선 연결인데, 이 연결은 암호화되지 않은 평문 통신이다. 따라..
TCP vs UDP
🚀 전송 계층 전송 계층(Transport Layer)은 송신자와 수신자를 연결하는 통신 서비스를 제공하는 계층으로, 대표적으로 TCP와 UDP가 있다. TCP는 패킷 사이의 순서를 보장한다. 또한, 연결 지향 프로토콜을 사용해서 신뢰성을 구축해서 수신 여부를 확인하며 '가상 회선 패킷 교환 방식'을 사용한다. 반면 UDP는 패킷 사이의 순서를 보장하지 않고 수신 여부를 확인하지 않으며 단순히 데이터만 주는 '데이터그램 패킷 교환 방식'을 사용한다. 📯 가상회선 패킷 교환 방식 가상 회선 식별자가 포함되며 모든 패킷을 전송하면 가상 회선이 해제되고 패킷들은 전송된 순서대로 도착하는 방식이다. 📦 데이터그램 패킷 교환 방식 데이터그램 패킷 교환 방식은 패킷이 독립적으로 이동하며, 각각의 패킷이 최적의 경로..
TCP 3-way handshaking & 4-way handshaking
TCP 3-way handshaking(연결 설정) TCP는 신뢰성을 확보할 때 3-way handshaking이라는 작업을 진행한다. 클라이언트와 서버 사이의 연결을 설정하기 위해서 두 호스트 사이에 3개의 패킷이 송신되는데, 이러한 이유로 TCP의 연결 설정 절차를 3-way handshake라고 부른다. 1. 클라이언트 측 TCP가 서버 TCP에게 SYN 세그먼트를 전송한다. SYN은 SYNchronize의 줄임말로, "나랑 동기화하자~" 이런 의미이다. 2. 서버가 클라이언트의 요청을 받으면 클라이언트 TCP로 SYNACK(SYNchronize & ACKnowledgment) 세그먼트를 전송한다. "네가 보낸 SYN 패킷 잘 받았고, 연결 설정에 동의할게~" 이런 의미이다. 3. 클라이언트가 서버..
HTTP GET vs POST
What is HTTP? HTTP(Hyper Text Transfer Protocol)는 클라이언트와 서버 간의 통신을 위해 만들어진 프로토콜이다. 클라이언트가 서버에 HTTP 요청을 보내면, 서버가 필요한 정보를 포함하여 클라이언트에게 응답하는 것이다. HTTP Methods HTTP에는 크게 9가지의 메소드가 있다. 1. GET 2. POST 3. PUT 4. HEAD 5. DELETE 6. PATCH 7. OPTIONS 8. CONNECT 9. TRACE 가장 많이 사용하는 것은 GET과 POST 메서드이다. GET GET은 지정된 리소스에서 데이터를 요청하는 데 사용된다. 요청하는 데이터가 HTTP Request Message의 Header 부분에 url 이 담겨서 전송되고, ? 뒤에 쿼리 문자열..
최소 신장 트리(Minimum Spanning Tree, MST)
신장 트리(Spanning Tree) 신장 트리란, 사이클을 형성하지 않는 그래프를 말한다. 나는 부모님의 자식이 될 수 있지만 내 형제자매의 자식은 될 수 없는 것처럼, 사이클이 없다는 것은 부모-자식 관계만 형성된다는 것이고 따라서 신장 트리는 트리의 형태를 가지고 있다. // 신장 트리의 특징 1. 그래프의 모든 정점이 간선에 의해 하나로 연결됨 2. 그래프 내에서 사이클 형성 X (첫 번째 그래프도 오른쪽으로 90도 회전시키면 트리처럼 보임) 최소 신장 트리(Minimum Spanning Tree) 가중치가 있는 그래프에서도 신장 트리를 구성할 수 있는데, 신장 트리의 모든 간선의 가중치 합이 최소인 그래프를 최소 비용 신장 트리(Minimum Cost Spanning Tree) 또는 최소 신장 ..
그래프
📈 Graph 그래프는 대표적인 비선형 자료 구조로, 정점(vertex)과 간선(edge)으로 이루어진 자료 구조이다. 트리 역시 제한된 유형의 그래프이다. 정점과 간선으로 이루어져 있지만 그래프와 달리 사이클이 없어야 한다는 특징이 있다. 모든 트리는 항상 그래프가 되지만 모든 그래프가 트리인 것은 아니다! Linked List와 Heap 역시 그래프의 특별한 경우이다. 🤷♀️ Undirected Graph vs Directed Graph Undirected Graph은 간선이 방향을 갖지 않는 그래프이고, Directed Graph은 간선이 방향성을 가지는 그래프이다. 📝 그래프의 표현 그래프를 표현하는 방식은 크게 두 가지 방법이 있다. 1. Adjacency Matrix(인접 행렬) 2. Adj..
Hash Table
Hash Table 해시 테이블은 무한에 가까운 데이터들을 유한한 개수의 해시 값으로 매핑한 테이블이다. 따라서 작은 크기의 캐시 메모리로도 프로세스를 관리하도록 할 수 있다. 삽입, 삭제, 탐색 시 평균적으로 O(1)의 시간 복잡도를 가지고 unordered_map으로 구현한다. 해시 테이블에 데이터를 삽입하기 위해서는 저장하고자 하는 자료와 연관된 키를 생성해야 하는데 이 키를 생성하기 위한 함수를 해시 함수라고 한다. 좋은 해시 함수를 사용하면 해시 테이블에 데이터가 고르게 분포되고, 이는 충돌이 발생할 가능성이 낮다는 뜻이다. 따라서 좋은 해시 함수는 충돌을 덜 일으켜야 하고 계산이 쉬워야 한다. Hash Collision 서로 다른 두 개의 값 $i_{1}$과 $i_{2}$가 해시 테이블의 같은..
Red-Black Tree(RBT)
Red-Black Tree 레드 블랙 트리는 균형 이진 탐색 트리로 탐색, 삽입, 삭제 모두 시간 복잡도가 logN이다. 각 노드는 빨간색 또는 검은색의 색상을 나타내는 추가 비트를 저장하고, 추가된 비트는 삽입 또는 삭제의 과정에서 트리가 균형을 유지하도록 하는 데 사용된다. 대표적으로 C++ STL의 set, multiset, map, multimap 이 레드 블랙 트리를 이용하여 구현되어있다. Why Red-Black Tree? 왜 레드 블랙 트리를 사용하는 걸까? 이 이유에 대해 알기 위해서는 BST(이진 탐색 트리)의 단점부터 파악해야 한다. BST란, 노드의 오른쪽 하위 트리에는 노드 값보다 큰 값이 있는 노드만 포함되고, 왼쪽 하위 트리에는 노드 값보다 작은 값이 들어 있는 트리를 말한다. ..