Java

Java에서 스티키 세션 제거하기 | Couchbase Spring 세션

고정 세션 는 특정 사용자의 요청을 해당 사용자의 세션이 있는 동일한 서버로 리디렉션하는 것을 의미합니다. 서버에 장애가 발생하면 해당 서버에 연결된 모든 사용자의 세션이 손실되므로 안티 패턴으로 간주됩니다.

사용자와 서버 간의 연결은 일반적으로 로드 밸런서를 통해 구성되며, 다음과 같은 간단한 로드 밸런싱 전략이 사용됩니다. 라운드-robin 는 헤비 유저가 모두 같은 노드에 있을 수 있기 때문에 요청을 균등하게 분산시키기에 충분하지 않은 경우가 많습니다. 스티키 세션을 피할 수 있는 방법은 여러 가지가 있지만, 애플리케이션이 사용자의 데이터를 HTTPSession에 저장하는 경우 상당한 리팩토링 없이 사용할 수 있는 옵션은 다소 제한적입니다.

이 문제에 대한 한 가지 빠른 해결 방법은 서버의 메모리를 사용하는 대신 데이터베이스에 세션을 저장하는 것입니다. 이 시나리오에서는 어떤 노드가 요청을 수신하든 데이터 저장소에서 직접 사용자의 세션을 로드합니다. 이 접근 방식은 컨테이너별 솔루션보다 간단하며 데이터베이스의 다른 모든 항목처럼 세션을 쿼리할 수 있습니다.

내부 키-값 엔진을 사용하고 내부 캐시 계층을 활용하여 최근에 사용한 세션을 메모리에 보관하기 때문에 이 시나리오에 특히 적합한 솔루션입니다. 실제로는 대규모로도 잘 작동하는 솔루션이라는 뜻입니다. 이것이 바로 저희가 커뮤니티 지원을 추가하는 이유입니다. 봄 세션:

카우치베이스 봄 세션 를 사용하면 데이터베이스에 저장하여 클러스터된 세션을 쉽게 지원할 수 있으며 개발자 입장에서는 완전히 투명합니다. 다음 종속성을 추가하기만 하면 됩니다:

를 추가한 다음 메인 클래스에서 @EnableCouchbaseHttpSession 어노테이션:

를 입력하면 끝입니다! 이제부터는 Spring이 자동으로 HTTPS세션을 Couchbase에 저장합니다:

기본적으로 세션은 데이터베이스에 ""와 같은 유형의 문서로 저장됩니다.세션“:

그러나 유형 속성의 이름, 유형 값 및 세션 지속 시간을 변경할 수 있습니다:

 

사용자 세션 쿼리하기

모든 세션의 데이터는 다음과 같은 어트리뷰트에 바이너리로 저장됩니다. _attr:

Spring은 세션에 어떤 객체 유형이 있는지 알지 못하므로 사람이 읽을 수 있는 형식으로 변환할 수 있는 쉬운 방법이 없습니다. 속성을 설정하여 이 제한을 극복할 수 있습니다. keepStringAsLiteral 에서 사실과 같이 EnableCouchbaseHttpSession 어노테이션:

keepStringAsLiteral 가 알려줄 것입니다. 카우치베이스 봄 세션 를 사용하여 모든 세션의 문자열 속성을 문서 내의 최상위 프로퍼티로 저장할 수 있습니다. 예를 들어, 세션에 직접 인스턴스를 추가하는 대신 잭슨의 오브젝트 맵퍼:

그런 다음 세션 카트를 읽어야 할 때 다시 객체로 변환합니다:

이렇게 하면 세션에서 데이터를 추가/제거/업데이트해야 할 때 약간의 추가 작업이 추가되지만 반대로 세션을 쿼리할 수 있게 됩니다. 데이터베이스에서 문서가 어떻게 표시되는지는 다음과 같습니다:

여전히 _att 어트리뷰트를 사용할 수 있습니다. 하지만 이제 객체에 대한 키입니다, 는 이전 예제에서 세션에 추가한 객체와 정확히 일치합니다.

이제 세션을 쿼리해 보겠습니다, N1QL 라는 함수가 있습니다. DECODE_JSON를 사용하여 JSON으로 인코딩된 문자열을 객체로 언마샬링할 수 있습니다:

참고: 프로덕션 환경에서는 쿼리 시점에 디코딩하는 대신 디코딩된 오브젝트로 인덱스를 생성하는 것이 좋습니다.

Couchbase 스프링 세션에 대해 자세히 알아보려면 다음을 확인하세요. 튜토리얼

궁금한 점이 있으면 언제든지 다음 주소로 문의해 주세요. 데니스브로사

이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

작성자

게시자 데니스 로사, 개발자 옹호자, 카우치베이스

데니스 로사는 독일 뮌헨에 거주하고 있는 카우치베이스의 개발자 옹호자입니다. 그는 소프트웨어 엔지니어로서 탄탄한 경력을 쌓았으며 Java, Python, Scala, Javascript를 유창하게 구사합니다. Denis는 검색, 빅 데이터, AI, 마이크로서비스 및 개발자가 아름답고 빠르고 안정적이며 확장 가능한 앱을 만드는 데 도움이 되는 모든 것에 대해 글을 쓰는 것을 좋아합니다.

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.