본문 바로가기
개발자의 공부방/웹

웹 기초] HTTP Session 공부

by 쌈빡한 쥬니준 2021. 4. 28.
반응형
HttpSession을 공부하게 된 이유.

www.youtube.com/watch?v=3ArYMq5AomI

우연히 jojoldu.tistory.com/ 블로그의 주인님(?)이신 조졸두님(향로님)이 나오는 유튭영상을 보고 정리하게 됐습니다.

 

향로님의 대표적인 질문이란 내용으로 (영상 8:05부터) 로그인,HttpSession에 대해서 나옵니다.

 

해당 영상에서 나오는 질문은 다음과 같습니다.

HttpSession.getAttribute("user")

/*
	1. 사용자 A가 접속해도 "user"를 Key로 값을 가져오고,
	2. 사용자 B가 접속해도 "user"를 Key로 가져옵니다.
    	3. 같은 Key를 쓰는데 어떻게 A와 B를 구분해서 값을 가져올 수 있나요?
*/

 

이 질문을 읽고 뒷통수를 맞은 느낌이 들었습니다.

개발자로 취업을 하고 정말 SI 프로젝트에 치이다보니깐 이론적인 부분에 대해 하나도 생각이 나지 않았습니다.

현재 오늘 기준으로 576일 된 시점에서 다시 공부하는 목적으로 정리해보도록 하겠습니다.

 

위 질문에 대한 답변

Session은 각 클라이언트 마다 하나씩 생성되어 제공합니다.

그렇기때문에 HttpSession.getAttribute("user")를 해도 서로 다른 값이 보이도록 되는 것입니다.

 

왜 Session은 각 클라이언트 마다 하나씩 생성될까?

먼저 Session이 뭔지 알아야합니다.


세션(session)은 컴퓨터 과학에서, 특히 네트워크 분야에서 반영구적이고 상호작용적인 정보 교환을 전제하는 둘 이상의 통신 장치나 컴퓨터와 사용자 간의 대화나 송수신 연결상태를 의미하는 보안적인 다이얼로그(dialogue) 및 시간대를 가리킨다. 따라서 세션은 연결상태를 유지하는것보다 연결상태의 안정성을 더 중요시 하게된다.
세션 수립은 연결 지향 통신을 수행하는데 기초적인 요구 사항이다. 또, 세션은 무접속 방식으로 전송하는 기본 단계이기도 하다. 그러나 단일 지향성 전송은 세션을 정의하지 않는다.[1]

출처 : 위키백과

 

위키백과의 말이 어렵습니다.

단순하게 말하면 클라이언트와 서버 간의 연결이 지속적으로 유지되는 상태 즉, 웹 사이트 탐색하는 시간을 의미합니다.

 

Session이 뭔지 알았습니다.

 

하지만 왜 Session은 각 클라이언트 마다 하나씩 생성되는지의 질문에 답을 얻기는 부족합니다..

 

더 나아가보겠습니다.

 

HTTP의 특성은 다음과 같습니다. 

1. HTTP는 무상태(Stateless) 프로토콜입니다.

2. 클라어인트와 서버가 요청과 응답을 주고 받으면 연결이 끊어집니다.

3. 클라이언트가 다시 요청하면 서버는 이전 요청을 기억하지 못합니다.

4. 클라이언트와 서버는 서로 상태를 유지하지 않습니다.

 

session의 특성은 다음과 같습니다.

1. 클라이언트가 처음 서버에 연결을 하면 어떤 하나의 Session ID가 생성됩니다.

2. 이 아이디는 고유한 아이디입니다.

3. 이 아이디를 통해서 서버는 아 이녀석이구나 하고 요청에 대한 응답을 하게됩니다.

 

 

즉, 클라이언트는 하나의 유일한 주민등록번호와 같은 것을 갖고 있는 것입니다.

이 주민등록번호를 통해서 동사무소에서 등본도 떼고 증명서도 떼고 하는 것이죠.

 

만약에 클라이언트 하나마다 생성되는 아이디가 아예 없다면??? 그렇다면 어떻게 될까요??

 

예를 들어 은행에 가서 돈 100억을 출금하려고 합니다.

 

은행원은 "어? 너가 누구세요?"

 

옆집 이재용 : "저는 이재용입니다"

 

은행원 : "아~ 이재용씨군요? 그럼 어디 이재용씨세요?"

 

옆집 이재용 : "삼성 이재용이요"

 

이때 또 다른 이재용씨가 나탑니다.

 

삼성 이재용 : "제가 진짜 삼성 이재용인데요?"

 

옆집 이재용 : "??? 제가 진짜 삼성 이재용이에요!!"

 

은행원 : "네?! 아니..누가..진짜...이재용이에요............???"

 

결국 식별할 수 있는 고유한 값이 없다면 요청에 대한 응답을 서버는 내릴 수가 없을 것 입니다.

 

이제 왜 Session은 각 클라이언트 마다 하나씩 생성되는지에 대한 답을 어느정도 알 것 같습니다.


정리

 

세션에서 식별이 가능한 고유값을 생성하고 서버는 그 값을 갖고 구분합니다.

그래서 사용자 A가 접속을 하든 B가 접속을 하든 다른 결괏값을 받을 수 있는 것입니다.

사실 이 과정에서 쿠키를 저장하고 서버에서 요청할 때 마다 고유 세션 아이디와 함께 쿠키를 전달하고 등의 내용은 빠졌습니다. 큰 개념만 생각할 수 있게 정리를 해봤습니다.

 

다음에는 쿠키에 대해서 정리하겠습니다. (귀찮..)

 

 

 

 

공부에 도움된 출처

: 인프런 - 모든 개발자를 위한 HTTP 웹 기본 지식

: stackoverflow.com/questions/3804209/what-are-sessions-how-do-they-work

 

What are sessions? How do they work?

I am just beginning to start learning web application development, using python. I am coming across the terms 'cookies' and 'sessions'. I understand cookies in that they store some info in a key va...

stackoverflow.com

: galid1.tistory.com/502

 

Web - cookie 와 session 분석 (servlet 예제)

session에 대해 알아보려고 합니다 cookie와 session 에 대해 알아보려고 합니다. cookie와 session 은 서버에서 이전에 요청한 클라이언트의 구분을 위해서 사용하는 것입니다. 이전의 클라이언트의 구분

galid1.tistory.com

: drsggg.tistory.com/388

 

면접 예상 질문 및 답변

2019.11.28 면접 예상 질문 및 답변 Q. 세션과 쿠키의 차이점은? A. 세션은 서버에 저장되는 값이며, 쿠키는 클라이언트에 저장되는 값입니다. Q. 본인이 만든 프로젝트는 톰캣을 내렸다가 올

drsggg.tistory.com

: velog.io/@godkimchichi/Java-18-Servlet-%EC%BF%A0%ED%82%A4-%EC%84%B8%EC%85%98

: jeong-pro.tistory.com/80

반응형

댓글4