코드 개선 과제

정채림·2026년 3월 4일

Lv.0

프로젝트를 실행하였으나 에러로 어플리케이션이 실행되지 않는다.

  • 오류 메시지
 Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'jwtUtil': Injection of autowired dependencies failed

빈을 만드는 과정에서 jwtUtil의 0번째 파라미터를 읽어오는 과정에서 문제가 생겼다.
application.yml설정파일이 없어, jwt.secret.key로 설정된 값을 외부에서 읽어오지 못해 생기는 오류였다.

해결: application.yml 파일을 설정해주었더니 제대로 동작하는 것을 확인할 수 있었다.

Lv.1 ArgumentResolver

Argument resolver가 동작해야하는데 동작하게 만드는 코드가 없다.

해결: Spring의 설정(Configuration)에 이 리졸버를 추가해야한다.
WebConfig 클래스를 추가하고 어규먼트 리졸버를 추가한다.

Lv.2 코드개선

  • 2-1 early return
if (userRepository.existsByEmail(signupRequest.getEmail())) {
    throw new InvalidRequestException("이미 존재하는 이메일입니다.");
}

해당 코드를 signup 메소드 상단으로 옮겨 불필요한 encode 동작이 일어나지 않도록 한다.

  • 2-2
WeatherDto[] weatherArray = responseEntity.getBody();
if (!HttpStatus.OK.equals(responseEntity.getStatusCode())) {
    throw new ServerException("날씨 데이터를 가져오는데 실패했습니다. 상태 코드: " + responseEntity.getStatusCode());
} else {
    if (weatherArray == null || weatherArray.length == 0) {
        throw new ServerException("날씨 데이터가 없습니다.");
    }
}

이부분 if-else문이 중첩되어있어, 코드가 복잡해진다.
else문을 지우고 그 안의 if문을 밖으로 빼준다.

  • 2-3
if (userChangePasswordRequest.getNewPassword().length() < 8 ||
        !userChangePasswordRequest.getNewPassword().matches("ㅅ") ||
        !userChangePasswordRequest.getNewPassword().matches(".*[A-Z].*")) {
    throw new InvalidRequestException("새 비밀번호는 8자 이상이어야 하고, 숫자와 대문자를 포함해야 합니다.");
}

해당 코드를 요청 DTO에서 처리할 수 있도록 한다.
=> UserChangePasswordRequest에서 @pattern 어노테이션을 추가한다.

@Pattern(regexp = "(?=.*[0-9])(?=.*[A-Z])(?=\\S+$).{8,16}", message = "새 비밀번호는 8자 이상이어야 하고, 숫자와 대문자를 포함해야 합니다.")

그리고 service에 객체 앞에 @valid어노테이션을 붙여준다.

0개의 댓글