728x90
728x90
배경
프로젝트 기간이 끝난 후 서면 피드백을 받았다.
발표 직후 받은 피드백을 포함하여 정리한 내용은 다음과 같다.
1. 테스트가 실패했다.
2. @Value 대신 @ConfigurationProperties 사용을 고려해 봐라
실제로, 시크릿 키를 담은 “Application-secret.yml”이 없을 때 테스트가 실패했다.
테스트 실패 원인은 @Value 때문이 아니었고, 간단하게 해결했다.
따라서, @ConfigurationProperties에 대해 알아보고 적용했다.
추가 학습
@Value VS @ConfigurationProperties
Relaxed Binding
- @Value는 정확히 일치하게 적어야 해당 값을 매칭할 수 있다.
- @Configuration은 정확히 일치하지 않아도 특정 규칙을 통해 해당 값을 매칭한다.
api:
business-register-number: 'SECRET KEY'
- 위 .yml 코드에 대해 다음 4가지 규칙이 허용된다.
api.business-register-number properties, yml 권장 표기법 api.businessRegisterNumbe 표준 카멜 케이스 문법 api.business_register_number properties, yml 에서 사용 가능한 표기법 API_BUSINESS_REGISTER_NUMBER 시스템 환경 변수일 경우 권장 표기법
SpEL
- SpEL은 꽤 복잡하고 다양하다.
- 주제와 관련이 거의 없기에 링크로 남긴다.
개선 내역
yml 파일
api:
business-register-number: 'SECRET KEY'
nutrient-business-register-number: 'SECRET KEY'
기존 코드
- @Value 사용
@Service
public class CertificationService {
@Value("${api.business-register-number}")
private String BUSINESS_SERVICE_KEY;
@Value("${api.nutrient-business-register-number}")
private String NUTRIENT_BUSINESS_SERVICE_KEY;
/*
나머지 동작 코드
*/
}
수정 후 코드
- @ConfigurationProperties 적용
@Getter
@Setter
@RequiredArgsConstructor
@Component
@ConfigurationProperties(prefix = "custom.api")
public class CertificateProperties {
private String businessRegisterNumber;
private String nutrientBusinessRegisterNumber;
}
- 어노테이션 추가
- @ConfigurationProperties(prefix = "custom.api")
- 해당 어노테이션을 사용해도 스프링 빈으로 등록되지 않는다.
- 빈 등록
- 다음 두 가지 방법 중 하나만 사용해도 된다.
- 해당 properties 클래스에 @Component 추가
- 메인 클래스에 @EnableConfigurationProperties(CertificateProperties.class) 추가
- 다음 두 가지 방법 중 하나만 사용해도 된다.
- @Getter & @Setter 추가
- @RequiredArgsConstructor 추가
이후 서비스 단에서 주입받아 사용
@Service
@RequiredArgsConstructor
public class CertificationService {
private final CertificateProperties certificateProperties;
/*
나머지 동작 코드
*/
}
- CertificateProperties 클래스 주입
- Getter 사용
- certificateProperties.getBucketName() 형식으로 값 사용
참고
Spring, Spring Boot와 Properties ? 외부 설정
https://mangkyu.tistory.com/207
728x90
728x90
'프로젝트 > 팀 프로젝트 - MyPill' 카테고리의 다른 글
Ncloud 크레딧 사용 후기 (0) | 2023.07.27 |
---|---|
[트러블 슈팅] - MultipartFile 테스트 케이스 (0) | 2023.07.25 |
[리팩토링] @NotNull vs @Column(nullable = false) (0) | 2023.07.22 |
[트러블 슈팅] - MultipartFile 예외 처리 (0) | 2023.07.20 |