공부하기/Network
[Network] 쿠키와 세션
다섯자두
2025. 3. 18. 12:21
🌀 쿠키와 세션의 차이에 대해 설명해 주세요.
두 기술 모두 웹 개발에서 사용자의 상태를 관리하는 기술이다.
쿠키
- 키-값 형태로 클라이언트의 웹 브라우저에 저장되는 데이터이다. 사용자가 직접 삭제하지 않는 한 만료 기간이 지나기 전까지 브라우저가 종료가 되어도 계속 유지된다.
- 데이터 저장 위치 : 클라이언트 측의 웹 브라우저에 저장
- 데이터 유지 시간 : 사용자가 직접 삭제하지 않는 한 만료 기간이 지나기 전까지 유지
- 용량 : 일반적으로 한 사이트의 최대 쿠키 크기는 4KB이다.
- 보안 : 클라이언트 측에 데이터에 저장되기 때문에 보안성이 낮다. 민감한 정보는 포함하지 않거나 암호화해야 한다. 속성 중 HttyOnly, Secure 속성을 사용하여 보안을 강화할 수 있다.
세션
일정 기간 동안 같은 사용자로부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술
- 서버 측에서 세션 저장소에 사용자 정보를 저장하는 방식이다. 서버는 각 클라이언트에 고유 세션 ID를 할당하고 전달하며 이 ID로 저장소에서 데이터를 참조하여 사용자 정보를 유지한다. 클라이언트는 세션 ID를 쿠키로 가지고 있는다.
- 데이터 저장 위치 : 서버의 세션 저장소
- 데이터 유지 시간 : 사용자가 로그아웃하거나 브라우저가 종료될 때까지 유지된다. 혹은 서버에서 설정한 시간이 지나면 만료 처리된다.
- 용량 : 세션 저장소의 크키에 비례하여 용량에 제한이 없다.
- 보안 : 서버 ID를 제외한 모든 정보가 서버에서 관리되므로 보안성이 높지만, 세션 ID가 탈취된 경우에 주의해야 한다. 세션 ID의 재생성, SSL/TLS를 통한 데이터 전송 암호화 등의 보안 조치를 할 수 있다.
💬 세션이 보안도 좋은데 쿠키를 사용하는 이유는 뭔가요?
쿠키는 주로 사용자의 선호 설정이나 로그인 상태 유지를 통해 사용되며 사용자 경험을 개선하는 데 주로 사용된다.
예를 들어 다크 모드 설정이나 언어 설정 같은 보안이 중요하지 않은 정보들은 쿠키에 저장함으로써 서버의 부담을 줄일 수 있다.
🌀 세션 방식의 로그인 과정에 대해 설명해 주세요.
- 사용자의 최초 로그인 : 사용자가 인증이 되면 서버에서 세션을 생성하고 생성한다.
- 세션 ID 전달 : 세션 생성 시 발급한 세션 ID를 쿠키로 클라이언트에 전달한다.
- 클라이언트 요청 : 클라이언트는 이후 매 요청마다 쿠키에 세션 ID를 포함하여 보낸다.
- 세션 확인으로 로그인 유지 : 서버는 세션 ID로 세션 저장소를 참조하여 사용자 정보를 가져오며, 사용자 로그인을 유지한다.
🌀 HTTP 특성인 Stateless에 대해 설명해 주세요.
HTTP 요청 간 클라이언트와 서버의 관계에서 서버가 클라이언트의 상태 정보를 보존하지 않는 것이다.
HTTP Request에 대해 HTTP Response로 응답을 하고 나면 연결이 완전히 끊겨 서버는 이전 요청의 정보를 기억하지 않는다.
- 확장성 향상 : 서버가 클라이언트의 상태를 저장하지 않으므로 여러 개의 서버를 자유롭게 추가하여 부하를 분산할 수 있다.
- 서버 리소스 절약 : 상태 정보를 저장하지 않으므로 서버의 메모리와 스토리지 사용량이 줄어든다.
- 단점 : 사용자의 인증 정보나 이전 요청의 데이터를 유지하기 위해 별도의 방법이 필요하다. 이로 쿠키 & 세션이나 토큰 기반 인증 등을 활용한다.
🌀 규모가 커져 서버가 여러 개가 된다면, 세션을 어떻게 관리할 수 있을까요?
- Sticky Session : 로드 밸런싱을 통해 사용자가 세션을 특정 서버에서 인증받은 경우, 이후 요청을 계속해서 같은 서버로 전송하도록 한다.
- 특정 서버에 부하가 집중될 수 있다.
- L4 Switch는 요청의 IP 주소를 기반으로 요청의 로드 밸런싱을 수행한다.
- 공인 IP로 전용 회선을 사용하는 대규모 단체의 요청이 들어오면 모두 하나의 호스트로 판단하여 같은 서버에 요청 되어 부하가 집중된다.
- L7 Switch는 Request에 담긴 모든 내용을 볼 수 있다. 주로 쿠키를 통해 요청을 전달할 서버를 결정한다.
- 많은 패킷에 대해 처리 연산을 수행하므로 부하가 될 수 있다.
- L4 Switch는 요청의 IP 주소를 기반으로 요청의 로드 밸런싱을 수행한다.
- 특정 서버에 부하가 집중될 수 있다.
- Session Clustering : 세션을 서로 동기화하여 각 서버가 모든 세션 정보를 가지고 있도록 한다.
- 모든 서버에 세션 정보를 중복하여 저장해야 하므로 서버 메모리에 비효율이 생긴다.
- 세션을 동기화할 때마다 서버끼리 많은 네트워크 요청이 발생한다.
- 세션 분리 : 세션 저장소를 따로 둠으로써 세션 데이터를 중앙 집중식으로 관리하고 각 서버에서 데이터를 공유한다. Redis와 같은 인메모리 데이터베이스를 사용하여 빠른 속도로 읽고 쓸 수 있도록 한다.