Bottle note 프로젝트의 API 서버입니다.
📄내 입맛에 딱 맞는 한병을 찾아가는 여정노트
보틀노트는 위스키 애호가들이 모여 서로의 의견을 공유하고, 더욱 즐겁고 유익한 시음 경험을 할 수 있도록 도와줍니다.
위스키에 대한 열정을 함께 나눠보세요! 쉽고 편리하게 위스키 평가와 리뷰를 공유할 수 있어요!
🥃 위스키 별점 및 리뷰 작성
위스키를 시음한 후 별점을 부여하고, 상세한 리뷰를 작성해 보세요!
맛, 향, 느낌 등 다양한 측면을 기록하고 공유할 수 있습니다.
가격을 입력하고, 시음한 장소를 태그하여 좋은 경험한 장소를 기록해 보는건 어때요?
🥃 위스키 정보 및 리뷰 보기
위스키의 상세 정보와 다른 사용자의 리뷰를 쉽게 확인할 수 있습니다.
다양한 의견을 통해 다른 사람들이 위스키를 어떻게 평가했는지 알 수 있고
새로운 위스키를 시도해볼 수 있어요!
🥃 찜하기 기능으로 위스키 목록 관리
관심 있는 위스키를 찜하기 기능을 통해 목록에 추가하고
찜한 위스키 목록을 통해 나만의 위스키 컬렉션을 만들 수 있어요!
🥃 다른 유저와 팔로우 및 별점 보기
다른 사용자를 팔로우하여 그들의 별점과 리뷰를 볼 수 있어요!
나의 팔로워들은 어떤 평가를 했을까요?
팔로워가 나와 취향이 비슷하다면, 내 입맛에 맞는 새로운 위스키를 알 수 있을지도?
🥃 나의 평가 및 별점 기록 관리
내가 평가한 위스키와 부여한 별점을 한눈에 볼 수 있어요!
나만의 위스키 평가 기록을 통해 나의 취향을 분석하고 다음 시음을 계획해보세요!
이 서버는 alcohols, user, review, rating 등 여러 도메인이 서로를 참조하는 DDD 기반 모듈러 모놀리스입니다. 유저 조회에 위스키 정보가 필요하고, 위스키 조회에 유저 정보가 필요한 양방향 호출이 자연스럽게 발생하는 구조입니다.
이때 각 도메인의 Service가 상대 도메인의 Service를 직접 참조하게 두면 순환 의존이 생기고, 어떤 메서드가 공개 계약이고 어떤 것이 내부 구현인지 경계가 사라져 변경 비용이 누적됩니다. 그래서 도메인 간 호출을 서로 직접 잇지 않고, 그 사이를 유연하게 완충하는 계층으로 Facade를 두었습니다.
{domain}/facade/— 타 도메인에 공개하는 유일한 계약. 인터페이스와 전용 payload DTO만 두며, 엔티티는 경계를 넘지 않습니다.{domain}/service/Default{Domain}Facade— 계약의 구현체. 도메인 내부 사정이므로 밖에서 알 필요가 없습니다.- 동기 조회는 Facade로, 부수효과 전파(히스토리, 알림)는 도메인 이벤트로 분리해 완충 지대가 병목이 되지 않게 합니다.
- 이 규칙은 문서가 아니라 ArchUnit 아키텍처 테스트(
./gradlew check_rule_test)가 빌드에서 강제합니다.
결합을 없애는 설계가 아니라, 결합을 좁고 눈에 보이는 지점으로 모아 관리하는 설계입니다.
기능 요청, 버그 리포트, 작업 항목 등 모든 이슈는 bottle-note/workspace 레포지토리에서 관리합니다.
이슈의 SSOT는 workspace이며, PR 작성 시 본문에 bottle-note/workspace#N 형식으로 관련 이슈를 링크해 주세요.
보틀노트는 위스키 애호가들이 모여 서로의 의견을 공유하고
더욱 즐겁고 유익한 시음 경험을 할 수 있도록 도와줍니다.

