acquire-core-x/README.md
forge-bot 5f4d73d0dc
All checks were successful
Verify / source-contract (pull_request) Successful in 15s
Verify / source-contract (push) Successful in 20s
카드 매입 승인 경로 Spring Boot 3 전환 (ACX-E2E-1785394564819)
2026-07-30 10:38:17 +00:00

130 lines
No EOL
3.9 KiB
Markdown

# 카드 매입 승인 경로 - Spring Boot 3 전환
## 전환 개요
| 항목 | 기존 | 전환 후 |
|------|------|----------|
| Spring Boot | 2.7.x | **3.2.5** |
| Spring Framework | 5.x | **6.1.x** |
| Java | 11 | **17** |
| Jakarta EE | 8 (javax.*) | **10 (jakarta.*)** |
| Hibernate | 5.x | **6.4.x** |
| JPA | 2.2 | **3.1** |
| Validation | Bean Validation 2.0 | **Bean Validation 3.0** |
## 주요 전환 사항
### 1. Jakarta EE 9+ 마이그레이션
- `javax.*``jakarta.*` 네임스페이스 변환
- `@Entity`, `@Table`, `@Column` 등 JPA 어노테이션
- `@NotBlank`, `@NotNull`, `@Positive` 등 Validation 어노테이션
### 2. Spring Framework 6.x 변경사항
- Jakarta Servlet API 사용
- 개선된 예외 처리 구조
### 3. Spring Boot 3.x 의존성
- `spring-boot-starter-validation` (Bean Validation 3.0 내장)
- `spring-boot-starter-actuator` (헬스체크)
- Jackson 2.15+ (Java 8 Date/Time first-class 지원)
## 프로젝트 구조
```
src/main/java/com/acquirex/cardapproval/
├── CardAcquisitionApprovalApplication.java # 메인 애플리케이션
├── controller/
│ └── AcquisitionApprovalController.java # REST API 엔드포인트
├── domain/
│ └── AcquisitionApproval.java # 도메인 엔티티 + Repository
└── service/
└── AcquisitionApprovalService.java # 비즈니스 로직 + DTO + Exception Handler
```
## API 엔드포인트
| Method | Endpoint | 설명 |
|--------|----------|------|
| POST | `/api/v1/acquisitions` | 매입 승인 요청 처리 |
| GET | `/api/v1/acquisitions/{id}` | 매입 승인 단건 조회 |
| GET | `/api/v1/acquisitions/merchant/{merchantId}` | 가맹점별 목록 조회 |
| GET | `/api/v1/acquisitions/period?startDate=&endDate=` | 기간별 목록 조회 |
| POST | `/api/v1/acquisitions/{id}/cancel` | 매입 취소 처리 |
## 검증 절차
### 1. 빌드 검증
```bash
./mvnw clean compile
```
### 2. 테스트 실행
```bash
./mvnw test
```
### 3. 애플리케이션 실행
```bash
./mvnw spring-boot:run
```
### 4. API 동작 확인
```bash
# 매입 승인 요청
curl -X POST http://localhost:8080/api/v1/acquisitions \
-H "Content-Type: application/json" \
-d '{
"merchantId": "MERCHANT001",
"cardNumber": "1234567890123456",
"acquisitionAmount": 50000,
"approvalAmount": 50000,
"approvalNumber": "APPR123456",
"acquisitionDatetime": "2024-01-15T10:30:00"
}'
# 매입 승인 조회
curl http://localhost:8080/api/v1/acquisitions/1
# 매입 취소
curl -X POST http://localhost:8080/api/v1/acquisitions/1/cancel \
-H "Content-Type: application/json" \
-d '{"reason": "고객 요청"}'
```
### 5. H2 콘솔
- URL: `http://localhost:8080/h2-console`
- JDBC URL: `jdbc:h2:mem:acquirex`
## 테스트 커버리지
| 테스트 | 검증 내용 |
|--------|----------|
| `contextLoads` | 스프링 컨텍스트 로드 |
| `processAcquisition_Success` | 매입 승인 처리 성공 |
| `processAcquisition_AmountMismatch_ThrowsException` | 금액 불일치 예외 |
| `cancelAcquisition_Success` | 매입 취소 처리 성공 |
| `cancelAcquisition_AlreadyCancelled_ThrowsException` | 중복 취소 예외 |
| `getAcquisition_NotFound_ThrowsException` | 존재하지 않는 ID 조회 예외 |
| `getAcquisitionsByMerchant_Success` | 가맹점별 목록 조회 |
| `entityCancelMethod_WorksCorrectly` | 엔티티 취소 메서드 동작 |
## 전환 체크리스트
- [x] `javax.persistence``jakarta.persistence` 마이그레이션
- [x] `javax.validation``jakarta.validation` 마이그레이션
- [x] Java 17 이상 요구사항 반영
- [x] Spring Boot 3.2.x 의존성 적용
- [x] 통합 테스트 작성 및 통과 확인
- [x] README 문서화
## 의존성 버전
| Dependency | Version |
|------------|---------|
| Spring Boot | 3.2.5 |
| Spring Framework | 6.1.5 |
| Hibernate | 6.4.4 |
| Jakarta EE | 10.0.0 |
| Java | 17 |
| Lombok | 1.18.30 |
| H2 Database | 2.2.224 |