RestTemplate
을 활용해서 랜덤한 Spring Boot 관련 문장을 구하는 애플리케이션을 만들 것이다.
시작 전에 가이드에 있는 코드를 활용해가지고 따로 RESTful API를 제공하는 서버를 돌려야 한다. 유의.
@JsonIgnoreProperties
, @JsonProperty
@JsonIgnoreProperties
는 JSON 파일 내에 있는 요소들 중 현 class의 attribute들 중 대응되지 않는 녀석들은 전부 무시하는데 사용된다.
다만 위의 코드 예시에서 실질적으로 @JsonIgnoreProperties
가 제 역할을 하는 경우를 볼 수는 없다. reply가 애초에 type
, value
, 그리고 value
안은 또 id
, quote
만 언제나 존재하기 때문.
@JsonProperty
는 JSON 파일 내 요소들 중 현 class의 attribute랑 이름은 다르지만 이를 해당 attribute랑 집어넣어야 함을 명시할 때 사용된다.
@JsonProperty
의 경우에는 소개만 했고 실제로 사용하진 않았다. 활용 예시는 이 링크 참고. 여기서는 @JsonProperty
랑 비슷한 역할을 하는 @JsonNaming
도 소개중이니 참고하자.
말그대로, REST API 접근에 사용할 template class다.
여기서는 이거에 해당하는 bean을 restTemplate
라는 method가 만든다. 즉 딱 하나만 IoC container에 의해 관리되고 있음.
추후 코드를 보면 이 class의 getForObject
를 활용했는데, 요청 URL과 그 response를 저장할 class를 argument로 받는다. 그러면 요청한 것의 response가 그 class에 잘 저장이 된다.
CommandLineRunner
에 해당하는 bean을 run
이라는 method가 RestTemplate
을 기반으로 만든다.
이때 보면 RestTemplate
을 parameter로 받는데, 여기에 사용할 bean이 위의 restTempalte
라는 method가 만든 bean임을 자동으로 파악한다. 해당 type의 bean이 저거밖에 없기 때문. (만약 여러개의 해당 type의 bean이 존재시 @Qualifier
등의 annotation을 활용해야 한다고 한다.)
CommandLineRunner
의 구동시점은 Component Scan이 끝나고 애플리케이션이 본격적으로 구동될 때 실행된다. 이 때 보면 args
를 parameter로 받는다는것을 볼 수 있는데, 이 args
는 main function이 처음에 받은 String args
배열에 해당된다. 실제로는 이 args
접근에 자주 활용이 되지만 여기서는 딱히 그러고 있지는 않다.
여하튼 restTemplate
을 활용해 quote
JSON을 요청한다음에 이를 저장하고, logging함을 볼 수 있다. log 결과물은 밑과 같다.
2024-01-05T03:46:20.316+09:00 INFO 43660 --- [ main] C.ConsumingAResTfulWebServiceApplication : Quote[type=success, value=Value[id=10, quote=Really loving Spring Boot, makes stand alone Spring apps easy.]]
Spring Profile에 따른 동작을 조절하는데 사용되는 annotation이다.
Spring Profile이 뭐냐면, 그냥 현재 해당 프로그램이 어떤 모드로 돌아가고 있는지를 표기한다. 기본은 아무것도 아닌 상태. 환경변수, application.properties
수정, 실행시 JVM의 parameter로 설정 등이 가능하다.
class나 method 위에다가 이 annotation을 하면 해당 profile일때, 혹은 아닐 때만 이 method/class가 제공되도록 설정하는 것을 의미한다.
예시 코드의 경우에는 Active profile이 test가 아닌 경우에만 CommandLineRunner
bean을 생성하도록, 즉 저 get 요청을 하도록 설정하고 있는 것이다. 딱히 이번 튜토리얼에서 하는것이랑 엄청 큰 관련이 있지는 않다.
application.properties
라는 파일이 있는데, 거기서 다음 줄을 추가하면 port 설정이 가능하다.server.port=8081
8080
사용하는 것이 불가능하기 때문.