스프링 클라우드를 적용하기 전에 느낀점
이번 달에 Spring Boot를 기반으로 Microservice 개발 Sprint가 끝났다. 기능 개발이 완료되고, 우리는 Spring Cloud를 적용하기러 하였다. 개발은 보통 필요에 의해 시작이 된다. 하지만, 아직 현재 작은 단위의 서비스와 작은 유저 수를 보유하고 있기 때문에 관리 차원에서도 불편함을 겪지 않고 있어 Spring Cloud가 왜 필요한지 모르겠다. ( 필자의 무지도 포함하여 )
스프링 클라우드가 뭘 도와주는데?
이름만 살펴보면 클라우드에 기반한 개발 스타일 적용을 쉽게할 수 있도록 해준다. 그렇다면, 클라우드에 기반한 개발 스타일이 무엇일까?
확장성(scable)을 가지고, 클라우드 플랫폼에 쉽게 배포할 수 있으며, 지속적인 배포가 가능하도록 만든 것이다. 이를 Software as a service(SaaS)라 한다 위 개발에는 The Tweleve-Factor APP이란 방법론이라는 것이 있다.
Tweleve-Factor App이란?
.
코드베이스 ( Codebase )
앱 : 코드 = 1:1이여야 한다. 너무 당연한 일이라 딱히 와닿지않는다.의존관계 ( dependencies )
패키지 매니저 툴 ( gradle, maven ) 을 이용하여 명시적으로 표기하고 격리
컨테이너화 되어 있는 경우 Dockerfile을 이용하여 어느 platform에서도 설치할 수 있다.설정 ( config )
애플리케이션 구동 시에 설정 정보들이 주입될 수 있도록 해야 한다. ( 이것도 사실 당연한 부분이다ㅎㅎ )지원 서비스 ( backing services )
백엔드 서비스는 애플리케이션 정상 동작 중 네트워크를 통해 이용하는 모든 서비스이다. 예를 들어, 데이터 저장소 ( MySql ), 메시지 큐잉 시스템 ( RabbitMQ ), 메일을 보내기 위한 SMTP 서비스 ( Postfix ), 캐시 시스템 ( Memcached ) 등이 있다.
로컬 서비스와 서드파티 서비스를 구별하지 않는다. 애플리케이션 입장에서는 양 쪽 모두 연결된 리소스이며, 설정에 있는 url을 사용해서 접근 된다. 즉, 코드를 수정하기 않고 설정 정보에 따라 전환이 될 수 있어야 한다.빌드, 릴리즈, 실행 ( Build, release, run )
어플리케이션은 빌드, 릴리스, 실행 단계를 엄격하게 분리하여 빌드와 배포, 실행 지속적으로 가능하도록 해야 한다.프로세스 ( Processes )
- Scale up이 툴, 아키텍처, 개발에 영향을 끼치지 않고 가능해야 한다.
- Dev와 Prod환경의 차이를 최소화해서, 지속적인 배포(CD)가 빠르게 되어야 한다.
- OS에 의존하지 않으므로써, 최대한 실행환경간 이식성(portability)을 최대화 해야 한다.
- 설정 자동화를 위해 선언적인 형식을 사용함으로써, 새로운 개발자가 시간 투자할 필요 없도록 한다.
- 클라우드 플랫폼에 구축하기 적합하여, 서버와 시스템 관리자의 필요성을 없앤다.
이 방법론은 어떤 프로그래밍 언어로 개발되든, 백앤드 서비스(데이터베이스, 메모리 캐시 등)이 어떠한 것을 사용하든 적용할 수 있다고 한다. 위에 정리된 내용이 가능하도록 해주는 12가지 요소를 살펴보자. ( TODO )
Netflix OSS
Service discovery with Eureka
Routing with Zuul
기타 유용한 라이브러리들 1 - Security
기타 유용한 라이브러리들 2 - Automated Testing
'MicroService' 카테고리의 다른 글
Message-Driven 마이크로서비스 (0) | 2018.12.03 |
---|---|
Sleuth란? (0) | 2018.12.03 |
도커 컨테이너와 마이크로서비스 (1) | 2018.11.28 |
스프링 클라우드 - 마이크로서비스간 통신이란 (Ribbon) (5) | 2018.08.09 |
마이크로서비스 개념 적용, 역량 모델 (0) | 2018.06.06 |