1. 서비스 개요

항목 내용
프로젝트명 BARI(바리)
서비스명 inventory-service
서비스 유형 유통기한 임박 상품 할인 픽업 플랫폼
개발 기간 2026.03.18 ~ 2026.03.25
개발 인원 6명 / inventory-service 담당
담당 역할 재고 도메인 백엔드 API, 서비스 간 통신, Kafka 재고 차감, 배포 설정 구현
사용 기술 Java 17, Spring Boot 3.4.3, Spring Web, Spring Data JPA, Spring Security, OpenFeign, Kafka, MariaDB, Swagger, Docker, Kubernetes, Gradle Multi-project, Lombok
플랫폼 Web Backend / MSA

2. 서비스 소개

BARI는 동네 매장의 유통기한 임박 상품을 사용자가 예약하고 픽업할 수 있도록 돕는 할인 픽업 플랫폼입니다.

inventory-service는 상품별 재고 수량, 가격, 유통기한, 메모를 관리하는 재고 도메인 서비스입니다. 매장 관리자는 상품에 연결된 재고를 등록, 조회, 수정, 삭제할 수 있고, 주문 서비스는 재고 수량을 확인한 뒤 Kafka 이벤트를 통해 재고 차감을 요청합니다.

또한 할인 서비스가 재고 존재 여부와 상품별 재고 목록을 확인할 수 있도록 내부 API를 제공하고, 유통기한 만료 및 임박 재고를 조회하는 기능을 통해 할인/주문 흐름의 기반 데이터를 담당합니다.


3. 담당 기능 요약

기능 설명
재고 등록 product-service와 OpenFeign으로 상품 존재 여부를 검증한 뒤 재고 생성
상품별 재고 조회 상품 ID 기준으로 삭제되지 않은 재고 목록 조회
재고 수정 수량, 가격, 유통기한, 메모 수정 및 음수 수량 검증
재고 삭제 실제 삭제 대신 deletedAt을 기록하는 soft delete 처리
만료 재고 처리 유통기한이 지난 재고를 일괄 soft delete 처리
유통기한 임박 조회 현재 시점부터 3일 이내 만료 예정인 재고 목록 조회
매장별 재고 조회 inventories와 products를 조인해 매장 재고와 상품 정보를 함께 반환
재고 존재 확인 API discount-service에서 할인 등록 전 재고 유효성을 확인할 수 있는 API 제공
내부 재고 목록 API discount-service가 여러 productId의 재고를 한 번에 조회할 수 있는 내부 API 제공
Kafka 재고 차감 order.reserved 토픽을 구독해 주문 예약 수량만큼 재고 차감
인증 헤더 연동 API Gateway가 주입한 X-User-Id, X-User-Role 기반 인증 처리 및 Feign 요청 헤더 전달
배포 설정 Dockerfile, Kubernetes Deployment/Service/Secret 구성

4. 주요 구현 상세

기능 1. 재고 CRUD와 Soft Delete 기반 생명주기 관리

문제 상황

재고는 주문, 할인, 매장 관리 화면에서 함께 참조되기 때문에 삭제 시 즉시 물리 삭제하면 다른 서비스와의 참조 관계가 깨질 수 있습니다. 또한 삭제된 재고가 일반 조회나 주문 가능 재고에 포함되지 않도록 일관된 필터링이 필요했습니다.

해결 방법

Inventory 엔티티가 BaseTimeEntity를 상속하도록 구성하고, deletedAt 값을 기준으로 활성/삭제 상태를 구분했습니다. 삭제 요청은 inventory.softDelete()로 처리하고, 조회 Repository 메서드는 deletedAt이 null인 데이터만 반환하도록 분리했습니다.

구현 포인트