ABOUT ME

-

  • 다중 서버 환경에서 세션 관리
    WEB 2023. 4. 8. 15:12

    서버가 많은 요청을 수행함으로써 Scale out 방식으로 서버를 확장할 때 로드 밸런싱을 통해 부하 분산을 하는데 이때 발생하는 세션 불일치의 문제를 해결하는 방법을 알아보겠습니다.

    웹 애플리케이션은 HTTP 프로토콜을 사용하는데 HTTP는 무상태성(Stateless)의 특징을 가지기 때문에 서버는 클라이언트의 상태를 저장하지 않습니다. 그래서 로그인과 같이 상태를 저장해야 하는 로직 같은 경우 쿠키와 세션을 이용할 수 있습니다.

     

    쿠키와 세션으로 상태 유지

    로그인 요청할 때

    클라이언트가 로그인 요청을 하면 서버에서는 세션 id를 생성하고 서버가 가진 로컬 세션 저장소에 유저정보와 함께 저장합니다.

    응답에 Set-Cookie 헤더로 세션 id를 담아 클라이언트로 보내면 브라우저가 쿠키를 저장합니다.

    로그인 요청시 쿠키와 세션

     

    로그인 이후 요청할 때

    로그인 후 세션 정보가 필요한 요청에서 브라우저는 자동으로 쿠키를 헤더에 담아 요청합니다.

    물론 쿠키의 도메인과 path가 일치하는 요청일 경우의 예입니다.

    서버는 쿠키로 들어온 세션 id를 세션 저장소에서 찾아 로그인을 한 사용자인지 확인을 하고 로그인 상태를 유지할 수 있습니다.

    로그인 이 후 요청시 쿠키와 세션

     

    다중 서버일 때는 어떻게 할까?

    로드밸런스로 인해 첫 번째 서버에서 로그인을 하고 이후에 요청은 두 번째 혹은 세 번째 서버에서 하게 된다면 다시 클라이언트의 상태에 대해 모르는 상황이 발생합니다.

    다중 서버일 때 세션 불일치 문제

     

    세션 불일치 해결 방법

    1. sticky session

    sticky session은 첫 요청을 처리한 서버로 모든 요청이 가도록 고정시키는 방법입니다.

    모든 요청을 특정 서버에 고정시켜 세션 불일치 문제를 해결할 수 있습니다.

    하지만 로드밸런스가 부하 분산을 하는 장점이 사라져 특정 서버에 과부하가 발생할 수 있습니다.

    그리고 해당 서버에 장애가 발생 시 다른 서버에 요청을 하므로 다시 로그인을 해야 하는 단점이 있습니다.

    sticky session

     

    2. 세션 클러스터링(session clustering)

    클러스터링이란 여러 대의 컴퓨터들이 연결되어 하나의 시스템처럼 동작하도록 하는 것을 말합니다.

    세션 클러스터링은 여러 대의 서버가 동일한 세션으로 처리할 수 있도록 하는 것입니다.

    톰캣에서는 all-to-all 세션 복제와 primary-secondary 세션 복제를 할 수 있습니다.

     

    2-1. all-to-all session replication

    all-to-all 세션 복제는 하나의 세션 저장소가 변경되면 다른 모든 세션 저장소에 복제가 됩니다.

    이렇게 되면 어느 서버에 접속을 해도 모두 같은 세션을 복제했기 때문에 세션 불일치 문제가 해결됩니다.

    하지만 각각 동일한 세션을 저장하므로 많은 메모리를 필요로 합니다.

    그리고 세션 복제가 발생할 때마다 네트워크 트래픽이 증가해 성능 저하가 발생할 수 있습니다.

    all-to-all session replication

     

    2-2. primary-secondary session replication

    primary-secondary 세션 복제는 all-to-all 방식이 많은 메모리를 필요로 하는 문제를 해결하기 위해 고안되었습니다.

    primary 서버는 secondary 서버에 세션을 복제하고 나머지 proxy 서버는 sessionId만 복제해 메모리 사용을 줄입니다.

    하지만 proxy 서버에 세션 요청 시 sessionId에 해당하는 세션 정보를 다시 primary 서버에 요청해야 하는 단점이 있습니다.

    primary-secondary session replication

    3. 세션 스토리지(session storage)

    세션 스토리지는 서버가 가지고 있는 로컬 세션 저장소를 사용하지 않고 별도의 저장소를 사용하는 것을 말합니다.

    서버가 확장이 돼도 별도의 저장소와 연결해 관리한다면 세션 불일치 문제를 해결할 수 있습니다.

    그리고 하나의 서버에 장애가 발생해도 다른 서버가 대신 세션 저장소로 처리하기 때문에 문제없이 사용할 수 있습니다.

    세션 저장소 자체에 문제가 발생할 경우 서비스가 불가하므로 복제해서 운영할 필요가 있고, 운영시 세션 저장소를 위한 환경을 별도로 구축해야 하는 단점이 있습니다.

    session storage

    반응형

    'WEB' 카테고리의 다른 글

    OAuth(w. 카카오 로그인)  (0) 2023.03.08
    CORS(Cross-Origin Resource Sharing)  (0) 2023.02.16

    댓글

Designed by Tistory.