pile·
백엔드·티몬티몬·

Couchbase Spring data repository 적용기(2)

티몬이 CouchbaseTemplate으로 직접 만들던 뷰 질의를 Spring Data의 뷰 기반 쿼리 메서드로 옮긴 연재 2부다. 빌더 클래스로 조건을 세팅하던 코드를 인터페이스의 메서드 선언 하나로 바꾸는 과정을 다룬다. 그 과정에서 드러나는 기본값 문제와 엔티티·뷰 관계 설계 주의점이 함께 나온다.

핵심 포인트
  • Couchbase에서 뷰로 질의하려면 ViewQuery 객체가 필요해 기존에는 빌더 클래스를 직접 만들어 썼다.
  • Spring Data의 뷰 기반 쿼리 메서드를 쓰면 어노테이션과 메서드 선언만으로 같은 질의가 된다.
  • 메서드 이름의 규칙만으로 조회 건수 제한과 범위 조건이 표현된다.
  • Stale 옵션은 뷰의 인덱싱 갱신 시점을 정하며 TRUE, FALSE, UPDATE_AFTER 세 가지가 있다.
  • 라이브러리의 기본값이 FALSE라 질의마다 바꾸기 어려운데, 템플릿의 일관성 설정으로 기본값을 돌릴 수 있다.
  • 뷰 기반 쿼리 메서드를 쓰려면 엔티티와 뷰의 관계를 설계 단계부터 고려해야 한다.
상세 정리
  • 연재 구성: 1부는 기본 CRUD를 Repository 상속으로 대체, 2부는 직접 만들던 뷰 질의를 메서드로 이관, 3부는 증분값 호출 기능 추가다.
  • 기존 코드: 뷰 이름을 넘겨 빌더를 만들고 Stale과 skip, limit, 시작 키와 끝 키를 각각 세팅한 뒤 조회 메서드에 넘기는 형태였다.
  • 그 의미: 특정 뷰에서 키 값이 시작 시각부터 끝 시각까지인 데이터를 1,000건 가져오겠다는 뜻이다.
  • Stale의 역할: 뷰에서 데이터를 가져올 때 인덱싱 갱신을 언제 할지 지정한다.
  • Stale 값 셋: TRUE면 뷰가 최신인지와 무관하게 가져오고, FALSE면 뷰를 갱신한 뒤 결과를 반환하며, UPDATE_AFTER는 읽은 뒤에 갱신한다.
  • 변경 후: Repository 인터페이스에 뷰 어노테이션으로 설계 문서와 뷰 이름을 지정하고, 건수 제한과 범위 조건이 담긴 메서드를 선언하는 것으로 끝난다.
  • 이득: 직접 객체를 만들어 조회하던 것보다 코드가 훨씬 단순해졌다.
  • 남는 문제: 라이브러리의 Stale 기본값이 FALSE여서 질의마다 원하는 값으로 바꾸기가 어렵다.
  • 해결: Couchbase 설정에서 템플릿의 일관성 값을 최종적 일관성으로 지정하면 해당 템플릿의 기본 Stale이 TRUE가 된다.
  • 설계 주의: 뷰 기반 쿼리 메서드는 코드량을 줄이고 가독성을 높이지만 엔티티와 뷰의 관계를 유의해 설계해야 한다.
  • 예시 구조: 학교 엔티티가 학생 목록을 필드로 갖고, 학생의 학년을 기준으로 별도의 뷰를 만든 상황을 든다.
  • 이어지는 논점: 그 상태에서 학년을 키로 받는 쿼리 메서드를 정의할 때 무엇을 조심해야 하는지로 이어진다.
  • 이관의 취지: 개발자가 저장소마다 접근 계층을 직접 구현하지 않아도 되도록 Spring Data가 객체 매핑을 추상화해준다는 점을 활용하려는 것이다.
  • 가독성 이점: 메서드 이름만 보고도 어떤 조건으로 무엇을 몇 건 가져오는지 유추할 수 있다.
  • 남은 확인: 뷰가 중첩된 목록 필드를 기준으로 만들어진 경우 쿼리 메서드의 키 매핑이 기대와 다를 수 있어 주의가 필요하다.
왜 읽나Couchbase 뷰 질의를 빌더로 조립하고 있다면 메서드 선언으로 대체하는 방법과, 기본 Stale 값 때문에 겪을 수 있는 함정을 미리 확인할 수 있다.
티몬
티몬 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (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