Situation현재 피파온라인 전적검색 프로젝트에서 사용자의 전적을 갱신해야하는 기능이 있다. 이 기능은 사용자의 정보를 갱신하고, 사용자의 Match 리스트를 불러온 뒤, 리스트에 포함된 각각의 Match 상세 정보를 Nexon API에 요청해야하는 작업이 필요했다. 이 과정에서 평균적으로 약 200번의 API 요청이 필요했고, 이를 처리하기 위해 @Async 와 ThreadPoolTaskExectuor를 사용하여 RestTempalte을 통해 비동기적으로 요청을 하는 로직을 구현했다. 기존에 동기적인 방식에 싱글스레드는 약 100s가 걸렸지만, 해당 비동기 로직으로 변경한 후 15s 로 줄일 수 있었다. 하지만, 이것도 매우 느렸다. 왜 이렇게 처리 속도가 늦을까 생각을하다가, 2가지 고민을 하게되..
ThreadPoolTaskExecutor
▶️상황 현재 피파 전적검색 앱 프로젝트를 진행 중이다. 사용자가 전적갱신을 하게 되면 다음과 같은 로직으로 진행하게 된다. 사용자의 닉네임을 입력받아서 고유한 사용자 식별자(UID)를 가져온다. 1번의 UID를 통해 해당 사용자의 매치 리스트를 조회한다. 매치 리스트를 가져와서 각 매치에 대한 상세 정보를 요청한다. 이때, 만약 매치가 100개라고 가정했을 때, 3번의 요청이 동기적으로 수행된다면 다음과 같은 일이 발생한다. 각각의 요청이 하나씩 순차적으로 처리하게 된다. 즉, 첫 번째 요청이 완료되어야만 두 번째 요청이 시작되고, 두 번째 요청이 완료되어야 세 번째 요청이 시작된다. 따라서, 3번째 요청은 1번째 요청이 완료되고 2번째 요청이 진행 중일 때까지 대기하게 된다. 이 경우, 전체적으로 매..