가이드 원본 사이트

만들려는거

  • RestTemplate을 활용해서 랜덤한 Spring Boot 관련 문장을 구하는 애플리케이션을 만들 것이다.

  • 시작 전에 가이드에 있는 코드를 활용해가지고 따로 RESTful API를 제공하는 서버를 돌려야 한다. 유의.

@JsonIgnoreProperties, @JsonProperty

  • 둘 다 jackson JSON lbirary에서 제공하는 기능이다.
  • @JsonIgnoreProperties는 JSON 파일 내에 있는 요소들 중 현 class의 attribute들 중 대응되지 않는 녀석들은 전부 무시하는데 사용된다.

  • 다만 위의 코드 예시에서 실질적으로 @JsonIgnoreProperties가 제 역할을 하는 경우를 볼 수는 없다. reply가 애초에 type, value, 그리고 value 안은 또 id, quote만 언제나 존재하기 때문.

  • 관련 글

  • @JsonProperty는 JSON 파일 내 요소들 중 현 class의 attribute랑 이름은 다르지만 이를 해당 attribute랑 집어넣어야 함을 명시할 때 사용된다.

  • @JsonProperty의 경우에는 소개만 했고 실제로 사용하진 않았다. 활용 예시는 이 링크 참고. 여기서는 @JsonProperty랑 비슷한 역할을 하는 @JsonNaming도 소개중이니 참고하자.

RestTemplate

  • documentation

  • 말그대로, REST API 접근에 사용할 template class다.

  • 여기서는 이거에 해당하는 bean을 restTemplate라는 method가 만든다. 즉 딱 하나만 IoC container에 의해 관리되고 있음.

  • 추후 코드를 보면 이 class의 getForObject를 활용했는데, 요청 URL과 그 response를 저장할 class를 argument로 받는다. 그러면 요청한 것의 response가 그 class에 잘 저장이 된다.

CommandLineRunner

  • 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.]]

@Profile

  • Spring Profile에 따른 동작을 조절하는데 사용되는 annotation이다.

  • Spring Profile이 뭐냐면, 그냥 현재 해당 프로그램이 어떤 모드로 돌아가고 있는지를 표기한다. 기본은 아무것도 아닌 상태. 환경변수, application.properties수정, 실행시 JVM의 parameter로 설정 등이 가능하다.

  • class나 method 위에다가 이 annotation을 하면 해당 profile일때, 혹은 아닐 때만 이 method/class가 제공되도록 설정하는 것을 의미한다.

  • 예시 코드의 경우에는 Active profile이 test가 아닌 경우에만 CommandLineRunner bean을 생성하도록, 즉 저 get 요청을 하도록 설정하고 있는 것이다. 딱히 이번 튜토리얼에서 하는것이랑 엄청 큰 관련이 있지는 않다.

port 설정.

  • application.properties라는 파일이 있는데, 거기서 다음 줄을 추가하면 port 설정이 가능하다.
server.port=8081
  • 여기서 이걸 사용한 이유는, 동시에 2개의 서버를 localhost 상에서 돌리고 있어서 둘 다 8080 사용하는 것이 불가능하기 때문.

결과물

https://github.com/baekrang256/Backend-Practice/tree/main/SpringTutorial/Consuming-a-RESTful-Web-Service/Consuming-a-RESTful-Web-Service

profile
안 흔하고 싶은 개발자. 관심 분야 : 임베디드/컴퓨터 시스템 및 아키텍처/웹/AI

0개의 댓글