단서해
개발일지
단서해
전체 방문자
오늘
어제
  • 분류 전체보기 (29)
    • Project (5)
    • JAVA (2)
    • Server (11)
      • Info (4)
      • 작동 원리 예상 (4)
      • Question (1)
      • JPA (1)
    • Infra (2)
    • Trouble Shooting (8)

블로그 메뉴

  • 홈
  • 글쓰기
  • 관리

공지사항

인기 글

태그

  • Lettuce
  • REQUIRES_NEW
  • 성능 개선
  • gradle-wrapper.properties
  • JPA
  • Java
  • 동시성
  • @configuration
  • OAuth2.0
  • Reflection
  • thymeleaf
  • 분산락
  • yml
  • pinpoint
  • error
  • 무중단 배포
  • gradlew
  • flutter
  • Github Actions
  • 트랜잭션
  • Intellij
  • CodeDeploy
  • @Component scan
  • 파일 경로
  • Fileter
  • 비동기
  • gradle
  • enhanced for
  • docker
  • Spring

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
단서해

개발일지

Server

[Spring] 서블릿 HTTP 세션

2022. 8. 31. 21:08

서블릿에서 HTTP 세션을 어떠한 방식으로 만들어줄까?

 

하나의 HTTP 요청이 들어왔을 오고 이후 로직에서 세션 생성 요청이 있다면, 서블릿 컨테이너에서 세션을 만들고JSessionId를 부여해준다.
이렇게 만들어진 JSessionId 만 알고 있다면 만들어진 세션에 접근하여 원하는 정보들을 저장하거나 삭제할 수 있다.

 

그리고 요청이 끝난 뒤에도 해당 세션을 서블릿 컨테이너에서 관리하고 있다가 JSessionId를 쿠키로 가진 HTTP 요청이 들어올 경우, 서블릿 컨테이너에서 JSessionId 로 가지고 있는 세션들 중 일치하는 세션ID가 있는지 확인한다.
만약 일치하는 세션이 있다면 해당 요청에서 접근할 수 있도록 설정해준다.

 

위와 같은 방식으로 서블릿은 세션을 편하게 생성하고 사용할 수 있게끔 만들어 놓았다.

 

하지만 세션 방식에는 문제점이 있다.

첫번째는 메모리 문제이다.
서블릿 HTTP 세션의 경우 요청마다 세션을 생성할 수 있기에, 만약 설정을 잘못하거나 제대로 세션을 지워주지 않는다면 메모리 고갈이 일어날 수 있다. 그리고 세션을 제대로 지워주게 설정했더라도 세션의 라이프 타임이 길게 설정되어 있다면 이 상황에도 메모리 고갈이 일어날 수 있다.

두번째는 서버간 세션정보 공유 문제이다.
만약 서비스가 여러 개의 서버를 운영하여 부하를 줄여나가려고 할 때 문제가 될 수 있다. 세션의 경우 서블릿 컨테이너에서 관리되기 때문에 서버마다 기억하고 있는 세션의 정보가 다르다.
따라서 사용자 입장에서는 이전과 다른 서버로 요청이 갈 때마다, 세션을 만드는 인증 작업을 다시 해야하는 불편함이 있을 수 있다.

저작자표시 (새창열림)
    단서해
    단서해

    티스토리툴바