고가용성 및 부하분산 구성을 위해 WAS 이중화가 필요하며, 다중화된 WAS를 운영하기 위해서는 엘라스틱캐시(Redis)를 이용한 세션 클러스터링이 자주 언급된다. 세선 클러스팅을 알아보기 앞서 세션이 어떤 역할인지 먼저 알아본다.
HTTP는 stateless(상태 비 저장) 프로토콜로 이전에 통신한 내용으로 다음 통신에 영향을 주지 않는다. 그저 입력에 따른 응답만 한다는 의미. 이 특징은 정적 페이지(Html, 이미지 등)에 대한 요청, 응답 시에 특징과 같다.
위 정적 페이지와 달리 동적 페이지는 입력한 값에 따른 연산 또는 DB연동한 테이터 처리를 수행하며, 이런 동적 페이지를 통해 로그인, 회원가입 등의 기능을 구현한다. 이때 정적 페이지 구성 시 기존 서보와 통신한 내용을 stateful(상태 저장)하게 유지할 필요가 있다.
서버는 Memory 혹은 파일 형태의 세션 데이터를 저장하고, 어떤 클라이언트가 해당 세션의 주인인지 식별하기 위해 클라이언트에게 Set-Cookie 헤더를 전송하여 클라이언트 브라우저에 세션ID 등을 Cookie로 저장하도록 한다.
정리하면, session은 서버에서 저장되는 정보 / cookie는 클라이언트(사용자의 브라우저)에 저장되는 세션에 대한 정보
클라이언트에서 서버로 최초 통신이 이뤄지는 경우 앞서 설명한 부분과 같이 서버는 클라이언트로부터 전송된 Cookie정보가 없는 것을 확인하고 Set-Cookie 헤더를 보낸다. 클라이언트는 다음 요청부터 브라우저에 저장한 쿠키를 헤더에 포함하여 서버로 전송하고 서버에서는 해당 쿠키에 매칭되는 세션이 만료되지 않았다면 다시 Set-Cookie 헤더를 전송하지 않는다.
WAS(tomcat)이 다수 구성된 경우 발생하는 세션 문제‼
만약 사이트에 접속할 때 메인 페이지가 새로고침될 때마다 접속하는 서버가 달라지면 계속해서 로그인이 풀리는 현상이 발생한다. 이때 redis를 사용하여 tomcat 세션 저장소로 활용하기도 한다.
🔎 로드 밸러싱 (Load Balancing)
클라이언트로부터 오는 요청을 여러 서버에 분산시켜주는 것으로 대용량 트래픽을 장애 없이 처리하기 위해 여러 대의 서버에 적절히 트래픽 분배하는 것이다.
🔎 세션 클러스터링 (Session Clustering)
2대 이상의 WAS를 이용하여 로드밸런싱된 경우 세션을 공유하여 대체된 WAS에도 동일한 세션을 관리하도록 하는 것이다.
'⚙️ 개발 > Spring' 카테고리의 다른 글
로그인 인증 (Session/Cookie, Token, OAuth, SNS) (0) | 2024.06.18 |
---|---|
@Configuration (0) | 2024.06.14 |
@RequiredArgsConstructor (0) | 2024.05.08 |
@Autowired (0) | 2024.05.08 |
Validation (0) | 2024.05.02 |