일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 안정 정렬
- 2티어 아키텍처
- 불안정 정렬
- 3티어 아키텍처
- javascript
- UTXO
- NoSQL
- solidity
- npm
- #유니티
- Private Blockchain
- ES6 모듈
- Relational Database
- 블록체인
- SQL
- caverjs
- CLI
- skip ci
- react
- short-circuiting
- 텍스트 가운데 정렬
- 명시도
- IP
- Factory Functions
- Factory 함수
- #1인게임개발
- CSS
- Hybrid Blockchain
- http 모듈
- CSS Specificity
- Today
- Total
짹뚜 스튜디오
[네트워크] Session (세션) 본문
HTTP의 특징 중 하나는 Stateless (무상태성)이다. 즉 서버에서 하나의 HTTP 요청을 받고 응답을 보내면 서버는 해당 클라이언트에 대한 정보를 가지고 있지 않다. 그래서 HTTP 요청을 할 때마다 클라이언트가 누구인지를 알려줘야 한다. 이러한 방법 중 하나가 Session이다.
Session
유저가 ID와 비밀번호로 임의의 웹사이트에 로그인을 시도하면 해당 ID와 비밀번호가 서버로 보내진다. 그리고 서버에서는 ID와 비밀번호를 확인해서 비밀번호가 맞다면 Session DB에 해당 유저를 생성한다. Session DB에는 Session ID도 함께 저장이 된다. 그리고 서버에서 응답을 할 때 Session ID를 쿠키로 보내져서 클라이언트에 저장된다.
다음 HTTP 요청 때 Session ID가 들어있는 쿠키가 자동으로 서버에 보내지면서 서버는 쿠키에 Session ID가 있는지를 먼저 확인한다. 만약 있다면 해당 Session ID를 가지고 Session DB에서 확인을 해서 요청하는 유저가 누구인지를 확인한다. 그리고 해당 유저에 대한 정보들을 가공해서 응답으로 보내준다.
쿠키를 사용하면 모든 정보가 쿠키에 담겨있어야 하지만, Session을 사용하면 모든 중요한 정보는 클라이언트가 가지고 있는 게 아니고 서버가 가지고 있다. 클라이언트가 가지고 있는 것은 Session ID 뿐이다. 그래서 쿠키를 사용할 때보다 보안이 좋다.
유저가 로그아웃을 하게 되면 다음과 같은 작업을 하면 된다.
- Session DB에서 정보를 삭제한다.
- 쿠키의 Session ID를 무효한 값으로 설정한다.
Session을 사용하려면 Session ID를 저장할 데이터베이스가 필요하다. 그래서 유저가 많아질수록 데이터베이스 리소스가 많이 필요하게 된다.
장점
- 서버에서 로그인 상태 확인이 쉽다. 그래서 강제 로그아웃같은 기능을 구현할 수 있다. Session ID가 탈취당했을 때도 DB에서 해당 유저의 Session 정보만 삭제하면 된다.
- 서버 측에서 유저의 정보를 관리하기 때문에 상대적으로 안전한다.
단점
- 유저들의 Session ID를 저장할 데이터베이스를 따로 관리해야 한다.
- Session이 서버에 저장되기 때문에 사용자가 많아지면 과부하가 걸릴 수 있다.
'개발 공부 > 네트워크' 카테고리의 다른 글
[네크워크] Token (토큰) (0) | 2022.02.28 |
---|---|
[네트워크] TCP vs UDP (0) | 2022.02.22 |
[네트워크] Internet Protocol (0) | 2022.02.22 |
[네트워크] Cookie (0) | 2022.02.17 |
[네트워크] HTTP (0) | 2022.02.03 |