본문 바로가기
컴퓨터 사이언스 Computer Science/웹 WEB

[WEB] 인증 방식 종류 1_Cookie & Session

by 이땡칠 2022. 8. 3.

 

 

1. 쿠키와 세션을 사용하는 이유

- 쿠키와 세션은 HTTP 가 Connectionless와 Stateless라는 특징을 가지고 있어 등장하게 되었습니다.

- 비연결지향은 클라이언트에서 서버에 요청을 보내면 서버는 클라이언트에 응답을 하고 접속을 끊는 특성을 말합니다.

- HTTP 통신은 요청을 응답하고 접속을 끊기 때문에 클라이언트의 상태정보를 알 수 없습니다. 이를 Stateless하다고 합니다.

- 만약 로그인을 하고 그 상태를 유지한 채로 웹 서비스를 제공하려면 어떻게 해야할까요? HTTP프로토콜에서 상태를 유지하기 위해 쿠키와 세션이라는 방법이 존재합니다.

 

 

2. 쿠키

1)  개념

- 쿠키는 클라이언트 로컬에 저장되는 Key-Value쌍의 작은 데이터 파일입니다.

- 클라이언트가 어떤 웹사이트를 방문할 경우 그 사이트가 사용하고 있는 서버를 통해 클라이언트의 브라우저에 설치되는 작은 기록 정보 파일입니다.

- 사용자 인증이 유효한 시간을 명시할 수 있으며, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지된다는 특징이 있습니다.

- 쿠키이름, 쿠키값, 만료시간, 전송할 도메인명, 전송할 경로, 보안연결여부, HttpOnly여부로 구성되어 있습니다.

 

2)  동작방식

출처 : https://inpa.tistory.com/entry/WEB-%F0%9F%93%9A-JWTjson-web-token-%EB%9E%80-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC

 

1. 클라이언트가 서버에 요청을 합니다

2. 서버는 클라이언트의 요청에 대한 응답 헤더 set-cookie에 클라이언트 측에 저장하고 싶은 정보를 추가하여 응답합니다.

3. 이후 클라이언트는 서버에 요청을 보낼 때마다, 매번 저장된 쿠키를 요청 헤더의 Cookie 에 담아 보냅니다. 헤더에 쿠키값을 자동으로 추가하는 작업은 브라우저에서 처리해줍니다.

 

3)  Cookie 방식의 단점

 - 요청 시 쿠키의 값을 그대로 보내기 때문에 보안에 취약하다.

 - 용량 제한이 있어 많은 정보를 담을 수 없다. 

 - 웹 브라우저마다 쿠키에 대한 지원 형태가 다르기 때문에 브라우저간 공유가 불가능하다. 

 - 쿠키의 사이즈가 커질수록 네트워크에 부하가 심해진다. 

 

 

3. 세션

1) 개념

보안 이슈 때문에, 세션은 비밀번호 등 클라이언트의 민감 인증 정보를 브라우저가 아닌 서버 측에 저장하고 관리한다.

브라우저가 종료되기 전까지 클라이언트의 요청을 유지하게 해주는 기술입니다.

 

2) 동작방식

출처 : https://inpa.tistory.com/entry/WEB-%F0%9F%93%9A-JWTjson-web-token-%EB%9E%80-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC

 

1. 클라이언트가 서버에 로그인 요청을 합니다

2. 서버는 클라이언트의 로그인 요청의 유효성을 확인하고(아이디와 비밀번호 검사) unique한 id를 sessionid라는 이름으로 서버 메모리(또는 데이터베이스) 상에 저장합니다.

3. 서버가 응답할 때 응답헤더에 set-cookie: sessionid를 추가하여 응답합니다.

4. 브라우저는 이후 서버에 요청할 때 전달받은 sessionid 쿠키를 요청헤더에 담아 전송합니다.

5. 서버에서는 요청헤더의 sessionid 값을 저장된 세션저장소에서 찾아보고 유효한지 확인후 요청을 처리하고 응답합니다.

 

3) Session 방식의 단점

- 쿠키를 포함한 요청이 외부에 노출되더라도 세션 ID 자체는 유의미한 개인정보를 담고 있지 않는다. 그러나 해커가 세션 ID를 탈취하여 클라이언트인 척 위장할 수 있다는 한계가 존재한다. (이는 서버에서 IP 특정을 통해 해결할 수 있기는 하다)

- 서버에서 세션 저장소를 사용하므로 요청이 많아지면 서버에 부하가 심해진다. 

 

 

4. 쿠키와 세션 비교

  쿠키 세션
저장 위치 클라이언트(= 접속자 PC) 웹 서버
저장 형식 text Object
만료 시점 쿠키 저장시 설정
(브라우저 종료되어도 만료시점 이전에는 삭제되지 않음)
브라우저 종료 시 삭제
(기간 지정 가능)
사용하는 자원(리소스) 클라이언트 리소스 웹 서버 리소스
용량 제한 총 300개
하나의 도메인 당 20개
하나의 쿠키 당 4KB (=4096byte)
서버가 허용하는 한 용량 제한 없음
속도 세션보다 빠름 쿠키보다 느림
보안 취약.
요청 시 쿠키의 값을 그대로 보내기 때문에 유출 및 조작당할 위험이 존재한다.
쿠키에 비해 좋음

 

 

내용을 정리하며 여전히 풀리지 않은 궁금증.

온갖 블로그를 뒤져가며 내용을 정리해보고 있는데..

쿠키, 세션, 세션 쿠키, 웹스토리지(로컬 스토리지, 세션 스토리지) 개념이 막 나온다.

 

  • 여기서 어떤 블로그가 '세션'이라고 말하는 것은 세션 쿠키인 것인가?
  • 쿠키는 브라우저의 어디에 저장되는 건가? 
  • 세션은 브라우저의 어디에 저장되는 건가? (메모리에 저장된다고 하는 글을 봤는데, 사용하는 디바이스의 메모리를 말하는 건가?)
  • 웹스토리지는 HTML5 에서 지원하는 새로운 기능이라고 한다. 그럼, 로컬 스토리지와 세션 스토리지는 각각 브라우저의 어디에 위치하는 저장소라고 보아야하나? 
  • 조금 근본적으로.. 브라우저는 어떤 것들로 구성되어 있는 프로그램(? 프로그램이 맞을까?) 인가.

이에 대한 참고자료를 찾았따. "브라우저는 어떻게 동작하는가?" 1독을 권함!

https://d2.naver.com/helloworld/59361

 

 

 

 

참고

[web] JWT 토큰 인증이란? - 이해하기 쉽게 정리

[WEB] 쿠키, 세션이란?

쿠키, 세션 특징 및 차이

댓글