지난 글에서는 성공적인 MSA 전환을 위한 전략과 MSA 성공의 핵심 요소를 알아봤습니다. 이번 글에서는 MSA 전환의 모든 단계를 지원하는 LG CNS ‘데브온 MSA 스위트’를 살펴보겠습니다.
MSA 전환 모든 단계를 지원하는 LG CNS 데브온 MSA 스위트
LG CNS는 기업이 MSA로 전환하는 과정에서 시행착오를 최소화하고 애초 기대했던 효과를 실현할 수 있도록 ‘데브온 MSA 스위트(DevOn MSA Suite)’를 공급하고 있습니다. 데브온은 개발을 의미하는 ‘Develop’와 활동 상태를 뜻하는 ‘On’의 합성어로, 개발부터 운영까지 기업이 MSA로 전환하는 모든 공정을 자동화하는 플랫폼입니다.
구체적으로 데브온 MSA 스위트는 기업이 모놀리틱 시스템을 MSA로 전환할 때 주로 시행착오를 겪는 4가지 분야 즉, 마이크로서비스 도출, 마이크로서비스와 레거시의 연동, 데이터 정합성, 임베디드 WAS 관리 등에 대해 실질적인 해법을 제시합니다. 하나씩 자세히 살펴보겠습니다.
‘데브온 마이크로서비스 시뮬레이터’를 이용한 최적의 서비스 정의
거대한 모놀리틱 시스템을 MSA로 전환할 때 가장 어려운 점은 마이크로서비스를 식별하고 검증하는 것입니다. 복잡하게 얽혀 있는 정보를 분리하고 독립적인 마이크로서비스를 구분하는 작업은 생각보다 쉽지 않습니다. 특히 개발자 입장에서는 각 서비스 경계에 있는 코드를 정확히 인지하지 못하면 마이크로서비스를 개발, 수정하는 것이 사실상 불가능합니다.
데브온 MSA 스위트에는 이처럼 마이크로서비스를 도출, 검증할 때 사용할 수 있는 다양한 툴이 포함돼 있습니다. LG CNS가 기존에 수행한 다양한 MSA 프로젝트 경험을 학습한 인공지능이 기업의 시스템 특성에 맞게 자동으로 마이크로서비스를 추천하는 기능도 지원합니다.
구체적으로 살펴보겠습니다. 최적의 마이크로서비스를 정의하려면 먼저 기존 시스템을 분석해야 합니다. 여기에는 ‘데브온 리버스(DevOn Reverse)’라는 영향도 분석 툴을 활용합니다. 레거시 분석 정보뿐만 아니라 시스템 연관 목록, 추출 관계도, CRUD 매트릭스, 프로그램 목록 등 MSA 전환에 필요한 정보를 함께 제공합니다. 이어 현재 시스템의 관계를 분석해야 하는데요. 이 작업은 ‘데브온 마이크로서비스 시뮬레이터(DevOn Microservice Simulator)’가 맡습니다. 데브온 리버스의 분석 결과를 기반으로 시뮬레이션, 또는 자동 추천 기능을 통해 최적의 마이크로서비스를 추출합니다.
최종 결과는 [그림 2]와 같이 원과 화살표, 통계정보로 이루어져 있습니다. 원은 마이크로서비스를 의미하며 원 내부 상단에는 API 개수, 좌측 하단에는 분산 트랜잭션 개수, 우측 하단에는 조인 쿼리 개수가 나타납니다. 화살표는 마이크로서비스 간 호출과 의존성 관계를 나타내는데요. 관계의 강도에 따라 두께가 달라집니다.
데브온 마이크로서비스 시뮬레이터는 이러한 정보를 종합해 시뮬레이션 포인트 수치를 제공합니다. [그림 2]를 보면 서비스 병합 후 변경된 서비스 개수, 서비스 호출 개수, 조인 쿼리 및 시뮬레이션 포인트가 줄어든 것을 알 수 있습니다. 시뮬레이션 포인트는 값이 낮을수록 서비스가 잘 도출됐음을 의미합니다.
마이크로서비스와 레거시의 안정적인 연동 ‘데브온 부트 컨버터’
기업의 MSA 도입 형태를 보면 시스템 전체를 한꺼번에 바꾸는 빅뱅 방식보다는 시스템을 점진적으로 전환하는 스트랭글러 방식을 적용하는 경우가 대부분입니다. 그런데 이렇게 신구 시스템이 일정 기간 공존하면 레거시 시스템과 마이크로서비스 간 API 통신이 필요하고, 상이한 프로토콜과 메시지 포맷을 조율할 중간 계층 역할이 필수적입니다.
실무에서 이런 계층을 만들 때 애를 먹는 대표적인 사례가 바로 인/아웃 스펙 매핑입니다. 예를 들어 기존 레거시에서 보내는 스펙은 Name, Email, Phone인데, 신규 애플리케이션에서 받는 스펙은 CustomerName, BusinessEmail, Phone인 식이죠. 이렇게 서로 다른 스펙을 시스템 수정 없이 주고받으려면 별도의 매핑 솔루션이 인/아웃 스펙을 처리할 수 있어야 합니다.
데브온 MSA 스위트는 이런 문제를 ‘데브온 부트 컨버터(DevOn Boot Convertor)’를 이용해 해결합니다. 이 툴은 기존 레거시 시스템과 새 클라우드 네이티브 애플리케이션 사이에서 손상 방지 계층(Anti Corruption Layer) 역할을 하며 두 시스템 간 통신을 지원합니다.
예를 들면 http 프로토콜에 Json 데이터 포맷을 사용하는 클라우드 네이티브 애플리케이션과 TCP 프로토콜에 고정 길이 전문을 사용하는 레거시 시스템이 통신한다면, 프로토콜과 데이터 포맷을 변환해야 하고 이를 위해 개별 시스템 간 상호 정의된 인/아웃 스펙을 정해야 합니다. 이런 스펙 정보를 데브온 부트 컨버터에 등록하면 두 시스템 간 통신 내용이 자동으로 변환됩니다. 앞서 언급한 사례에서 Name이 BusinessName으로 자동 변환되는 식입니다. 다량의 스펙을 복사하는 기능을 제공하므로 대기업 시스템에도 쉽게 적용할 수 있습니다.
데이터 정합성 지킴이 ‘데브온 부트 사가’
마이크로서비스는 기본적으로 설계와 런타임 간의 커플링을 해소하기 위해 데이터베이스를 서비스별로 분리합니다. 이렇게 데이터베이스가 분리되면 서비스 간 원시적인 트랜잭션 처리가 불가능한데요. 특정 업무는 여전히 트랜잭션 처리가 필요할 수 있습니다. 이럴 때 현장에서는 보통 사가(Saga) 패턴을 고려합니다. 사가 패턴은 비즈니스 흐름 중간에 실패가 발생했을 때 앞서 커밋 완료된 서비스에 보상 이벤트를 부여하는 방식으로 다양한 서비스에 걸친 트랜잭션을 처리합니다.
사가 패턴이 까다로운 것은 비동기 메시징으로 마이크로서비스 간 이벤트를 전달하면서 동시에 데이터를 중복으로 처리해서는 안 되기 때문입니다. 즉, 프로듀서(송신자)는 최소 한 번 이 상 메시지를 전송하고 컨슈머(수신자)는 중복으로 처리하지 않아야 하죠. 이때는 트랜잭셔널 아웃박스(Transactional Outbox), 아이뎀포턴트 컨슈머(Idempotent Consumer) 등을 활용해 마이크로서비스 간 데이터 정합성을 유지할 수 있습니다.
LG CNS 데브온 MSA 스위트의 데브온 부트 사가(DevOn Boot Saga)에는 이처럼 서비스 간 데이터 정합성을 보장하는 다양한 툴이 포함돼 있습니다. 이런 툴을 이용해 정확한 상태의 데이터를 제공해야 하는 크리티컬한 비즈니스를 손쉽게 개발합니다. 또한, 마이크로서비스에서 발생한 오류를 빠르게 확인해 대응할 수 있습니다.
예를 들어 페이 서비스와 멤버십 서비스 등 2가지 마이크로서비스로 구성된 시스템을 가정해 보겠습니다. 사용자가 결제를 요청하면 결제 내역 생성 → 포인트 차감 → 페이머니 차감 → 결제내역 완료 업데이트 → 종료되는 프로세스입니다. 여기서 만약 페이머니 차감에 실패하면 이미 차감된 포인트를 복원한 후 결제 내역을 ‘실패’로 업데이트하는 보상 처리를 해야 합니다.
이를 데브온 부트 사가로 구현한 것이 [그림 3]입니다. 사용자가 결제 요청을 하면 결제 내역 레코드를 생성합니다(①). 멤버십 서비스에 포인트 차감 요청을 보내고(②) 포인트 차감 성공 응답을 받으면(③) 페이머니를 차감합니다(④). 이 과정이 성공하면 결제 내역을 ‘성공’으로 업데이트(⑤)하고 종료합니다. 반면 페이머니 차감에 실패하면 앞서 수행된 순서의 역순으로 보상 처리를 합니다. 즉, 멤버십 서비스 포인트 차감 원복 요청을 보내고(⑥), 결제 내역을 실패로 업데이트한 후 사가를 종료합니다(⑦).
‘임베디드 레나’를 이용한 MSA WAS 관리
마지막은 MSA 환경의 WAS에 관한 내용입니다. MSA에서는 임베디드 WAS를 서비스에 내장해 함께 배포하는데요. 활용 형태가 바뀌는 만큼 MSA 환경에 맞는 새로운 운영 방식이 필요합니다.
예를 들어 MSA 환경에서는 컨테이너의 스케일링과 재시작을 위해 마이크로서비스가 반드시 스테이트리스(stateless, 각 요청을 독립적으로 처리할 수 있는 상태)여야 합니다. 이를 위해 보통은 애플리케이션 내부에 포함된 설정을 외부로 분리하는데요. 대표적인 방법이 바로 스프링 클라우드 컨피그(Spring Cloud Config)입니다.
스프링 클라우드 컨피그 설정 관리자가 깃 리포지토리와 연동되고 이 설정 서버가 마이크로서비스를 제어합니다. 문제는 마이크로서비스 외부에 설정 서버를 별도로 구성해야 하는 점입니다. 한마디로 손이 많이 간다는 점이죠. 기업이 MSA의 임베디드 WAS 관리를 부담스럽게 느끼는 것도 이 때문입니다.
LG CNS의 미들웨어 솔루션 임베디드 레나(Embedded LENA)는 MSA 환경의 이런 어려움을 해소하기 위해 개발됐습니다. 레나 매니저를 설정 서버로 사용해 통합 운영, 관리할 수 있습니다. 구체적으로는 레나 매니저를 통해 서비스 그룹으로 등록된 WAS 인스턴스 개수와 정상 상태 여부, 언제 생성ㆍ소멸했는지 등을 확인할 수 있습니다.
이벤트 추적 기능도 주목할 만합니다. 예를 들어 컨테이너 MSA 환경에서 특정 인스턴스가 소멸 혹은 생성되면, 레나 매니저의 토폴로지 뷰로 WAS 인스턴스에 어떤 이벤트가 있었는지 확인할 수 있습니다. 여기서 이벤트란 레나에서 발생하는 메모리 부족, 풀 가비지 컬렉터, 스턱 쓰레드, 예외 등을 모두 아우릅니다. 특정 일자와 비교할 수 있어 장애가 발생했을 때 원인을 분석하는 데도 유용합니다.
이처럼 데브온 MSA 스위트는 데브온 마이크로서비스 시뮬레이터, 데브온 부트 컨버터, 데브온 부트 사가, 임베디드 레나 등을 통해 기업이 MSA로 전환하는 모든 단계를 지원하며, 기업이 주로 시행착오를 겪는 상황에 대해 구체적인 해법을 제시합니다.
기술은 물론 문화적 변화까지 함께 준비해야
오늘날 비즈니스 퀀텀 점프를 노리는 기업의 큰 고민 중 하나가 바로 MSA 전환입니다. 그러나 서비스를 식별하고 개별 마이크로서비스가 온전한 독립성을 가질 수 있도록 아키텍처를 정교하게 설계하는 것은 쉬운 일이 아닙니다. 따라서 마이크로서비스 도출, 마이크로서비스와 레거시의 연동, 데이터 정합성, 임베디드 WAS 관리 등 기업이 실제 프로젝트에서 가장 어려움을 겪는 영역을 중심으로 실질적인 해법을 제시하는 솔루션을 선택하는 것이 중요합니다.
적절한 툴과 방법론을 결정했다면 남은 것은 MSA의 세계에 실제로 발을 내딛는 것입니다. MSA의 성패를 가르는 것도 바로 이 지점인데요. 빠르게 변하는 비즈니스 환경에 대응하고 선도그룹이 되기 위해서는 MSA를 통해 이루려고 하는 비즈니스 목표를 분명히 하고 이를 전사적으로 공유해야 합니다. 특히, MSA를 단순한 기술로 이해하기보다는 조직, 문화적 변화와 기술적 특성을 연계해 준비하는 것이 중요합니다. 그것이야말로 실패하지 않는 MSA 구현 전략의 핵심입니다.
글 ㅣ LG CNS DevOn MSA팀 안정수 책임