Notice
Recent Posts
Recent Comments
Link
«   2026/09   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags more
Archives
Today
Total
관리 메뉴

가자미의 파닥파닥 프로그래밍

세션에 관하여... 본문

네트워크

세션에 관하여...

GaJaMy 2023. 11. 19. 01:06
Fitingle 프로젝트를 진행하면서 채팅방 기능을 구현하기 위해서, 웹 소켓통신에 대해서 공부를 하고 있었습니다. 공부를 하면서 세션이란 단어가 나왔습니다. 이미 회원 인증과 인가처리를 구현하면서 세션에 대해서 공부를 하였기에 완벽히 이해하였다고 생각하였습니다. 그런데 웹 소켓 통신에서도 세션이라는 말이 나왔는데 제가 이해한 세션과 많이 달랐습니다. 그래서 저는 세션에 대해서 제대로 이해하지 못한 것 같아 이에 대해서 다시 정리하고, 세션에 대해서 제가 이해한 것을 바탕을 글을 써보려고 합니다. 

 

잘못된 내용이 있다면, 꼭 댓글을 달아 주세요!

 

세션이란?

결론적으로 세션이라는 말은 상당히 복합적으로 사용됩니다. 각 상황에 맞춰서 세션에 대해서 설명해 보겠습니다.

 

상태의 세션

먼저 세션을 위키 백과에서는  "영구적이고 상호작용적인 정보 교환을 전제하는 둘 이상의 통신 장치나 컴퓨터와 사용자 간의 대화나 송수신 연결 상태를 의미하는 보안적인 다이얼로그 및 시간대를 가리킨다."라고 설명합니다. 간단히 정보 교환을 위한 두 객체의 상태를 말합니다.더 자세히 예를 들어 웹 사이트에 로그인을 한다고 가정하고 그 과정을 살펴 보겠습니다.

  1. 사용자는 아이디와 비밀번호를 입력하고 로그인 버튼을 누릅니다.
  2. 클라이언트는 아이디와 비밀번호를 서버에 보냅니다.
  3. 서버는 아이디와 비밀번호를 확인하고, 적절한 사용자로 판단한 응답을 보냅니다.
  4. 클라이언트는 응답을 확인하고 다음 서비스를 위한 페이지로 변환합니다.

이렇게 1~4의 과정을 거쳤을 때, 세션이 시작되었다고 말합니다. 즉, 사용자가 올바른 사용자로 판단되고, 서버가 제공하는 서비스를 이용할 수 있는 상태가 되었다고 합니다. 

저장소로서의 세션

그런데 이 말은 서버에서는 또 다르게 사용됩니다. 위의 예에서 3~4번의 과정을 위한 어떤 저장소의 개념으로 사용됩니다.

ID와 PW를 받아 DB에서 올바른 사용자인 것을 확인하고, 임의의 문자열이나 토큰을 생성하고 세션에 저장을 하고 세션ID를 만들어 응답을 보냅니다. 이제 클라이언트는 세션 ID를 저장해 두고, 모든 서비스를 제공할 때 서버에게 이 세션ID를 보냅니다. 서버는 이 세션ID를 세션에서 검색해서 올바른 사용자인 것을 확인하고, 서비스를 제공합니다. 이렇게 세션이라는 말은 이 사용자가 올바른 사용자다 라는 것을 알기 위해 사용자의 정보를 저장해 놓는 저장소로 쓰이기도 합니다.

 

네트워크에서의 세션

HTTP 프로토콜과 웹 소켓에서의 세션은 위에서 설명한 하나의 상태의 의미로 사용됩니다. 그런데 세션을 사용하는 방식이 다릅니다. 기본적으로 HTTP 프토콜을 사용하는 웹 서비스는 비연결 지향성 프로토콜이며, 단방향 통신입니다. 그래서 서버측에서는 HTTP 프토콜로 요청을 받으면 해당 요청이 올바른 사용자에게서 온 요청인지 알기 어렵습니다. 그래서 쿠키와 세션ID를 이용해서 올바른 사용자인지 판단한다거나, JWT를 발급하여 올바른 사용자인지 알아냅니다. 

 

하지만 웹 소켓 통신은 소켓을 통한 TCP 통신을 사용합니다. TCP 통신은 연결 지향성 프로토콜이며, 양방햔 통신입니다. 이것은 서버가 사용자가 계속해서 올바른 사용자인 것을 인지하고 있는것입니다. 즉, 위의  HTTP 통신과 마찬가지로 세션ID를 메모리에 올려두고 이것을 관리하고 있다는 것을 의미합니다. HTTP 프로토콜에서는 세션ID를 서버가 부여해 주었지만, 스프링으로 구현된 서버에서는 WebSocketSeesion 객체를 통해 스프링이 자동으로 처리합니다. 웹 소켓 연결이 수립될 때마다 각 세션에는 고유한 세션 ID가 부여되어 관리 됩니다. 이 세션 ID는 서버에서 자동으로 생성되며, 연결된 WebSocketSession 객체에서 확인 할 수 있습니다.

 

이렇게 세션의 정의에 대해 알아 보았고, 통신 방법에 따라 세션이 어떻게 관리되고, 세션ID가 부여가 되는지 알아 보았습니다. 그리고 세션에 대해서 좀 더 이해해 볼 수 있던 시간이었습니다.

 

Reference

https://coderbycode.tistory.com/162
 

세션(Session) 이란

세션(Session)이라는 용어는 다분히 혼돈스럽다. 세션의 정의를 Naver에서 찾아보면 (1) 망 환경에서 사용자 간 또는 컴퓨터 간의 대화를 위한 논리적 연결, (2) 프로세스들 사이에 통신을 수행하기

coderbycode.tistory.com

 

 

'네트워크' 카테고리의 다른 글

네트워크 기초1  (0) 2024.02.16