AWS 기술 블로그
Amazon Q Developer 를 이용한 엑심베이의 JDK 자동화 업그레이드 사례
엑심베이(Eximbay)는 해외결제 시장점유율 1위의 PG(Payment Gateway) 기업으로, 국경 없는 결제 인프라 구축을 목표로 혁신적인 크로스보더 결제 핀테크 서비스를 제공하고 있습니다. 이를 바탕으로 온라인 결제 서비스, 오프라인 결제서비스, 외국인 대상 앱 서비스를 비롯하여 호텔 결제 솔루션을 제공하고 있습니다.
개요
엑심베이의 G-Billing(호텔 결제 솔루션)은 호텔에 특화된 결제 솔루션으로, Oracle PMS(Property Management System)와 결제 단말기를 연동하는 통합 결제 시스템입니다. 해당 서비스는 2020년에 오라클과 협력하여 개발된 대한민국 최초의 클라우드 기반 호텔 결제 솔루션으로, 호텔 운영을 더 효율적이고 안전하게 처리합니다. 국내 최초로 클라우드 기반 OPI(Oracle Payment Interface)를 구현했으며, 호텔 현장의 다양한 요구를 반영해 지속적으로 발전하고 있습니다
G-Billing 서비스는 PG(Payment Gateway)를 웹 사이트나 앱과 쉽게 연결해 주는 Payment Gateway Integration Framework 기반으로 안정적으로 운영되고 있었지만, 오랫동안 누적되어 온 기술 부채(Technical Debt)가 존재하였으며, 특히 JDK(Java Development Kit) 1.8은 이미 지원 종료가 다가오고 있어 최신 보안 패치와 성능 개선을 적용하기 위해 업그레이드가 반드시 필요한 상황이었습니다.
AI 지원을 통한 비즈니스 기회 확대
또한, 엑심베이는 신규 고객 유치를 위해 고객의 기술 요구사항을 충족하는 방안을 다각도로 검토하였으며, 그 결과 상당한 규모의 코드를 JDK 17로 업그레이드해야 한다는 점을 확인하였습니다.
- OpenAPI 구현 java 파일: 19개
- 총 코드 라인 수: 474,976줄
- java 코드 라인 수 : 113,837줄
- 사용 중인 라이브러리: 140개
JDK 1.8의 업그레이드를 위해서는 약 6MM(Man-Month)정도의 개발 인력이 필요한 것으로 검토되었습니다. 하지만 이는 신규 고객 유치를 위해 주어진 약 1개월의 시간에 비해 가용인력 및 시간적으로도 턱없이 부족한 상황이었습니다. 다행히 엑심베이는 AWS와 함께 소프트웨어 개발을 위한 생성형 AI 도구인 Amazon Q Developer 에 대한 기술 논의를 시작한 상태였으며, Amazon Q Developer의 transform 기능을 이용하여 JDK 1.8을 업그레이드하여 최종 고객의 비즈니스 요구사항을 빠르게 지원하는 것으로 결정하였습니다.
Amazon Q Developer Transform Code
Amazon Q Developer – Transform Code는 현재 JDK 8에서 JDK 21까지 Java 애플리케이션 업그레이드를 지원하며, Windows 기반 .NET 프레임워크 애플리케이션을 교차 플랫폼 .NET으로 변환할 수 있습니다. 이전에는 개발자가 각 애플리케이션을 업그레이드하는 데 수일이 소요되기도 했습니다. Amazon의 내부 테스트에 따르면 수동 업그레이드에 일반적으로 며칠 또는 몇 주가 소요되는 것에 비해, Transform Code를 사용하면 단 몇 분 만에 애플리케이션을 업그레이드할 수 있으며, 이를 통해 새로운 비즈니스 요건에 집중할 시간을 확보할 수 있습니다. 예를 들어 5명으로 구성된 내부 Amazon 팀은 2일 만에 1,000개의 프로덕션 애플리케이션을 Java 8에서 17로 업그레이드했습니다. 애플리케이션 업그레이드에는 평균적으로 10분이 소요됐고, 가장 오래 걸린 업그레이드 시간도 채 한 시간을 넘지 않았습니다.
Transform Code는 기존 코드를 자동으로 분석하고, 변환 계획을 생성하여 변환 작업을 완료합니다. 이러한 과정에서 패키지 종속성을 식별 및 업데이트하고, 더 이상 사용되지 않거나(Deprecated Code) 비효율적인 코드 구성 요소를 리팩터링하여 새로운 언어 프레임워크로 전환하고 보안 모범 사례를 통합합니다. 작업이 완료되면 변환된 코드를 검토하고 빌드 및 테스트를 완료한 후 결과를 확인하고 변경 사항을 적용할 수 있습니다.
코드 변환 방법
엑심베이의 호텔결제 솔루션(G-Billing)의 변환이 진행된 과정은 다음과 같습니다. 본 블로그에 캡쳐된 화면은 고객사 보안을 위해 샘플 화면이 제공 됩니다. 또한 Q Developer 의 프리티어 및 다양한 IDE에서의 사용에 대한 안내는 다음 블로그를 참고 부탁드립니다.
- IDE에 설치된 Q Developer 채팅 창에서
/transform
을 입력하고 transform 항목을 선택합니다. - 요구 사항을 확인하는 화면이 나타납니다. 현재 Code Transformation은 Java 8 및 Java 11 프로젝트를 Java 17혹은 22로의 업데이트를 지원합니다.
- 버전을 선택하면 JDK 경로를 입력하라는 메시지가 표시됩니다. 지침에 따라 경로를 입력합니다. 이것은 시스템에 따라 다를 수 있으며 amazon-corretto의 경우
/usr/lib/jvm/java-1.8.0-amazon-corretto
입니다. - 프로세스가 시작되면 “Open Transformation Hub” 옵션이 제공됩니다.
-
- Open Transformation Hub 버튼을 클릭하면. IDE에 작업 상태를 계속 알려주는 Transformation Hub 패널이 표시됩니다. Code Transformation는 변환 대상 코드를 보안 빌드 환경에서 모든 단위 테스트를 빌드하고 실행하려고 시도합니다. 이는 서비스가 변경한 사항 때문에 테스트 및 빌드가 실패하는지 사전에 먼저 확인하기 위해 수행됩니다. 이어서 변환에 대한 계획을 세운 뒤 코드를 변환작업을 시작합니다.
- 변환 작업은 자세한 상태 업데이트를 각 단계별로 제공하면서 진행됩니다. 빌드 및 컴파일 과정을 포함하여 , 더 이상 사용되지 않는 코드(Deprecated code) 에 대한 업그레이드 상황 등 다양한 단계(Step)를 실시간으로 확인할 수 있습니다. 변환 과정을 보면 오류가 발생할 경우 생성형 AI를 활용하여 자동으로 문제를 식별하고 수정 작업을 반복적으로 수행합니다. 이 프로세스는 프로젝트의 복잡성에 따라 10분 이상 소요될 수 있습니다.
-
- 프로세스가 완료되면 Code Transformation Summary 에서 제안된 변경 사항을 검토할 수 있습니다.
-
- 여러가지 종속성 변경 사항과 다른 파일의 변경 사항이 반영된 것을 볼 수 있습니다. 또한 변경된 파일을 클릭하면 Diff를 통해 변경된 상세 내용을 확인 할 수 있습니다.
- Code Transformation은 코드를 업그레이드하고 컴파일하며 정의된 모든 테스트를 성공적으로 통과하는 것을 목표로 동작합니다. 단위테스트(UnitTest)가 작성된 프로젝트의 경우 더욱 효율적으로 변환이 이루어질수 있습니다. 컴파일 시간 오류와 테스트 오류를 해결하기 위해 규칙과 생성형 AI를 사용하지만, 일부 변환은 부분적으로만 성공할 수도 있습니다. 이 내용에 대해서는 다음 문서를 참고 부탁드립니다.
- Amazon Q를 이용하면 단위테스트(UnitTest) 역시 쉽게 생성할수 있습니다. 다음 문서를 참고 부탁드립니다.
- 또한 추가 런타임 오류를 감지하기 위해 애플리케이션을 실행하지 않습니다. 따라서 이러한 추가 단계를 수행하고 남아있는 오류를 사용자는 직접 해결해야 하며 이 과정에서 Amazon Q Developer Chat 이나 CLI 와 같은 AI Code Assistant의 도움을 받아 해결할 수 있습니다. 이부분은 자연스러운 내용이므로 Code Transformation을 통해 완전한 비즈니스 로직이 구동되는 코드 변환이 이루어지지 않았다고 해서 작업이 실패한것이 아닙니다.
변환 결과 및 이점
엑심베이는 AWS Amazon Q Developer Code Transform 기능을 통해 전체 코드베이스 전체를 변환하였습니다. 기본적인 문법 변경과 API 호환성 문제가 빠르게 식별 되었으며 대부분의 코드가 JDK 17 문법에 맞게 변환되었습니다. 라이브러리의 경우 140개 중 약 40%의 업데이트 수행되었습니다.
- 보안 관련 라이브러리 (암호화, 인증)
- XML 처리 라이브러리
- 데이터베이스 커넥터
JDK 8에서 JDK 17로의 업그레이드는 단순한 버전 변경 이상의 의미가 있었습니다. 처음에는 Code Transformation을 통한 일괄 변환 코드가 완벽하게 동작하지 않았습니다. 하지만 위에 언급된 내용과 같이 이를 시작점으로, Amazon Q Developer CLI와 같은 AI Code Assistant 도구를 통해 점진적으로 문제를 개선하여 단시간에 성공적으로 업그레이드를 완료할 수 있었습니다. 이 과정은 AI 도구가 개발자의 작업을 완전히 대체하기보다는, 개발자의 전문성을 보완하고 생산성을 높이는 방향으로 활용되어야 함을 보여주었습니다.
업데이트를 통해 호환되는 최신 버전을 빠르게 식별하고 적용할 수 있었으며 전체적으로 다음과 같은 이점을 얻었습니다:
- 성능 향상: G1 가비지 컬렉터의 개선으로 GC 일시 중지 시간이 약 30% 감소
- 보안 강화: 최신 보안 패치 및 기능 적용
- 코드 품질 개선: 현대적인 Java 기능을 활용한 더 간결하고 가독성 높은 코드
- 개발 생산성 향상: 새로운 언어 기능과 API를 활용한 더 효율적인 개발
- 장기 지원: JDK 17은 LTS 버전으로 장기간 지원 보장
특히 주목할 만한 점은 생산성 향상입니다. 약 6MM(Man-Month) 규모의 작업을 개발자 3명이 단 4주 만에 완료했다는 것은 기존 방식 대비 약 3-4배의 생산성 향상을 의미합니다. 일반적으로 이러한 규모의 리팩토링 프로젝트는 3-4개월이 소요되는 것을 감안하면, AI Code Assistant Tool 의 활용이 개발 속도와 효율성에 상당한 영향을 미쳤음을 알 수 있습니다.
마무리
이번 경험은 적절한 도구 선택과 접근 방식이 개발 생산성을 획기적으로 향상시킬 수 있다는 것을 명확히 보여주었으며 엑심베이는 다음과 같은 Lessons Learned을 얻었습니다.
- AI 도구의 한계 인식: Amazon Q Code Transformation 는 초기 변환에 매우 유용 합니다, 하지만 실제 동작하는 코드로 만들기 위해서는 개발자의 전문 지식이 필요한것이 사실입니다.
- 점진적 접근의 중요성: 한 번에 모든 것을 변경하려는 시도보다, 모듈별로 점진적인 리팩토링이 더 효과적이었습니다.
- 테스트의 중요성: 자동화된 테스트가 있었다면 변환 과정에서 발생한 문제를 더 빠르게 발견할 수 있었을 것입니다.
- 도구 조합의 시너지: Amazon Q Code Transform의 대규모 변환 능력과 Amazon Q Developer와 같은 AI Code Assistant툴을 사용하여 세부적인 코드 분석 기능을 조합하는 것이 효과적이었습니다.
엑심베이는 AWS의 적극적인 도움을 받아 Amazon Q Developer와 개발자의 전문성을 조화롭게 활용하여 java 파일당 2만줄이상, 63만 라인의 핵심 서비스 레거시 코드를 분석하고 이것을 클라우드 네이티브 환경으로의 현대화를 진행하는 등의 도전적인 과제를 계속 진행하고 있습니다. 특히 최근에 출시된 Amazon Q Developer CLI 기능을 통해 IDE의 제약에서 벗어나 보다 생산성을 높이고 있습니다. 이 경험을 기반으로 다음 도전은 3~4배의 생산성 향상을 목표로 하고 있습니다 Amazon Q Developer CLI 에 대해서는 다음 블로그를 참고 부탁드립니다.
본 고객 사례를 통해 많은 고객분들께서 Amazon Q Developer Transform Code 및 Amazon Q Developer CLI 를 이용하시고 개발 생산성 향상을 통해 비즈니스의 성장에 도움이 되었으면 좋겠습니다.