인터넷 쇼핑몰이나 구글, 네이버 등 웹 사이트에 로그인을 하면 홈페이지에서 다른 페이지로 넘어가는 것처럼 새로운 요청을 보내도 로그인이 유지되는 것을 볼 수 있다.
당연한 것 처럼 보이지만, HTTP 프로토콜은 'Stateless' 한 특성을 가지고 있는 프로토콜이다. 서버는 통신이 끝나면 상태 정보를 유지하지 않는다. 원래대로라면 서버측에서는 요청을 보낸 클라이언트가 이전에 로그인 요청을 보낸 클라이언트와 동일한지 아닌지 상태 정보가 없으므로 모를 것이다. 이러한 Stateless한 특징을 보완하기 위해서, 로그인 기능을 구현할 때 가장 일반적인 방법으로 쿠키와 세션이 사용된다.
쿠키와 세션 없는 기존 HTTP 프로토콜 방식대로라면 구글에 로그인을 해서 Gmail, 구글 드라이브 등 다른 페이지로 이동할 때마다 로그인을 다시 해야할 것이다!
1. 쿠키 (Cookie)
클라이언트 (로컬)에 저장되는 Key:Value 형식의 String 타입으로 이루어져 있는 최대 4KB 크기의 작은 데이터 파일이다. 로그인이 성공하면 서버에서 세션 ID를 쿠키에 담아 클라이언트에 전달한다.
'사용자 인증' 이 유효한 시간을 지정할 수 있으며, 유효 시간이 정해진 경우 브라우저가 종료되어도 인증을 유지할 수 있다.
쿠키의 종류
쿠키는 언제까지 유지시킬지에 따라 알맞게 사용할 수 있다.
Session Cookie : 웹 브라우저가 종료될 때 제거된다.
Permanent Cookie : 유효 시간을 입력하면 해당 날짜까지 유지한다.
2. 세션 (Session)
세션이란 웹 서버에서 클라이언트의 상태를 유지하기 위한 기술 중 하나이다. 클라이언트가 서버에 접속해서 웹 페이지를 요청하면, 서버는 해당 클라이언트에 대한 정보를 저장하고 이 정보를 유지한다. 이때 클라이언트들을 구분하기 위한 정보를 세션이라고 한다.
세션은 클라이언트와 서버의 네트워크 연결이 지속되는 동안에만 유효하며, 연결이 끊기면 세션 정보도 삭제된다. 서버측에서는 세션을 식별하기 위한 고유 값으로 세션 ID를 생성, 관리한다. 이 세션 ID는 서버도 가지고 있어야 하며 클라이언트에게도 전달된다. 일반적으로 세션 ID를 쿠키에 저장하여 사용한다.
웹서버에서 세션은 일반적으로 서버 메모리나 데이터베이스에 저장된다.
쿠키와 세션을 사용하여 로그인하는 과정
1. 사용자가 로그인 페이지에 접속한다.
2. 사용자가 제출한 로그인 정보를 서버에서 검증한다.
3. 검증에 성공하면 서버에서 사용자 식별 정보를 생성하고 서버에서 클라이언트에게 세션 ID를 부여한다.
세션 ID 란, 세션을 식별하기 위한 고유한 값이다. 이 세션 ID로 각각의 클라이언트들을 구분하는데 사용될 수 있다. 또한 세션 ID는 서버에서 생성되고 클라이언트 측에서 직접 조작할 수 없기 때문에 보안상 안전하여 사용자 인증에 사용되는 것이다.
사용자 식별 정보는 일반적으로 사용자의 ID, 이메일 주소와 같은 정보이다. 사용자 식별 정보는 보통 세션에 저장된다.
4. 서버는 세션 ID를 쿠키에 저장하고, 이를 클라이언트에게 전달한다.
5. 이후 모든 요청에서, 클라이언트는 해당 쿠키를 서버로 보내게 된다. (세션 ID는 쿠키에 저장되어 클라이언트가 요청을 보낼 때 마다 함께 전달된다. )
6. 서버는 클라이언트가 보낸 요청에서 쿠키에 저장되어 있던 세션 ID를 읽고, 해당 세션 ID를 통해 세션 정보(클라이언트의 정보)를 검색한다.
7. 세션 정보에서 사용자 식별 정보를 읽고, 해당 사용자가 인증된 것으로 간주한다.
8. 사용자가 로그아웃하거나 세션이 만료되면 서버에서 세션 정보를 삭제한다.
참고: 서버측 코드에서는 유효시간(MaxAge)를 0으로 바꾸면 세션 정보가 삭제된다. 이런 방식으로 로그아웃 처리를 하는 것이다.
private void expiredCookie(HttpServletResponse response, String cookieName) {
Cookie cookie = new Cookie(cookieName, null);
cookie.setMaxAge(0);
response.addCookie(cookie);
}
참고 자료
https://www.sohamkamani.com/nodejs/session-cookie-authentication/
https://interconnection.tistory.com/74
'Computer Science > 네트워크' 카테고리의 다른 글
[Network] ARP 동작원리와 ARP 스푸핑 (0) | 2023.03.13 |
---|---|
[Network] 서브넷팅 (Subnetting), 서브넷마스크(SubnetMask) 슈퍼넷팅 (Supernetting) (0) | 2023.03.05 |
[Network] IP 클래스와 IPv4, IPv6 주소체계 (2) | 2023.03.05 |
[네트워크] SSL/TLS Handshake 과정 (0) | 2023.02.12 |
[Network] Link Layer(2) - 이더넷(Ethernet)과 ARP 테이블, 프레임 구조 (0) | 2022.12.31 |