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 사용하는 것이 불가능하기 때문.