관리 메뉴

한다 공부

[Web] Cookie, Session 본문

Dev/Web

[Web] Cookie, Session

사과당근 2023. 5. 13. 23:17

CSR(Client Side Rendering) 은 주로 REST API를 사용하며 JWT 방식으로 로그인을 구현한다

SSR(Server Side Rendering) 은 타임리프와 같은 템플릿엔진을 사용하며 쿠키 세션 방식으로 로그인을 구현한다

그리고 스프링을 사용한다면 Spring Security를 통해 비교적 쉽게 인증과 인가를 구현할 수 있다

 

이번 기회에 개념에 대해 정리를 하고자 한다.

 

 

웹 백엔드

부스트코스 무료 강의

www.boostcourse.org

 

 

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 인프런 | 강의

웹 애플리케이션 개발에 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. MVC 2편에서는 MVC 1편의 핵심 원리와 구조 위에 실무 웹 개발에 필요한 모든 활용 기술들을 학습할 수 있

www.inflearn.com

위 강의들을 참고하였다.


HTTP 프로토콜은 Stateless Protocol로, 상태 유지가 되지 않는다.

그래서 무엇을 했는지에 대한 정보 또한 없다.

즉, 클라이언트의 요청에 응답을 하고 나면 클라이언트와의 연결을 지속하지 않는 것이다.

 

로그인을 하고 로그인 상태를 유지하기 위해서는 상태 유지 기술이 필요하다.

그래서 상태 유지 기술인 쿠키세션을 사용하는 것이다.


쿠키

출처 - 쿠키런

쿠키는 유지해야할 정보를 사용자의 컴퓨터에 key-value 형식으로 저장한다.

따라서 공용 컴퓨터 등에서 사용하면 정보가 유출될 수 있다.

 

쿠키의 동작 방식은 다음과 같다.

1. 클라이언트가 서버에게 요청을 보낸다.

2. 유지해야할 정보가 있다면 서버는 해당 정보를 가지고 쿠키를 생성한다. (유지 시간 등)

3. 응답 결과에 쿠키가 포함되어 클라이언트에게 전달된다.

4. 쿠키를 받은 클라이언트는 앞으로 요청할 일이 생기면 쿠키를 포함해서 요청을 함께 보낸다.

5. 서버는 쿠키를 받아서 검사를 한다. 해당 사용자가 전에 접속했던 사용자인지, 유지해야하는 정보가 있는지 등을 검사한다.

 

쿠키는 name, value, path, maxage, expiry, version, domain...  과 같은 여러 정보를 저장한다.

하나의 쿠키는 4KB 크기로 제한되어있으며, 브라우저는 웹 사이트당 20개의 쿠키를, 모든 웹 사이트를 합쳐 최대 300개의 쿠기를 허용한다.

 

서버측에서 쿠키를 삭제할 수 없다.

클라이언트에게 삭제를 요청해야하므로, setMaxAge 함수를 사용해 삭제하고 싶은 쿠키의 유지 시간을 0(초)으로 만든 뒤 클라이언트에게 보내면 된다.


세션

세션은 유지해야할 정보를 클라이언트 별로 서버에 저장한다.

서버가 종료되거나 유효 시간이 지나면 사라진다.

 

세션의 동작 방식은 다음과 같다.

1. 클라이언트가 서버에게 요청을 보냈을 때, 유지해야하는 정보가 있다면 서버는 세션키를 만들어낸다.

2. 해당 세션키를 이용해 저장소를 생성한다. 이 저장소에는 유지해야하는 정보를 저장한다.

3. 해당 사용자의 저장소가 어디인지 나중에 요청이 들어오면 알아 내야하기 때문에... 세션키를 가지고 쿠키를 생성해내고, 이를 응답에 담아 클라이언트에게 보낸다.

4. 이후 클라이언트가 요청을 보낼 때, 요청에 세션키 정보를 저장한 쿠키를 함께 보낸다.

5. 서버는 클라이언트로 받은 요청의 쿠키를 활용해, 세션키 정보를 알아내고, 해당 사용자의 저장소를 찾아서 저장된 정보를 사용한다.

 

이때 세션의 정보를 담기 위해 생성되는 객체가 HttpSession 이라고 한다.

 

쿠키와는 다르게,

"클라이언트 요청 시 서버가 세션 id를 발급하고, 세션 객체를 만들고, 쿠키를 만드는 과정"을 거치는데

이러한 일들은 개발자가 newHttpSession하지 않아도 서버가 자동으로 생성해준다.

따라서, HttpSession session = request.getSession(); 을 통해 세션을 가져올 수 있다.

해당 메소드는, 서버에 생성된 세션이 있으면 해당 세션을 반환하고, 없으면 새롭게 세션을 생성하여 반환하는 메소드이다.

해당 메소드의 파라미터를 false로 전달할 경우, 생성된 세션이 있다면 해당 세션을 반환하고, 없다면 null을 반환한다.

 

세션은 클라이언트가 서버에 접속하는 순간 생성되고, 기본 유지 시간은 30분이다.

30분 이상 서버에 요청이 들어오지 않으면 자동으로 세션이 끊어진다.


스프링 시큐리티

로그인을 위해서는 자체적으로 세션을 체크하고, 인증과 인가를 구현해야 한다.

인증이란 로그인과 같이 사용자를 확인하고, 본인임을 인증하는 과정이다.

인가는 엑세스 권한과 관련된 것이다. 일반 사용자는 관리자만 볼 수 있는 게시글을 열람하지 못한다. 이러한 것이 인가와 관련된 것이다.

스프링 시큐리티는 인증 인가와 같이 보안 관련된 많은 옵션들을 지원해준다.

 

이러한 스프링 시큐리티를 통해 로그인, 로그아웃, 회원가입, 권한 부여 등의 기능을 구현할 수 있다.

스프링 시큐리티만 공부해야할 분량이 엄 ~ 청 많기 때문에 ...

스프링 시큐리티에 대해 더 깊게 공부해야겠다는 생각이 든다 ...

'Dev > Web' 카테고리의 다른 글

[Web] MySQL  (0) 2021.11.22
[Web] JavaScript  (0) 2021.11.09
[Web] Git  (0) 2021.11.02
[Web] CSS  (0) 2021.10.12
[Web] HTLM & Internet  (0) 2021.10.12