DATA

5·18민주화운동기록물 통합DB 및 클라우드 이관

5만건 엑셀 메타데이터와 2TB 멀티미디어 기록물을 국가정보자원관리원 클라우드로 이관. 메모리 누수 해결 및 RBAR 최적화.

5·18민주화운동 관련 대규모 기록물 아카이브 데이터를 통합하고, 국가정보자원관리원(NIRS) 클라우드 센터로 시스템을 이관한 프로젝트입니다.

투입 시점에서는 클라우드 환경은 준비되었지만 관리자 시스템과 사용자 시스팀이 연계되지 않은 상태로 배포가 진행되지 못한 상황에서 기존 담당팀이 철수를 진행했습니다.

이후 하자보수 기간으로 넘어가며 투입되며 마이그레이션과 핵심 요구사항 구현을 진행했습니다.

내 역할: CRM 시스템 관리자-사용자 간 연결 및 핵심 요구사항 개발, 마이그레이션 전략 수립, 메타데이터·파일 정합성 검증 로직 구현, 메모리 누수 진단 및 해결, 쿼리 최적화

  • Java / Spring — 이관 대상 애플리케이션 - Oracle / Solr — 소스 데이터베이스 및 검색 기능 제공 - MyBatis — SQL 쿼리 - Python & shell script — 메타데이터 및 멀티미디어 연동 정합성 검증 스크립트용으로 사용
Troubleshooting
Problem
게시물 데이터가 쌓일수록 관리자에서 목록 조회하는 시간이 길어짐
Cause
커스텀 컬럼 테이블 간 RBAR(Row-By-Row) 연산으로 DB 과부하
Alternatives
1) 행을 열로 변환해 한번에 동적 컬럼 가져오기 2) DB를 단순 조회만 하고 WAS 메모리에서 조합하기
Decision
WAS 부하 감소를 위해 1번 방식으로 동적 컬럼을 PIVOT 하는 방식으로 처리함

튜닝 이후 2분 이상 걸리던 조회 시간이 10초 이내로 감소

Troubleshooting
Problem
운영 환경에서 장시간 구동 시 Heap 메모리 사용량이 지속적으로 증가하고 Full GC 이후에도 메모리가 회수되지 않는 문제가 발생 Heap Dump 분석 결과 WebAppClassLoader가 GC 대상이 되지 못하고 메모리에 지속적으로 남아있는 현상이 확인됨
Cause
Solr 연동 과정에서 사용한 HttpClient 및 관련 연결 객체가 명시적으로 종료되지 않아 Connection evictor 스레드가 WebAppClassLoader를 참조한 상태로 유지
Alternatives
1) Tomcat 및 DBCP 설정 변경 2) DataSource 방식(JNDI/DBCP2) 변경 3) Solr/HttpClient 자원 해제 로직 점검
Decision
초기에 HttpClient가 MyBatis쪽에 사용되면서 DB와 환경적 이슈를 의식했지만 조사 결과 Solr쪽 이슈를 확인해 명시적 자원 해제 로직을 추가하여 Connection evictor 스레드 참조를 제거

자원 해제 이후 모니터링 결과 스레드 해제가 안정적으로 유지되었음

  • 메모리 누수 해결로 무중단 이관 완료
  • RBAR → PIVOT 방식으로 DB 조회 성능 이슈 해결
  • 국가 역사 기록물의 영구 보존 클라우드 인프라 구축에 기여

회고: 엑셀 마이그레이션 + 커스텀 컬럼 구조라는 특이한 마이그레이션 구조로 메모리에 대한 부하 문제가 있어 배치처리에 대해 고민하게 만드는 프로젝트였습니다.

특히나 개발 환경에서는 없던 메모리 누수는 초기에 DB 연결쪽을 의심하면서 대처 시간이 늦어졌고, 로그 뿐만 아니라 스레드 시스템에 대한 관심을 좀 더 가지게 된 프로젝트였습니다.

← Portfolio 목록으로