pile·
백엔드·티몬티몬·

Couchbase Spring data repository 적용기(3)

티몬이 CouchbaseTemplate으로 직접 질의하던 로직을 Spring Data Repository로 옮긴 연재의 마지막 3부다. Repository에 사용자 정의 기능을 끼워 넣어 Couchbase의 증분값 호출을 간편하게 만드는 방법과 그때 지켜야 할 이름 규칙을 다룬다. 마지막에 도입 후의 장점과 아쉬운 점을 정리한다.

핵심 포인트
  • Spring Data는 객체 매핑을 추상화해 저장소마다 접근 계층을 직접 구현하지 않아도 되게 해준다.
  • Couchbase의 counter는 오라클 시퀀스 같은 자동 증가 기능을 한다.
  • 기존에는 템플릿에서 버킷을 직접 꺼내 counter를 호출하고 있었다.
  • 사용자 정의 인터페이스와 구현 클래스를 만들어 도메인 Repository가 상속하면 그 메서드를 그대로 쓸 수 있다.
  • 구현 클래스 이름은 반드시 Repository 이름 뒤에 Impl을 붙여야 자동 탐색에 걸린다.
  • 접미사를 바꾸고 싶으면 설정으로 지정할 수 있다.
상세 정리
  • 연재 구성: 1부는 기본 CRUD를 Repository 상속으로 대체하는 내용, 2부는 직접 만들던 뷰 질의를 메서드로 옮기는 내용, 3부가 증분값 호출이다.
  • 기존 방식: 영수증 저장소의 카운터 조회 메서드가 CouchbaseTemplate에서 버킷을 얻어 counter를 부르는 형태였다.
  • 옮기려는 이유: 같은 동작을 Spring Data Repository 위에서 쓰고 싶었다.
  • 확장 지점: Spring Data는 사용자가 직접 구현한 기능을 Repository에 추가할 수 있게 지원한다.
  • 구현 1 인터페이스: 카운터를 반환하는 메서드 하나를 가진 인터페이스를 따로 정의한다.
  • 구현 2 클래스: 그 인터페이스를 구현하며 CouchbaseTemplate을 주입받아 버킷의 counter를 호출하고 값을 꺼내 반환한다.
  • 구현 3 상속: 도메인 Repository가 기본 Repository와 함께 그 사용자 정의 인터페이스를 함께 상속한다.
  • 사용: 이후에는 Repository에서 카운터 메서드를 바로 호출해 증분값을 얻을 수 있다.
  • 검증: 카운터를 두 번 연속 호출해 나중 값이 더 큰지 확인하는 테스트를 붙였다.
  • 이름 규칙: 구현 클래스는 도메인 Repository 이름에 Impl을 붙인 형태여야 한다.
  • 규칙의 이유: 네임스페이스 설정을 쓰면 지정한 패키지 아래를 자동으로 훑어 사용자 기능 구현체를 찾는데, 그 탐색이 접미사를 기준으로 하기 때문이다.
  • 대안: 다른 접미사를 쓰고 싶으면 별도 설정 값으로 바꿀 수 있다.
  • 도입의 장점 1: Repository 인터페이스에 메서드만 정의하면 되는 간편함이 있다.
  • 도입의 장점 2: 메서드 이름만으로 어떤 질의인지 유추할 수 있어 가독성이 좋다.
  • 아쉬운 점 1: Repository를 충분히 활용하려면 design document 이름과 엔티티, 뷰의 관계를 초기 설계 단계부터 고려해야 한다.
  • 아쉬운 점 2: Stale 옵션처럼 뷰 질의를 세세하게 제어할 수 없다.
왜 읽나Couchbase를 Spring Data로 감쌌는데 시퀀스나 버킷 직접 접근이 필요한 부분이 남아 있다면, Repository에 그 기능을 붙이는 최소 형태와 이름 규칙 함정을 확인할 수 있다.
티몬
티몬 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. 백엔드·twilio-engTwilio Engineering·

    Programmable Messaging에서 Verify API로 마이그레이션하기

    Twilio의 Programmable Messaging API로 자체 OTP 솔루션을 운영하던 서비스가 Verify API로 전환하는 방법을 코드 예시와 함께 설명한다. Verify는 OTP 전송·검증을 위한 전용 API로, 전화번호 구매, 토큰 생성, DB 저장·만료 관리를 내부에서 처리해 개발자가 직접 구현할 코드를 크게 줄인다.

    요약 이어보기
    #authentication#twilio#sms+2
  2. 백엔드·포스타입포스타입·

    포스타입이 개인화 추천을 하는 방법 2부

    포스타입 백엔드 엔지니어가 벡터 기반 개인화 추천 시스템을 실제 운영하며 맞닥뜨린 성능 장애와 용량 문제를 해결한 과정을 담은 2부다. 수백만 개의 벡터 KNN 검색이 피크 시간대에 전체 Elasticsearch 검색 성능을 흔드는 문제부터 클러스터 OOM 사태까지, 쿼리 최적화와 인프라 분리 두 가지 경로로 근본 해결에 이른다.

    요약 이어보기
    #elasticsearch#vector-search#recommendation-system+2
  3. 백엔드·포스타입포스타입·

    포스타입이 개인화 추천을 하는 방법 1부

    포스타입이 태그 기반 추천의 한계를 극복하고 벡터 임베딩 기반 개인화 추천 시스템을 구축한 과정을 담은 1부다. 유사한 콘텐츠가 다른 용어를 쓰거나 동일한 태그가 전혀 다른 톤의 콘텐츠를 가리키는 문제를 임베딩 벡터로 해결하고, OpenSearch의 HNSW ANN 검색으로 수백만 벡터를 실시간 검색하는 시스템을 구축해 구매율 15% 향상을 달성했다.

    요약 이어보기
    #opensearch#vector-search#recommendation-system+2