안녕하세요! 우테코 레벨2 6주차 회고를 늦었지만 이제야 작성하게 되었습니다. 이번 주차에는 지하철 미션 2단계에 집중하며 다익스트라 알고리즘을 활용한 최단 경로 탐색 API를 구현하는 데 힘썼습니다. 깃헙 PR은 여기 에서 확인하실 수 있습니다.
본론으로 들어가, 이번 미션에서 가장 중요하게 다룬 부분은 성능 개선이었습니다. 초기 구현에서는 DB에서 역 정보를 가져와 도메인 객체를 생성하고, 최단 경로를 계산하는 과정에서 매 요청마다 동일한 작업을 반복하는 문제가 발생했습니다. 특히 다익스트라 알고리즘의 특성상 최상위 도메인 객체인 Route를 매번 생성해야 했기에, 요청이 많아질수록 DB에 대한 부하가 심각하게 증가할 것이 예상되었습니다. 이는 응답 시간 지연 및 시스템 자원 낭비로 이어질 수 있는 심각한 문제였죠.
이 문제를 해결하기 위해 캐싱 전략을 도입했습니다. 애플리케이션 시작 시점에 Route 객체를 미리 생성하고, 메모리에 저장하는 방식입니다. 이를 통해 반복적인 DB 조회를 최소화하고, 최단 경로 계산 요청에 대한 응답 시간을 획기적으로 단축할 수 있었습니다. 단순한 캐싱뿐 아니라, 데이터 변경 시 캐시를 무효화하고 다시 생성하는 메커니즘을 구현하여 데이터 일관성을 유지하는 것도 중요한 부분이었습니다. 또한, 데이터 변경 이벤트를 처리하기 위해 Event Publish/Subscribe 패턴을 적용하여 시스템의 확장성과 유지보수성을 높였습니다. 데이터 변경 시 발생하는 이벤트를 구독하여 캐시를 업데이트하는 방식으로 동기화 문제를 효과적으로 해결할 수 있었습니다.
마지막으로, 전체 시스템의 Lifecycle 관점에서 각 객체의 생성, 사용, 소멸 과정을 꼼꼼히 살펴보았습니다. 특히, 캐시의 효율적인 관리를 위해 객체의 생명주기를 명확하게 정의하고, 자원 해제를 위한 적절한 메커니즘을 구현하는 것이 중요했습니다. 예를 들어, 애플리케이션 종료 시 캐시에 저장된 데이터를 안전하게 정리하는 작업이 필요했습니다.
결론적으로, 이번 지하철 미션 2단계를 통해 다익스트라 알고리즘을 활용한 API 구현 뿐만 아니라, 캐싱 및 이벤트 처리를 통한 성능 최적화 전략을 실제로 적용해보는 좋은 경험을 얻었습니다. 단순히 기능을 구현하는 것에서 벗어나, 시스템의 성능과 안정성까지 고려하는 전문적인 개발자로 한 걸음 더 나아간 것 같습니다. 앞으로 더욱 효율적이고 확장성 있는 시스템 설계를 위해 노력하겠습니다.