2023 관광분야 GEN AI 해커톤을 참여하며 - 진행
시작편에 이어서 진행간에 어떤점이 어려웠는지, 적어보고자 한다.
나의 역할은?
나는 백엔드로 참여하여 주요 로직에 대한 백엔드 로직을 만드는데 참여하였고
요구사항 명세를 통해 내가 구현할 기능은 다음과 같았다.
- 택시 바가지 신고 문구 작성기능
택시 바가지에 대해 바가지일 경우 gpt를 이용하여 신고문을 대신 작성해 주는 부분 - 농수산물에 대한 바가지 판별기능
농수산물 가격 API를 통하여 해당 지역 가격정보를 가져오는 부분 - 음식에 대한 바가지 판별기능
음식 가격에 대하여 전국 음식 데이터를 이용하여 해당 지역의 음식 가격을 가져오는 부분
발생한 문제들
바가지 신고 문구 작성기능은 이전 단계에서 바가지라는 사실이 확인된 후 차량번호,거리,시간등을 이용해서 이용자가 편하게(자동으로) 신고할 수 있도록
신고를 위한 문구를 gpt를 이용해 작성해주는 부분이였다.
비교적 프론트에서 보내준 정보를 가지고 gpt api를 이용해 프롬프트를 날리면 끝나는 로직으로 굉장히 단순해서 금방 끝냈다.
다만 다음에 이루어진 농수산물에 대한 바가지 판별기능을 하는데 문제들이 발생하였다. 농수산물 API는 한국농수산식품유통공사의 농수산물 가격정보 API를 사용하였는데 해당 API에 문제가 많아 발생하였다.
일단 해당 API의 명세에 따라 쿼리를 보냈는데 브라우저를 통해 테스트를 했던 것과 달리 오류가 발생하였다.
일부 농수산물에 대해 응답받는데 1분이상이 걸리기도하고 json으로 받은 정보를 파싱하면서 오류가 발생하기도 하였다.
이후 세번째로 구현한 음식에 대한 바가지 판별기능 부분에서 내가 구현해야하는 것은 전국 음식 데이터에서 정보를 가져오는 것이였는데 데이터가 api가 아닌 엑셀형태의 데이터이여서 db에 사전에 저장한 후 조회하는 형태로 구현하여 조회만 하였으면 됬으므로 비교적 어려움 없이 구현할 수 있었다.
농수산물 기능 문제 해결
농수산물 부분에서 정말 많은 문제가 발생하였는데 위의 내용을 정리하자면 다음과 같다.
- 원인 모를 리다이렉트 문제
- 응답이 오래걸리는 문제
- json파싱 문제
원인 모를 리다이렉트 문제
오류를 분석한 후 리다이렉트 됨을 확인한 이후에 서버에서 리다이렉트를 처리해줌으로써 쉽게 해결할 수 있었다.
기상청 api를 사용하며 같은 오류가 다른 사례를 확인하여 리다이렉트 떄문이란것을 확인할 수 있었고 인증 문제 때문에 리다이렉트가 발생한다는 여러 댓글들을 보고
그런가 싶다하고 넘어갔었다.
하지만 다음의 문제인 응답이 오래걸리는 원인을 찾던 중 리다이렉트가 되는 원인을 찾게되었다. 응답이 너무오래걸려 혹시 리다이렉트 과정에서 시간이 오래걸리나 확인하던 중 명세에 써져있었던 http가 아닌 https로 요청을 보낸적이 있었다.
문제없이 실행되는 것을 보고 혹시나 하는 마음에 서버의 요청 url를 바꾸어 보았는데 리다이렉트가 발생하지 않고 바로 응답이 왔다.
즉, 명세에 써져있는 http로 요청을 보낼 시 https로 리다이렉트되었던 것이다.
공사에서 http를 https로 변경한 이후에 명세를 안 고치지 않았나 싶다라는 생각이 들었다.
이후 요청 url을 https로 시작하도록 변경함으로 해결할 수 있었다.
응답이 오래걸리는 문제
정말 여기서 많은 시간을 사용하였는데 처음에는 내가 구현한 백엔드에서 시간이 오래걸리는지 api요청이 오래걸리는지를 파악해야했다.
디버깅을 통해 api요청이 오래걸리는 것을 확인하였을때 어떻게 해아할지 정말 막막했었다. 요청이 안오는 것도 아니고 언젠가는 응답이 오기 때문에 문제파악이 힘들었고
한국농수산식품유통공사의 api를 내가 수정할 수는 없기 때문이였다.
처음에는 매일 모든 정보를 다운받아 db에 저장할까?라는 생각도 하였는데 품목이 너무많아 불가능했다. 관련해서 다른 api가 있는지 확인하기도 하였다.
여기서 팀원의 도움을 많이 받았다. 프론트부분에서 먼저 처리를 끝낸 팀원과 같이 api를 직접 테스트해보며 어떠한 코드(음식)일때 문제가 발생하는지 확인하였다. 혼자 했다면 테스트 해볼 생각을 하지못했을거같다.
요청을 보낼때 음식이름 뿐만아니라 여러 정보를 요청으로 보내는데 소매가격이 없는 음식에 대해 소매가격 요청을 보낼 경우 응답에 시간이 오래걸린다는 규칙을 찾게되었다.

위의 사진은 음식요청 코드표인데 소매등급코드가 비어있을 경우가 존재하였다. 이때 소매코드 정보로 요청을 보낼 경우 시간이 오래걸렸다.
소매등급코드가 비어있는 항목을 map형태로 저장한다음 해당하는 항목을 도매등급코드로 바꿔줌으로써 해결할 수 있었다.
json파싱 문제
응답문제때문에 여러 테스트를 하면서 일정 품목에 따라 json exeption이 발생하는 경우가 생겼다.
이 때문에 응답 string을 일일이 확인해 보았는데 가격 부분에 값이 없을 경우 어떤 경우는 빈칸으로 어떤 경우는 "-"으로 기입되어 있었다.
처음 확인하였을때 빈칸으로 되어있어 Json을 객체로 바꾸었을때 빈칸은 초기화값인 0으로 처리되게 하였지만 "-"일 경우 int형이 아닌 string형으로 타입오류가 발생하였던 것이다.
처음에는 "-"을 0으로 치환시켜주는 방식으로 사용하였지만 "-"아닌 다른 문자열로 되어있을 경우도 처리하기 위해 exeption발생시 값이 없다는 처리를 하도록 바꿈으로 해결하였다.
개발을 마무리하며
돌이켜보니 간단한 문제였던거 같다는 생각이 들었다.
하지만 막상 문제가 발생하였을때 어떻게 해야할지 막막했던것도 사실이다.
여러 팀원들의 도움과 해결아이디어 덕분에 해결할 수 있었던거같다.
나 역시 여러팀원들에게 여러 아이디어를 주며 해결하는데 도움을 주기도 하였다.
이것이 개발하며 협업의 묘미지 않을까 싶다는 생각을 많이 했다. 팀원들 덕분에 재밋게 개발을 마칠 수 있었다.