Login & Sign up/Cookie & Session

Cookie와 Session 개념 / 사용하는 이유

Zeta050525 2022. 1. 26. 00:37
728x90

Cookie와 Session을 사용하는 이유

쿠키와 세션을 사용하는 이유를 알려면 일단 HTTP의 특성을 알아야 합니다.

 

Connectionless

클라리언트의 요청을 받고 응답을 마치면

연결을 끊어버립니다.

 

stateless

연결이 종료되면 이전에 연결했던 사용자의 정보를 저장하지 않습니다.


 

이런 특징들을 보완하기 위해 사용하는 게 쿠키와 세션입니다.

 

예를 들어 우리가 네이버에 로그인을 했다고 치면

 

네이버 뉴스를 들어가든 어딜 들어가 든 로그인이 유지되어있죠?

 

쿠키와 세션을 통해 로그인을 유지할 수 있습니다.

 

하지만 사용하지 않는다면 stateless특성 때문에 

 

유저의 Auth(인증)이 필요할때마다 로그인을 여러 번 해야겠죠?

 

엄청 불편할 겁니다.

 

 

쿠키란?

쿠키란 어떤 정보가 담겨있는 작은 데이터입니다.

 

쿠키의 특성으론

 

1. 브라우저에 저장된다 (서버 X)

 

2. 특정 url의 쿠키를 가지고 있으면 브라우저가 자동으로 header에 넣어서 요청을 한다.

 

3. 브라우저에 저장하는 거라 보안적으로 취약하다. (중간에 가로채갈 수 있음)

 

4. 쿠키의 저장기간을 명시할 수 있다.

 

5. 서버가 Response header에 "Set-Cookie"속성으로 쿠키를 전달할 수 있다.

 

 

쿠키를 주고받는 방식

1. 클라이언트가 페이지를 요청 (쿠키 없음)

 

2. 서버가 쿠키 생성 후 header에 담아 클라이언트에게 전달

 

3. 이제부터 클라이언트가 같은 페이지를 요청할 때마다 자동으로 header에 담아서 보냄 (쿠키 있음)

 

4. 이후 계속 서버가 request header에 담긴 쿠키를 받는데 쿠키에 데이터를 바꿔야 할 때가 오면 그때 다시 전달

 

사용 예

쿠키의 장점만을 살린 예시를 보면

 

1. 로그인하지 않은 페이지에서 즐겨찾기 기능

 

2. 로그인하지 않은 상태로 장바구니

 

3. 이 팝업창을 하루 동안 보지 않습니다.

 

중간에 가로채갈 수 있기 때문에

 

장바구니, 즐겨찾기 등 인증이 필요 없는 부분에 많이 쓰입니다.

 


 

 

세션이란?

세션은 쿠키와 거의 동일한 역할을 할 수 있습니다.

 

하지만 세션은 브라우저가 아닌 서버에 저장하기 때문에

 

사용자가 많아지면 서버 메모리를 많이 차지함

 

근데 서버에 저장하기 때문에 보안면에서 쿠키보다 훨씬 우수합니다.

 

정리를 해보면

 

1. 쿠키랑 거의 동일한 역할을 할 수 있다.

 

2. 브라우저가 아닌 서버에 저장함

 

3. 서버에 저장하므로 보안면에서 쿠키보다 우수

 

4. 서버에 저장하니까 사용자가 많아지면 메모리에 부담이 됨

 

5. 세션을 클라이언트를 구분한다

 

6. 그렇지만 세션도 쿠키를 매개로 한다

 

 

세션이 동작하는 방식

1. 마찬가지로 페이지를 요청하면

 

2. 서버가 세션 id를 발급해서 header에 쿠키로 담아 보내줌

 

3. 이제 클라이언트가 페이지를 요청할 때마다 세션 id를 request header에 담아서 보냄

 

4. 서버는 session id를 통해 클라이언트의 정보를 찾고 그에 맞게 응답함

 


재밌는 부분

제가 아까 쿠키를 가로챌 수 있다고 했죠?

 

실제로 세션 id를 도둑맞았다고 치고 

 

세션 id로 다른사람이 나인척해서 로그인하는

 

시나리오로 로그인을해보겠습니다.

 

 

 

아이디 비밀번호를 몰라도 클라이언트를 구별하는 특성을 이용해

 

session id를 갖고있는 쿠키를 도둑맞았을때 

 

다른사람이 나인척할수있다는게 되게 신기하고 재밌네요

728x90