coupon-core 모듈
쿠폰 서비스 엔티티 구현
쿠폰 서비스에서 데이터베이스와 연동하여 쿠폰 정보와 발급 내역을 효율적으로 관리하기 위해 설계한다. 쿠폰 발급과 관련된 핵심 정보를 체계적으로 저장하고, 유지보수성을 높인다. 쿠폰 서비스의 주요 엔티티를 정의하고 관련 어노테이션과 기능을 설명한다.
구조 및 구현
coupon-BE/
└── coupon-core/
└── src/main/java/com/example/coupon-core/
└── model/
├── BaseTimeEntity.java
├── Coupon.java
├── CouponIssue.java
└── CouponType.java
Java
복사
클래스명 | 내용 |
BaseTeimeEntity.java | 공통 필드를 상속받아 엔티티의 생성일과 수정일을 자동으로 관리 |
Coupon.java | 쿠폰 정책을 정의하고, CouponType으로 타입을 명시 |
CouponIssue.java | 쿠폰발급 내역을 관리하며, 빌더 패턴으로 객체 생성의 유연성을 제공 |
couponType.java | 쿠폰의 타입을 Enum으로 정의하여 안전하게 관리 |
소스코드
BaseTeimeEntity.java
Coupon.java
CouponIssue.java
CouponType.java
Q&A
엔티티란?
필드랑 엔티티는 다른 개념인가?
enum 타입이란?
쿠폰 정책 검증 기능 구현
쿠폰 발급 조건(수량, 기간 등)을 검증하여 잘못된 발급 요청을 방지한다. 예외 상황에 대한 명확한 처리를 통해 안정적인 서비스 운영을 보장하고, 사용자와 시스템 간의 신뢰성을 향상한다.
구조 및 구현
coupon-BE/
└── coupon-core/
└── src/
├── main/java/com/example/coupon-core/
│ ├── exception/
│ │ ├── ErrorCode.java
│ │ └── CouponIssueException.java
│ └── model/
│ └── Coupon.java
└── test/java/com/example/coupon-core/
└── model/
└── CouponTest.java
Java
복사
클래스명 | 내용 요약 |
ErrorCode.java | - 예외 발생 시 사용할 에러 코드를 정의한 Enum 클래스
- 각 에러 코드와 메시지를 매핑하여 오류 상황을 명확히 전달 |
CouponIssueException.java | - 쿠폰 발급과 관련된 커스텀 예외 클래스
- 발생한 오류의 에러 코드와 메시지를 포함하여 예외의 원인을 설명 |
Coupon.java | - 쿠폰 정책 검증 및 발급 로직을 구현한 엔티티 클래스
- 쿠폰의 발급 가능 여부와 발급 처리를 관리 |
CouponTest.java | - Coupon 클래스의 검증 및 발급 로직 테스트 클래스
- 다양한 조건과 예외 상황을 검증하여 코드의 안정성을 확인 |
소스코드
Errorcode.java
CouponIssueException.java
Coupon.java
CouponTest.java
쿠폰 발급 기능 구현
사용자 요청에 따라 쿠폰을 발급하는 핵심 비즈니스 로직을 구현한다. 데이터 일관성과 안정성을 유지하며, 발급된 쿠폰 정보를 데이터베이스에 저장해 추적가능하게 한다.
구조 및 구현
coupon-BE/
├── build.gradle.kts # 프로젝트 의존성 및 빌드 설정
│ └── resources/
│ └── application-core.yml # 테스트 전용 H2/Redis 설정
└── coupon-core/
└── src/
├── main/java/com/example/couponcore/
│ ├── configuration/ # QueryDSL 및 공통 설정
│ │ └── QueryDslConfiguration.java
│ ├── service/ # 비즈니스 로직 처리 계층
│ │ └── CouponIssueService.java
│ └── repository/mysql/ # MySQL과 연동되는 Repository
│ ├── CouponJpaRepository.java
│ ├── CouponIssueJpaRepository.java
│ └── CouponIssueRepository.java
└── test/java/com/example/couponcore/
├── service/ # 서비스 레이어 테스트
│ └── CouponIssueServiceTest.java
└── TestConfig.java # 통합 테스트 환경 설정
Java
복사
클래스명 | 내용 |
QueryDslConfiguration | - QueryDSL 설정 클래스
- EntityManager를 통해 JPAQueryFactory를 생성
- Bean으로 등록 |
CouponIssueService | - 쿠폰 발급 로직 처리 서비스 클래스
- 쿠폰 조회, 발급, 중복 검증 등 수행. |
CouponJpaRepository | JPA 기반 쿠폰 정보 조회 및 저장 |
CouponIssueJpaRepository | JPA 기반 쿠폰 발급 정보 조회 및 저장 |
CouponIssueRepository | QueryDSL을 활용한 동적 쿼리 작성
중복 발급 여부 확인 등 복잡한 쿼리 처리 |
작성 순서 요약
1.
Test 환경설정: 테스트 환경은 H2 메모리 데이터베이스와 Redis를 기반으로 설정(applicaion-core.yml)
2.
Gradle 의존성 추가: QueryDSL 및 관련 설정 추가(build.gradle.kts)
3.
Configuration 클래스 작성: QueryDSL 환경 설정 (QueryDslConfiguration)
4.
Repository 구현: QueryDSL 기반의 동적 쿼리 작성
5.
Service 작성: 비즈니스 로직 구현 (CouponIssueService)
6.
테스트 케이스 작성: 쿠폰 발급 로직이 정상적으로 동작하는지 검증
소스코드
application-core.yml
build.gradle.kts
QueryDslConfiguration.java
CouponJpaRepository.java
CouponIssueJpaRepository.java
CouponIssueRepository.java
CouponIssueService.java
TestConfig.java
ConponIssueServiceTest.java
Q&A
QueryDSL 란?
QueryDSL을 사용하는 이유는?
QueryDSL을 사용하여 동적으로 조회하는이유가? (couponIssueRepository)
Jpa?
jpa, queryDSL 차이가??
Bean으로 등록하여 의존성 주입이 가능한가?
영속성 컨텍스트를 관리한다는 의미는?
영속성 컨텍스트와 QueryDSL의 연관성은?
Related Posts
Search