위성 영상 전처리 서버 통합
위성 영상 전처리를 최적화하고 불필요한 서버 리소스 사용을 줄임
개요
회사에서 영상 전처리 서버를 통합하여 영상 저장을 최적화 했던 작업에 대해 기록하고 회고한다.
배경 및 목적
고객사에서 사용 가능한 GPU 개수에 비해 실행되고 있는 AI 작업 개수가 월등히 낮다는 피드백을 받았다. 이를 확인해보기 위해 고객사로 출장을 가서 원인을 분석해보니, 영상을 전처리 하는데 병목이 발생하는 것이 문제였다. 즉, AI 작업 속도에 비해 영상이 전처리 되고 저장되는 시간이 더 오래 걸리므로 GPU가 사용되지 않는 것 처럼 보였던 것이였다.
영상 전처리의 병목을 해결하기 위해 서버 개수(replicas)를 늘릴 수 있는지 여유 자원을 확인해봤다. 자원이 충분한 것을 확인하고, 영상의 메타데이터를 추출하는 서버와 영상을 COG로 변환하는 서버의 개수를 각 1개에서 각 3개로 늘려줬다. 이로 인해, 약 1GB 영상 10개를 동시에 넣어서 전부 처리하는데 소요되는 시간이 6분에서 1분으로 개선되었다. 개선 이전에는 10개 이하로 AI 작업이 수행되었지만 개선 이후에는 20개 이상 수행되어 처리량이 2배 이상 증가한 것을 볼 수 있었다.
COG(Cloud Optimized GeoTIFF)
클라우드 환경에서 대용량 지리 공간 데이터를 효율적으로 저장하고 접근할 수 있도록 최적화된 GeoTIFF 파일 형식
위와 같이 임시로 고객사 문제를 해결한 후, 추가적인 개선 방안을 모색하기 위해 영상 전처리 로직을 분석했다. 분석 결과, 시스템이 점차 발전함에 따라 불필요한 영상 전처리 로직이 발생한 것을 알 수 있었다. 이전에는 Titiler(오픈소스 동적 타일 서버)가 없었으나, COG를 도입하면서 Titiler를 사용하게 되었다. 이로 인해 프론트엔드에서 Titiler를 통해 영상 히스토그램을 조회하도록 변경 되어, 영상 전처리 서버에서 해당 작업을 수행할 필요가 없어졌다. 또한, 썸네일 생성은 Titiler에서 API로 제공되므로, 영상 전처리 서버에서 해당 로직을 구현하여 사용할 필요가 없어졌다.
위와 같은 불필요한 로직을 제거하고 영상 전처리를 최적화하기 위해 영상 전처리 서버를 개선하는 작업을 진행했다.
개선
다음 시퀀스 다이어그램과 같이, 불필요한 로직을 제거하고 scenefile-mover와 scenefile-converter라는 두 개의 전처리 서버를 통합했다. 이후, 이미 Titiler에 존재하는 썸네일 생성 API를 활용하여 썸네일 생성 처리를 위임하도록 로직을 개선했다.
이로써, 위성 영상 전처리를 최적화하고 두 개의 서버를 하나의 서버로 통합하여 불필요한 서버 리소스 사용을 줄일 수 있었다.
회고
회사 시스템이 MSA 구조로 구성되어 있어, 이전까지는 시스템을 개선하기 위해 서버를 분리하는 방안만을 고민했다. 그러나 이번 작업을 통해 서버를 통합하는 것도 시스템 개선의 하나의 방안임을 알게 되었다. 또한, 서버를 지나치게 작게 분리할 경우 리소스를 효율적으로 사용하지 못할 수 있음을 깨달았다.