amplitude.init("2e2e5a386856efdf3237cf254a9d14d9"

[개념 콕] 쿠키&세션의 개념과 차이

내일배움캠프 수료생이 직접 정리한 개발 핵심 개념
Jun 03, 2024
[개념 콕] 쿠키&세션의 개념과 차이
✍🏼
개발을 시작하시는 여러분, 정보가 너무 많고 배워야 할 것도 산더미라 어디서부터 시작해야 할지 막막하신가요? 내일배움캠프 수료생들이 4개월 동안 배운 엄선된 핵심 개념을 직접 정리해서 알려 드립니다. 공부하다 막히거나 헷갈리는 개념이 있다면 개념 콕으로 정리해보세요.
 

쿠키

클라이언트에 저장하는 이름, 값, 만료일(저장기간), 경로 정보로 구성되어있는 사용자의 기록 정보 파일입니다. 즉, 방문자의 정보를 방문자 컴퓨터의 메모리에 저장하는것 입니다.
클라이언트가 페이지를 요청하면 웹 서버에서 쿠키를 생성해 줍니다. 그래서 동일 사이트 재방문 시, 클라이언트의 PC에 해당 쿠키가 있는 경우 요청 페이지와 함께 쿠키를 전송해서 로그인을 유지할 수 있습니다.
 

세션

일정 시간 동안 같은 사용자(브라우저)로부터 들어오는 일련의 요구를 하나의 상태로 보고, 그 상태를 유지시키는 기술입니다. 여기서 ‘일정 시간’이란 방문자가 웹 브라우저를 통해 웹 서버에 접속한 시점부터 웹 브라우저를 종료하여 연결을 끝내는 시점을 말합니다. 브라우저를 닫거나, 서버에서 세션을 삭제했을 때만 삭제가 되므로, 쿠키보다 비교적 보안이 좋습니다.
 

쿠키와 세션을 사용해서 인증하는 이유

쿠키와 세션을 사용하여 인증을 하는 이유는 HTTP 프로토콜의 특성과 밀접한 관련이 있습니다. HTTP 프로토콜은 기본적으로 Stateless(상태 비저장)이기 때문에 클라이언트와 서버 간의 연결은 요청과 응답이 완료되면 끊어지게 됩니다. 즉, 이전 요청에 대한 정보를 다음 요청에서 사용할 수 없습니다.
그러나 대부분의 웹 애플리케이션에서는 사용자 인증과 같은 작업을 수행하기 위해 여러 요청에 걸쳐 사용자의 상태를 유지해야 합니다. 예를 들어, 상태가 유지되지 않는다면 사용자가 로그인 후 다른 페이지로 이동할 때마다 매번 로그인 정보를 입력하는 불편한 상황이 발생할 수 있습니다. 이러한 문제를 해결하기 위해 쿠키와 세션이 도입되었습니다.
로그인 과정에서 사용자의 자격 증명(일반적으로 사용자 이름과 비밀번호)이 확인되면 서버는 해당 사용자의 세션을 생성하고, 세션 ID를 쿠키에 담아 클라이언트에게 전송합니다. 이후 클라이언트의 모든 요청에는 이 쿠키가 포함되므로, 서버는 세션 ID를 통해 사용자를 식별하고 인증된 사용자임을 확인할 수 있습니다. 이렇게 하면 사용자는 매 요청마다 자격 증명을 입력할 필요 없이 세션이 유지되는 동안 인증된 상태를 유지할 수 있습니다.
 

HTTP Session 동작 순서

step 1. 클라이언트(사용자)가 서버로 접속(http 요청)을 시도
step 2. 서버(웹)는 클라이언트의 header의 cookie를 확인
step 3. 클라이언트가 해당 session-id를 보내왔는지 확인
step 4. 만약 클라이언트로부터 발송된 session-id가 없다면, 서버는 session-id를 생성해 클라이언트에게 header의 set-cookie 값으로 session-id를 발행 step 5. 클라이언트는 이제부터 이 쿠키를 이용해 session-id 값을 서버에 전달하고 서버에서 해당 값을 확인해서 상태를 유지
즉, 처음 로그인을 하면 서버 측에서 해당 로그인 정보로 세션을 생성합니다. 그리고 클라이언트에게 세션의 ID를 응답으로 보냅니다. 클라이언트는 응답으로 받은 세션 ID를 쿠키 저장소에 보관합니다. 이후 클라이언트는 요청을 보낼때마다 세션 ID를 쿠키에서 꺼내와 HTTP 헤더에 넣어 보내고, 서버는 세션 ID를 바탕으로 저장된 세션을 탐색해 요청을 보낸 유저가 맞는지 확인하게 됩니다.
이러한 과정을 통해 사용자는 로그인할 때마다 자신의 ID와 비밀번호를 직접 전송하지 않고, 로그인 후 서버로부터 발급받은 세션 ID를 전송함으로써 인증 과정을 간소화할 수 있습니다. 이 방식은 HTTP 요청이 중간에 가로채어질 경우에도 사용자의 ID와 비밀번호가 직접 노출되는 것을 방지하는 효과가 있습니다. 그러나 세션 ID 자체가 노출될 위험이 있으므로, 만약 누군가가 이 세션 ID를 획득하여 HTTP 헤더에 포함시켜 요청을 보낸다면, 서버는 이를 정상적인 사용자의 요청으로 인식하여 인증을 우회할 수 있는 가능성이 존재합니다.
 
 

쿠키와 세션의 차이

상태 저장 위치
지속성
보안
쿠키
로컬컴퓨터
웹 브라우저를 닫아도 정보 유지
취약
세션
서버
웹 브라우저 닫는 순간 삭제
높음

1) 상태 정보 저장 위치

쿠키와 세션의 가장 큰 차이점은 상태 정보가 저장되는 위치입니다. 쿠키는 클라이언트, 즉 사용자의 로컬 컴퓨터에 저장되는 반면, 세션은 서버에 저장됩니다.

2) 지속성 차이

쿠키는 만료 기간이 설정되어 있더라도 파일 형태로 저장되기 때문에 웹 브라우저를 종료하더라도 정보가 유지될 수 있습니다. 심지어 만료 기간을 별도로 지정하면 사용자가 쿠키를 직접 삭제하기 전까지 정보가 계속 남아있을 수 있습니다.
반면에 세션은 만료 기간을 설정할 수 있지만, 웹 브라우저를 종료하는 순간 설정된 만료 기간과 상관없이 즉시 삭제됩니다.

3) 보안

보안 측면에서 볼 때, 쿠키는 클라이언트 측에 저장되므로 변조되거나 요청 과정에서 스니핑(도청)될 위험이 있어 취약합니다. 하지만 세션은 쿠키를 사용하여 Session ID만을 클라이언트에 저장하고, 실제 데이터는 서버에서 Session ID를 통해 관리하므로 상대적으로 보안성이 높다고 할 수 있습니다.
따라서 쿠키는 보안이 크게 중요하지 않은 일반적인 사용자 편의 기능 구현에 적합한 반면, 세션은 사용자 인증이나 중요한 정보를 다루는 기능 구현에 적합하다고 볼 수 있습니다.
 
 
 

내일배움캠프는 개발에 필요한 핵심만 배웁니다

지금까지 꼭 필요한 개발 지식에 대해 알아보았습니다. 내일배움캠프에서는 전문가들이 선별한 핵심 개발 지식으로 개발 공부도, 취업도 보다 효율적으로 할 수 있는데요. 국내 유수의 IT기업 출신 튜터님들과 실습 위주의 독보적인 커리큘럼으로 개발자 취업을 체계적으로 준비해보세요. 내일배움캠프 4개월, 여러분 인생의 가장 큰 터닝 포인트입니다.
 
 
 
CREDIT
글 | 이기호 내일배움캠프 수료생 편집 | 정효재 팀스파르타 에디터
 
 

취업 준비, 어디서부터 시작해야 할지 모르겠다면?

 
🧐비전공자인데 IT 업계 취업할 수 있을까?
😟프로젝트 경험이 부족한데, 어떻게 준비해야 할까?
🥺IT 기업으로 이직하고 싶은데 뭐부터 시작해야 할까?
 
이런 고민을 하고 있다면, 내일배움캠프의 IT 취업 컨설팅을 받아보세요.
취업 코칭 전문가들이 여러분의 고민을 해결해 드립니다.
 
다음 링크에 이메일을 입력하시면 메일로 1:1 커리어 상담권과 취준 자료집을 보내드릴게요.
 
 
 
Share article
Subscribe to our newsletter

내일배움캠프 블로그

RSS·Powered by Inblog