더북(TheBook)

이제 ReadingListController에는 associateId 프로퍼티와 이 프로퍼티를 설정할 때 사용하는 setAssociateId() 메서드가 있다. 그리고 readersBooks() 메서드는 "amazonID" 키로 associateId 값을 모델에 추가한다.

완벽하다! 이제 남은 질문은 ‘associateId 값을 어디서 얻느냐’다.

ReadingListController@ConfigurationProperties 애너테이션이 붙어 있다는 점을 주목하자. 이 애너테이션은 구성 프로퍼티에 있는 값을 빈의 프로퍼티에 주입시킨다. 더 자세히 설명하면 prefix 속성은 amazon 접두어가 붙은 프로퍼티를 ReadingListController 빈에 주입시킨다.

즉, amazon 접두어가 붙은 구성 프로퍼티들이 ReadingListController 빈에 주입되도록 지정한 것이다. ReadingListController에서 세터 메서드가 있는 프로퍼티는 associateId 하나뿐이다. 따라서 아마존 제휴 ID를 지정하려면 지원하는 프로퍼티 소스 위치 중 한 곳에 amazon.associateId만 추가하면 된다.

예를 들어 application.properties에 다음과 같이 amazon.associateId 프로퍼티를 설정한다.


amazon.associateId=habuma-20

application.yml이라면 다음과 같이 설정한다.


amazon:
    associateId: habuma-20

또는 환경 변수로 설정하거나 명령줄 인자로 명시할 수도 있으며, 구성 프로퍼티를 설정할 수 있는 곳이면 어디든 추가할 수 있다. 

Note 구성 프로퍼티를 활성화하기

기술적으로 설명하면 @ConfigurationProperties 애너테이션은 스프링 구성 클래스 중 하나에 @Enable ConfigurationProperties 애너테이션을 추가하지 않으면 작동하지 않는다. 하지만 이 과정은 대개 불필요하다. 스프링 부트의 자동 구성에 사용하는 모든 구성 클래스에 이미 @EnableConfigurationProperties 애너테이션을 붙였기 때문이다. 결국 자동 구성을 사용한다면(그러지 않을 이유가 없다) 명시적으로 @Enable ConfigurationProperties 애너테이션을 붙일 필요가 없다.

 

또 하나 주목할 점은 스프링 부트 프로퍼티 리졸버(Property Resolver)는 영리하게도 카멜케이스(Camel-case) 프로퍼티와 하이픈이나 밑줄로 비슷하게 명명된 프로퍼티를 상호 변환하여 처리할 수 있다는 것이다. 다시 말해 amazon.associateId 프로퍼티는 amazon.associate_id, amazon.associate-id와 같다. 마음에 드는 명명 규칙을 선택해서 사용하면 된다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.