자바 개발자가 구글 클라우드 플랫폼(GCP)을 선택하는 이유가 또 하나 늘었습니다.
구글은 최근 Spring Cloud GCP 1.0을 정식 공개했습니다. Spring Cloud GCP는 자바 개발자가 스프링 부트(Spring Boot) 애플리케이션을 GCP 환경에서 손쉽게 구현하고 운영할 수 있게 하자는 취지에서 시작된 프로젝트인 스프링 클라우드의 곁 가지 중 하나라 생각하면 됩니다
Spring Cloud GCP 1.0은 구글 팀과 피보탈의 스프링 팀의 합작품입니다. 이 작품이 정식 등장함에 따라 이제 자바 개발자는 온프레미스와 클라우드 양쪽에서 자유롭게 스프링 환경을 위한 애플리케이션을 개발하고 운영할 수 있게 되었습니다. 스프링에 익숙한 자바 개발자는 평소 쓰던 기능 그대로 사용하면 됩니다. GCP의 어떤 서비스가 스프링 프레임워크와 통합되어 동작하는 직 굳이 세세하게 알지 않아도 됩니다. 다음 표는 그냥 참조 정도로 보면 됩니다.
기능
|
GCP 서비스
|
스프링 프레임워크
|
메시징
|
Cloud Pub/Sub
|
Spring Integration
Spring Cloud Stream Binder Spring Dataflow |
데이터베이스
|
Cloud SQL MySQL
Cloud SQL PostgreSQL |
Spring JDBC
Spring Data |
파일 스토리지
|
Cloud Storage
|
Spring Resource
Spring Integration File Support |
로깅
|
Stackdriver Logging
|
Logback Appenders
|
추적(Trace)
|
Stackdriver Trace
|
Spring Cloud Sleuth
|
인증
|
Service Account
|
Spring Boot Auto-configuration
|
스프링 부트 환경이 시작되면 알아서 런타임 환경, 사용자 자격 증명 등이 알아서 검색되고 설정됩니다. 필요에 따라 클라우드 파운드리나 GCP 서비스 브로커와 통합하여 서비스 자동 구성과 자격 증명을 처리할 수도 있습니다.
가령 스프링 프레임워크에 GCP가 제공하는 스택드라이버 트레이스나 로깅에 대한 의존성 설정을 해두면 애플리케이션에 대한 추적과 로그 정보가 GCP 스택드라이버에 저장됩니다.
향후 GCP와 스프링 간의 통합은 더욱 견고해질 예정입니다. 현재 구글과 피보탈 팀은 커뮤니티 피드백을 열심히 모아서 해당 내용을 통합 작업에 반영하고 있습니다. 일례로 최신 버전인 1.1.0.M1에는 스프링 데이터 클라우드 스패너(Spring Data Cloud Spanner)와 스프링 클라우드 컨피그(Spring Cloud Config)가 프리뷰로 추가되었습니다.
간단히 클라우드 스패너에 대해 소개하겠습니다. 클래스를 클라우드 스패너 테이블에 매핑하는 예를 하나 보시죠.
@Table(name = "events") public class Event { @PrimaryKey private String id; private String name; ... }
매핑을 마친 다음 스프링 데이터 리포지토리를 사용해 데이터 액세스 객체를 만들 수 있습니다. 스프링 데이터 리포지토리는 클라우드 스패너나 전통적인 관계형 데이터베이스와 크게 다르지 않습니다. 따라서 기존 관계형 데이터베이스나 클라우드 스패너에서 손쉽게 데이터를 마이그레이션 할 수 있습니다.
public interface EventRepository extends PagingAndSortingRepository<Event, String> { }
다음을 보시죠. 스프링 데이터 리포지토리를 사용해 클라우드 스패너를 대상으로 데이터 읽기와 쓰기를 쉽게 할 수 있습니다.
// Saving a new Event eventRepository.save(new Event(...)); // Find an Event by ID Event event = eventRepository.findById(...); // Find the first 20 events, sorted by name in ascending order List<Event> events = eventRepository.findAll( PageRequest.of(1, 20, Sort.Direction.ASC, "name"));
스프링 데이터 REST를 사용해도 간편하게 리포지토리를 RESTful 서비스 형식으로 외부에 노출할 수 있습니다.
@RepositoryRestResource public interface EventRepository extends PagingAndSortingRepository<Event, String> { }