[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