seegongsik
내 단어장
네트워크

다시 와도 날 기억해, 세션과 쿠키

앞에서 HTTP는 건망증이라 부탁할 때마다 우리를 처음 보는 손님 취급한다고 배웠어요. 그런데 한 번 로그인하면 한참 동안 로그인이 풀리지 않죠. 매번 잊어버리는 서버가 어떻게 나를 계속 알아볼까요? 비밀은 작은 통행증 한 장에 있어요.

01

건망증이라 로그인이 자꾸 풀려요

앞에서 HTTP는 건망증이라고 배웠어요.
부탁이 끝나면 우리를 깨끗이 잊어요.
그래서 다음에 또 부탁하면
처음 보는 손님처럼 대해요.
그럼 한 가지 이상한 점이 생겨요.
로그인은 한 번만 했는데
왜 한참 동안 풀리지 않을까요?
매번 잊는다면
방문할 때마다 다시 로그인해야 맞잖아요.

건망증 서버로그인 풀림
단추를 눌러 서버를 방문해봐요

방문 단추를 눌러 봐요. 건망증 서버는 매번 잊어서, 방문마다 로그인이 풀려 다시 로그인해야 해요.

보다시피 너무 불편해요.
방문할 때마다 로그인이라니
금방 지치고 말 거예요.
그렇다고 서버에게
모든 손님을 다 외우라고 하긴 어려워요.
세상엔 손님이 너무 많으니까요.
그래서 영리한 꾀를 하나 써요.
서버가 외우는 대신
손님에게 작은 표를 하나 쥐여 줘요.

02

서버가 작은 통행증을 발급해요

처음 들어올 때
서버는 손님에게 작은 표를 한 장 줘요.
이 표를 쿠키라고 불러요.
표에는 번호가 하나 적혀 있어요.
'당신은 7번 손님' 하는 식이죠.
놀이공원에서 받는
손목 띠나 입장 도장을 떠올리면 쉬워요.
서버는 그 번호만 기억하면
수많은 손님을 일일이 외우지 않아도 돼요.

이제 손님 손에
번호가 적힌 통행증이 생겼어요.
서버는 이 번호를
그 손님과 연결해서 적어 둬요.
중요한 건
통행증은 손님이 들고 다닌다는 점이에요.
서버가 다 외우는 게 아니라
손님이 자기 번호를 챙기는 거죠.
그럼 이 통행증을
언제 다시 꺼내 보여 줘야 할까요?

03

방문할 때마다 통행증을 보여 줘요

통행증을 받은 손님은
그걸 그냥 주머니에 넣어 둬요.
그리고 다음에 서버에 부탁할 때
그 통행증을 함께 보여 줘요.
'저 7번 손님이에요' 하면서요.
방문할 때마다 매번 같이 내밀어요.
부탁하는 종이 한쪽에
번호를 적어 보내는 셈이죠.
그래서 서버는 부탁만 봐도
누가 보냈는지 단번에 알 수 있어요.

서버
1번째 부탁
통행증 7번
2번째 부탁
통행증 7번
3번째 부탁
통행증 7번
방문 단추를 눌러 부탁과 통행증을 함께 보내봐요

방문 단추를 눌러 봐요. 손님이 부탁과 함께 통행증 번호를 매번 같이 내밀어요.

이제 손님은 부탁할 때마다
같은 번호를 함께 보내요.
서버 입장에선
매번 번호가 손에 들어오는 셈이죠.
건망증이라 손님은 못 외우지만
부탁에 번호가 딸려 오니 괜찮아요.
그럼 서버는
그 번호를 보고 무엇을 할까요?
자기가 적어 둔 명단과
맞춰 보면 되겠죠?

04

아, 그 사람! 하고 알아봐요

통행증 번호가 도착하면
서버는 적어 둔 명단을 펼쳐요.
'7번이 누구더라' 하고 찾죠.
명단에서 7번을 찾으면
'아, 그 사람!' 하고 알아봐요.
이렇게 같은 손님이라는 걸
방문 사이사이 이어서 기억하는 게
바로 세션이에요.
덕분에 로그인이 풀리지 않고
쭉 이어지는 거예요.

도착한 통행증
서버 명단
3번 손님
7번 손님
12번 손님
도착한 통행증 번호를 눌러 명단에서 찾아봐요

도착한 통행증 번호를 눌러 봐요. 서버가 명단에서 그 번호를 찾아 '아, 그 사람!' 하고 알아보며 로그인을 이어 가요.

건망증 서버였는데
이제는 우리를 척척 알아봐요.
비결은 서버가 외운 게 아니라
손님이 통행증을 들고 다닌 덕분이죠.
서버는 번호와 명단만 맞추면 되니
수많은 손님도 가뿐히 다뤄요.
그런데 한 가지
조심할 게 있어요.
번호만 맞으면 누구든 통과한다면,
남의 통행증을 주우면 어쩌죠?

05

정리해볼까요

한 줄로 모으면 이래요.
HTTP는 건망증이라 매번 처음 보는 손님 취급.
서버가 작은 통행증(쿠키)을 한 장 발급해요.
손님은 방문마다 그 통행증을 보여 줘요.
서버는 번호를 보고 '아, 그 사람!' 하고 알아봐요.
이렇게 같은 손님임을 이어 기억하는 게 세션이죠.
덕분에 매번 다시 로그인하지 않아도 돼요.
외우는 일은 손님의 통행증에 맡기고,
서버는 번호만 맞춰 보는 거예요.

1. HTTP는 건망증, 매번 처음 보는 손님
2. 서버가 통행증(쿠키)을 발급
3. 방문마다 통행증을 보여줘요
4. 번호로 알아봐요 = 세션
단추를 눌러 핵심을 차례로 되짚어봐요

핵심을 차례로 눌러 되짚어봐요. (건망증이 문제 → 통행증(쿠키) 발급 → 방문마다 보여줘요 → 아, 그 사람!(세션))

이제 서버가 어떻게
우리를 다시 알아보는지 알게 됐어요.
그런데 통행증 번호만 맞으면
그게 정말 나인지는
아직 확인하지 않았어요.
번호를 든 사람이
진짜 그 사람이 맞을까?
남이 가로채면 어쩌지?
이 미더운지 확인하는 이야기를
다음 영역에서 함께 따라가봐요.

한 줄 정리HTTP는 건망증이라 부탁마다 우리를 처음 보는 손님으로 대해요. 그래서 그냥 두면 로그인이 매번 풀려야 맞아요. 이 문제를 푸는 게 쿠키와 세션이에요. 처음 들어올 때 서버가 작은 통행증(쿠키)을 한 장 발급해 줘요. 손님은 다음 방문마다 그 통행증을 같이 보여 줘요. 서버는 통행증에 적힌 번호를 보고 '아, 그 사람!' 하고 알아봐요. 이렇게 같은 손님이라는 걸 이어서 기억하는 게 세션이에요. 덕분에 매번 다시 로그인하지 않아도 돼요. 통행증 번호로 누구인지 알아보는 이 일은, 그 사람이 진짜 맞는지 확인하는 인증 이야기로 이어져요.
네트워크
이 페이지가 도움 됐다면 후원하기