SpringBoot TMDB에서 API 파싱(RestTemplate, WebClient차이)

Jae Hun Lee·2023년 3월 3일
0

TMDB에서 API 파싱


API 키 받아오기

  1. https://www.themoviedb.org/?language=ko 에 접속하여 회원가입 후 설정에 들어가준다

  2. Professional과 Developer중 Developer를 선택해준다

  3. 필요 정보를 적어주는데 Application Summary를 조금 많이 적어야 패스가 된다.

  4. 그럼 아래와 같이 키가 발급된다

SpringBoot로 파싱해오기

RestTemplate

RestTemplate은 스프링 3.0부터 제공되었으며, 기본적으로 HTTP 요청을 보내고 응답을 받는 데 사용된다. RestTemplate은 동기 방식으로 작동하며, HTTP 요청 및 응답을 동기적으로 처리한다. 이러한 방식으로 사용하면 간단한 RESTful API 호출을 위해 좋은 선택이 될 수 있다. 하지만, 대규모 데이터의 처리나 긴 대기 시간이 있는 API와 같은 경우, 다수의 요청을 동시에 처리할 수 없으며 블로킹 문제가 발생할 수 있다.

WebClient

WebClient는 스프링 5.0에서 도입되었다. 비동기적으로 작동하며, Reactor 프로젝트를 기반으로 작성되었습니다. WebClient는 Non-Blocking I/O를 사용하여 처리 속도가 빠릅니다. 또한, 다수의 요청을 비동기적으로 처리할 수 있으므로 대규모 데이터 처리 및 긴 대기 시간이 있는 API와 같은 경우 유용합니다. 그러나, 기존 RestTemplate과는 달리 사용법이 복잡하고 학습 곡선이 높습니다.

RestTemplate 선택이유

나는 많은 데이터를 처리할게 아니고 작은 데이터를 처를 처리하기위해 RestTemplate을 선택했고
사용법을 봤을때도 RestTemplate가 좀 더 사용하기 좋아보였다

RestTemplate 메서드

API를 호출해보자

https://developers.themoviedb.org/3 에 접속하여 API목록을 확인 할 수 있다
MOVIES의 Get Top Rated를 들어가서 확인해보면 아래와 같은 사진처럼 된 화면을 확인 할 수 있다

하지만 SEND REQUEST를 눌러도 홈페이지에선 에러를 반환하는데
주소를 복사해서 붙여넣으면 작동이 잘 된다!

API 파싱하기

아까 발급받은 API키를 application.yml에 넣어주고 불러와서
restTemplate으로 URL을 호출했다

  @Value("${tmdb.key}")
    private String key;
    public ApiResponseDto<MovieResponseDto> movieLatestView() {

        RestTemplate restTemplate = new RestTemplate();
        MovieResponseDto movieResponse = restTemplate.getForObject("https://api.themoviedb.org/3/movie/popular?api_key="+key+"&language=ko-KR&page=1", MovieResponseDto.class);

        return ResponseUtils.ok(movieResponse);

    }

혹시 필요한사람이 있을 수 있으니 DTO도 첨부하겠다

MovieResponseDto

@Getter
public class MovieResponseDto {
        private int page;
        private int total_pages;
        private int total_results;
        private List<MovieResultResponseDto> results;

}

MovieResultResponseDto

@Getter
public class MovieResultResponseDto {
    private Long id;
    private String overview;
    private LocalDate release_date;
    private String title;
    private float vote_average;

    private String popularity;
    private String poster_path;
    private int vote_count;
    private String original_language;

}

그리고 POSTMAN으로 확인해보았다
정상적으로 잘 나온다!

참고

https://velog.io/@seongwon97/Spring-Boot-Rest-Template

profile
기록을 남깁니다

0개의 댓글