
한컴인스페이스
위성 영상 분석 플랫폼 MSA 개발
2022.12 ~ 진행중
아키텍처 재설계 및 풀스택 개발
Spring BootGoRedisFastAPIK8sRabbitMQPyTorchNext.js
자사 위성 영상 분석 플랫폼 전반을 담당했습니다. 모놀리식 구조를 9개 MSA로 전환하고 이벤트 드리븐 파이프라인을 구축하는 한편, AI 모델 서빙 시스템 구성, 레거시 프론트엔드 마이그레이션, 인증 시스템 최적화, Go 기반 영상 타일링 API 개발까지 플랫폼 전 영역에 걸쳐 작업했습니다.
역할별 수행 내용
MSA & 이벤트 드리븐 아키텍처 전환
- 모놀리식 서비스를 도메인 경계 기준 9개 MSA로 분리, Spring Cloud Gateway로 인증·로깅·라우팅 일원화 — 재배포 월 10건→1건, 배포 속도 4분→30초
- 외부망·폐쇄망 간 DB 양방향 동기화 구현 — 네트워크 불안정으로 Debezium replication slot이 반복적으로 깨지는 문제를 직접 개발한 Outbox 패턴 라이브러리로 대체
- 기능별 플로우 차트 정리 및 테스트 로직 추가, 커밋 시 자동 테스트되도록 CI/CD 작성
- 분산 ID 생성기 직접 구현 (Snowflake 알고리즘) — 폐쇄망·공개망이 분리된 환경에서 외부 코디네이터(ZooKeeper 등) 접근이 불가하여 기성 라이브러리 사용 불가, worker ID를 망별로 사전 할당하여 양쪽에서 충돌 없는 고유 ID 생성 및 파일 기반으로 전달된 로그에서 발생 서버 즉시 추적 가능
AI 모델 서빙 시스템
- ConvNeXt+UPerNet 기반 6클래스 토지피복 세그멘테이션 — ImageNet-22k pretrained 전이학습, 위성 도메인 fine-tuning, mIoU ~70%
- YOLOv26 기반 객체탐지(20클래스), RINO·ChangeStar 변화탐지 모델 구성
- J_ECD(형태학적 변화탐지): 3×3 kernel 필터링 + 그림자 제거 → Shapefile 출력, COG 변환 + gdalwarp 멀티스레드 + EPSG:5179 재투영
- J_MCD(딥러닝 변화탐지): MambaCD 파인튜닝 — MINIMA 특징 정합 + ECDF 히스토그램 매칭으로 다시기 영상 간 방사 보정
프론트엔드 마이그레이션 & 아키텍처 설계
- Thymeleaf·JSP·jQuery 기반 레거시 프론트엔드를 Next.js 15 + FSD 아키텍처로 전면 재설계 — features 37개·entities 26개로 기능별 의존성 방향 명확화, 파일 수 146개→209개로 모듈화 완료
- CesiumJS + Resium 기반 위성 영상 지도 뷰어 구현 — 3D 지구 위에 위성 영상·벡터 타일(MVT) 레이어 오버레이, SwipeViewer로 시점 동기화 좌우 영상 비교 기능 구현
K8s 인프라 운영
- HPA 동적 스케일링 — 영상 분석 처리 특성상 동시 요청 시 스레드 풀 고갈 발생, 레플리카를 여러 노드에 자동 분산하여 동시 처리량 확보
- OpenSearch + Fluent-bit 중앙 로깅 — 9개 서비스 로그를 단일 파이프라인으로 수집, 장애 시 서비스별 분산 로그 탐색 없이 통합 검색
- 운영·테스트 클러스터 분리 — 동일 K8s 구성으로 온프레미스 테스트 환경 구축, 환경 차이로 인한 배포 후 장애 차단
인증 시스템 최적화
- Redis 역인덱스 구축으로 풀스캔 제거 — userId → sessionId 목록 구조로 저장하여 권한 변경 시 해당 유저의 세션만 즉시 조회 및 갱신, O(N)→O(1)
- 재귀적 트리 구조 메뉴에서 건별 조회 → WITH RECURSIVE CTE + 단일 쿼리 전환, 인증 필터에서 전체 권한 정보를 한 번에 로드 후 메모리 매핑
- Redis DB 3개로 용도 분리 (세션 / 방문자 통계 / 로그인 실패 추적), IP + userId 단위 4회 초과 시 10분 잠금으로 브루트포스 방지
Go 기반 위성 영상 타일링 API
- WMS→WMTS 전환 — z/x/y 좌표를 캐시 키로 고정, 합성 결과를 Redis에 저장하여 동일 타일 재요청 시 합성 연산 완전 스킵, 응답 4초→0.5초 미만
- Go 고루틴으로 타일 생성 단계 병렬화, Nginx Ingress upstream keepalive로 Pod 커넥션 풀 관리
- GDAL 기반 GeoTIFF → PNG/Vector Tile 변환 파이프라인, MBTiles 벡터 타일링으로 줌 레벨·타일 좌표 기반 폴리곤 선별 렌더링
- inias API — Go + GDAL, sync.Pool 기반 동시 요청 처리, bbox/EPSG 변환 지원, image-api LayerInfo TTL 1분 캐시로 메타 반복 조회 제거 (캐시 히트 ~20ms)
주요 성과
- 모놀리식 구조로 한 서비스 장애가 전체로 전파되던 문제를 9개 MSA 서비스 분리로 해결 — 장애 격리와 독립 배포로 재배포 월 10건→1건, 고객 오류 문의 대응 1주→하루 이내로 개선
- 12개 서비스에 인증·로깅이 각각 내장되어 업데이트 시 전체 재배포가 필요하던 문제를 Spring Cloud Gateway 공통 처리로 해결 — 배포 속도 4분→30초, 배포 범위 12개 서비스→모듈 1개로 축소
- 파일 기반 중계만 가능한 분리망 환경에서 UUID는 발생 서버 추적 불가, 외부 코디네이터 기반 라이브러리는 접근 불가 — Snowflake 알고리즘 직접 구현으로 worker ID에 망 정보 인코딩, ID만으로 발생 서버 즉시 추적 가능
- 레거시 JSP·jQuery 프론트엔드의 유지보수 한계를 Next.js 15 + FSD 아키텍처 전면 마이그레이션으로 해결 — CesiumJS 기반 위성 영상 지도 뷰어·SwipeViewer 비교 기능 구현, features 37개·entities 26개로 기능 경계 명확화
- 전체 세션을 풀스캔하던 Redis 구조를 역인덱스로 전환해 권한 변경 O(N)→O(1) 달성, 인증 필터 N+1을 WITH RECURSIVE CTE 단일 쿼리로 제거
- WMS→WMTS 전환 + Redis 타일 캐싱으로 위성 영상 타일링 API 응답 4초→0.5초 미만 달성