개발자
Spring boot 기반의 API를 개발했는데, 이중 특정 API가 내부적으로 외부 API를 호출하고 있습니다. 이 API는 아래의 과정을 거칩니다. 1. 외부 API 호출 - 약 9초 소요 2. 응답받은 데이터와 함께 전처리 후 DB 저장 3. S3 로 이미지 업로드 이때, 1번 항목인 외부 API를 호출하는데에 약 9초정도가 소요됩니다. 이 API는 사용자가 입력한 데이터를 기반으로 외부 API를 호출하기에 실시간 응답이 필요해서, 정기적으로 외부 API를 끌어오는 방법은 어려워보이는 상황입니다. 이 구조로 계속 방치해둔다면 해당 API 요청이 몰렸을 때, 다른 API 조차 핸들링하지 못하는 상황이 예상되고, 또한 API timeout 설정도 매우 폭이 커져야해서 의미가 없어질 것이라고 생각했습니다. 이 부분을 개선하고 싶은데, - Spring Event를 사용하면 비동기적으로 처리할수 있다고 들었는데 적절한 방법일지, - 현업에서 이러한 이슈를 어떻게 해결하고 있는지 - 추천하는 방법이 있는지 궁금합니다!
답변 3
경험이 많지는 않지만 제가 개인 프로젝트를 진행하여 기상청 API를 요청하여 데이터를 받아 UI에 출력하는 기능을 구현 했을 때 방법을 말씀드립니다. 1. 실시간 요청은 시간이 소요되면 기다려야하기 때문에 실시간이 아닌 방법을 찾는게 좋을 것 같습니다. 2. 실시간으로 하지 않는다면 Spring의 스케줄링을 이용하여 정기적인 시간에 해당 API의 데이터를 백그라운드에서 요청하여 처리하고 DB에 적재합니다. 3. 실제 해당 API 기능이 필요한 부분에서는 백그라운드에서 정기적으로 처리된 DB에서 데이터를 불러오면 좋지 않을까 싶습니다. 제대로 이해하고 답변을 드린건지 모르겠습니다만 화이팅하세요.
익명
작성자
2023년 07월 28일
감사합니다 :) 해당 방안도 고민해보았으나, 사용자가 입력한 데이터를 기반으로 외부 API를 호출해야하기에, 실시간 요청으로 처리해야하는 상황입니다! 답변 감사드리고, 질문에도 해당 내용 추가하였습니다 !
황인웅
백엔드 개발자 • 2023년 07월 28일
그런 부분은 고려하지 못했네요ㅠㅠ 한번 생각해보는 기회가 되는 것 같습니다!
다른 API 제공자를 찾아보시는 것도 방법입니다. 생각보다 API를 제공하는 업체가 다양하고 유료로 제공하는 업체도 많습니다. 아니면 사용자 로딩화면 개선도 방법이 될 수 있습니다. 제공하는 정보가 사용자에게 도움이 된다면 긴 로딩시간을 감수하는건 별게 아니겠지요. 로딩화면에 애니메이션 효과를 넣거나 정보 처리 과정을 표시하면 사용자가 이탈하는걸 감소시킬 수 있습니다.
익명
작성자
2023년 07월 28일
해당 API가 인공지능 모델을 통한 생성형 API라서 가능한 조건 내에서 다른 제공자의 API를 선택해도 느린 문제가 발생하더라구요! 현재는 말씀해주신 것처럼 동적인 로딩화면 과 함께 광고를 내보내고 있으나 아키텍처 적인 개선을 구현하고 싶었습니다! 감사합니다~
정성진
마이다스아이티(건설SW세계1위)/마이다스인(AI역량검사국내1위) 백엔드 개발자 • 2023년 09월 22일
외부 API 가 실시간성이라고 해도 얼마나 수정이 잦느냐에 따라 외부 API 를 호출하지 않도록 캐싱 처리하는게 좋을거같습니다.
익명
작성자
2023년 09월 22일
안녕하세요, 성진님. 우선 답변 감사드립니다. 다만, 저희가 사용하는 외부 API는 생성형 AI를 사용하고 있어, 사용자의 요청 데이터에 따라서 항상 응답 데이터가 달라야 해 캐싱하기 어려운 구조로 되어있습니다. 저 질문은 올린 뒤로 항상 해결방안을 고민해오고 있는데, 메시지 큐 형식을 사용해서 실서비스에 영향을 주지 않는 방법을 고려하고 있습니다. 단 클라우드 비용때문에 당장 도입하기는 어려워, 다른 업체의 API를 계속 찾는 중입니다. 감사합니다 :)
생성형 API를 사용하는 경우는 서버에서 결과에 대한 응답을 주기 전까지 기다리는 상황이 발생합니다. 따라서 즉각적인 반응을 주기는 어렵죠. 제가 컨설팅하고 있는 회사에서는 2가지 방법을 사용합니다. 1. async 방식 생성형 API를 사용하여 만들어지는 이미지를 기다리기 전에 먼저 응답을 주고, 예를 들면 이미지가 만들어지고 있습니다 같은, 다른 일을 하다가 응답이 완료되면 이미지를 보여주는 방식을 사용합니다. 2. 중복된 요청 요청된 내용중에 중복된 요청이 있습니다. 중복된 요청은 저장된 생성형 API를 사용하지 않고 DB로 부터 이미 전에 만들어졌던 이미지를 보여줍니다. 위에 질문하시는 부분의 API 3가지 순서를 Async로 처리하던가 순서에 대한 처리 방식을 다르게 처리하는 방법을 고민해 보시는것이 어떨까 합니다.
익명
작성자
2023년 09월 22일
안녕하세요 일영님 ! 비동기 메시지 큐 방식을 고려하고 있었는데, async 방식을 언급해주셔서 Spring Webflux와 같은걸 더 디깅해봐야겠다는 확신이 드네요. 팀에 다시 공유해보도록 하겠습니다. 감사합니다!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!