문제 설명
회원 탈퇴 처리( 메서드)에서 다음 두 가지 문제가 확인되었습니다:
1. Race Condition (동시성 문제)
withdraw() 메서드가 진행 중인 예약/상담을 확인한 후 deletedAt을 설정하기까지의 시간 동안, 동시 요청으로 새로운 예약/상담이 생성될 수 있습니다.
- 현재
User 엔티티에 대한 pessimistic lock을 사용하지 않아 발생하는 문제입니다.
2. 검증 누락
- 예약/상담 생성 시 탈퇴한 사용자(
isWithdrawn() 또는 deletedAt 확인)에 대한 검증이 누락되어 있습니다.
createTempReservation() 등의 메서드에서 일반 회원/전문가를 조회할 때 탈퇴 여부를 확인하지 않습니다.
개선 방안
withdraw() 메서드에서 User 조회 시 pessimistic write lock 적용
- 예약/상담 생성 경로(
createTempReservation() 등)에서 isWithdrawn() 검증 추가
관련 링크
영향 범위
src/main/java/com/ceos/menual/domain/user/service/UserService.java - withdraw() 메서드
src/main/java/com/ceos/menual/domain/reservation/service/ReservationService.java - createTempReservation() 및 기타 예약 생성 메서드
src/main/java/com/ceos/menual/domain/user/repository/UserRepository.java - pessimistic lock을 위한 쿼리 메서드 추가 필요 가능성
문제 설명
회원 탈퇴 처리( 메서드)에서 다음 두 가지 문제가 확인되었습니다:
1. Race Condition (동시성 문제)
withdraw()메서드가 진행 중인 예약/상담을 확인한 후deletedAt을 설정하기까지의 시간 동안, 동시 요청으로 새로운 예약/상담이 생성될 수 있습니다.User엔티티에 대한 pessimistic lock을 사용하지 않아 발생하는 문제입니다.2. 검증 누락
isWithdrawn()또는deletedAt확인)에 대한 검증이 누락되어 있습니다.createTempReservation()등의 메서드에서 일반 회원/전문가를 조회할 때 탈퇴 여부를 확인하지 않습니다.개선 방안
withdraw()메서드에서 User 조회 시 pessimistic write lock 적용createTempReservation()등)에서isWithdrawn()검증 추가관련 링크
영향 범위
src/main/java/com/ceos/menual/domain/user/service/UserService.java-withdraw()메서드src/main/java/com/ceos/menual/domain/reservation/service/ReservationService.java-createTempReservation()및 기타 예약 생성 메서드src/main/java/com/ceos/menual/domain/user/repository/UserRepository.java- pessimistic lock을 위한 쿼리 메서드 추가 필요 가능성