Definition Access

참고 : https://www.kobis.or.kr/kobisopenapi/homepg/apiservice/searchServiceInfo.do

  • 일별 박스오피스 API 서비스를 사용하던 도중 JSONObject의 데이터를 JsonArray로 변환도중 JSONArray를 찾지 못하는 아래와 같은 에러가 발생함.



Mechanism

  • 잠깐 정리 까먹을까봐 정리함.
http://localhost:8080/api/movie/nowrank?nowDate=20220813
  • 저 위에 보이는 nowDate가 @RequestParam String nowDate이다.
  • 즉 @RequestParam String myDate이면 위의 Api의 ? 뒤도 myDate여야 한다!!!! 습관적으로 query라고 사용해서 안받아져서 잠깐 당황함.
  • 각설하고 본 문제를 보면

  • 분명히 jsonObject로 잘 가져왔는데 키값으로도 저 dailyBoxOfficeList를 입력을 했다.

  • 그런데도 JSONArray의 키값을 찾지 못해 오류가 발생하는 것 같았다.

  • 단순 문제 접근

      1. 일별 박스 오피스 api의 파싱이 잘못되었다.
      1. String result로 가져오는 곳에서 뭔가 잘못되었다.
      1. 일별 박스 오피스 api를 가져올때 JSON형태가 아닌 XML로 가져왔다.
      1. JSONArray처럼 보이지만 JSONArray가 아니라서 JSONArray가 없다.
      1. JSONArray를 단순히 못꺼내오고 있는것이다.
  • 문제 심층 접근

    • 1,3번의 반박 - 그렇다면 Api raw데이터를 가져올때 제공해주는 일일 박스 오피스 api예시가 잘못되었다는 건데 전혀 문제가 없었다.

    • 2번의 반박

    • String result에서 변환되는데 문제가 되었으면 바로 위 sout문으로 object를 출력했을때 저렇게 정상적으로 파싱이 되지 않을 것이다.

    • 4번은 보류 - 판단 보류 이유 JSONArray키값인 dailyBoxOfficeList가 너무나도 눈에 뻔히 보임.

  • 따라서 5번이 가장 오류의 원인에 무게가 실림.

해결의 실마리 및 해결.

  • 내가 할 수 있는 방법을 통해서 저것만 꺼내 보려고 시도함 subString, split 등을 해서 저dailyBoxOfficeList에 해당 하는 부분을 가져오려고 해보았으나 아무리 생각해봐도 이렇게 하는 것이 말이 안돼서 담당매니저님께 찾아가서 여쭤봄.

  • 사고뭉치 :"저, 매니저님 질문있어서 왔습니다."

  • 담당매니저님 : "어 잠시만요, 네 말씀해주세요."

  • 사고뭉치 : "화면 공유해서 위의 오류내용 및 문제 단순접근 및 심층접근의 내용을 말함"

  • 담당매니저님 : "허허 잠시만여.. 사고뭉치님 아까 인텔리제이에서 JSONObject 선언한 그 코드 보여 주실래요?? "

  • 사고뭉치 : "네ㅎ"

  • 담당매니저님 : "다시 그 출력된 콘솔창 보여 주실래요??"

  • 사고뭉치 : "네ㅎ"

  • 담당매니저님: "아!!!...."

  • 사고뭉치 : "???!!!(안그래도 못하는데 뭔가 실력이 들통난것 같아서 쫄았음..)"

  • 담당매니저님 : "사고뭉치님! 혹시 JSON pretty라고 구글에서 들어가 주실수 있나여??"

참고 : https://jsonformatter.org/json-pretty-print

  • 사고뭉치 : "네(구글링해서 들어감)"

  • 담당매니저님 : "저기 왼쪽 화면 보이시죠? 거기다가 아까 콘솔창 출력했던 JSONObect객체 받아온거 한번 복사 붙여넣기 해보실래요?"

  • 사고뭉치 : 네ㅎ(이런 사이트 처음들어가봐서 쪼끔 당황함.)

  • 담당매니저님 : "왼쪽이 콘솔창 JSON이고 오른쪽이 정리된 JSON코드에요"

  • 사고뭉치 : "아.. 그렇군요(이때까지도 정상적인 JSON출력형태라고 생각함)"

  • 담당매니저님 : "지금 오른쪽 화면에 boxOfficeResult 중괄호 안에 사고뭉치님이 JSONArray키값을 넣으려고 했던 dailyBoxOfficeList보이시나요??"

  • 사고뭉치 : 아!!!!!(아니 왜 그걸 생각을 못했지?? 아니 왜 저 구조라는 것을 인지 하지 못했던거지? 사고뭉치는 속으로 아.. 탄식을 부르고 있었음.)

- 담당매니저님 : "지금 사고뭉치님은 JSONObject안에서 바로 키값으로 꺼내려고 했는데 저기는 boxOfficeResult {dailyBoxOfficeList[]}가 있어서 꺼내지 못한것 같아요.ㅎ "

  • 담당매니저님 : "다시 코드보여 주실수 있나요?"

  • 사고뭉치 : "네.ㅎ"

  • 담당매니저님 : "저기 .JSONObject("dailyBoxOfficeList")한번 추가해서 실행해 볼까여?ㅎ"

  • 사고뭉치 : "네 매니저님.ㅎ(감사합니다!)"

  • 사고뭉치의 포스트맨 결과 :

"data": [
        {
            "rnum": "1",
            "rank": "1",
            "rankInten": "0",
            "rankOldAndNew": "OLD",
            "movieCd": "20211792",
            "movieNm": "헌트",
            "openDt": "2022-08-10",
            "salesAmt": "2205201833",
            "salesShare": "44.1",
            "salesInten": "484346337",
            "salesChange": "28.1",
            "salesAcc": "6172981630",
            "audiCnt": "211969",
            "audiInten": "38574",
            "audiChange": "22.2",
            "audiAcc": "613048",
            "scrnCnt": "1519",
            "showCnt": "6724"
        },
        {
            "rnum": "2",
            "rank": "2",
            "rankInten": "0",
            "rankOldAndNew": "OLD",
            "movieCd": "20209343",
            "movieNm": "한산: 용의 출현",
            "openDt": "2022-07-27",
            "salesAmt": "1474367398",
            "salesShare": "29.5",
            "salesInten": "335199498",
            "salesChange": "29.4",
            "salesAcc": "53777363169",
            "audiCnt": "141163",
            "audiInten": "25740",
            "audiChange": "22.3",
            "audiAcc": "5280673",
            "scrnCnt": "1355",
            "showCnt": "5316"
        },
        {
            "rnum": "3",
            "rank": "3",
            "rankInten": "0",
            "rankOldAndNew": "OLD",
            "movieCd": "20196410",
            "movieNm": "비상선언",
            "openDt": "2022-08-03",
            "salesAmt": "449693279",
            "salesShare": "9.0",
            "salesInten": "-1489010",
            "salesChange": "-0.3",
            "salesAcc": "17293525618",
            "audiCnt": "43958",
            "audiInten": "-6962",
            "audiChange": "-13.7",
            "audiAcc": "1726903",
            "scrnCnt": "865",
            "showCnt": "2499"
        }

사고뭉치 : "매니저님 정말 감사합니다.ㅎ"

담임 매니저님 : "네 수고하쎄용~"



Retrospection

  • 매니저님과의 즉문즉답이후 역시 시니어와 주니어와 다른 이유가 있다고 깨달았다.

  • 솔직히 눈뜨고 코베인것 같았다. 키값에만 집중해서 Jsonobject구조를 놓쳐서 엉뚱한 오류 가정만 늘어놓았던것이다.

  • 반면 담당매니저님을 비롯한 기술매니저님과 같은 시니어분들은 확실히 문제를 천천히 기초부터 보시는 것 같다.(사실 내 지금 실력이 그 정도 이기도 하니까.)

  • Spring에서 Json을 다루는데 조금 더 익숙해져서 다행인것 같았다.

  • 백앤드로써 앞으로 공공데이터 api등을 받고 처리할 일이 많을 텐데 확실히 JSONObject로 받아서 처리하면서 오류가 발생할때 이 기초적인 부분이 중요하다는 사실을 알게 되었으니 처음부터 천천히 오류를 찾을 수있게 된것 같아서 한편으로는 안도감이 생겼다.

- 어쨌든 마지막으로 긴시간 동안 내 답답함을 이해해주시고 같이 코드리뷰를 해주신 담당매니저님께 이렇게나마 진심으로 감사인사를 드린다



profile
이리저리 생각만 많은 사고뭉치입니다.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN