elasticsearch를 활용한 숙박 전자상거래 시스템
7
작성한 질문수 1
안녕하세요 지금 숙박업소를 검색/조회하는 시스템을 만들려고하는데
대규모 기반으로 만들어보려고합니다
하지만 문제가 있는데
호텔의 가격이 동적데이터일 예정이고, 체크인 체크아웃날짜마다 예약가능객실도 달라질터라
elasticsearch와 querydsl을 적절히 혼용하여 사용해야할거 같은데 어떻게 혼용해야할지 고민입니다
keyword=에코 checkIn=2026-06-01 checkOut=2026-06-02 capacityAdult=2 minPrice=15000 grade=5
▼
① ES: "에코" → hotelId 목록 (최대 2000개)
▼
② QueryDSL: WHERE hotel.id IN (esIds) + 날짜 기준 예약가능 여부 (reservation JOIN) + 가격 범위 (room_price JOIN) + 인원, 성급, 숙소유형 + 커서 페이징
▼
결과 반환
이런식으로 하는게 좋을까요 아니면 es동기화 파이프라인을 만들어서 es에 올인하는게 나을까요?
포트폴리오 수준에서 어떻게 해야할지 고민입니다
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
안은혜님, 대규모 시스템에서는 Elasticsearch의 빠른 검색 성능과 QueryDSL의 데이터 조작 기능을 혼용하여 사용하는 전략이 효과적일 수 있습니다. 현재 제안하신 접근 방법은 현실적이고 유용해 보입니다.
Elasticsearch를 활용한 초기 검색:
- 키워드, 숙소 유형 등의 넓은 범주의 검색 조건은 Elasticsearch를 사용하여 필터링하고 해당 목록을 식별자로 가져오는 것이 좋습니다. ES의 빠른 검색 성능을 이용해 대량의 데이터를 신속하게 필터링할 수 있습니다.
- 키워드, 숙소 유형 등의 넓은 범주의 검색 조건은 Elasticsearch를 사용하여 필터링하고 해당 목록을 식별자로 가져오는 것이 좋습니다. ES의 빠른 검색 성능을 이용해 대량의 데이터를 신속하게 필터링할 수 있습니다.
QueryDSL을 활용한 세부 데이터 필터링:
- 가져온 hotelId 목록을 사용하여 데이터베이스에서 상세 조건(체크인/체크아웃 날짜에 따른 예약 가능 여부, 가격 범위, 인원 수 등)을 QueryDSL로 처리합니다.
- QueryDSL은 JPA와 결합하여 복잡한 쿼리를 쉽게 구성할 수 있으므로, 조건이 복잡해지더라도 가독성과 유지보수성이 좋습니다.
- 가져온 hotelId 목록을 사용하여 데이터베이스에서 상세 조건(체크인/체크아웃 날짜에 따른 예약 가능 여부, 가격 범위, 인원 수 등)을 QueryDSL로 처리합니다.
ES 동기화 파이프라인에 대한 고려:
- Elasticsearch에 데이터를 올인하는 것은 매우 빠른 성능을 제공할 수 있지만, 데이터 일관성 유지가 어려울 수 있습니다. 호텔의 가격이나 예약 가능 여부처럼 자주 변하는 데이터를 실시간으로 동기화하기 위한 별도의 파이프라인 구축이 필요합니다.
- 스냅샷이나 이벤트 중심의 데이터 동기화를 설계하여, 데이터 일관성을 유지하는 것이 중요합니다.
- Elasticsearch에 데이터를 올인하는 것은 매우 빠른 성능을 제공할 수 있지만, 데이터 일관성 유지가 어려울 수 있습니다. 호텔의 가격이나 예약 가능 여부처럼 자주 변하는 데이터를 실시간으로 동기화하기 위한 별도의 파이프라인 구축이 필요합니다.
포트폴리오 수준에서는 제안하신 방법대로 Elasticsearch와 QueryDSL을 혼용하여 시스템을 구성하는 전략을 권장합니다. 이러한 방식은 나중에 프로젝트의 확장성이나 유지보수 측면에서도 유리할 수 있습니다. 추가적인 조언이 필요하시다면 언제든지 질문해 주세요!
참고: Spring Boot Reference Documentation
Elasticsearch와 Spring Data Elasticsearch 관련 섹션
38번 문제 보기 3,4번
1
41
3
Service(name: traefik)의 EXTERNAL_IP 가 Pending 입니다.
1
46
2
22강 케글 연동 강의내용 누락된듯해요
1
52
2
JpaCursorItemReader의 정렬 조건 부재의 영향
1
38
2





