-
Notifications
You must be signed in to change notification settings - Fork 5
Closed
Labels
Description
1. 구분
- BackEnd
- Infra
- ETC
2. 대분류
- feat
- refactor
- settings
- etc
3. 작업의 주 내용에 대해서 작성해주세요
회원정보 수정 API 개발 - 선택적 필드 수정 및 보안 검증 강화
4. 세부 작업에 대해서 작성해주세요
회원정보 수정 요청/응답 DTO 구현
- UserUpdateRequestDto 생성 (선택적 필드 수정 요청 데이터)
- UserUpdateResponseDto 생성 (수정 완료 응답 데이터)
- 유효성 검증 어노테이션 적용 (username, nickname, phoneNumber, businessNumber, newPassword)
- 비밀번호 변경 검증 메서드 구현 (isPasswordChangeRequested, isCurrentPasswordProvided)
- Lombok 어노테이션 적용 (@Getter, @Setter, @NoArgsConstructor)
회원정보 수정 서비스 로직 구현
- UserService.updateUserProfile() 메서드 구현
- 선택적 필드 업데이트 (null이 아닌 필드만 수정)
- 비밀번호 변경 검증 (현재 비밀번호 확인 필수)
- 중복 데이터 검증 (변경하려는 필드만 중복 체크)
- 권한별 제한 검증 (CUSTOMER는 사업자번호 수정 불가)
- BCrypt 비밀번호 암호화 처리
중복 검증 및 권한 제어
- validateDuplicateDataForUpdate() 메서드 구현
- 현재 사용자 데이터와 다른 경우에만 중복 체크
- username, nickname, phoneNumber, businessNumber 중복 검증
- validateBusinessNumberPermission() 메서드 구현
- CUSTOMER 권한 사업자번호 수정 차단 (403 Forbidden)
API 컨트롤러 구현
- UserController에 updateUserProfile() 메서드 추가
- PUT /v1/users/me 엔드포인트 구현
- JWT 토큰 기반 사용자 인증 (@AuthenticationPrincipal)
- @Valid 어노테이션으로 요청 데이터 유효성 검증
- 인증된 사용자만 접근 가능하도록 보안 설정
Spring Security 설정 확장
- SecurityConfig에 PUT 메서드 권한 설정 추가
- HttpMethod.PUT /v1/users/me 경로 인증 사용자 접근 허용
- HTTP 메서드별 세분화된 권한 제어
- HttpMethod import 추가
비밀번호 보안 강화
- validatePasswordChange() 메서드 구현
- 비밀번호 변경 시 현재 비밀번호 검증 필수
- BCryptPasswordEncoder로 새 비밀번호 암호화
- 현재 비밀번호 불일치 시 400 Bad Request 응답
선택적 업데이트 및 에러 처리
- updateUserFields() 메서드 구현 (null 체크 후 업데이트)
- 수정 불가 항목 제외 (이메일, 권한은 수정 불가)
- 중복 데이터 400 Bad Request 처리
- 권한 제한 403 Forbidden 처리
- 실시간 DB 저장 및 응답 DTO 반환
테스트 및 검증
- 포스트맨 PUT 요청 테스트 성공
- 선택적 필드 수정 기능 확인
- 중복 검증 및 권한 제어 동작 확인
- 비밀번호 변경 및 암호화 처리 확인
- modifiedAt 타임스탬프 자동 업데이트 확인
Reactions are currently unavailable