[Pilot Test Analysis System] 데이터 분석 파이프라인 및 백엔드 아키텍처
• 2 min read
분석 제어 파이프라인의 구조적 한계를 해결하고 확장성을 확보하기 위해 백엔드 구조를 개편했다. 단일 서비스에 포함되어 있던 데이터 처리 및 결과 저장 로직을 분리하고, 시계열 데이터베이스 쿼리 생성 모듈을 독립시켜 시스템 전반의 유지보수성을 개선했다.
[Java / Time Series Database] 동적 쿼리 빌더 패턴
- 서비스 계층 내부에 시계열 쿼리 문자열 포맷팅이 하드코딩되어 조건 변경 시 잦은 코드 수정이 유발되는 문제를 수정했다.
- 특정 조건에 강결합된 인라인 쿼리 생성 로직을 분리하여 독립된 정적 빌더 클래스로 이전했다.
- 조건부 필터링 및 다운샘플링 파라미터를 인자로 전달받아 쿼리를 동적 구성하는 팩토리 메서드를 구현했다.
- 서비스 계층이 복잡한 쿼리 구조를 알 필요 없이 데이터 조회에만 집중할 수 있도록 구조를 변경했다.
[Spring / Service Layer] 분석 워커 인터페이스 분리
- 분석 워커 서비스 인터페이스가 비대해져 불필요한 의존성을 갖는 구조적 문제를 발견했다.
- 인터페이스 분리 원칙(ISP)을 적용해 단일 인터페이스를 데이터 가공 서비스와 결과 처리 서비스로 분리했다.
- 요약 컨트롤러와 검증 서비스 모듈이 결과 처리 서비스에만 의존하도록 내부 참조 구조를 변경했다.
- 단위 테스트 시 데이터 가공 모듈을 mocking하지 않고 결과 처리 로직만 독립적으로 검증이 가능하도록 테스트 환경을 개선했다.
[Java / Security] 프록시 라우팅 및 인가 정책
- 모듈 간 API 통신 시 보안 컨텍스트 유지 및 엔드포인트 접근 권한 분리가 명확하지 않던 기존 정책을 개선했다.
- 통계 지표 산출 등 읽기 전용으로 동작하는 엔드포인트는 인증 토큰 없이 접근할 수 있도록 보안 설정을 변경했다.
- 반면 데이터베이스 쓰기 트랜잭션이 발생하는 요약 정보 업데이트 API 등은 JWT 인증을 필수적으로 적용하도록 API 프록시 라우팅 정책을 설정했다.
- 외부 클라이언트 요청이 게이트웨이를 거쳐 분석 서버로 안전하게 전달되도록 내부 API 호출 체계를 구축했다.
[PostgreSQL / Data Model] 분석 대상 메타데이터 확장
- 분석 대상 이벤트에 대한 다차원 태깅이 부재해 세밀한 맥락 분석이 어렵던 한계를 해결했다.
- 관계형 데이터베이스 스키마를 확장 적용해, 보행자 상태, 가시성, 비고 항목 등을 유연하게 저장할 수 있는 신규 컬럼을 추가했다.
- 단일 객체가 가질 수 있는 다중 태그를 효율적으로 제어하기 위해 JSONB 데이터 타입을 사용했다.
- 간소화된 상태 열거형 구조를 정의하여 프론트엔드가 요구하는 다중 필터링 명세를 지원했다.