본문 바로가기
Web

화면에서 외부 API 연동하는 기능 성능 개선 시키기

by _dreamgirl 2023. 7. 5.
반응형


이번에 화면 개발을 하면서 외부 API 연동을 통해 데이터를 조회 후 목록을 표시하는 것이다. 

리스트는 약 2000건을 목표로 했으며 이상하게 로컬서버에서는 문제가 없었는데 운영 서버에서 5분이 지나가면 화면이 끊기는 오류가 발생했다. 
그 이유는 로직이 오래 걸리기 때문이었다. 약 300건~400건 이하 조회 시 정상적으로 되지만 거의 5분 이상 지연 시 화면이 끊기고 서버는 외부 API와 연동을 하고 있었다. 데이터를 다 조회하고 웹 클라이언트에게 응답을 줘야 하는데 줄 수 없다는 에러메시지가 발생했다. 화면에서 끊기는 오류를 해결하고자 jeus나 webtob socket, connection timeout이라든지 이 부분을 열심히 찾아봤다. 어디에도 5분, 300초, 3000ms에 대한 limit이 없었다. 
jeus web.xml 혹은 WebMain.xml에서 webtob와 연결하는 시간은 5분 보다도 적었다. 그리고 webtob에 있었던 http.m 파일은 jeus 서버와의 연결에 대한 timeout이 60초였던 것으로 기억한다. 서버 설정을 건드리는 것보다 로직을 개선하는 게 더 맞을 것 같다고 판단했다. 

나는 비동기적으로 처리해야 한다고 생각했고 기존 데이터 연동 로직이 동기적으로 순차로 진행된 점이 시간적 성능에 제한이 된다고 여겨 화면단을 수정해 보기 시작했다. 데이터 개수를 모두 한꺼번에 외부 API를 가져오는 서비스를 실행하기로 했다. 기존 jquery를 사용해서 gson 데이터를 get 방식으로 가져오는 기능이 있어 참고했다. 
결과적으로 화면에서 끊기는 오류는 없었고 시간적 성능도 빨라졌다. ajax 방식으로 구현해도 동일할 것이다. 

일주일 간 성능을 개선시키고자 공부하고 시도해 본 기록이어서 남겨둔다.

참고 사이트
https://velog.io/@dearlee/jQuery-%EB%B9%84%EB%8F%99%EA%B8%B0-%ED%95%A8%EC%88%98-Ajax-.getJSON

jQuery - 비동기 함수 Ajax⑤ .getJSON

5. Shorthand Methods - jQuery.getJSON( url [, data ] [, success ] )

velog.io


[Spring] 컨트롤러, Model, ModelAndView 사용법
https://wonos.tistory.com/380

[Spring] 컨트롤러, Model, ModelAndView 사용법

client가 요청을 하면, @Controller에 진입한다. 컨트롤러는 요청에 대한 작업을 수행하고, 뷰쪽으로 데이터를 전달한다. 컨트롤러 클래스 제작 순서 @Controller를 이용해서 클래스를 생성한다. @RequestMa

wonos.tistory.com

[jQuery] json 파일 읽기 - .getJSON() 과 .ajax() 차이

https://withthisclue.tistory.com/entry/jQuery-json-%ED%8C%8C%EC%9D%BC-%EC%9D%BD%EA%B8%B0-ajax-getJSON-%EC%B0%A8%EC%9D%B4

[jQuery] json 파일 읽기 - .getJSON() 과 .ajax() 차이

json 파일을 읽어서 웹페이지에 적용하기 위해서 처음으로 적용해본것이 .getJSON() 이었다. 사용하면서 뭔가 좋으면서도 여러가지 문제가 있다는 것을 발견했다. async 옵션, type 옵션을 .getJSON()에서

withthisclue.tistory.com

 [WebtoB/JEUS] SvrChkTime, read-timeout - https://mcpaint.tistory.com/m/67

[WebtoB/JEUS] SvrChkTime, read-timeout

1. 개요방화벽에서는 지정한 포트에 대해서 접근허용에 대한 세션을 지정한 시간동안만 저장해둔다.설정한 시간동안 요청이 없을시에는 세션 내용을 삭제한다.따라서 두 서버간에 커넥션 상태

mcpaint.tistory.com

https://soniccho.tistory.com/m/entry/Nexacro-httptimeout-%EC%84%A4%EC%A0%95

[Nexacro] httptimeout 설정

회사에서 운영중인 admin 시스템이 30초가 지나면 타임아웃이 발생하여 첫번째로 mybatis 타임아웃 설정을 수정했는데도 동일하였고, 두번째로 spring default-timeout 설정을 수정했는데도 동일하였습니

soniccho.tistory.com

Broken Pipe - https://k9e4h.tistory.com/m/353

Broken Pipe

cause of ServletException. java.net.SocketException: Broken pipe : 일반적으로 잦은 입출력으로 호출로 발생된다. 처리 중인 요청(또는 응답)을 사용자가 기다리지 않고, '새로고침(또는 종료, 연속 클릭 등)' 를

k9e4h.tistory.com

[네트워크] 타임아웃 (Time-out) - https://seolki-log.tistory.com/m/24

[네트워크] 타임아웃 (Time-out)

오늘 인텔리제이로 작업하다가 Caused by: java.net.SocketTimeoutException: connect timed out 라는 에러가 떠서, 관련 CS 지식 타임아웃에 대해 정리해보려고 한다. 스프링부트 API 제작 후 빌드해서 테스트하려

seolki-log.tistory.com

반응형

'Web' 카테고리의 다른 글

Spring Interceptor 클래스 구현하기  (0) 2023.07.19
DriverSpy 라이브러리 사용하기  (0) 2023.07.10
WEB Front(JSTL, Javascript)  (0) 2023.06.07
WEB Front (jquery, JS, HTML)  (0) 2023.05.18
tomcat server 실행 시 해결된 문제들  (0) 2023.04.27

댓글