프로젝트 목록으로
팀 프로젝트2026.05 - 2026.06

Sureing

버스 혼잡도 예측과 대체 경로 안내 서비스입니다. 설계는 협력자가, 개발은 혼자 맡았습니다.

내 역할

설계 협력(교통 분야), 개발 전담. 백엔드, 프론트엔드, 외부 API 연동, LLM 안내 문구, 배포까지 맡았습니다.

결과

재현 실험으로 무한 대기 설명은 기각하고, 연결 재사용 효과(요청당 8.0~9.1ms → 2.1~2.3ms)는 확인했습니다.

담당 역할

교통 분야 협력자들이 서비스 설계를 맡았고, 개발은 혼자 진행했습니다. Spring Boot 백엔드와 React 프론트엔드, 경기도 버스 API와 기상청 예보 수집 스케줄러, 서울 지하철 실시간 도착 API와 도보 경로 연동, 과거 기록 기반 탑승 가능성 예측, LLM 안내 문구 생성, Docker Compose 배포를 구현했습니다.

Tech Stack

Java 21Spring Boot 4JPAMySQLReactViteDockerNGINXGroqOpenRouteService

아키텍처 / ERD

전체 구조

수집 스케줄러가 버스와 날씨를 모으고, API 서버가 예측과 대체 경로를 계산한 뒤 LLM이 안내 문구를 만듭니다.

Sureing 전체 구조

문제 해결 과정

LLM 호출 클라이언트를 고친 이유를 재현 실험으로 다시 확인했고, 그중 하나는 틀렸다

  • TCP 연결 100 → 1개
  • 요청당 8.0~9.1 → 2.1~2.3ms

문제 상황

개발 로그에는 LLM 호출 클라이언트를 고친 이유를 두 가지로 적었다. 요청마다 클라이언트를 새로 만든다는 점과, 연결 시간 제한이 없어 연결 단계에서 무한정 기다릴 수 있다는 점이다. 두 설명을 실험으로 확인한 적은 없었다.

해결 방안

수정 전과 수정 후의 클라이언트 구성을 Sureing과 같은 Spring 7.0.8로 옮겨, 연결을 받지 않는 주소와 정상 서버 100회 요청에서 비교했다. 원본 코드는 고치지 않았다.

결과

연결을 받지 않는 주소에서는 수정 전과 후 모두 약 8.0초에 실패했다. 이 버전의 setReadTimeout은 요청 전체 시간 제한이라 연결 단계까지 포함하므로, 무한 대기라는 설명은 기각했다. 정상 서버 100회 요청에서는 TCP 연결이 100개에서 1개 재사용으로, 요청당 시간이 8.0~9.1ms에서 2.1~2.3ms로 줄었다. 로컬 HTTP로 잰 값이라 실제 HTTPS LLM 호출의 차이는 재지 않았다.

프로젝트 유형

팀 프로젝트

기간

2026.05 - 2026.06

완료

2026.06

사용 기술

10 Technologies