
우선 따릉이 대여소 API를 호출해 우리쪽 DB에 저장하는게 첫 번째 목표였다.
외부 API를 호출하는 방법은 대표적으로 5가지가 있는데,
그 중에서 가장 권장되는 방식인 WebClient를 사용했다.
✨ 외부 API를 호출할 때 사용하는 HTTP Client 정리 포스팅
application.yml은 스프링 부트 애플리케이션이 동작할 때 필요한 설정 값을 선언하는 곳으로,
따릉이 대여소 API를 호출하는 baseUrl과 key 작성했다.
(이 외에 서버, DB, JPA, 로그 설정 등을 yml에 작성한다.)
bikeseoul:
static:
key: ${bikeseoul.static.key}
baseUrl: http://openapi.seoul.go.kr:8088/{apiKey}/json/tbCycleStationInfo
realtime:
key: ${bikeseoul.realtime.key}
baseUrl: http://openapi.seoul.go.kr:8088/{apiKey}/json/bikeList
✨ 발급받은 key는 application-secret.yml에 별도 저장
@ConfigurationProperties 어노테이션은 application.yml에 정의된 설정 값을
자바 객체의 필드로 자동 바인딩해주는 어노테이션이다.
즉, yml의 설정 값 → @ConfigurationProperties가 붙은 클래스의 객체로 매핑
→ 필요한 클래스(외부 API를 호출하는 클래스)에서 주입받아 사용
@Component
@ConfigurationProperties(prefix = "bikeseoul.static")
@Getter
@Setter
public class StationProperties {
private String key;
private String baseUrl;
}
✨ 추후에 StationApiClient에서 StationProperties를 주입받아 외부 API 호출에 사용
외부 API를 호출하기 위해서는 다른 서버로 HTTP 요청을 보내고 응답을 받아오는
라이브러리가 필요한데, 그 중 하나가 WebClient다.
✨ 스프링에서는 재사용 가능한 객체(빈)는 직접 생성하지 않고,
@Configuration에서 설정해놓고 필요할 때 의존성 주입을 통해 사용한다.
@Configuration // 설정 클래스 명시
public class StationConfig {
@Bean // 스프링 빈 객체 등록 대상
public WebClient.Builder webClientBuilder() {
return WebClient.builder()
.exchangeStrategies(ExchangeStrategies.builder()
.codecs(configurer -> configurer
.defaultCodecs()
.maxInMemorySize(10 * 1024 * 1024)) // 10MB
.build());
}
}
외부 API를 호출한 뒤에 받는 응답