Github 코드 리뷰를 하다가 @ConfigurationProperties 를 사용한 부분에서 @Data라는 코드를 보게 되었다.
(리뷰 후 작성하는 글이다...ㅋㅋ)
Lombok의 @Data는 해당 기능들을 모두 가지고 있다.
특히 @Setter를 가지고있다.
기본적으로 환경 변수를 주입받을때 Setter가 없으면 주입이 되지않기 때문에 해당 기능은 기본적으로 있어야한다.
하지만 Setter를 열어놓는다는건 이후 누군가가 변경을 시도할수도있고 변경시점 관리가 되지않는다.(추적힘듦)
그래서 생성자 주입이 가능하다.
모든 생성자를 생성해주는 코드를 넣어서 환경변수가 주입되게 만들어준다.
특히 @ConfigurationProperties를 사용했을 때 주입시점의 값 타입을 확인 해줄수있고 틀릴경우 컴파일 오류를 내준다.
추가로 빈 객체이기 때문에 자바 빈 검증기도 사용 가능하여 최소, 최대 제한도 넣어줄 수 있다.
결국 전체 생성자를 만드는건
@AllArgsConstructor
와 동일하다
이렇게 만들어주면 getter만 열어주게되어 변경 지점 관리가 용이해지고 안전성도 더욱 높아진다.
@EnableConfigurationProperties(VaultProperties.class)
를 사용하면 해당 환경변수를 주입받은 빈 객체가 사용 가능하다.
spring의 yml은 spring이 지원하는 환경변수 혹은 커맨드라인 인수를 받아올 수 있다.
mail:
id: ${username}
password: ${pwd}
처럼 ${} 을 써준뒤
$ java -Duseranme=??? -Dpwd=?? -jar ~~~
혹은
$ java -jar 00.jar --username=?? --pwd=??
또한 커맨드라인으로 입력할 경우 --
를 붙여줘야 key와 value 값으로 인식을 하니 꼭 붙여주도록 하자.