687. 세션 재개 (Session Resumption / TLS Ticket) 기능 구성
핵심 인사이트: HTTPS 웹사이트에 처음 접속할 때는 신분증 검사하고 비밀 열쇠를 만드는 핸드셰이크 과정(2-RTT)이 너무 무겁다. 그런데 "1분 전에 방금 인증 다 끝내고 접속했던 네이버 창을 실수로 껐다가 다시 켰을 때" 또 이 짓을 처음부터 다시 해야 할까? '세션 재개'는 놀이공원에 재입장할 때 손등의 야광 도장(Session ID)이나 발급받은 영수증(TLS Ticket)만 보여주고 0.1초 만에 하이패스로 통과하는 지능형 시간 단축 기술이다.
Ⅰ. 세션 재개 (Session Resumption)의 필요성
- SSL/TLS 연결의 초기 핸드셰이크는 공개키/개인키 기반의 무거운 수학 연산(RSA, ECDHE 등)을 동반하므로 CPU 자원을 엄청나게 잡아먹고 지연 시간(Latency)을 유발합니다.
- 특히 스마트폰이 와이파이에서 LTE로 망을 갈아탈 때마다 이 무거운 인증을 매번 새로 맺으면 체감 속도가 최악이 됩니다. 한 번 안전하게 뚫어놓은 터널(만들어놓은 세션키)을 버리지 않고 잠시 쟁여두었다가, 짧은 시간 내에 재접속하면 암호 연산을 싹 생략하고 그 열쇠를 그대로 다시 재활용(재개)하는 기법이 필수적이 되었습니다.
Ⅱ. 세션 재개를 구현하는 2가지 방식 🌟
누가 기억력(데이터)을 부담할 것인가에 따라 두 가지로 나뉩니다.
1. Session ID (세션 ID 방식) - 서버가 기억하는 방식 (고전적)
- 원리: 첫 접속 때 서버가 "우리가 방금 만든 세션키는 캐비닛 1234번에 넣어둘게"라며, 클라이언트에게
Session ID: 1234라는 짧은 번호표를 줍니다. - 재접속: 사용자가 다시 접속할 때 "저 방금 왔던 1234번이요!" 하고 번호표만 내밉니다. 서버는 자기 메모리(RAM)를 뒤져 1234번 서랍에 있던 세션키를 꺼내어 무거운 인증 없이 0.1초 만에 통신을 재개합니다.
- 한계점: 만약 네이버처럼 동시 접속자가 1억 명이면? 서버 메모리(RAM)가 1억 개의 세션키를 다 기억하느라 뻗어버립니다. 게다가 1번 서버에 접속했던 유저가 다시 접속할 때 로드밸런싱 때문에 2번 서버로 들어가면, 2번 서버는 "난 1234번 서랍 없는데?" 하며 에러가 나는 분산 서버 환경의 치명적 약점이 있었습니다.
2. TLS Session Ticket (세션 티켓 방식) - 클라이언트가 기억하는 방식 (현대적)
- 원리 (서버 메모리 해방): 이 방식은 놀이공원 자유이용권과 같습니다. 서버는 첫 접속이 끝나면 세션키와 설정 정보들을 '서버만 풀 수 있는 마스터 암호키(STEK)'로 통째로 꽁꽁 암호화해서 '티켓(Ticket)' 형태로 만들어 클라이언트에게 던져버리고, 서버 본인은 그 기억을 자기 머릿속에서 완전히 지워버립니다.
- 재접속: 사용자가 재접속할 때 이 '티켓'을 통째로 내밉니다. 서버는 메모리를 뒤질 필요 없이, 건네받은 티켓의 자물쇠를 자기 마스터키로 찰칵 풀어서 그 안에 든 세션키를 꺼내어 통신을 재개합니다. 네이버 서버가 1억 대라도 티켓만 까보면 되니 서버 확장에 완벽히 대응합니다.
Ⅲ. TLS 1.3의 결합 (0-RTT의 기적)
- 앞선 685번 문서에서 배운 TLS 1.3의 0-RTT (제로 라운드 트립 타임) 기능이 바로 이 '세션 티켓' 기술을 뼈대로 삼고 발전한 것입니다.
- TLS 1.3에서는 재접속할 때 아예 인사를 나누기도 전에, 첫 패킷(Client Hello) 겉면에 이 '티켓'을 딱 붙이고, 패킷 내부에는 묻지도 따지지도 않고 바로 HTTP 데이터(네이버 검색어)를 암호화해서 한꺼번에 쑤셔 넣어 쏴버립니다. 지연 시간 0초의 기적이 완성되는 순간입니다.
📢 섹션 요약 비유: Session ID 방식은 찜질방 목욕탕입니다. 카운터(서버)가 내 옷(세션키)을 캐비닛에 넣고 나에게 목욕탕 열쇠 고리(ID)를 줍니다. 손님이 많으면 카운터 캐비닛이 꽉 차서 터집니다. Session Ticket 방식은 놀이공원 자유이용권 손목띠입니다. 매표소(서버)는 내 정보가 암호화된 야광 띠(티켓)를 내 손목에 채워 밖으로 내보냅니다. 놀이공원 입장 게이트가 100개(서버 분산)라도, 내가 어떤 게이트로 들어가든 손목띠만 띡 스캔하면 1초 만에 확인하고 들여보내 주므로 서버의 부담이 전혀 없는 완벽한 아키텍처입니다.