Spring Boot / Spring Cloud / MSA
저희 회사는 현재 Spring Boot 를 기반으로 MSA를 적용하여 서비스를 구축 해놓고 있습니다.
스타트업 회사이고 개발자 모두가 MSA를 적용해 개발하는것은 처음이기 때문에, 찾아보고 공부하여 하나씩 차근차근 적용하였습니다.
저희가 사용한 프레임워크와 라이브러리를 간략하게 소개 하고 선택한 이유와 적용 후에 주관적인 의견을 공유해보겠습니다!
우리회사의 서비스 구성
먼저, 우리회사는 서비스구성이 어떻게 되어있는지 살펴보겠습니다.
- UI : 모든 외부 요청에 대한 응답하는 코드와 뷰 페이지가 있고, 응답을 위해 다른 서비스들을 호출
- AUTH : 다른 서비스들을 호출할 수 있는 토큰을 발급하고, 사용자 인증 (ex : 로그인) 관련 기능을 수행
- 서비스 A , B , C ... : 실제 기능을 수행하며 동작중에 서비스 끼리 서로 통신하는 경우도 다수 존재
왜 MSA?
먼저 Monolithic Architecture 와 MSA의 차이를 한번에 이해할 수 있도록 그림을 준비하였다.
위 그림은 Monolithic Architecture로 개발되었고 A, B, C 총 3개의 서비스를 제공하는 어플리케이션의 구조이다. A, B, C 모든 서비스의 웹 모듈은 Presentation Layer 에 포함되어있다. 마찬가지로 모든 서비스의 코어 로직을 포함하는 모듈들도 Business Layer 에 포함되어있다. 그리고 하나의 Database 에 3개의 모듈에서 사용하는 모든 테이블이 존재한다. 여기서 컴포넌트들을 묶은 사각형 박스의 방향이 가로 방향으로 구성되어 있다는 점을 기억해 놓도록 하자.
MSA 를 적용하여 개발한 어플리케이션의 그림을 보았을 때 가장 먼저 보이는 것은 컴포넌트들을 묶은 사각형 박스의 방향이 가로방향에서 세로방향으로 바뀌었다는 것이다. 위 그림에서 사각형 박스는 각각 마이크로서비스 A, B, C 를 구분 짓는다. 각각의 마이크로 서비스들은 서비스마다 독립적으로 자신의 Presentation Layer, Business Layer, Database 를 가진다. 이 구분으로 하나의 서비스단위와 하나의 마이크로서비스가 일치한다는 것을 알 수 있다.
위 그림과 같은 구조 때문에 MSA 를 기반으로 프로젝트를 진행한다면 가져갈 수 있는 많은 이점 중 몇가지를 소개한다.
1. 시스템적인 측면에서는 각 마이크로서비스들은 독립적이기 때문에 해당 서비스에 가장 적합한 언어, 버전을 선택할 수 있고 데이터베이스도 제약없이 선택이 가능하다.
2. 하나의 마이크로서비스에서 변경이 발생하여도 다른 서비스에 영향을 미치지 않고 동작이 멈추더라도 다른 서비스들은 동작을 지속할 수 있다.
3. 개발적인 측면에서는 서비스 단위로 나뉘어진 개발팀이 서로 다른 기본 기술과 배포 일정을 선택할 수 있게 되고, 특정 서비스에만 집중하기 때문에 코드에 대한 이해도가 높을 것이다.
나는 모 대기업과 협업하여 지속적으로 개발과 배포가 필요한 프로젝트를 진행한 적이 있었는데, 오래전에 Monolithic Architecture 구조로 개발된 웹 어플리케이션에 주기적으로 기능을 추가하는 작업을 하였다. 프로젝트의 덩치가 크기 때문에 빌드 시간도 오래 걸리고 간단한 버그나 기능의 수정이 있을 때에도 전체를 다시 배포해야해서 기다리는 시간이 배가 되었다. 또한 특정 부분의 작은 오류가 전체 시스템에 영향을 주는 상황도 있었고 오류 포인트를 찾기도 난감했던 경험이 있다. 이 프로젝트에 MSA를 적용하였다면 업무가 훨씬 수월 했을 것이라는 생각이 든다.
산업이 발달하면서 변화의 속도는 더욱 가속화 되었고 기업들에게 신속한 서비스변화와 추가가 요구되고
있는 시점이다. MSA는 이러한 기업의 요구사항을 더 적은비용으로 더
신속하게 더 많은 기능의 확장이 가능하도록 하여 만족시켰다. 또한
NoSQL 데이터베이스, Docker, Cloud 등 마이크로서비스에 적합한 기술들의 출현과
발전이 MSA의 표준화를 더욱 가속화하고 있다.
이렇게 MSA를 선택한 이유를 알아보았고, 다음편에는 Spring Cloud에 대해서 간략하게 알아보겠습니다!
By Ryan Kim
'Spring Cloud&MSA' 카테고리의 다른 글
(마이크로 서비스 vs 모놀리식 아키텍처) MicroService vs Monolithic Architecture 간단 소개 및 주관적 의견 (3) | 2019.04.15 |
---|---|
(Spring Boot / Spring Cloud / MSA) 4. Zuul이란? / 적용방법 (0) | 2019.02.07 |
(Spring Boot / Spring Cloud / MSA) 3. Eureka란? / 적용방법 (0) | 2019.02.07 |
(Spring Boot / Spring Cloud / MSA) 2. Spring Cloud란? / 간략한 소개 (0) | 2019.02.07 |
댓글