상황: 은행의 핵심 시스템은 수십 년 된 'COBOL'이라는 낡은 언어로 만들어져 있었습니다. 이를 업데이트하려면 복잡한 절차가 필요했습니다.
기존 방식 (Jenkins): 업데이트 작업은 '제니스 (Jenkins)'라는 자동화 기계가 담당했는데, 이 기계는 **4 개의 서로 다른 창고 (저장소)**에 흩어진 **수제 도구 (Groovy 스크립트)**들을 사용했습니다.
문제점:
매번 새로 조립: 작업이 시작될 때마다 필요한 도구들을 매번 창고에서 찾아서 조립해야 해서 시간이 매우 오래 걸렸습니다. (런타임 의존성 설치)
유리병처럼 깨지기 쉬움: 제니스 기계에 딱 맞게 만들어져서, 기계가 조금만 변해도 전체 공장이 멈췄습니다. (벤더 락인)
불안정: 도구를 매번 새로 조립하다 보니, "어제 잘 되던 게 오늘 왜 안 되지?"라는 문제가 자주 발생했습니다.
보안 위험: 도구를 조립하는 과정에서 비밀번호 같은 비밀 정보가 노출될 위험이 있었습니다.
결국 개발자들은 업데이트를 하려면 **724 초 (약 12 분)**나 기다려야 했고, 이는 업무 효율을 떨어뜨리는 큰 걸림돌이었습니다.
🚀 2. 해결책: '모든 것이 준비된' 컨테이너 트럭으로 전환
이들은 공장을 완전히 뜯어고쳐 현대적인 컨테이너 물류 시스템으로 바꾸기로 했습니다.
새로운 방식 (컨테이너화):
미리 준비된 트럭 (OCI 이미지): 이제 모든 도구 (COBOL 컴파일러, 테스트 프로그램 등) 가 미리 싣고 다니는 컨테이너 트럭 안에 들어있습니다.
작업 시작: 트럭이 현장에 도착하자마자 바로 작업을 시작할 수 있습니다. 더 이상 도구를 찾아서 조립할 필요가 없습니다.
중요한 변화 (추상화 레이어):
통역사 도입: 공장의 핵심 로직 (무엇을 할지) 과 기계의 종류 (제니스냐, 깃허브 액션이냐) 를 분리했습니다. 마치 통역사가 있는 것처럼, 어떤 기계가 오든 통역사가 명령을 번역해서 실행하게 만들었습니다.
결과: 이제 공장은 제니스뿐만 아니라 다른 자동화 기계 (깃허브 액션 등) 에서도 똑같이 작동할 수 있게 되어 이동 자유도가 생겼습니다.
📊 3. 성과: 놀라운 속도 향상과 안전
이 리모델링을 통해 얻은 결과는 매우 인상적이었습니다.
속도 82% 단축: 작업 시간이 724 초에서 130 초로 줄었습니다. 마치 12 분 걸리던 출근길이 2 분으로 단축된 것과 같습니다.
안전 강화: 모든 도구가 미리 검증된 컨테이너 안에 들어있어, 외부에서 해킹당하거나 잘못된 도구가 섞일 위험이 사라졌습니다.
유지보수 쉬움: 4 개로 나뉘어 있던 창고가 하나의 깔끔한 창고로 통합되어, 새로운 직원이 들어와도 쉽게 적응할 수 있게 되었습니다.
💡 4. 교훈: 기술보다 중요한 '사람과 문화'
이 프로젝트에서 기술적인 성공만큼이나 중요한 것은 사람들의 마음가짐이었습니다.
낡은 시스템에 익숙한 직원들: 수십 년간 메인프레임 (대형 컴퓨터) 에서 일해 온 COBOL 개발자들은 새로운 방식 (깃허브 등) 을 처음에 두려워했습니다.
함께하는 변화: 기술 팀은 개발자들을 배제하지 않고, 그들의 의견을 듣고 함께 해결책을 찾았습니다. 마치 낡은 공장을 리모델링할 때 기존 노동자들의 숙련도를 존중하며 새로운 도구를 가르쳐 준 것과 같습니다.
균형 잡기: 너무 세분화된 모듈보다는, 직관적으로 이해하기 쉬운 '단일 스크립트' 방식을 선택하여 누구나 쉽게 접근할 수 있도록 했습니다.
🎯 결론: 왜 이 이야기가 중요한가?
이 논문은 **"오래된 시스템을 버리고 새로 만드는 것만 능사가 아니다"**라는 것을 보여줍니다.
은행처럼 엄격한 보안 규정과 **오래된 기술 (COBOL)**이 공존하는 곳에서도, 컨테이너와 추상화 같은 현대적인 기술을 적용하면 속도, 안전, 유연성을 모두 잡을 수 있다는 것을 증명했습니다.
마치 낡은 증기 기관차를 최신형 전기 기관차로 바꾸지 않고, 기존 기관차에 최신 엔진과 내비게이션을 장착해서 다시 달릴 수 있게 만든 것과 같은 성공 사례입니다. 이는 금융권을 넘어, 오래된 시스템을 가진 모든 기업에게 귀중한 교훈을 줍니다.
이 논문은 덴마크의 금융 IT 서비스 제공업체인 Bankdata 가 레거시 COBOL 시스템의 CI/CD 파이프라인을 현대화하기 위해 수행한 산업 사례 연구 (Industrial Case Study) 를 다룹니다. Jenkins 기반의 파이프라인이 가진 취약점과 기술 부채를 해결하고, 컨테이너화 및 추상화 계층을 도입하여 이식성과 성능을 극대화한 과정을 상세히 기술하고 있습니다.
다음은 논문의 핵심 내용을 요약한 기술적 요약입니다.
1. 문제 정의 (Problem)
Bankdata 의 기존 CI/CD 파이프라인은 다음과 같은 심각한 문제를 안고 있었습니다:
높은 기술 부채와 복잡성: Jenkins 와 Groovy 스크립트에 기반한 파이프라인이 4 개의 저장소에 분산되어 있었으며, 플랫폼 특정 로직 (Jenkins-specific logic) 과 강하게 결합되어 있었습니다.
비효율적인 의존성 관리: COBOL 컴파일러 및 테스트 도구와 같은 필수 의존성들이 런타임 시점에 매번 설치되었습니다. 이로 인해 환경 불일치가 발생하고 실행 시간이 길어졌습니다.
벤더 락인 (Vendor Lock-in): 파이프라인 로직이 Jenkins 의 고유 기능 (CPS 변환, currentBuild 객체 등) 에 깊게 의존하여 다른 CI/CD 플랫폼으로의 이주가 매우 어려웠습니다.
보안 및 유지보수 우려: 런타임 의존성 설치로 인한 보안 취약점과 코드 분산으로 인한 유지보수 비용이 높았습니다.
2. 방법론 (Methodology)
Bankdata 는 Jenkins 기반 파이프라인을 컨테이너화된 아키텍처로 전환하기 위해 다음과 같은 단계별 마이그레이션 전략을 수립하고 실행했습니다:
플랫폼 종속성 제거 (Decoupling):
Jenkins 의 고유 함수들을 식별하고, 이를 대체할 **추상화 계층 (Abstraction Layer)**을 Groovy 패키지로 구현했습니다.
파이프라인 로직이 직접 Jenkins API 를 호출하는 대신, 이 추상화 계층을 통해 플랫폼 중립적인 인터페이스를 사용하도록 리팩토링했습니다.
currentBuild 객체 의존성을 환경 변수나 Git 명령어로 대체하고, 단계별 시각화는 표준 로그 출력으로 대체하여 플랫폼 독립성을 확보했습니다.
컨테이너화 및 의존성 최적화:
모든 필수 도구 (GnuCOBOL, Zowe CLI, COBOL Expander, Groovy 등) 를 사전에 빌드된 OCI 준수 컨테이너 이미지 내에 포함시켰습니다.
이를 통해 런타임 의존성 설치를 완전히 제거하고, 실행 환경의 재현성 (Reproducibility) 을 보장했습니다.
베이스 이미지를 Debian 에서 Alpine 으로 변경하고, 불필요한 빌드 종속성을 제거하는 등의 최적화를 통해 이미지 크기를 1.4GB 에서 559MB 로 60% 축소했습니다.
플랫폼 이전 (GitHub Actions):
리팩토링된 파이프라인을 GitHub Actions 에서 실행하여 이식성을 입증했습니다.
저장소 구조를 단순화하여 COBOL 소스 코드와 파이프라인 로직을 분리하고, 역할 기반 접근 제어 (RBAC) 를 적용했습니다.
3. 주요 기여 (Key Contributions)
규제된 메인프레임 환경에서의 엔드 - 투 - 엔드 마이그레이션 청사진: 금융 보안 규정과 같은 엄격한 제약 조건 하에서 레거시 COBOL 파이프라인을 현대화하는 구체적인 방법론을 제시했습니다.
이식 가능한 아키텍처 패턴: 플랫폼 특정 로직을 추상화 계층으로 격리하고 컨테이너를 통해 의존성을 관리하는 패턴을 제안하여, Jenkins 에서 GitHub Actions(GitLab CI 등) 로의 전환 장벽을 낮췄습니다.
실증적 평가: 기술적 성능 개선뿐만 아니라, 이해관계자 (개발자, DevOps 엔지니어) 를 대상으로 한 정성적 피드백과 조직적 수용성 (Organizational Adoption) 에 대한 통찰을 제공했습니다.
4. 결과 (Results)
성능 향상: 파이프라인 실행 시간이 Jenkins 기준 평균 724 초에서 GitHub Actions 기준 130 초로 단축되어 약 82.1% 의 성능 개선을 달성했습니다. 이는 주로 런타임 의존성 설치 제거와 컨테이너 최적화 덕분입니다.
유지보수성 개선: 4 개의 분산된 저장소가 단일 통합 구조로 단순화되었고, 코드 중복이 줄어들어 온보딩 (Onboarding) 과 디버깅이 용이해졌습니다.
보안 강화: 사전 검증된 컨테이너 이미지를 사용하여 의존성 공급망 공격 위험을 줄였으며, 비밀 정보 (Secrets) 처리를 위한 더 엄격한 정책을 도입했습니다.
기능적 무결성: 마이그레이션 과정에서 COBOL 애플리케이션의 비즈니스 로직이나 워크플로우에는 변경이 없었으며, 모든 단위 테스트와 통합 테스트가 성공적으로 통과되었습니다.
5. 의의 및 시사점 (Significance)
레거시 시스템 현대화의 실증: COBOL 과 같은 레거시 기술과 메인프레임 환경에서도 DevOps 및 컨테이너화 원칙을 적용하여 성공적으로 현대화할 수 있음을 입증했습니다.
규제 준수와 혁신의 균형: 금융 산업과 같이 엄격한 규정과 보안이 요구되는 환경에서도 벤더 락인을 탈피하고 유연한 CI/CD 파이프라인을 구축할 수 있음을 보여줍니다.
조직적 교훈: 기술적 리팩토링뿐만 아니라, 레거시 개발자 (COBOL 개발자) 를 초기 단계부터 참여시키고 워크플로우를 존중하는 것이 마이그레이션 성공의 핵심 요소임을 강조했습니다.
확장성: 이 연구에서 제시된 아키텍처 패턴 (추상화 계층 + 컨테이너화) 은 COBOL 에 국한되지 않고, 다른 레거시 스택이나 현대적 스택의 CI/CD 파이프라인 개선에도 적용 가능한 보편적인 해법으로 평가됩니다.
결론적으로, 이 논문은 Bankdata 의 성공적인 마이그레이션을 통해 레거시 시스템의 CI/CD 파이프라인이 단순히 도구를 교체하는 것을 넘어, 아키텍처적 재설계와 조직적 협업을 통해 성능, 보안, 유지보수성을 동시에 개선할 수 있음을 보여줍니다.