이전 모놀리식 애플리케이션으로 시작할 때는 따로 떼어내서 별도의 마이크로서비스로 이동할 수 있는 부분을 찾아야 합니다. 대개 체계적인 모놀리식 앱은 그 구성요소가 매우 자연스럽게 나누어져 있으며, 서비스 클래스가 데이터 저장소 및 비즈니스 로직의 레이어를 위한 인터페이스 역할을 이미 하고 있습니다. 이러한 클래스는 클라이언트 호출을 마이크로 서비스에 연결하기에 이상적인 곳입니다.
모놀리식 앱에서 기능 분리
다음과 같은 몇 가지 방법으로 앱을 분리할 수 있습니다.
- 애플리케이션에서 분리할 수 있는 비즈니스 로직을 찾습니다.
- 정적 코드 분석 도구를 사용하여 섹션을 식별하는 등의 방법으로 자연스럽게 격리되는 코드를 찾습니다.
- 애플리케이션의 나머지 부분과 다른 확장 구성 설정이나 메모리 요구사항을 적용할 때 유용하게 활용할 수 있는 로직을 애플리케이션에서 찾습니다. 이를 통해 비용을 절감하여 리소스 사용률을 향상시킬 수 있습니다.
부자연스러운 종속 항목을 삭제하기 위해 코드를 리팩터링해야 할 수 있습니다. 이전 코드 내에서 리팩토링을 수행하고 프로덕션 환경에 배포한 후에 앱을 별도의 서비스로 분리하려고 시도하는 것이 좋습니다.
마이크로 서비스의 일반적인 영역은 다음과 같습니다.
- 사용자 또는 계정 정보
- 승인 및 세션 관리
- 환경설정 또는 구성 설정
- 알림 및 통신 서비스
- 사진 및 미디어, 특히 메타데이터
- 작업 대기열 작업자
앱 이전 절차
마이크로 서비스에 적합한 클래스 집합을 식별한 후 다음 단계를 수행합니다.
- 롤백이 용이하도록 이전 애플리케이션에 기존 코드를 제자리에 작동 상태로 둡니다.
- 새 코드 저장소를 만들거나, 최소한 기존 저장소에 하위 디렉토리를 만듭니다.
- 클래스를 새 위치에 복사합니다.
- HTTP API 후크를 제공하고 응답 문서의 형식을 올바르게 지정하는 뷰 레이어를 작성합니다.
- 새 코드를 별도의 애플리케이션으로 작성합니다(
app.yaml
만들기). - 새 마이크로서비스를 서비스 또는 별도의 프로젝트로 배포합니다.
- 코드가 올바르게 작동하는지 테스트합니다.
- 데이터를 기존 앱에서 새 마이크로 서비스로 이전합니다. 관련 설명은 아래를 참조하세요.
- 새 마이크로 서비스 애플리케이션을 사용하도록 기존의 이전 애플리케이션을 변경합니다.
- 변경된 이전 애플리케이션을 배포합니다.
- 모든 것이 예상대로 작동하고 이전 애플리케이션으로 롤백할 필요가 없는지 확인합니다.
- 이전 애플리케이션에서 모든 불필요한 코드를 삭제합니다.
실시간 애플리케이션에서 데이터 이전
실시간 애플리케이션에서의 데이터 이전은 까다로울 수 있으며 상황의 영향을 크게 받습니다. 대개 롤포워드 및 롤백을 용이하게 하기 위해 마이크로 서비스에서 임시 API를 사용하는 식으로 이전 및 새 Cloud Datastore 항목을 모두 채우는 코드를 작성한 다음 기존 데이터 세트를 이전하는 코드를 MapReduce 등으로 작성해야 합니다. 일반적으로 이 프로세스에는 어느 정도의 임시 코드와 중복 데이터가 사용됩니다. 구체적인 상황에 따라 출시 후에 후속 데이터 이전 작업을 수행해야 할 수도 있습니다. 최신 데이터를 이전 데이터로 덮어쓰지 않도록 주의하세요.
해야 할 작업이 많은 것처럼 보일 수 있지만 이것은 흔한 일이며, 새로운 마이크로 서비스로의 단독형 이전이 성공하지 못할 경우 롤포워드 및 롤백이 가능하도록 하는 데 있어서 중요합니다. 모든 것이 올바르게 이전되어 예상대로 작동하는지 확인한 후에만 임시 코드를 삭제하고 이전 저장소 위치에 있는 데이터를 삭제할 수 있습니다. 도중에 반드시 백업을 만드세요.
다음 단계
- App Engine의 마이크로서비스 아키텍처 개요를 확인합니다.
- App Engine에서 마이크로 서비스를 사용하여 개발, 테스트, 품질보증, 스테이징, 프로덕션 환경을 만들고 이름을 지정하는 방법을 이해합니다.
- 마이크로서비스 간 통신을 위한 API 설계 권장사항을 알아봅니다.
- 마이크로서비스 성능 권장사항을 알아봅니다.