Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
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
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

['21.07.15] Naver 영화검색 API 본문

Project/영화리뷰 관리

['21.07.15] Naver 영화검색 API

Seung__ 2021. 7. 15. 22:22

앞선 글에서 Naver API사용 시 에러코드 SE99(HTTP상태코드 500)가 뜨면서, 내부 서버 에러가 발생했다.

 

진짜로 서버 에러인줄 알고 있었는데, 네이버에서 제공하는 오류 코드를 보고 내가 잘못했구나.. 라는 의심이 생김.

 

HTTP 상태 코드(오류 유형) 오류 발생 원인 해결 방법
500(서버 오류) 필수 요청 변수가 없거나 요청 변수 이름이 잘못된 경우 API 레퍼런스에서 필수 요청 변수를 확인합니다.
500(서버 오류) 요청 변수의 값을 URL 인코딩으로 변환하지 않고 전송한 경우 API 레퍼런스에서 해당 요청 변수를 URL 인코딩으로 변환해야 하는지 확인합니다.
500(서버 오류) API 호출은 정상적으로 했지만, API 서버 유지 보수나 시스템 오류로 인한 오류가 발생한 경우 개발자 포럼에 오류를 신고합니다.

 

단순히 서버 오류만 500으로 처리하는 것이 아니라, 변수 이름이 잘못되었거나, url인코딩, 진짜 서버 오류 세 가지 경우 모두 500으로 처리한다.

 

그리고 추가적으로 application의 play ground에 들어가면 실시간으로 api를 테스트 해볼 수 있다.

 

나는 안되는데, 얘는 되니까 내가 잘못했다는 걸 깨닳았다 ㅋㅋㅋㅋ

 

 

그리고 요기서 개발가이드에서 알 수 없었던, 몇 가지 정보가 있다.

 

1. 개발가이드에서 몰랐던 정보


 

1)개발가이드에서 알려주는 출력 결과와 실제 reponse가 다르다.

 

query만 입력을 했을 때 어떤 결과가 나오는지 확인해봤다.

 

그랬더니, 개발가이드에는 없던, total과 start 그리고 display가 존재한다.

 

  "lastBuildDate": "Thu, 15 Jul 2021 21:57:57 +0900",
  "total": 25,
  "start": 1,
  "display": 10,
  "items": [

따라서 reponse객체에 세 변수를 추가해줬다.

    private int display;

    private int start;

    private int total;

 

2) yearfrom은 1000이상부터 입력이 가능하다.(500, SE99)

999는 안됨
1000은 됨

 

 

3) 당연하지만 yearto가 yearfrom보다 작으면 에러(500, SE99)

 

 

 

2. 수정한 부분


 

1) 변수명 오타

   yearfrom을 yearform으로 썼다.......

 

2) response객체에 display, start, total을 추가해줬다.

    private int display;

    private int start;

    private int total;

 

3) uri에 queryparam을 추가하는 방식을 변경했다.

 

처음에는 그냥 배운대로 MultiValueMap<String,String>을 통해서 key, value 형태로 만들어

uricomponentbuilder의 queryparam에 집어넣었다.

    public MultiValueMap<String, String> makeQuery(){

        var multiValueMap = new LinkedMultiValueMap<String, String>();
        multiValueMap.add("query", query);
        multiValueMap.add("display", String.valueOf(display));
        multiValueMap.add("start", String.valueOf(start));

        return multiValueMap;

    }
URI uri = UriComponentsBuilder.fromUriString(naverMovieSearchUrl)
          .queryParams(searchMovieReq.makeQuery())
          .build()
          .encode()
          .toUri();

근데 생각해보니 display, start를 query에 집어넣으려면 String이 아닌 int로 들어가야 한다.

 

그래서 queryParam에 직접 name, value를 넣어주거나 필수인 "query"를 제외하고는 빼주면 된다.

        URI uri = UriComponentsBuilder
                .fromUriString(naverMovieSearchUrl)
                .queryParam("query", "starwars")
                .queryParam("display", 10)
                .queryParam("start", 1)
                .queryParam("yearfrom", 1700)
                .queryParam("yearto", 2021)
                .build().encode().toUri();

 

 

3. 결과


짠 정상적으로 불러왔다! 네이버 서버가 잘못된 것은 아니었다..ㅎ

 

그리고 검색 결과가 없으면  message에 "검색 결과가 없습니다"를 보낼 수 있도록 했다.

 

4. GitHub : 210715, Naver API


 

 

bsh6463/MovieManager

Contribute to bsh6463/MovieManager development by creating an account on GitHub.

github.com

 

Comments