본문 바로가기

Spring

[Spring Boot] 프로젝트 템플릿 만들기(4) - 공통 사용 클래스

공통으로 사용하는 클래스는 따로 모듈화하여 전역에서 사용할 수 있도록 설정했다.

 

Constants.class

// 프로젝트에 사용할 상수값 정의
public class Constants {

    // COMMON
    public static final String API_RESPONSE_SUCCESSED = "SUCCESSED";

    // Jwt
    public static final String AUTHORIZATION_HEADER = "Authorization";
    public static final String REFRESH_HEADER = "Refresh";
    public static final String BEARER_PREFIX = "Bearer ";
    public static final String AUTHORIZATION_KEY = "auth";
    public static final long ACCESS_TOKEN_TIME = 2 * 60 * 60 * 1000; // 2 HOURS
    public static final long REFRESH_TOKEN_TIME  = 14 * 24 * 60 * 60 * 1000L; // 2 WEEKS
	......
}

 

클래스에서 사용하는 고정적인 값들에 대해서는 상수화가 필요했다. 유지보수 측면에서 코드를 처음 보는 사람이 좀 더 편하게 코드를 읽을 수 있도록 하는 방법에 대해 고민했다. 그 결과, 각 상수들을 각 사용 클래스마다 선언하는 것이 아니라 한 개의 클래스에서 관리하기로 했다.

 

 

ResponseDto.class

@Getter
@AllArgsConstructor
public class ResponseDto<T> {

    @JsonInclude(JsonInclude.Include.NON_NULL)
    private T body;
    private int statusCode;

    public static <T> ResponseDto<T> success(T body){

        return new ResponseDto<>(body,200);
    }
}

각 Service 레이어의 return 타입은 모두 공통 ResponseDto 클래스를를 사용하여 고정 형식으로 반환하도록 설정했다.

 

return ResponseDto.success(Constants.API_RESPONSE_SUCCESSED);

 

제네릭 클래스로 선언하여, 제네릭 타입을 다룰 수 있도록 했다. 통신 성공 시 success 함수를 제네릭 메소드로 지정하여 모든 객체타입을 별도의 캐스팅 없이도 사용할 수 있다.

 

 

String 타입
Collection 타입

 

 

 

PasswordEncoderUtil.class

@Component
public class PasswordEncoderUtil {
    private static final org.springframework.security.crypto.password.PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();

    public static void checkPassword(String inputPassword, String savedPassword){
        if(!passwordEncoder.matches(inputPassword, savedPassword)){
            throw new CustomException(ExceptionStatus.PasswordNotMatchedException);
        }
    }

    public static String encodePassword(String password){
        return passwordEncoder.encode(password);
    }
}

 

문자열 Encrypt 및 암호화된 문자열을 비교하는 등 암호화에 관련된 함수를 모아놓은 Util 클래스이다. 현재는 간단한 예시만 있지만, 추후 프로젝트 요구사항에 따라 다양한 암호화 관련 함수가 추가될 것으로 예상되어 별도의 클래스로 분리하였다.