티스토리 뷰
HTTP 프로토콜
- Connectionless : 클라이언트가 서버에 요청을 하고, 서버가 클라이언트에게 응답을 보내면 접속을 끊는다.
- Stateless : 통신이 끝나면 상태 정보를 유지하지 않는다.
Connectionless 하고 Stateless 한 HTTP 프로토콜을 사용하면서 Server가 Client를 식별할 수 있는 방법으로 쿠키와 세션을 사용하게 되었습니다. 쿠키와 세션을 사용하지 않으면 로그인 상태 정보를 유지하지 않아서 페이지를 이동할 때마다 로그인 해야합니다.
쿠키(Cookie)
- 상태정보를 "사용자의 브라우저"에 저장하는 방식
- 이름, 값, 만료 날짜, 경로 정보가 들어있습니다.
- 보안에 취약합니다. 사용자의 컴퓨터를 만질 수 있다면 누구라도 쿠키에 입력된 값을 확인할 수 있습니다.
- 일정 시간동안 데이터를 저장할 수 있어서 로그인 상태를 유지하거나 사용자 정보를 일정 시간 동안 유지해야 하는 경우에 주로 사용됩니다.
* 사용방법
Response Header의 Set-Cookie 속성을 사용하면 클라이언트에 쿠키를 만들 수 있습니다.
만들어진 쿠키는 사용자가 요청하지 않아도 브라우저가 매번 Request Header에 넣어서 서버에 전송하게 됩니다.
* 생성주기
1. 사용자가 처음으로 페이지를 요청 할 경우 웹서버에서 쿠키를 생성합니다.
2. 생성된 쿠키는 페이지를 돌려줄때 HTTP 헤더에 포함하여 사용자에게 돌려줍니다.
3. 클라이언트는 넘겨받은 쿠키를 관리하고 있다가, 다음번 요청때 쿠키를 함께 전송합니다.
4. 서버에서는 쿠키에 있는 정보를 읽어 이전 상태정보를 확인합니다. 확인 후 정보를 변경할 필요가 있을때 쿠키를 업데이트하여 변경된 쿠키를 돌려줍니다.
5. 클라이언트의 브라우저에서는 브라우저를 닫을 때 쿠키를 파괴하고, 만료시간 여부에 따라 PC에 파일로 저장합니다.
* 사용 예
- 쇼핑몰 장바구니
- 사이트에서 로그인 ID나 비밀번호를 저장하시겠습니까?
세션(Session)
- 상태정보를 "웹서버"에 저장하는 방식
- 쿠키에서 저장하지 않는 중요한 데이터를 저장할 때 주로 쓰입니다.
- 각 클라이언트에게 고유ID를 부여하여 각각의 클라이언트를 식별합니다.
* 동작방식
1. 사용자(member A)가 로그인 페이지에서 ID와 패스워드를 입력후 로그인버튼 클릭합니다.
2. 서버에서는 사용자가 보낸 정보를 확인하고, 존재하는 사용자인 경우 유일한 세션ID(클라이언트 식별자)를 생성합니다. 이 세션ID와 사용자 ID 매핑정보를 서버메모리에 저장합니다.
3. 세션ID를 쿠키로 저장하여 클라이언트에게 돌려줍니다.
4. 그 이후 요청할 때 마다 서버는 Request Header의 쿠키정보(세션ID)를 확인하고 세션ID와 매핑되는 사용자(member A)로 인식합니다.
* 단점 및 보안
- 서버에 저장되기 때문에 서버에서 처리하는 부하와 저장 공간을 필요로 합니다.
- 세션을 사용하더라도 클라이언트의 쿠키에 저장된 세션ID를 다른 사람이 가로채서 자신의 세션ID를 변조해서 사용할 수 있습니다. 세션을 사용하는 것 만으로는 보안에 취약하므로 IP정보를 함께 사용하거나 쿠키값 변조를 확인하는 방법 등 보완하여 사용해야합니다.
** 참고: 사용자가 매우 많은 웹서비스에서는 서버의 부하와 메모리 문제로 인해 사용자 정보를 쿠키를 통해 저장하고 다른부분에서 보안성을 강화하는 경우도 있습니다.
'Web' 카테고리의 다른 글
| JWT Token (0) | 2018.01.22 |
|---|---|
| OAuth 2.0 (0) | 2018.01.10 |
| REST / RestFul (0) | 2018.01.05 |
- Total
- Today
- Yesterday
- 티스토리 소스코드
- SpringBoot #스프링부트 #STS #이클립스
- 인텔리제이 학생인증
- KeepAlive
- 기술면접
- 아파치톰캣
- 쿠키와세션
- HTTP method
- 스프링부트
- sns로그인
- apache 설정
- Apache튜닝
- claim토큰
- 인텔리제이
- JWT
- OAuth
- IntelliJ Download
- 티스토리 플러그인
- jwt인증
- max Client
- 인텔리제이 무료설치
- HTTP프로토콜
- 구글로그인
- SpringBoot
- authentication
- 페이스북로그인
- mod_deflate
- Authorization
- IntelliJ
- 대용량트래픽