diff --git a/Network/DNS.md b/Network/DNS.md new file mode 100644 index 0000000..3f61f40 --- /dev/null +++ b/Network/DNS.md @@ -0,0 +1,42 @@ +## DNS (Domain Name System) + +DNS는 **호스트의 도메인 네임을 네트워크 주소로 변환**하거나 그 반대의 역할을 수행하는 시스템입니다. 사용자가 도메인 네임(예: `naver.com`)을 입력하면 아래와 같은 과정이 이루어집니다. + +## 동작원리 + +### 1. 브라우저에서 도메인 입력 + +- 사용자가 `www.naver.com`을 입력하면 **네임 서버(DNS 서버)**에 접속합니다. + +### 2. Local DNS Server에서 IP 요청 + +- 먼저 **PC의 Local DNS Server**에서 `www.naver.com`의 IP 주소를 요청합니다. + 1. **인터넷 연결** 시, 기본적으로 통신사의 DNS 서버가 등록됩니다. + 2. **이전에 접속한 기록이 있는 경우**: + - Local DNS 서버에서 캐싱된 IP 주소를 PC에 전달하여 요청 종료. + 3. **접속 기록이 없는 경우**: + - Local DNS 서버가 **다른 DNS 서버들과 통신**을 시작합니다. + +### 3. 도메인과 연결된 IP 정보 확인 + +1. **Root DNS Server에 요청** + - `Root DNS Server`는 도메인 정보가 있는 상위 DNS 서버로 요청을 전달합니다. + - 해당 도메인 정보가 없는 경우, 다음 서버로 이동하라는 응답을 보냅니다. +2. **TLD DNS Server 요청** + + - `TLD DNS Server`는 도메인의 최상위 도메인(`.com`, `.co.kr` 등)을 관리합니다. + - 예: `naver.com`의 `.com` 정보 확인. + - 해당 도메인이 없다면 다른 서버를 찾아보라는 응답을 보냅니다. + +3. **Authoritative DNS Server 요청** + - 실제 도메인과 IP 주소의 관계가 기록/저장/변경되는 서버입니다. + - 예: `naver.com`의 Authoritative DNS Server에서 `www.naver.com`의 IP 주소를 확인하여 응답. + +### 4. 사용자 PC에 IP 전달 + +- PC는 전달받은 IP 주소를 사용하여 서버에 접속합니다. +- 이 과정에서 **IP 주소를 캐싱**하여 다음 요청 시 빠르게 연결될 수 있도록 합니다. + +### 5. 브라우저에 서버 내용 출력 + +- 최종적으로 서버의 IP 주소를 통해 **브라우저에 요청된 페이지가 출력**됩니다. diff --git a/Network/HTTP-HTTPS.md b/Network/HTTP-HTTPS.md new file mode 100644 index 0000000..f5e5ff4 --- /dev/null +++ b/Network/HTTP-HTTPS.md @@ -0,0 +1,53 @@ +# HTTP와 HTTPS 개요 + +## HTTP (HyperText Transfer Protocol) + +- **역할:** 클라이언트와 서버 간 통신을 위한 프로토콜. +- **포트:** 80 +- **작동 방식:** + 1. 사용자 브라우저가 웹 서버에 HTTP 요청을 전송. + 2. 서버는 HTTP 응답으로 응답. +- **요청 및 응답 상태 코드:** + - 200: 정상 처리 + - 400: 잘못된 요청 + - 404: 리소스를 찾을 수 없음 + - 500: 서버 오류 +- **HTTP 요청 유형:** + - **GET:** 웹사이트의 일부 데이터를 요청. + - **PUT:** 일부 데이터를 서버로 전송. + +## HTTPS (HyperText Transfer Protocol Secure) + +- **역할:** 브라우저와 서버가 데이터를 전송하기 전에 안전하고 암호화된 연결을 설정. +- **포트:** 443 +- **특징:** + - 데이터 무결성, 인증, 기밀성을 제공. + - SSL(Secure Socket Layer) 및 TLS(Transport Layer Security) 기술을 사용하여 암호화. + - 독립된 인증기관(CA)으로부터 SSL/TLS 인증서를 획득하여 신뢰를 구축. + +## HTTP와 HTTPS 작동 방식 + +### HTTP 작동 방식 + +- **OSI 모델 계층:** Application Layer Protocol +- **HTTP 요청:** + - **GET:** 데이터 조회. + - **PUT:** 데이터 전송. +- **응답 상태 코드:** + - 200: 성공 + - 400: 잘못된 요청 + - 404: 리소스를 찾을 수 없음 + - 500: 서버 오류 + +### HTTPS 작동 방식 + +1. 사용자가 `https://URL` 형식을 통해 HTTPS 웹 사이트를 방문. +2. 브라우저가 서버의 신뢰성을 요청 (SSL 인증서를 요청). +3. 서버가 공개 키(P123)가 포함된 SSL 인증서를 전송. +4. 브라우저가 비밀 키(S456)를 생성하고 공개 키(P123)를 사용해 암호화하여 서버로 전송. + - **브라우저 비밀 키 관리:** + - 브라우저의 비밀 키는 시스템 메모리에 저장되며, 세션 종료 시 폐기됨. + - **공개 키 암호화:** + - 공개 키는 비대칭 암호화 방식으로 작동하며, 암호화된 데이터는 해당 개인 키(K789)로만 해독 가능. +5. 서버는 자신의 개인 키(K789)를 사용하여 브라우저가 보낸 데이터를 해독하고 비밀 키(S456)를 획득. +6. 브라우저와 서버는 동일한 비밀 키(S456)를 사용해 안전한 데이터 송수신을 수행. diff --git a/Network/LoadBalancing.md b/Network/LoadBalancing.md new file mode 100644 index 0000000..2ef419e --- /dev/null +++ b/Network/LoadBalancing.md @@ -0,0 +1,54 @@ +## 로드 밸런싱 (Load Balancing) + +로드 밸런싱은 **클라이언트와 서버 그룹 사이에 위치하여 서버에 가해지는 트래픽을 분산**함으로써 서버의 부하를 덜어주는 역할을 합니다. + +## 로드 밸런싱의 종류 + +1. **L4 로드밸런싱** + + - 트래픽을 Transport 계층의 로드밸런서가 받아서 서버에 적절히 나누어 줍니다. + - Network 계층이나 Transport 계층의 정보를 바탕으로 분산합니다. + +2. **L7 로드밸런싱** + - Application 계층에서 패킷의 내용을 확인하고, 해당 내용에 따라 특정 서버로 트래픽을 분배합니다. + +## 로드 밸런싱 알고리즘 + +### Static (정적 방식) + +1. **라운드 로빈** + + - 클라이언트 요청을 여러 대의 서버에 순차적으로 분배합니다. + +2. **가중치 기반 라운드 로빈** + + - 각 서버에 가중치를 매기고, 가중치가 높은 서버에 클라이언트 요청을 먼저 배부합니다. + +3. **IP 해시** + - 클라이언트 IP 주소를 숫자로 변환한 다음 개별 서버로 매핑합니다. + - 사용자는 동일한 서버로 연결되는 것을 보장합니다. + +### Dynamic (동적 방식) + +1. **최소 연결 방법** + + - 활성 연결이 가장 적은 서버를 확인하고 해당 서버로 트래픽을 전송합니다. + - 모든 서버가 동일한 처리 능력이라는 점을 가정합니다. + +2. **최소 응답 시간 방법** + - 현재 연결 상태와 응답 시간을 모두 고려하여, 가장 짧은 응답 시간을 보내는 서버로 트래픽을 할당합니다. + +## 서버를 확장하는 방법 + +1. **스케일 업 (Scale Up)** + + - 기존 서버의 성능을 향상시킵니다. + - **방법**: CPU, 메모리 업그레이드. + - **장점**: 관리 편의성 및 운영 비용에 큰 변화가 없음. + - **단점**: 성능 확장에 한계가 있으며, 서버 비용 증가 폭이 큼. + +2. **스케일 아웃 (Scale Out)** + - 서버를 추가하여 시스템을 확장합니다. + - 트래픽과 작업을 여러 대의 컴퓨터나 서버에 분산시켜 처리하는 방법으로, **로드 밸런싱이 필수적으로 동반**됩니다. + - **장점**: 지속적인 확장이 가능하며, 서버 비용 부담이 적음. + - **단점**: 관리 편의성이 떨어지고 운영 비용이 증가. diff --git a/Network/OSI7Layer.md b/Network/OSI7Layer.md new file mode 100644 index 0000000..e96d603 --- /dev/null +++ b/Network/OSI7Layer.md @@ -0,0 +1,100 @@ +# OSI 7계층 및 네트워크 통신 개요 + +## OSI 7계층 + +OSI(Open Systems Interconnection) 모델은 네트워크 통신 기능을 7개의 계층으로 나눈 것으로, 소프트웨어 및 하드웨어 구성 요소 전반에 걸쳐 모든 유형의 네트워크 통신을 캡슐화합니다. + +### 1. Physical Layer (물리 계층) + +- **역할:** 물리적 통신 매체와 이를 통해 데이터를 전송하는 기술을 다룸. +- **주요 기능:** 디지털 및 전자 신호 전송. +- **예시 기술:** + - Bluetooth + - NFC + - Data 전송 + +### 2. Data Link Layer (데이터 링크 계층) + +- **역할:** 물리 계층을 통해 네트워크에 연결된 두 시스템 간 데이터 전송을 담당. +- **주요 기능:** + - 데이터 패킷을 캡슐화하여 데이터 프레임으로 변환. + - 흐름 제어 및 오류 제어 수행. +- **예시 기술:** + - Ethernet + - Wi-Fi +- **하위 계층:** + - Media Access Control (MAC) + - Logical Link Control (LLC) + +### 3. Network Layer (네트워크 계층) + +- **역할:** 데이터 패킷의 라우팅과 전달, 논리적 주소 지정(IP 주소 관리)을 담당. +- **주요 프로토콜:** + - IPv4 + - IPv6 + +### 4. Transport Layer (전송 계층) + +- **역할:** 데이터 패킷이 손실이나 오류 없이 올바른 순서로 도착하도록 보장. +- **주요 프로토콜:** + - **TCP (전송제어 프로토콜):** 연결 기반, 손실 없는 데이터 전송 (예: 파일 공유). + - **UDP (사용자 데이터그램 프로토콜):** 무연결 기반, 손실이 허용되는 전송 (예: 비디오 스트리밍). + +### 5. Session Layer (세션 계층) + +- **역할:** 네트워크 상의 두 애플리케이션 간 세션 생성, 관리 및 종료. +- **주요 기능:** + - 애플리케이션 연결 동기화. + - 충돌 방지 및 세션 관리. +- **예시:** + - Network File System (NFS) + - Server Message Block (SMB) + +### 6. Presentation Layer (표현 계층) + +- **역할:** 데이터의 구문과 표현 방식 처리. +- **예시 포맷:** + - HTML + - JSON + - CSV + +### 7. Application Layer (응용 계층) + +- **역할:** 사용자와 네트워크 간 상호작용. +- **주요 기능:** 애플리케이션 자체의 표준화된 통신 제공. +- **예시 프로토콜:** + - HTTP, HTTPS + - POP3, SMTP (Email Client) + +## OSI 모델에서 통신 과정 + +OSI 모델은 애플리케이션이 네트워크를 통해 다른 장치의 애플리케이션과 통신할 수 있도록 설계되었습니다. 통신은 다음 과정을 따릅니다: + +1. **발신자 측:** + + - 애플리케이션 계층에서 시작하여 데이터가 하위 계층으로 전달. + - 각 계층은 데이터를 전달하기 전에 고유한 헤더와 주소를 추가. + +2. **전송:** + + - 데이터가 물리적 매체를 통해 전송. + +3. **수신자 측:** + + - 데이터가 각 계층에서 관련 헤더에 따라 처리됨. + - 계층을 거칠수록 데이터는 점진적으로 압축 해제. + +4. **결과:** + - 데이터가 최종적으로 수신 측 애플리케이션에 도달. + +## TCP/IP 모델 + +OSI 모델의 현대적 대안은 TCP/IP 모델이며, 다음과 같은 계층으로 구성됩니다: + +1. Physical Layer (물리 계층) +2. Data Link Layer (데이터 링크 계층) +3. Network Layer (네트워크 계층) +4. Transport Layer (전송 계층) +5. Application Layer (응용 계층) + +TCP/IP는 OSI 모델의 복잡성을 줄이고 실용성을 강조한 모델입니다. diff --git a/Network/REST-API.md b/Network/REST-API.md new file mode 100644 index 0000000..bf2c20c --- /dev/null +++ b/Network/REST-API.md @@ -0,0 +1,54 @@ +# URI vs URL + +## URI (Uniform Resource Identifier) + +- **정의:** 인터넷상의 리소스 "자원 자체"를 식별하는 고유한 문자열 시퀀스. +- **특징:** + - 조금 더 포괄적인 개념. + - 리소스를 식별하기 위한 고유 문자열. +- **예시:** `soongsil.ac.kr` + +## URL (Uniform Resource Locator) + +- **정의:** 네트워크 상에서 리소스의 위치를 나타내는 규약. +- **특징:** + - 자원 식별자와 위치를 동시에 제공. + - 리소스에 어떻게 도달할 수 있는지를 포함. +- **예시:** `https://soongsil.ac.kr` + +--- + +# REST (Representational State Transfer) + +## REST 구성 요소 + +1. **Resource:** 리소스를 URL로 표현. +2. **Verb:** HTTP Method (GET, POST, PUT, DELETE). +3. **Representations:** 리소스의 표현 방식. + +## REST 특징 + +1. **Uniform Interface:** + - URL로 지정한 리소스를 조작하는 통일된 인터페이스 제공. +2. **Stateless:** + - 무상태성: 요청마다 상태 정보를 저장하지 않고 독립적으로 처리. +3. **Cacheable:** + - 응답에 캐싱 기능을 적용 가능. +4. **Self-Descriptiveness:** + - REST API 메시지만 보고도 쉽게 이해할 수 있음. +5. **Server-Client 구조:** + - 서버와 클라이언트가 명확히 분리되어 개발과 유지보수가 독립적으로 이루어짐. +6. **계층형 구조:** + - 보안, 로드 밸런싱, 암호화 계층 등을 추가하여 구조상의 유연성을 제공. + - Proxy, Gateway 같은 네트워크 기반 중간 매체를 사용할 수 있음. + +## REST 디자인 가이드 + +1. **URI는 리소스를 표현해야 함.** + - 리소스명은 **명사**로 작성 (동사 사용 지양). +2. **행위는 HTTP Method로 표현.** + - **CRUD 매핑:** + - **GET:** Read + - **POST:** Create + - **PUT:** Update + - **DELETE:** Delete diff --git a/Network/SSL-TLS.md b/Network/SSL-TLS.md new file mode 100644 index 0000000..dff3d37 --- /dev/null +++ b/Network/SSL-TLS.md @@ -0,0 +1,54 @@ +# SSL/TLS 개요 + +## SSL/TLS의 주요 기능 + +- **역할:** 데이터 전송의 기밀성과 무결성을 보장. +- **암호화 방식:** 공개 키 암호화 방식을 사용. + +## SSL/TLS의 이점 + +1. 개인 데이터 보호 및 고객 신뢰 강화. +2. 기밀성 및 보호에 대한 업계 규정을 준수. +3. SEO 개선 효과. + +## SSL/TLS의 주요 원칙 + +### 1. 암호화 + +- **퍼블릭 키 (Public Key):** + + - 웹 서버가 SSL/TLS 인증서를 통해 브라우저에 제공하는 암호화 키. + - 브라우저는 이 키를 사용하여 데이터를 암호화한 후 서버로 전송. + +- **프라이빗 키 (Private Key):** + - 웹 서버에만 존재. + - 퍼블릭 키로 암호화된 데이터는 프라이빗 키로만 복호화 가능. + +## SSL/TLS 인증서의 구성 요소 + +- 도메인 이름. +- 인증 기관(CA). +- 인증 기관의 디지털 서명. +- 발급 날짜와 만료 날짜. +- 퍼블릭 키. +- SSL/TLS 버전. + +## SSL (보안 소켓 계층) + +- **역할:** + + - 네트워크상의 2개 디바이스 또는 애플리케이션 간 보안 연결 생성. + - 애플리케이션 및 브라우저에서 안전한 통신 채널 제공. + +- **한계:** + - 오래된 기술로 취약성이 존재해 현재는 TLS로 대체됨. + +## SSL과 TLS의 유사점 + +- 서버, 애플리케이션, 사용자 및 시스템 간의 데이터를 암호화. +- 네트워크를 통해 연결된 두 당사자를 인증하여 데이터 교환의 안전성 보장. + +## TLS의 표준화 + +- **현재 표준:** TLS 인증서가 업계 표준. +- **명칭 관례:** TLS 인증서를 지칭할 때 여전히 "SSL" 용어가 사용됨.