티스토리 뷰

쿠키란?

세션을 알기 위해선 먼저 쿠키(Cookie) 가 뭔지 알아야 한다.

쿠키는 크게 두가지 용도로 사용된다.

  1. 웹 서버가 사용자의 브라우저에 저장하여 서버에 요청할 때 전달하는 텍스트 파일
  2. 방문 기록등 브라우저에서 사용했던 정보들이 저장된 텍스트 파일

이 포스팅에서 주로 설명할 내용은 1번에 관한 내용이다.

서버에서 요청에 대한 응답 값으로 쿠키를 함께 보내줄 수 있다.
이 쿠키는 사용자의 브라우저에 저장된다. 그리고 이후 서버에 요청을 보낼 때 마다 이 쿠키를 함께 실어서 보낸다. 그러면 서버에서는 쿠키에 담긴 정보를 통해 여러가지 비즈니스 로직을 수행할 수 있다.

쿠키가 가장 많이 사용되는 예시는 로그인 이다.
사용자가 로그인에 성공하면 서버에서는 로그인에 성공했다는 의미로 쿠키 를 만들어 사용자에게 보낸다.
사용자는 이후 인증이 필요한 요청이 있을 때 쿠키 를 요청에 실어 함께 보내면, 서버에서는 쿠키 가 있음을 확인하고 해당 유저의 접근을 허용한다.

(출처 : https://chrisjune-13837.medium.com/web-쿠키-세션이란-aa6bcb327582)

쿠키의 단점

하지만 쿠키에는 치명적인 단점이 있다.

바로 위조, 변조 가 가능하다는 점이다. 누구든지 쿠키에 접근하여 쿠키의 정보를 바꿔버릴 수 있다.
만약 쿠키에서 사용자의 id값을 저장하고 있다면, 쿠키의 id값을 임의로 변경하였을 때 전혀 다른 유저의 인증권한을 획득하는 문제가 발생할 수 있다. 이는 아주 치명적인 결함이다.

따라서, 정상적인 로그인 인증 로직을 수행하기 위해서는 다른 방법을 사용해야 한다.
그 방법 중 하나가 바로 오늘 소개할 세션 방법이다.

세션이란?

앞서 설명한 쿠키는 브라우저 측에 저장되는 정보였다.
반면 세션은 서버에 저장되는 정보이다. 서버측에서 유저에 대한 정보를 가지고 있다.

세션은 다음과 같은 형태로 만들 수 있다.

Map<String, Object> session = new HashMap<>();

즉, (Key,Value) 형태로 저장되게 된다.

Key에는 세션의 ID가 저장되게 된다. Key값은 서로 중복되지 않는 랜덤한 문자열이 되야 한다.

Value에는 해당 세션ID에 해당하는 유저 정보가 저장된다. 유저 id 등이 저장될 수 있다.

이제 세션을 사용한 로직은 다음과 같이 변한다.

로그인 : 로그인 성공 -> 서버에 세션 정보 생성 -> 세션ID를 쿠키 담아 클라이언트에 응답

이후에는 인증이 필요한 로직에 쿠키를 담아 요청하면 쿠키값을 통해 세션정보와 매핑하여 일치하는 정보가 있을 때만 이후 로직을 수행할 수 있게한다. 이렇게하면 쿠키의 위, 변조 문제를 해결할 수 있다.

서블릿에서의 세션 사용

위에서 만드는 것 처럼 직접 세션을 만들 수도 있다.

하지만 서블릿에 존재하는 HttpSession 을 이용하면 좀더 생산성 있는 개발이 가능하다.

다음은 스프링에서의 예시이다.

@PostMapping("/login")
public String login(HttpServletRequest request) {
    HttpSession session = request.getSession();
}  

이후에 세션에 값을 저장할 때는 session.setAttribute 와 꺼낼 때는 session.getAttribute 를 사용하면 된다.

또한 request.getSession(); 를 사용할때 파라미터로 true 혹은 false 를 넣을 수 있다.
기본값은 true 이며 만약 세션 정보가 없다면 세션 정보를 생성하겠다는 의미이다.

false 로 설정되어 있으면 세션 정보가 없으면 null 을 반환한다.
기본값이 true 이므로 세션을 생성할 필요가 없을 경우에는 false 옵션을 줘서 불필요한 메모리 낭비를 줄이자.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함