Skip to main content Link Search Menu Expand Document (external link) Copy Copied

회원 및 주소 API 개발 요약

회원 API 기능 개발 및 로직 개선

구현 기능

  • 회원의 상세 정보를 조회하는 API
  • 각각의 닉네임, 이메일, 비밀번호를 변경하는 API
  • 회원을 비활성화(숨김 처리)하는 API
  • 회원 데이터를 삭제하는 API

로직 개선

  • 불필요한 검증 로직 최적화: 반복되거나 과도한 검증 로직 제거했다.
  • 부정 연산자 수정: 누락된 부정 연산자로 인한 에러를 수정했다.
  • 암호화되지 않은 비밀번호 변경: 암호화 과정에서 누락된 암호화과정을 추가했다.

회원 주소 API 기능 개발 및 논의

구현 기능

  • 회원의 현재 주소를 설정하는 API
  • 회원의 주소 목록을 조회하는 API
  • 회원이 주소록에 주소를 추가하는 API
  • 회원의 주소록에 등록된 주소를 수정하는 API
  • 주소를 비활성화(숨김 처리)하는 API
  • 주소 데이터를 삭제하는 API

논의 및 변경 사항

  • 가게의 배달 가능 지역과 회원 주소록의 주소를 자체 코드를 참조하여 관리하려던 초기 기획에서 별도로 분리하는 방식으로 수정되었다.
  • 도로명주소에서 구주소를 입력받는 유즈 케이스로 변경했다.
  • 주소록에 상세주소 아닌 전체 주소를 보관하도록 변경됐다.
  • 주소코드 관련 연관관계 및 로직을 제거했다.

Swagger 접근 문제 해결

문제 상황

Swagger 접근 시 JWT 인증 필터로 인해 500 에러 발생했다. 원인은 인증 필터가 Swagger 리소스 요청까지 처리하기 때문이었다.

해결 방법

OncePerRequestFilter 구현체에 Swagger 관련 요청(/swagger-ui.html, /swagger-ui/**, /v3/api-docs/**)은 필터에서 제외하도록 수정했다.


Auditing 관련 필드 Null 값 문제 해결

문제 상황

Security 적용 후 Auditing 필드에 값이 들어가지 않았다. 원인은 SecurityContextHolder를 통해 사용자 정보를 가져오지 못해서였다.

해결 방법

AuditorAware 인터페이스 구현체를 별도로 생성했고, SecurityContext에서 인증된 사용자 정보를 가져오도록 로직을 수정했다.

@Configuration
public class AuditorAwareConfig implements AuditorAware<Long> {

    @Override
    public Optional<Long> getCurrentAuditor() {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        Object principal = authentication.getPrincipal();

        if (authentication == null || !authentication.isAuthenticated()) {
            return Optional.empty();
        }

        if (principal instanceof UserDetailsImpl) {
            Long userId = ((UserDetailsImpl) principal).getId();
            return Optional.of(userId);
        }

        return Optional.empty();
    }

}