[스프링부트와 AWS로 혼자 구현하는 웹 서비스] 세션 저장소로 DB 이용하기

세이라·2023년 8월 5일
0

스터디를 통해 스프링부트와 AWS로 혼자 구현하는 웹 서비스(저자 이동욱) 서적을 공부하는 중입니다.

공부/실습한 내용을 정리한 포스팅입니다.
책에 모르는 부분이 있으면 구글링하거나 챗gpt에 물어봐서 보충하였습니다.
(아직 초보라 모르는 부분이 많아 이것저것 다 적었습니다.)

참고한 사이트 출처는 포스팅 맨 하단에 적었습니다.

세션 저장소

톰캣 세션

  • 기본적인 방식
  • 톰캣(WAS)에 세션 저장. 2대 이상의 WAS가 구동되는 환경에서는 톰캣들 간의 세션 공유를 위한 추가 설정이 필요.

MySQL 같은 DB

  • 여러 WAS 간의 공용 세션을 사용할 수 있는 가장 쉬운 방법.
  • 로그인 요청마다 DB IO가 발생하여 성능상 이슈 발생.
  • 로그인 요청이 많이 없는 백오피스, 사내 시스템 용도에서 사용.

Redis, Memcached 같은 메모리 DB

  • B2C 서비스에서 많이 사용.
  • 실제 서비스를 사용하기 위해서는 Embedded Redis와 같은 방식이 아닌 외부 메모리 서버 필요.

※ Embedded Redis VS 외부 메모리 서버

  • Embedded Redis : 애플리케이션과 함께 동작하는 내장형 Redis 서버. 따라서, 애플리케이션을 시작하거나 중지할 때 Redis 서버도 함께 시작되거나 중지.
  • 외부 메모리 서버 : 애플리케이션과 독립적으로 동작하는 Redis 서버.
  • 개발 및 테스트 환경에서는 Embedded Redis 사용. 배포 및 운영환경에서는 외부 메모리 서버 선택.

세션 저장소로 DB 사용

  1. build.gradle에 의존성 추가.
implementation('org.springframework.session:spring-session-jdbc')
  1. application.propeties에 세션 저장소를 jdbc로 선택하도록 코드 추가.
spring.session.store-type=jdbc
  1. 로그인 후 h2-console에서 SPRING-SESSION 테이블 데이터 확인.

spring-session-jdbc : Spring Framework에서 세션 정보를 관리하고 외부 영구 저장소에 저장할 때 사용하는 의존성.
Spring Session은 스프링 기반 웹 애플리케이션에서 세션 관리를 지원하는 프로젝트.
spring-session-jdbc는 Spring Session의 구현 중 하나로, 세션 데이터를 JDBC를 이용하여 DB에 저장. 이 의존성을 추가할 시, 세션데이터를 RDB에 저장할 수 있음.

※ 지금 쓰고 있는 DB가 H2라 스프링 재시작 시 H2도 재시작하여서 세션이 풀림. 이후 AWS 배포 시 AWS의 DB 서비스인 RDS 사용하여 세션 풀리지 않음.


참고 설명

  • 메모리 DB : 데이터를 메모리에 저장하고 처리하는 DB 시스템. 일반적인 DB는 디스크나 다른 영구 저장소에 데이터 저장. 그에 반해, RAM에 저장하여 데이터 접근속도고 빠름. 단, 서버 종료 시 데이터가 모두 사라져, 일시적으로 사용되는 데이터나 캐시에 적합.
  • 메모리 DB는 데이터 영속성 보장을 하지 않아, 외부 영구 저장소를 사용하여 세션 데이터를 주기적으로 저장.
  • AWS : Amazon Web Services 약자. 아마존 닷컴에서 제공하는 클라우드 컴퓨팅 플랫폼 및 서비스. 기업 및 개인이 인터넷을 통해 컴퓨팅 리소스나 다양한 기술 서비스를 빌리거나 임대하는 형태의 클라우드 컴퓨팅 환경 제공. 더 이상 자체적으로 서버와 인프라를 구축하고 유지 관리할 필요 없음.
  • AWS의 RDS : RDB를 쉽게 배포, 운영 및 확장할 수 있도록 도와주는 서비스. DB 관리 작업에 시간을 투자하지 않고도 안정적이고 확장 가능한 RDB 쉽게 설정 가능. 백업, 소프트웨어 패치, 모니터링과 같은 작업을 자동으로 처리해주며, 부하에 따라 자동으로 DB용량을 확장. 또한, 보안 기능 제공도 제공.
  • RDS를 사용하면 웹 애플리케이션과 DB 서버를 따로 운영하는 것과 같음. AWS의 RDS를 사용하면, DB 서버를 RDS로 대체. DB를 별도의 서버로 구성 후 AWS가 이를 관리해주는 형태.

0개의 댓글