Skip to content

Conversation

@na0th
Copy link
Contributor

@na0th na0th commented Dec 23, 2024


name: Pull Request
about: '풀 리퀘스트를 제출합니다.'
title: "[FEATURE] - [기능명] 또는 [FIX] - [버그 설명]"
labels: ''
assignees: ''


🆕 기능 추가 / 🔧 버그 수정

  • 기능 추가:
  • 쿼리 최적화(N+1 문제 해결) ,
  • 결제 임시 값 저장 로직 Session -> Redis로 리팩터링,
  • 경매 스케쥴링 완료(경매 시각되면 상태 변경)
  • userId를 JWT 토큰에서 추출하도록 리팩터링
  • 낙찰 시, 경매 상태를 변경하고 closed_at 생성으로 조회 안 되게 막음
  • 낙찰 시, 비동기 이벤트 발행하여 지갑 잔액 차감 시도 후 실패 시 로깅
  • 버그 수정:
    빌드 에러 수정
  1. Clock Config 수정 Asia/seoul -> Asia/Seoul
  2. Jwt Config 수정 ConfigureProperties로 변경
  3. PaymentProperties에 setter 추가
  4. 로깅 레벨 수정 (yml)

📋 변경 사항

  • 변경된 주요 파일 및 함수에 대한 설명을 작성합니다.
  • 변경된 부분의 이유와 기대되는 결과를 설명합니다.

🔍 테스트 사항

  • 새로 추가된 기능이나 수정된 버그를 테스트하기 위한 방법을 설명합니다.
  • 관련 테스트 케이스 또는 시나리오를 포함시킬 수 있습니다.

📄 관련 문서

  • 변경 사항과 관련된 문서나 링크가 있다면 여기에 추가해주세요.

📝 추가 사항

  • PR과 관련된 다른 중요한 정보나 주의 사항을 기입합니다.

수정한 내용 :
1. 빌드 에러 수정
-> Clock Config (seoul ->Seoul)로 대문자로 수정
-> Jwt Config Propertiese 방식으로 수정
-> Payment Properties setter 추가

2. logging level 수정
-> debug 에서 Info로 로깅 레벨을 약하게 수정
@na0th na0th added this to the 공통 도메인 milestone Dec 23, 2024
@na0th na0th self-assigned this Dec 23, 2024
@na0th na0th changed the base branch from migration/DDD to develop December 23, 2024 17:03
na0th added 14 commits December 24, 2024 02:06
삭제한 내용 :
1. viewCount 삭제
-> 불필요한 update 쿼리를 만들어서 추후에 더 좋은 방식으로 구현할 예정
예를 들면 redis
추가한 내용 :
1. 유효한 값 인지 검증하는 validate 추가
-> 비즈니스 로직이 아닌 유효 값 검증은 resolver에서 처리해도 되겠다고 생각함
- 경매 시작,종료 시각 범위는 함께 주어지도록 검증
- 경매 시작 시각이 종료 시각보다 이전이도록 검증
- MinPrice의 값이 MaxPrice보다 작도록 검증
변경한 내용 :
1. UserDetailResponse에서 Wallet ID 필드가 String이던 것을 Long으로 변경
-> 엔티티 필드에서 walletId는 Long 타입이라서.
수정한 내용 :
- 명시적으로 모든 연관 관계를 지연 로딩으로 설정(디폴트는 toMany는 지연 로딩, toOne은 즉시 로딩)
1. getAuctionById 메서드 쿼리 최적화
- findAuctionById V2 메서드 추가
 -> Auction 조회 시 User를 fetch join하여 의도치 않은 쿼리 방지
 -> 쿼리 3개 => 쿼리 1개로 최적화

2. getProductByAucitonId 메서드 쿼리 최적화
- Product <-> ProductImage 간 양방향으로 매핑 관계 변경
 -> 기존은 Product -> ProductImage로의 단방향 매핑으로 조인 테이블 방식이었지만, 양방향 매핑 시 외래 키 매핑 방식으로 조인 테이블을 경유하지 않아 성능이 향상 됨.
- findByAuctionIdV2 메서드 추가
-> Product 조회 시 User와 컬렉션인 ProductImage까지 fetch join해서 가져 옴
-> 컬렉션은 지연 로딩 초기화 하는 방식이랑 트레이드 오프 고려 해야 함.

3. application.yml에 default batch size 설정
-> 엔티티 조회 시 지연 로딩을 in 쿼리로 묶어서 한 번에 로딩 하기 위함(쿼리 최적화)

추가한 메서드는 적용 안 했음
변경한 내용 :
1. application.yml 문법 수정 및 Redis yml 추가, build.gradle 추가, include : 아래 - jwt, - payment
-> 띄어쓰기 안해서 값이 제대로 안들어가던 오류 수정

2. Session으로 결제 임시 값 저장 -> Redis에 임시 값 저장(5분 후 삭제)

3. PaymentController 세션 관련 테스트 수정
-> Redis 이용하도록 테스트 수정
추가한 내용 :
Job Runr 라이브러리를 통해 경매 스케쥴링을 구현
1) 경매 시작 시각이 되면 경매 Status가 변경됨
- PENDING -> ACTIVE
2) 경매 종료 시각이 되면 경매 Status가 변경
- ACTIVE -> CLOSE

미완 :
낙찰 시 로직 구현?
수정한 내용 :
1) 결제 시 쿼리 스트링으로 userId를 전달하던 부분에서 JWT 토큰에서 userId를 추출하는 방식으로 리팩터링

2) resolver에서 refresh token의 subject를 가져오던 것을 access token으로 가져오도록 수정
수정한 내용 :
1)결제 컨트롤러에서 인증/인가 관련 테스트 오류 수정
수정한 내용 :
1) auction의 highestBidAmount 필드, highestBidderId 필드 추가
- 관련 테스트 수정
- 입찰 갱신 시 양방향 참조 맺어줌

2) auction과 bid간 mappedBy 명시하지 않아서 조인 테이블 방식이던 걸, mappedBy 명시해서 외래키 방식으로 교체
-> 성능상 조인 테이블은 매우 안좋음
추가한 내용 :
1) 입찰 시 지갑 잔액 검증
-> User 조회 시 Wallet까지 fetch join
-> n+1 쿼리 방지

2) 경매 종료 검증 로직 변경
-> time을 기준으로 하다가 auctionStatus를 기준으로 하도록 변경
변경한 내용  :
1) walletService에서 잔액 체크하는 메서드 삭제
-> 도메인 모델로 옮김
추가한 내용 :
1) 조회 되지 않도록 closed_at 생성
추가한 내용 :
1) 잔액 차감을 이벤트로 처리
-> 경매 종료 시 경매 상태를 바꾸면 트랜잭션이 커밋될 때 업데이트 쿼리가 나가는데,
지갑 잔액 차감 관련 로직까지 수행하게 되면 그 중간에 동시성 문제가 생길 수 있다고 판단함
- 비동기로 처리
- 지갑 잔액을 차감
- 실패 시 로깅
[FEATURE] - 낙찰 로직을 구현합니다.
수정한 내용 :
입찰 시 auction 쪽 highest bid를 갱신할 떄, save()를 하지 않아 update되지 않던 에러
na0th added 2 commits January 2, 2025 23:53
수정한 내용 :
가독성을 위해 간단한 수정
메서드 변경 후 이전 메서드로 테스트 해서 생긴 테스트 오류 해결
na0th added 4 commits January 4, 2025 00:52
삭제한 내용 :
1) auction쪽 highest bid 관련 삭제
bid 로직은 auction당 1개의 bid만 존재
-> 여러 개의 bid가 존재하는 구조가 아니라 1개의 웹소켓 연결된 bid만 추적한다.
1) initializer에서 bidderId를 삭제한다.
-> DummyBid를 추가한다.
2) Auction Job (낙찰 로직)
-> 낙찰 로직 수행 시 auction.getBids로 bid를 조회하도록 수정
1) user create 시 wallet도 생성되도록 수정
@na0th na0th closed this May 15, 2025
@na0th na0th deleted the auction_product branch May 15, 2025 11:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: 완료

Development

Successfully merging this pull request may close these issues.

2 participants