[CS] - Network(4)
Cookie & Session
Cookie
- 클라이언트(웹 브라우저)에 저장되는 작은 정보 파일이다.
 - 일반적으로 로그인, 쇼핑 카트 등과 같은 사용자 데이터를 저장하기 위해 사용된다.
 - 사용자가 웹사이트를 방문할 때 서버는 사용자의 브라우저에 쿠키를 전송하고, 브라우저는 쿠키를 저장한다.
 - 이후 같은 웹사이트를 방문할 때, 브라우저는 저장된 쿠키를 서버에 전송한다.
 - 서버는 쿠키를 통해 사용자 정보를 인식하고 사용자에 맞는 서비스를 제공할 수 있다.
 - 보안상 취약점이 있을 수 있으므로 중요한 정보(비밀번호, 신용카드번호 등)는 저장하지 않는 것이 좋다.
 
Session
- 서버 측에서 클라이언트와 대화할 때 사용되는 것으로, 클라이언트와 서버 간의 상태 유지를 가능하게 한다.
 - 사용자가 웹사이트에 접속하면, 서버는 사용자에 대한 정보를 가지고 있는 세션을 생성하고, 세션 ID를 클라이언트에게 전송한다.
 - 이후 같은 사용자가 요청을 보낼 때마다, 클라이언트는 세션 ID를 서버에 전송하며, 서버는 세션 ID를 통해 사용자를 인식한다.
 - 사용자 인증 정보를 저장하는 것과 같은 보안적인 목적으로 사용된다.
 - 세션도 쿠키와 마찬가지로 보안상 취약점이 있을 수 있으므로, 중요한 정보는 암호화하여 저장하는 것이 좋다.
 
JWT(JSON Web Token)
JWT의 정의
- JSON 형태로 인코딩된 웹 표준(RFC 7519)으로, 클라이언트와 서버 간 정보를 안전하게 전송하기 위해 사용된다.
 - JWT는 크게 Header, Payload, Signature 세 부분으로 구성된다.
    
- Header: 토큰의 유형과 암호화 방식 등의 정보를 포함한다.
 - Payload: 클라이언트와 서버 간 주고받을 정보를 담는다.
 - Signature: Header와 Payload를 암호화하여 생성된 서명 값이다. 토큰이 변조되었는지 확인하기 위해 사용된다.
 
 - JWT는 서버 측에서 클라이언트의 인증 정보를 저장하거나, 서버 간의 인증 정보를 공유하기 위해 사용된다.
 - JWT는 쿠키와 달리, 클라이언트 측에서 저장되므로 Cross-Domain 문제를 해결할 수 있다.
 
JWT 사용 예시
- 사용자가 로그인하면, 서버는 해당 사용자의 정보를 바탕으로 JWT를 생성한다.
 - 클라이언트는 JWT를 받아서, 이후 요청 시에는 JWT를 헤더에 포함하여 요청을 보낸다.
 - 서버는 JWT의 유효성을 검증한 후, 해당 요청에 대한 처리를 진행한다.
 
JWT와 쿠키의 비교
| JWT | 쿠키 | |
|---|---|---|
| 장점 | 클라이언트 측에서 저장되므로 Cross-Domain 문제를 해결할 수 있다. | 서버 측에서 저장되므로 쉽게 구현할 수 있다. | 
| 쿠키보다 더 안전한 인증 방식을 구현할 수 있다. | 브라우저를 닫아도 유지할 수 있다. | |
| 단점 | JWT 크기가 커질수록 네트워크 대역폭이 증가한다. | CSRF(Cross-Site Request Forgery) 공격에 취약하다. | 
| 알고리즘 선택 등에 따라 보안성이 달라질 수 있다. | 보안에 취약한 설정을 하면 쿠키 정보가 탈취될 수 있다. | 
로드 밸런서(Load Balancer)
로드 밸런서의 정의
- 서버의 부하를 분산시켜주는 장치 또는 소프트웨어다.
 - 서버에 부하가 집중되면, 로드 밸런서는 부하가 적은 서버로 요청을 전달하여 서버의 안정성을 유지한다.
 - 로드 밸런서는 다양한 알고리즘을 사용하여 효율적으로 요청을 분산시킨다.
 - 대규모 서비스에서는 로드 밸런서를 통해 서버의 수를 늘리고 안정적으로 서비스를 제공할 수 있다.
 - 
    
- Scale Up
        
- 서버 자체의 성능을 향상시키는 것
 - CPU나 메모리를 늘리는 것
 
 
 - Scale Up
        
 - Scale Out
    
- 동일한 서버를 여러개 더 만드는 것
 - 트래픽 분산을 위해 로드밸런싱이 필요함
 
 
로드밸런싱 알고리즘
라운드로빈 (Round Robin)
- 서버에 들어온 요청을 순서대로 돌아가며 공평하게 분배
 - 여러대의 서버가 동일한 스펙 + 연결이 오래 지속되지 않는 경우 적합
 
가중 라운드로빈 (Weighted Round Robin)
- 각각 서버가 가중치를 가지며 가중치가 높은 서버에 우선 분배
 - 서버의 스펙이 서로 다른 경우 적합
 
IP 해시 방식 (IP Hash)
- 사용자 IP를 해싱하여 특정 서버로 매핑하여 분배하는 방식
 - 사용자는 항상 동일한 서버로 연결됨
 
최소 연결 방식 (Least Connection)
- 요청 시점에 가장 사용량이 적은 서버로 분배
 - 요청 처리 시간이 모두 상이하거나 트래픽이 일정하지 않은 경우에 적합
 
최소 리스폰타임 (Least Response Time)
- 서버의 현재 연결 상태 + 응답시간을 모두 고려하여 분배
 - 가장 적은 연결상태와 가장 짧은 응답시간을 보이는 서버가 우선순위
 
로드 밸런서의 종류
- L2 데이터링크 계층 : Mac 주소로 로드밸런싱
 - L3 네트워크 계층 : IP 주소로 로드밸런싱
 - L4 스위치: 포트번호를 기반으로 패킷을 분배하는 방식으로 동작한다. (Network LoadBalancer)
 - 
    
L7 스위치: HTTP 요청을 분석하여 분배하는 방식으로 동작한다.
 - 
    
L4 로드밸런서와 L7 로드밸런서가 가장 많이 활용된다.
 - DNS 라운드 로빈: DNS 서버에서 도메인 이름에 대한 IP 주소를 여러 개 제공하고, 클라이언트가 요청할 때마다 다른 IP 주소를 반환하여 부하를 분산시키는 방식이다.
 
Leave a comment