공통으로 사용하는 클래스는 따로 모듈화하여 전역에서 사용할 수 있도록 설정했다.
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 함수를 제네릭 메소드로 지정하여 모든 객체타입을 별도의 캐스팅 없이도 사용할 수 있다.
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 클래스이다. 현재는 간단한 예시만 있지만, 추후 프로젝트 요구사항에 따라 다양한 암호화 관련 함수가 추가될 것으로 예상되어 별도의 클래스로 분리하였다.
'Spring' 카테고리의 다른 글
[Spring Boot] 프로젝트 템플릿 만들기(6) - 후기 (0) | 2024.08.01 |
---|---|
[Spring Boot] 프로젝트 템플릿 만들기(5) - 인증 (0) | 2024.07.31 |
[Spring Boot] 프로젝트 템플릿 만들기(3) - 로깅 (0) | 2024.07.30 |
[Spring Boot] 프로젝트 템플릿 만들기(2) - JPA 관련 세팅 (0) | 2024.04.10 |
[Spring Boot] 프로젝트 템플릿 만들기(0) (1) | 2024.04.08 |