leehyeon-dv 님의 블로그
RESTful 웹 서비스 사용 본문
🔑http://localhost:8080/api/random에서 호출되는 api
spring의 RestTemplate 라이브러리를 사용하여 API에 랜덤데이터를 가져오는 애플리케이션 빌드하기!
📌가이드 시작
- https://start.spring.io 로 이동해 애플리케이션에 필요한 모든 종속성을 가져오고 대부분의 설정을 대신 해줍니다
- Gradle을 이 가이드에서 사용할 예정입니다 (Maven을 사용하셔도 됩니다)
- 또한, java를 사용합니다
- Dependencies를 클릭해 Spring web을 선택해줍니다
- Generate를 클릭합니다
- file을 다운로드하고 압축을 풀어줍니다
📌REST 소스 가져오기
프로젝트 설정을 완료하면 , RESTful 서비스를 사용하는 간단한 애플리케이션을 만들수 있습니다.
작업을 수행하기 전에, 예제로 사용할 서비스가 제공됩니다
다음 링크에서 확인해보겠습니다
아래 git에서 다운을 받습니다
💡RestTemplate란?
스프링에서 제공하는 http 통신에 유용하게 쓸 수 있는 템플릿이며, HTTP 서버와 통신을 단순화하고 RESTful 원칙을 지킨다. jdbcTemplate처럼 RestTemplate 도 기계적이고 반복적인 코드를 깔끔하게 정리해준다
1. 필요한 데이터를 담을 도메인 클래스 만들기
src/main/java/com/example/{파일이름}/Quote.java
package com.example.{파일이름};
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown = true)
public record Quote(String type, Value value) { }
이 코드는 @JsonIgnoreProperties 에너테이션이 포함되어있으며, 이를 통해 이 타입에 바인딩되지 않은 속성을 무시하도록 지정한다
- JSON 데이터를 커스텀 타입과 직접 바인딩
- 변수이름이 API에서 반환된 JSON 문서의 키와 정확히 같아야한다
- 만약 변수 이름과 JSON 문서의 키가 일치하지 않는 경우, @JsonProperty 에너테이션을 사용해 JSON 문서의 키를 정확히 지정
2. 내부 인용문 자체를 내장하기 위한 추가 클래스 작성
src/main/java/cpm/example/{파일이름}/Value.java
package com.example.{파일이름};
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown = true)
public record Value(Long id, String quote) { }
- class와 record의 차이
- class = 객체지향 프로그래밍의 기본요소로 객체를 정의하는데 사용
- record = java14부터 도입된 새로운 데이터 구조로, 주로 불변 데이터 객체를 간단하게 정의하기 위해 설계
3.애플리케이션 끝내기
Initializr는 main() 메서드에 클래스를 만듭니다.
src/main/java/com/exaple/{파일이름}/ConsumingRestApplicaion.java
이제, RESTful 소스에서 인용문을 표시하려면 클래스에 몇가지 다른 항목을 추가해야합니다
- 로거는 출력을 로그로 전달합니다
- RestTemplate는 jackson JSON 처리 라이브러리를 사용해 들어오는 데이터를 처리합니다
- CommandLineRunner : 애플리케이션이 실행된 후 특정 작업을 실행하고 싶을때 사용하는 구성요소 (초기화작업, 데이터베이스설정, 간단한 테스트 실행)
package com.example.{파일이름};
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Profile;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
public class ConsumingRestApplication {
private static final Logger log = LoggerFactory.getLogger(ConsumingRestApplication.class);
public static void main(String[] args) {
SpringApplication.run(ConsumingRestApplication.class, args);
}
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.build();
}
@Bean
@Profile("!test")
public CommandLineRunner run(RestTemplate restTemplate) throws Exception {
return args -> {
Quote quote = restTemplate.getForObject(
"http://localhost:8080/api/random", Quote.class
);
log.info(quote.toString());
};
}
}
4. 서버 포트 설정
마지막으로 서버 포트를 설정한다
quoters 애플리케이션은 기본 서버 포트인 8080을 사용해 이 애플리케이션도 같은 포트를 사용할 수 없습니다
8081서버 포트도 추가해 서버포트를 설정합니다
5.애플리케이션 실행
이제, 빌드해 실행해줍니다
현재 URL이 접속되지 않는 관계로 Connection Error로 응답을 받지 못하지만, 요청을 받게 되면 Quote클래스에 데이터가 매핑되어 저장되어, 응답결과를 Quote 객체로 자유롭게 조작이 가능해집니
'spring > spring Boot' 카테고리의 다른 글
스프링 환경 갖추기 (0) | 2024.12.18 |
---|---|
RESTful 웹 서비스 구축 (1) | 2024.11.21 |
스프링 시작! (2) | 2024.11.15 |