131 Commits

Author SHA1 Message Date
60882bee85 refactor: 일정 만료 처리 배치에서 예약의 PAYMENT_IN_PROGRESS 상태 조건 추가 2025-10-09 15:13:01 +09:00
c76f6bba68 refactor: OrderExceptionHandler에서 예외 상태 코드에 따른 메시지 분기 처리 추가 2025-10-09 15:12:27 +09:00
ff516ef48f refactor: OrderPostProcessorService 에서의 예외 발생시 예외 메시지 로깅 추가 2025-10-09 15:11:49 +09:00
7482b3de99 refactor: ReservationConcurrencyTest에 LOCK 이후 시작 보장을 위한 delay 추가 2025-10-09 15:11:22 +09:00
7c02d9ceae refactor: 테스트 더미 데이터 생성 로직 수정
- 만료, 취소 예약 기능 추가
- Payment 생성 시 입력된 method에 따른 분기 처리
2025-10-09 15:10:54 +09:00
7fe33d24d2 refactor: 예약 만료 과정에서의 DeadLock 해결을 위한 SKIP LOCKED 과정 추가 및 예약 확정 과정에서 만료 검증 조건 제거 2025-10-09 13:55:37 +09:00
d894750279 refactor: 일정 재활성화 과정에서의 DeadLock 해결을 위한 SKIP LOCKED 과정 추가 및 일정 만료 검증 조건 제거 2025-10-09 13:54:46 +09:00
17fb44573d feat: 결제 & 예약 통합 로직 및 API 2025-10-07 22:34:19 +09:00
edf4d3af24 feat: 결제 완료 이후 예약 및 결제 저장을 위한 별도 서비스 추가 2025-10-07 22:33:58 +09:00
6be9ae7efe feat: 결제 & 예약 확정 과정에서 필요한 검증 로직 추가 2025-10-07 22:28:02 +09:00
985efbe0a3 feat: Order에서 사용할 예외 정의 2025-10-07 22:25:20 +09:00
25fc95fd2a feat: c4cd1681 commit에 누락된 PaymentExceptionHandler 추가 2025-10-07 22:23:32 +09:00
e6040fcd44 feat: order 서비스에서 사용할 재시도 & 후처리를 위한 테이블 추가 2025-10-07 22:20:18 +09:00
365a2a37ae feat: 새로 추가할 Order에서 가져올 ReservationStateResponse 조회 로직 및 PAYMENT_IN_PROGRESS 상태 변경 로직 추가 2025-10-07 22:19:39 +09:00
5e77b1cf91 feat: ReservationStatus에 PAYMENT_IN_PROGRESS 타입 추가 2025-10-07 22:18:46 +09:00
c4cd168175 refactor: PaymentService에서의 예외 처리 방법 변경에 따른 별도의 ExceptionHandler 추가 및 테스트 보완 2025-10-07 22:17:46 +09:00
979623a670 refactor: GlobalExceptionHandler에서 커스텀 예외는 INFO 로그로 기록하도록 수정 2025-10-07 22:17:01 +09:00
1902fc6f7c refactor: payment 내 DTO / mapper 패키지 분리 및 클래스명 수정 2025-10-07 21:06:40 +09:00
1caa9d3f3d refactor: auth 내 DTO 패키지 분리 2025-10-07 20:27:19 +09:00
f06bef8ea5 refactor: region 내 DTO, Mapper 패키지 분리 2025-10-07 20:16:59 +09:00
0820c0ccd9 refactor: admin 내 DTO, Mapper 패키지 분리 2025-10-07 20:15:15 +09:00
ab5edce38c refactor: reservation 내 DTO, Mapper 패키지 분리 2025-10-07 20:13:18 +09:00
07263426b2 refactor: schedule에서의 DTO 스펙 수정 2025-10-07 19:33:16 +09:00
7b0ebcc6dc refactor: ScheduleService / AdminScheduleService 분리 2025-10-07 18:33:44 +09:00
5bd6250184 refactor: schedule 내 DTO, Mapper 패키지 분리 2025-10-07 18:33:35 +09:00
7bda14984e refactor: 인기 테마 조회 시 ORDER BY 위치 수정 및 동일 예약수인 경우 ID 오름차순 정렬 추가 2025-10-07 18:05:18 +09:00
8bb22a6a84 refactor: store 내 DTO, Mapper 패키지 분리 2025-10-07 18:04:12 +09:00
c4604ccdde refactor: theme 내 DTO, Mapper 패키지 분리 2025-10-07 17:47:25 +09:00
038381424c refactor: user 내 DTO, Mapper 패키지 분리 2025-10-07 17:03:49 +09:00
ef64a740c2 refactor: 기존의 외부 API 호출 + 결제 정보 저장 통합 로직을 각각 분리 2025-10-07 16:31:40 +09:00
dd406505ec feat: 결제 확정 API 에러 중, 사용자에게 노출할 메시지 에러 코드 별도 정의 2025-10-07 16:31:27 +09:00
fd96bd9939 refactor: PaymentClientConfirmResponse에 paymentKey, paymentType 추가 2025-10-07 16:30:42 +09:00
1652398fcc refactor: TosspayClient에서 사용할 별도의 ExternalPaymentException 정의 2025-10-07 16:18:23 +09:00
b22d587757 refactor: WebLogMessageConverter에 예외 상황을 처리하는 별도의 메서드 추가 및 기존 ExceptionHandler 적용 2025-10-07 16:08:25 +09:00
6fa8c76b87 refactor: Pending 예약 생성시 validation 조건 추가 및 테스트
- 해당 schedule이 만료되었는지, 시작 시간이 현재 시간 이전인지 확인
2025-10-06 17:56:52 +09:00
0a7bd85dc9 refactor: 테스트용 schedule 더미 데이터 생성 로직에 holdExpiredAt 처리 추가 2025-10-06 17:50:48 +09:00
022742d1fa refactor: 일정 재활성화 스케쥴링 작업에서 예약이 없는 일정 -> PENDING 예약이 없는 일정으로 수정 및 테스트 추가 2025-10-06 17:33:01 +09:00
8378e10192 refactor: Pending 예약시 일정 검증을 위한 ReservationService에서 가져오는 ScheduleSummaryResponse에 holdExpiredAt 필드 추가 2025-10-06 16:53:43 +09:00
5bcba12a61 refactor: ReservationValidator 로그 매시지에서의 클래스명 제거 2025-10-06 16:52:48 +09:00
44c556776d refactor: 일정 HOLD 로직 수정
- 충돌 방지를 위해 조회시 Lock 추가
- 해당 일정의 시작 시간이 현재 시간 이후인지 검증 로직 추가
2025-10-06 16:49:58 +09:00
1c700130c4 refactor: ScheduleValidator의 로그 매시지에서의 클래스명 제거 2025-10-06 16:40:11 +09:00
8215492eea [#54] 애플리케이션 배포 (#55)
<!-- 제목 양식 -->
<!-- [이슈번호] 작업 요약 (예시: [#10] Gitea 템플릿 생성) -->

## 📝 관련 이슈 및 PR

**PR과 관련된 이슈 번호**
- #54

##  작업 내용
<!-- 어떤 작업을 했는지 알려주세요! -->
- 애플리케이션 배포
- 1차 배포에서 각 Service의 Trace가 구분이 되지 않아 XxxService 클래스에 \@Observation을 적용하는 AOP 추가
- 불필요하게 느껴지는 Prometheus Actuator 요청과 스케쥴링 작업 Tracing 제외
- 애플리케이션이 UTC로 배포됨에 따라 발생하는 문제 해결을 위해 LocalDateTime, OffsetDateTime -> Instant 타입 변경 및 LocalDate, LocalTime은 KST로 비교하도록 수정
- 기존 로그의 가독성이 좋지 않아, 로그 메시지가 가장 먼저 보이도록 형식 수정

## 🧪 테스트
<!-- 어떤 테스트를 생각했고 진행했는지 알려주세요! -->
- 실제 웹에 접속하여 전체적인 기능 점검
- 예약 처리 로직에서 미숙한 부분이 발견되어 다음 작업은 예약 처리 로직 개선 예정

## 📚 참고 자료 및 기타
<!-- 참고한 자료, 또는 논의할 사항이 있다면 알려주세요! -->

Reviewed-on: #55
Co-authored-by: pricelees <priceelees@gmail.com>
Co-committed-by: pricelees <priceelees@gmail.com>
2025-10-06 02:42:13 +00:00
186d6e118c [#52] 만료 예약 / 일정 스케쥴링 작업 추가 및 동시성 처리를 위한 일부 코드 수정 (#53)
<!-- 제목 양식 -->
<!-- [이슈번호] 작업 요약 (예시: [#10] Gitea 템플릿 생성) -->

## 📝 관련 이슈 및 PR

**PR과 관련된 이슈 번호**
- #52

##  작업 내용
<!-- 어떤 작업을 했는지 알려주세요! -->
- 예약 페이지에서 일정 조회시, 현 시간 이후부터 조회되도록 수정
- 사용자의 schedule 수정은 \@LastModified JPA Auditing이 적용되지 않도록 UPDATE 쿼리를 바로 전송하도록 수정
- 매 1분마다 Pending 예약이 되지 않은 일정, 결제가 되지 않은 Pending 예약 만료 처리 스케쥴링 작업 추가
- 스케쥴링 작업으로 인해 발생할 수 있는 'Pending 예약은 생성했으나 해당 일정이 재활성화' 되는 문제 해결을 위해 schedule 조회에 pessimistic lock 적용

## 🧪 테스트
<!-- 어떤 테스트를 생각했고 진행했는지 알려주세요! -->
- LocalTime.plusHours()로 인해 특정 시간대 이후로는 실패하는 테스트 수정
- Pessimistic Lock 적용 후 해당 문제 상황 동시성 테스트 추가
- 하나의 일정에 대한 동시 HOLD 요청 상황 테스트 추가

## 📚 참고 자료 및 기타
<!-- 참고한 자료, 또는 논의할 사항이 있다면 알려주세요! -->

Reviewed-on: #53
Co-authored-by: pricelees <priceelees@gmail.com>
Co-committed-by: pricelees <priceelees@gmail.com>
2025-10-04 08:40:37 +00:00
d056e12278 [#50] Tosspay API Mocking 서버 구현 (#51)
<!-- 제목 양식 -->
<!-- [이슈번호] 작업 요약 (예시: [#10] Gitea 템플릿 생성) -->

## 📝 관련 이슈 및 PR

**PR과 관련된 이슈 번호**
- #50

##  작업 내용
<!-- 어떤 작업을 했는지 알려주세요! -->
- 입력된 paymentKey 등을 담아, 랜덤한 결제 정보를 반환하도록 구현
- 전체 중 50%는 간편결제 + 카드, 25%는 카드, 20%는 간편결제(선불 충전액), 나머지 5%는 계좌이체 결과를 반환
- micrometer 적용으로 Main Service와의 Tracing 처리
- 해당 서비스는 GCP에 배포 예정

## 🧪 테스트
<!-- 어떤 테스트를 생각했고 진행했는지 알려주세요! -->
- 전체 기능 테스트 완료

## 📚 참고 자료 및 기타
<!-- 참고한 자료, 또는 논의할 사항이 있다면 알려주세요! -->

Reviewed-on: #51
Co-authored-by: pricelees <priceelees@gmail.com>
Co-committed-by: pricelees <priceelees@gmail.com>
2025-10-02 01:13:07 +00:00
97c3e1598c [#48] Tosspay mocking 서버 구현을 위한 멀티모듈 전환 (#49)
<!-- 제목 양식 -->
<!-- [이슈번호] 작업 요약 (예시: [#10] Gitea 템플릿 생성) -->

## 📝 관련 이슈 및 PR

**PR과 관련된 이슈 번호**
- #48

##  작업 내용
<!-- 어떤 작업을 했는지 알려주세요! -->
- Tosspay mocking 서버를 해당 프로젝트 내 구현할 때 각 서비스간 구분이 수월하도록 모듈 분리
- 분리하는 과정에서 추후 공통적으로 활용될 수 있다고 판단한 기능들은 common 모듈로 분리
- 일부 테스트 보완

## 🧪 테스트
<!-- 어떤 테스트를 생각했고 진행했는지 알려주세요! -->
<img width="612" alt="스크린샷 2025-09-29 22.05.25.png" src="attachments/d401a48a-3dd5-4ced-9315-b9d8aff16bf9">

- 전체 테스트 후 클래스 커버리지 기준 100% 달성 확인

## 📚 참고 자료 및 기타
<!-- 참고한 자료, 또는 논의할 사항이 있다면 알려주세요! -->

Reviewed-on: #49
Co-authored-by: pricelees <priceelees@gmail.com>
Co-committed-by: pricelees <priceelees@gmail.com>
2025-09-30 00:39:13 +00:00
32b8019576 [#46] 더미 데이터 생성 및 1개의 슬로우쿼리 개선 (#47)
<!-- 제목 양식 -->
<!-- [이슈번호] 작업 요약 (예시: [#10] Gitea 템플릿 생성) -->

## 📝 관련 이슈 및 PR

**PR과 관련된 이슈 번호**
- #46

##  작업 내용
<!-- 어떤 작업을 했는지 알려주세요! -->
- 전체 더미 데이터 추가(관리자 약 2,400건 / 회원 100만건 / 예약, 일정 약 197만건 / 결제 및 결제 상세 196만건(대략 충전식 간편결제 29.3만건, 카드 147만건, 계좌이체 19.6만건) / 테마 500건 / 매장 263건
- 로컬 애플리케이션 실행 후, 가장 병목이 되는 메인 인기 테마 쿼리만 성능 개선(5회 측정시 API 응답 시간 평균 3300 -> 90ms)

## 🧪 테스트
<!-- 어떤 테스트를 생각했고 진행했는지 알려주세요! -->
변경된 기능은 모두 테스트 반영

## 📚 참고 자료 및 기타
<!-- 참고한 자료, 또는 논의할 사항이 있다면 알려주세요! -->
취소 데이터 등이 들어가있지 않아, 일부 컬럼에서의 Cardinality가 훨씬 낮게 나오는 상황이긴 함. 예약을 예로 들면, 현재는 확정 예약인 데이터만 추가하여 확정 예약이 100%지만, 실제 도메인의 특성상 예약 데이터는 8~90%는 확정 예약일 것으로 생각하여 큰 차이가 없다고 판단하였음.

Reviewed-on: #47
Co-authored-by: pricelees <priceelees@gmail.com>
Co-committed-by: pricelees <priceelees@gmail.com>
2025-09-27 06:38:44 +00:00
6bcec4c0ed [#44] 매장 기능 도입 (#45)
<!-- 제목 양식 -->
<!-- [이슈번호] 작업 요약 (예시: [#10] Gitea 템플릿 생성) -->

## 📝 관련 이슈 및 PR

**PR과 관련된 이슈 번호**
- #44

##  작업 내용
<!-- 어떤 작업을 했는지 알려주세요! -->
- 매장 기능 도입 및 기존 기능에 적용
- 관리자 타입(본사, 매장, 전체) 분리 및 API별 적용

## 🧪 테스트
<!-- 어떤 테스트를 생각했고 진행했는지 알려주세요! -->
- 신규 기능 및 매장 기능 도입으로 수정된 기존 API 모두 통합 테스트 완료

## 📚 참고 자료 및 기타
<!-- 참고한 자료, 또는 논의할 사항이 있다면 알려주세요! -->
- 아직 미결제 예약 스케쥴링 작업 등 추가적인 작업이 필요하긴 하지만, 이 작업들은 배포 후 추가로 진행할 예정
- 다음 작업은 배포 + 초기 데이터 삽입

Reviewed-on: #45
Co-authored-by: pricelees <priceelees@gmail.com>
Co-committed-by: pricelees <priceelees@gmail.com>
2025-09-20 03:15:06 +00:00
5658f6c31f [#34] 회원 / 인증 도메인 재정의 (#43)
<!-- 제목 양식 -->
<!-- [이슈번호] 작업 요약 (예시: [#10] Gitea 템플릿 생성) -->

## 📝 관련 이슈 및 PR

**PR과 관련된 이슈 번호**
- #34

##  작업 내용
<!-- 어떤 작업을 했는지 알려주세요! -->
- 회원 테이블과 관리자 테이블 분리 및 관리자 계정의 예약 기능 제거
- API 인증을 모두(Public) / 회원 전용(UserOnly) / 관리자 전용(AdminOnly) / 회원 + 관리자(Authenticated) 로 세분화해서 구분
- 관리자의 경우 API 접근 권한 세분화 등 인증 로직 개선
- 전체 리팩터링이 완료되어 레거시 코드 제거

## 🧪 테스트
<!-- 어떤 테스트를 생각했고 진행했는지 알려주세요! -->
<img width="750" alt="스크린샷 2025-09-13 19.11.44.png" src="attachments/11e1a79c-9723-4843-839d-be6158d94130">

- 추가 & 변경된 모든 API에 대한 통합 테스트 진행

## 📚 참고 자료 및 기타
<!-- 참고한 자료, 또는 논의할 사항이 있다면 알려주세요! -->

Reviewed-on: #43
Co-authored-by: pricelees <priceelees@gmail.com>
Co-committed-by: pricelees <priceelees@gmail.com>
2025-09-13 10:13:45 +00:00
675a5b8854 [#41] 예약 스키마 재정의 (#42)
<!-- 제목 양식 -->
<!-- [이슈번호] 작업 요약 (예시: [#10] Gitea 템플릿 생성) -->

## 📝 관련 이슈 및 PR

**PR과 관련된 이슈 번호**
- #41

##  작업 내용
<!-- 어떤 작업을 했는지 알려주세요! -->
- 예약 스키마 & API 재정의
- 새로운 기능에 맞춘 프론트엔드 페이지 추가
- Controller 이후 응답(성공, 실패) 로그에 Endpoint 추가
- 전환으로 인해 미사용되는 코드 및 테스트 전체 제거

## 🧪 테스트
<!-- 어떤 테스트를 생각했고 진행했는지 알려주세요! -->
<img width="528" alt="테스트 커버리지" src="attachments/a4899c0a-2919-4993-bd3b-a71bc601137d">

- 예약 & 결제 통합 테스트 작성 완료
- 결제 테스트는 통합 테스트에서는 Client를 mocking하는 방식 + 별도의 Client 슬라이스 테스트로 진행

## 📚 참고 자료 및 기타
<!-- 참고한 자료, 또는 논의할 사항이 있다면 알려주세요! -->

Reviewed-on: #42
Co-authored-by: pricelees <priceelees@gmail.com>
Co-committed-by: pricelees <priceelees@gmail.com>
2025-09-09 00:43:39 +00:00
258b5f042d [#39] '시간' -> '일정' 스키마 변경으로 테마별 시간 지정 (#40)
<!-- 제목 양식 -->
<!-- [이슈번호] 작업 요약 (예시: [#10] Gitea 템플릿 생성) -->

## 📝 관련 이슈 및 PR

**PR과 관련된 이슈 번호**
- #39

##  작업 내용
<!-- 어떤 작업을 했는지 알려주세요! -->
- 기존 시간 테이블은 유지하고 일정 스키마 및 기능 도입
- 관련 프론트엔드 페이지 생성

## 🧪 테스트
<!-- 어떤 테스트를 생각했고 진행했는지 알려주세요! -->
- 이전 테마 작업과 마찬가지로 모든 API를 대상으로 통합 테스트 진행

## 📚 참고 자료 및 기타
<!-- 참고한 자료, 또는 논의할 사항이 있다면 알려주세요! -->

Reviewed-on: #40
Co-authored-by: pricelees <priceelees@gmail.com>
Co-committed-by: pricelees <priceelees@gmail.com>
2025-09-04 04:14:12 +00:00