"세우지마" 프로젝트는 대전 지역의 주정차 금지 구역과 주차장 정보를 제공하는 앱을 개발하는 과제였습니다. 사용자 경험을 향상시키기 위해, 저희 팀은 공공 데이터 API를 사용하여 주요 데이터를 로드했습니다. 초기 개발 단계에서 데이터 로딩 시간이 2-3분이 소요되었는데, 이는 사용자 경험에 부정적인 영향을 미쳤습니다.
이 문제의 주된 원인은 공공 데이터 API가 XML 형식의 데이터를 제공하며, 한 번의 요청에 최대 50개의 데이터만 로드할 수 있다는 제한 때문이었습니다. 또한, API의 응답 시간이 길어 전체 데이터를 수집하는 데 상당한 시간이 필요했습니다.
초기에 저희 팀은 병렬 처리를 통해 데이터 요청을 최적화하는 방법을 시도했습니다. 병렬 처리는 동시에 여러 API 요청을 보내 데이터를 빠르게 로드하는 기술입니다. 하지만, 데이터의 호출 제한으로 인해 성능 개선에 한계가 있었습니다.
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.ForkJoinPool;
public class ParallelDataLoader {
public static void loadData(List<String> urls) {
ForkJoinPool customThreadPool = new ForkJoinPool(4); // 4개의 스레드를 사용하는 풀 생성
customThreadPool.submit(() ->
urls.parallelStream().forEach(url -> {
// 각 URL에서 데이터 로드 처리
System.out.println("Data loaded from " + url);
})
).join(); // 모든 작업이 완료될 때까지 대기
customThreadPool.shutdown(); // 풀 종료
}
public static void main(String[] args) {
List<String> urls = Arrays.asList("http://api1.com", "http://api2.com", "http://api3.com");
loadData(urls);
}
}
데이터 호출 제한으로 인해 기대한 만큼의 성능 향상을 이루기 어려웠습니다. 이후, 저는 추가적인 조사를 통해 대전 지역에 특화된 공공 데이터 포털을 발견하고 이를 사용하였습니다. 이 새로운 데이터 소스는 한 번의 요청으로 모든 필요 데이터를 빠르게 로드할 수 있었습니다.
이 경험은 제게 데이터 관리와 선택의 중요성을 깊이 인식시켜 주었습니다. 최적의 소스를 선택하는 것이 어떻게 전체 프로젝트의 성공에 결정적인 역할을 할 수 있는지를 보여주는 좋은 사례였습니다. 또한, 문제 해결을 위해 다양한 접근 방식을 시도하고 평가하는 과정은 제 개발 역량을 한층 더 성장시키는 계기가 되었습니다.