콘텐츠로 이동하기
애플리케이션-개발

Spring Boot 및 Spring Cloud GCP를 사용한 Java 앱 현대화

2020년 12월 8일
Mike Eltsufin

Software Engineer

Ray Tsang

Developer Advocate

Google Cloud 사용해 보기

$300의 무료 크레딧과 20개 이상의 항상 무료인 제품으로 Google Cloud 사용을 시작해보세요.

무료 체험

 * 본 아티클의 원문은 2020년 10월 28일 Google Cloud 블로그(영문)에 게재되었습니다.

최근 들어 Java 개발자들에게 반가운 소식이 연달아 들려오고 있습니다. 6개월마다 새로운 Java 언어 기능이 출시되고 있고, Kotlin과 같은 JVM 언어가 새로 등장했으며, 기존 모놀리식 애플리케이션에서 Spring Boot와 같은 현대적인 프레임워크를 갖춘 마이크로서비스 아키텍처로 전환이 이루어지고 있습니다. 이 가운데 Google은 Spring Cloud GCP를 통해 기업이 수월하게 Google Cloud에서 기존 애플리케이션을 현대화하고 클라우드 기반 애플리케이션을 빌드할 수 있도록 돕고 있습니다. 

2년 전에 첫선을 보인 Spring Cloud GCP는 Spring Boot 애플리케이션에서 관용적 Spring Boot API를 통해 십여 개가 넘는 Google Cloud 서비스를 간편하게 활용할 수 있도록 지원합니다. 즉 Google Cloud 전용 클라이언트 라이브러리를 특별히 배우지 않아도 다음과 같은 관리형 서비스의 이점을 활용하고 실현할 수 있습니다.

  1. 기존 Spring Boot 애플리케이션이 있다면 코드를 거의 변경하지 않고도 Google Cloud 서비스로 쉽게 마이그레이션할 수 있습니다.

  2. 새로운 Spring Boot 애플리케이션을 작성하는 경우 익히 알고 있는 프레임워크 API를 통해 Google Cloud 서비스를 활용할 수 있습니다.

Major League Baseball(MLB)은 최근 Google Cloud를 도입하며 클라우드로 이전 작업에 착수했습니다. GKE 및 Anthos를 사용한 인프라 현대화에 더해 마이크로서비스 아키텍처를 통한 현대화 작업까지 진행하고 있습니다. 이 조직에서는 Spring Boot가 이미 표준 Java 프레임워크로 사용되고 있습니다. MLB는 Spring Cloud GCP 덕분에 기존의 Spring Boot 지식만으로도 Google Cloud를 신속하게 도입할 수 있었습니다.

"Spring Cloud GCP를 사용하여 서비스 계정 사용자 인증 정보와 Google Cloud 서비스 액세스 권한을 관리하는 데 도움을 받고 있습니다.” - 조셉 데이비, MLB 수석 소프트웨어 엔지니어

온라인 소매업체인 bol.com 역시 Spring Cloud GCP를 사용하여 GCP에서 보다 쉽게 Spring Boot 애플리케이션을 개발할 수 있었습니다.

"[bol.com]에서 구축한 환경의 많은 부분이 Spring Boot를 기반으로 하고 있는데 이러한 Spring Boot 애플리케이션과 GCP를 통합하기 위해 Spring Boot에서 자체 모듈을 빌드할 역량이 부족한 상황이었습니다. Spring Cloud GCP 덕분에 이러한 부담을 덜 수 있었고 Google Cloud Platform과의 통합이 훨씬 수월하게 이루어지고 있습니다." - 모리스 제이젠, bol.com 소프트웨어 엔지니어

커스텀 코드의 필요성을 거의 또는 아예 배제한 개발자 생산성 도구

Spring Cloud GCP를 통해 완전 관리형 데이터베이스 도입, 이벤트 기반 애플리케이션 개발, 분산 trace 및 중앙 집중식 로깅 추가, 보안 비밀 가져오기 등의 목적으로 새로운 앱을 개발하거나 기존 앱을 마이그레이션할 수 있으며 이 과정에서 커스텀 코드나 커스텀 인프라를 유지관리할 필요가 거의 또는 아예 없습니다. Spring Cloud GCP를 통해 얻을 수 있는 통합 측면의 이점을 몇 가지 살펴보겠습니다.

데이터

PostgreSQL, MySQL, MS SQL과 같은 일반 RDBMS의 경우 Cloud SQL을 사용하고, 계속해서 Spring Data로 Hibernate를 사용하며, 단순히 JDBC 구성을 업데이트하는 방법으로 Cloud SQL에 연결할 수 있습니다. 그렇다면 Firestore, Datastore, 전 세계에 분산된 RDBMS Cloud Spanner와 같은 Google Cloud 데이터베이스는 어떨까요? Spring Cloud GCP에서 필요한 모든 데이터 추상화를 구현하므로 개발자는 비즈니스 로직을 다시 작성할 필요 없이 계속해서 Spring Data와 해당 데이터 저장소를 사용할 수 있습니다. 예를 들어 완전 관리형 NoSQL 데이터베이스인 Datastore도 Spring Data에서 지원하는 여타 데이터베이스와 마찬가지로 사용할 수 있습니다.

Hibernate/JPA 클래스에 주석을 추가하는 방법과 유사하게 POJO 클래스에 Spring Cloud GCP 주석을 추가하면 됩니다.

로드 중...

그런 다음 자체 데이터 액세스 객체를 구현할 필요 없이 Spring Data Repository 인터페이스를 확장하여 커스텀 쿼리 방법은 물론 전체 CRUD 작업까지 수행할 수 있습니다.

로드 중...

Spring Data와 Spring Cloud GCP는 자동으로 CRUD 작업을 구현하고 사용자를 대신해 쿼리를 생성합니다. 무엇보다도 데이터 변경 이벤트 감사 및 캡처와 같은 Spring Data의 기본 제공 기능을 사용할 수 있는 것이 장점입니다. 

GitHub에서 Datastore, Firestore, Spanner용 Spring Data와 관련된 모든 샘플을 찾아볼 수 있습니다.

메시지

비동기식 메시지 처리 및 이벤트 기반 아키텍처의 경우 복잡한 분산형 메시징 시스템을 직접 프로비저닝하고 유지관리할 필요 없이 간단히 Pub/Sub를 사용하면 됩니다. Spring Integration 또는 Spring Cloud Streams와 같은 높은 수준의 추상화를 사용하면 몇 번의 구성 변경만으로 온프레미스 메시징 시스템을 Pub/Sub로 전환할 수 있습니다.

예를 들어 Spring Integration을 사용하여 메시지를 게시할 수 있는 일반 비즈니스 인터페이스를 정의한 다음 Pub/Sub로 메시지를 보내도록 구성할 수 있습니다.

로드 중...

메시지 사용 방식은 동일합니다. 다음은 애플리케이션을 간단히 구성하여 Pub/Sub에서 메시지를 수신하도록 Spring Cloud Stream 및 표준 Java 8 스트리밍 인터페이스를 사용하는 예시입니다.

로드 중...

GitHub에서 Spring Integration 및 Spring Cloud Stream과 관련된 모든 샘플을 찾아볼 수 있습니다.

관측 가능성

사용자 요청이 여러 마이크로서비스에 의해 처리되고 마이크로서비스 전체 호출 스택을 시각화하고자 하는 경우에는 서비스에 분산 추적을 추가하면 됩니다. Google Cloud에서는 모든 trace를 Cloud Trace에 저장할 수 있으므로 자체 추적 서버와 스토리지를 관리할 필요가 없습니다.

Spring Cloud GCP Trace 시작 조건을 종속 항목에 추가하기만 하면 필요한 모든 분산 추적 문맥 정보(예: trace ID, 스팬 ID 등)가 캡처, 전파된 후 Cloud Trace에 보고됩니다.

로드 중...

이것이 전부이며 커스텀 코드는 필요하지 않습니다. 모든 계측 및 trace 기능에서는 Spring Cloud Sleuth를 사용합니다. Spring Cloud GCP는 모든 Spring Cloud Sleuth 기능을 지원하므로 분산 추적이 Spring MVC, WebFlux, RestTemplate, Spring Integration 등과 자동으로 통합됩니다.

https://storage.googleapis.com/gweb-cloudblog-publish/images/trace_waterfall_view_eh7NQIx.max-1200x1200.jpg

Cloud Trace는 분산형 trace 그래프를 생성합니다. 단, '로그 표시' 체크박스를 확인하세요. 이 trace/로그 상호 연결 기능은 로그 메시지를 각 trace에 연결하므로 문제 격리 요청에 연결된 로그를 확인할 수 있습니다. Spring Cloud GCP Logging 시작 조건과 사전 정의된 로깅 구성을 사용하면 trace 상호 연결 데이터가 포함된 로그 항목을 자동으로 생성할 수 있습니다.

로드 중...

GitHub에서 Logging 및 Trace와 관련된 모든 샘플을 찾아볼 수 있습니다.

보안 비밀

마이크로서비스가 데이터베이스 비밀번호 또는 기타 사용자 인증 정보와 같은 보안 비밀에 액세스해야 하는 경우가 있습니다. 기본적으로 사용자 인증 정보는 HashiCorp Vault와 같은 보안 비밀 저장소에 저장될 수 있습니다. Google Cloud에서 계속 Vault를 사용하는 방법도 있지만 Google Cloud에서도 동일한 용도의 Secret Manager 서비스를 제공합니다. 단순히 Spring Cloud GCP Secret Manager 시작 조건을 추가하면 표준 Spring 속성을 사용하여 보안 비밀 값을 참조하기 시작할 수 있습니다.

로드 중...

특수 속성 구문을 사용하여 applications.properties 파일에서 보안 비밀 값을 참조할 수 있습니다.

로드 중...

GitHub에서 Secret Manager와 관련된 모든 샘플을 찾아볼 수 있습니다.

오픈소스로 진행 중인 사항

Spring Cloud GCP는 Spring Boot 및 Spring Cloud 출시 트레인과 가깝게 업데이트됩니다. 현재 Spring Cloud GCP 1.2.5는 Spring Boot 2.3 및 Spring Cloud Hoxton 출시 트레인을 지원합니다. Spring Boot 2.4 및 Spring Cloud Ilford 출시 트레인을 지원할 Spring Cloud GCP 2.0도 곧 출시될 예정입니다.

담당 팀은 핵심적인 Spring Boot 및 Spring Cloud 통합 기능에 더해 다음과 같이 개발자의 니즈를 충족하는 새로운 구성요소를 개발하기 위해 애쓰고 있습니다.

Google은 개발자의 성공을 중요하게 생각합니다. 의견, 기능 요청, GitHub에서 발생한 문제 등을 알려주시면 개발자의 니즈를 파악하고 개발 작업의 우선순위를 정하는 데 큰 도움이 됩니다.

직접 체험해 보기

 위에서 설명한 내용의 시연 장면을 보려면 Google Cloud Next ‘20: On Air의 개발자 실무 기조연설을 확인해 보세요. 다니엘 조우가 Anthos, Service Mesh 등으로 애플리케이션을 현대화할 때 Spring Boot 및 Spring Cloud GCP를 활용하는 방법을 보여드립니다.


Video Thumbnail

또한 다양한 샘플을 이용해 Spring Cloud GCP를 쉽게 사용해 볼 수 있습니다. 혹은 가이드가 포함된 Coursera 또는 Qwiklab에서 제공하는 GCP상의 Spring Boot 과정을 수강할 수도 있습니다. 마지막으로, 참조 문서에서 기능 및 구성에 대한 자세한 내용도 꼭 찾아보시기 바랍니다.

게시 위치