티스토리 뷰

728x90
반응형

REST API 서버는 클라이언트에게 API 서비스 요청에 대한 응답을 하고, 클라이언트는 서버에 API 서비스를 요청합니다. 클라이언트는 HTTP 프로토콜을 사용하는 여러 가지 프로그램(브라우저, 응용 프로그램 등)이 될 수 있으므로, 서버가 다른 서버의 클라이언트가 될 수 있습니다. API 클라이언트 개발이 가능해지면, 다른 시스템의 Open API를 호출하고, 응답 결과를 처리할 수 있는 로직을 개발할 수 있는 능력을 갖출 수 있게 됩니다.

이번 포스팅에서는 다른 서버의 API를 요청하고 응답받는 클라이언트를 SpringBoot로 개발하는 방법을 설명하겠습니다.

RESTful API 클라이언트 만들기

Random SpringBoot quotation이라는 무작위로 문자열을 반환하는 API를 호출하여, 출력하는 클라이언트 프로그램 개발하는 것이 이번 실습의 목표입니다.

이 글에서 설명하는 SpringBoot 개발환경을 실습하기 위해서는 아래 5개의 준비사항이 필요합니다.

  • 15분의 시간
  • 텍스트 에디터 또는 IDE
  • JDK 1.8 이상
  • Gradle 4+ or Maven 3.2+
  • Spring Tool Suite 또는 IntelliJ IDEA

개발한 REST API를 테스트할 때, Browser, curl, Postman를 활용하여 개발한 의도대로 REST API가 동작하는지 확인할 수 있습니다. 실습은 Java, IntelliJ IDEA로 진행합니다.

본 실습 진행은 기본적인 Springboot 프로젝트를 실습해보았다는 가정하에 진행되므로, 만약 Springboot실습을 해보지 않으신 분들은 이전 포스팅 글 중 아래 포스팅 글을 참조하시기 바랍니다.

 

Springboot RestfulAPI 서버 만들기

오픈소스 프레임워크를 배울 땐, 항상 공식 레퍼런스 문서를 참조하며 이해하는 습관을 가지면, 앞으로 새로운 프레임워크를 학습할 때도 스스로 학습할 수 있는 능력을 갖출 수 있습니다. Spring

it-techtree.tistory.com

https://quoters.apps.pcfone.io/api/random는 브라우저, curl, postman 등을 통해 HTTP GET으로 요청하면 아래와 같이 JSON형태로 Spring Boot에 관한 무작위 문자열이 응답된다고 하지만, 현재 서버가 중지되었는지 응답이 오지 않습니다. (우선 응답이 온다는 가정하에 글을 작성하겠습니다)

{
   type: "success",
   value: {
      id: 10,
      quote: "Really loving Spring Boot, makes stand alone Spring apps easy."
   }
}

먼저, random quotation을 받아서 처리하는 Domain class인 Quote와 Value class를 작성합니다.

Quote클래스 작성
Value 클래스 작성

Quote, Value 클래스 정의 시 상단에 명시된 @JsonIgnorePropertise라는 어노테이션은 JSON 속성이 어떠한 프로퍼티와도 매핑되지 않으면 오류가 발생하지만, 이를 무시하겠다고 설정하는 기능입니다. 즉, JSON 매핑 오류로 발생한 오류는 무시하겠다고 이해하시면 될 것 같습니다.

서버-클라이언트 간 JSON 전달 시, 변수 명이 달라서 매핑 오류가 간간히 발생하는데, @JsonProperty, @JsonNaming이라는 어노테이션을 사용하면 SnakeCase로 작성된 변수명을 Camel Case로 작성된 변수명으로 매핑할 수 있기도 합니다. (이 내용은 참고로 아시면 좋을 것 같네요.)

Spring Boot에서는 REST API 서비스 처리하는데 RestTemplate를 활용합니다. JSON으로 들어오는 응답을 처리해주는 어노테이션이며, 간단히 JSON 응답을 처리하는 기능을 Main클래스에 구현하여 Logger로 출력해보겠습니다.

Springboot를 CommandLineRunner으로 실행

728x90
반응형

gradlew 스크립트를 활용하여 gradlew build로 jar파일을 생성하고, gradlew bootrun으로 실행할 수 도 있지만, IntelliJ에서 main 클래스 파일을 Run 하면 실행이 됩니다.

RestTemplate을 이용한 HTTP Request 요청 및 결과 수신

현재 URL이 접속되지 않는 관계로 Connection Error로 응답을 받지 못하지만, 요청을 받게 된다면, Quote 클래스에 데이터가 매핑되어 저장되어, 응답 결과를 Quote 객체로 자유롭게 조작이 가능해집니다.

Caused by: org.springframework.web.client.ResourceAccessException: I/O error on GET request for "https://quoters.apps.pcfone.io/api/random": Connection timed out: connect; nested exception is java.net.ConnectException: Connection timed out: connect

 

 

728x90
반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함