마이크로 서비스란? (MSA)

작성자 : 조회수 :

이번에 마이크로 서비스 아키텍처에 관한 글을 공부하면서 간단하게 다룰 개념은 크게 두 가지입니다


1.     Microservices Architecture (마이크로서비스 아키텍처)

2.     Monolithic Architecture (모놀리식 아키텍처)


마이크로소프트 아키텍처를 공부하려다 이 세가지를 다루는 이유는 마이크로 소프트 아키텍처를

설명하면서 항상 비교되는 두 가지 아키텍처가 있었기 때문에 이해도를 높이기 위해 같이 다루겠습니다.


Microservices Architecture (마이크로서비스 아키텍처)?

 

마이크로(Micro)란 말 그대로 서비스들이 아주 잘게 나뉘어져 있고 API로 서비스들끼리 통신하여

 

느슨한 결합 상태를 만드는 아키텍처입니다.

 

 

왜 마이크로 서비스 아키텍처인가?

 

작성 날짜를 기준으로 전부터 가장 관심이 많고 자주 사용되는 클라우드 기반 서비스들을 만드는데 있어서

마이크로 서비스 아키텍처가 가장 적합하다는 판단이 나왔기 때문이 아닐까 싶습니다.

(넷플릭스 등 서비스들이 현재 마이크로서비스 아키텍처 기반이기 때문에 더 관심도가 높은 게 아닐까 싶습니다.)




위의 사진을 본다면 같은 Amazon이더라도 다양한 서비스들을 잘게 나누고 서로 상호작용 하는 것을

알 수 있습니다.


얻을 수 있는 이점

 

 

첫 번째, 유지보수가 편리하다.

각 서비스들은 개별적으로 독립형태이기 때문에

서비스의 버전관리, 코드 수정 등등 여러 편리함 있습니다.

 

두 번째, 하나의 서비스에 소규모의 팀으로만 충분한 구축, 서비스가 가능하다.

대규모의 팀보다 커뮤니케이션이 빠르며 생산성이 높습니다.

 

세 번째, 소규모 코드 기준, 종속성이 낮습니다

유지 보수 할 때 코드의 문제가 생긴다면 다른 곳을 손보지 않고 문제가

생긴 그 부분을 집중할 수 있습니다.

 

네 번째, 결함 격리가 가능하다.

결함이 생긴 서비스는 장애를 잘 처리할 수 있는 설계만 돼있다면

전체 서비스의 영향을 주지 않습니다.

 

다섯 번째, 확장성

서비스는 하나의 전체 서비스의 별도 확장 없이 별도로 확장할 수 있어서

리소스가 더 많이 필요한 하위 시스템의 규모를 확장할 수 있습니다.

 

 

 

 

자바를 이용한 개발방법

 

실제 마이크로 서비스 기반 개발을 위해 제가 어떻게 해야 하는지 알아 봤습니다.

 

1.     SpringBoot를 일단 사용합니다.

2.     가장 중요한 중간 게이트 웨이, 컨테이너인데 여기서 저는 두 가지 선택지가 있습니다.

Spring Cloud를 사용할지, 쿠버네티스를 사용할지는 나중에 결정하겠습니다.

(다음 포트폴리오에는 마이크로서비스 기반으로 제작할 예정)

 

 

 

 

단점

일반 모놀로식, SOA보다는 설계가 복잡하고 까다로운 점이 있습니다.

서비스가 모두 분산되어 있기 때문에 모니터링 작업이 까다롭습니다.(그래서 모니터링 방법을 좀 더 심도 있게 다룬 것 같습니다. )

 

이제 다른 아키텍처들을 알아보겠습니다.

모놀리식(monolithic) 이란?

 

모놀리식 아키텍처는 마이크로 서비스와는 정확히 반대되는 개념으로

여러 서비스들이 모두 하나에 담겨 제공됩니다.

 

 

얻을 수 있는 이점

 

 

첫 번째, 개발할 때 상대적으로 마이크로 서비스 보다 편리합니다.

각 서비스들은 모두 하나의 환경에서 통합 돼서 개발되기 때문에 다같이 개발할 때 보다 더 편리하긴 합니다.

 

두 번째, 배포가 쉽습니다.

하나의 jar war 파일로 서버에 배포하면 끝이기에 마이크로 서비스 보다는 배포가 편리합니다.

 

세 번째, 테스트가 쉽습니다.

마이크로 서비스 테스트 보다는 좀 더 쉽습니다.

 

 

단점

모놀리식 보다는 명확한 단점들이 존재합니다.

 

 

첫 번째, 프로젝트 규모가 커질수록 빌드,배포, 구동시간 모두 길어진다.

하나의 파일에 모든 서비스가 들어가기 때문에 까다롭습니다.

 

두 번째, 수정사항 하나를 위해 서비스 전체가 멈춥니다.

격리가 불가능합니다. 모두 하나의 공간에 있다고 생각하면 편합니다.

 

세 번째, 유지보수가 힘들며 오류 하나가 모든 서비스에 영향을 미칠 수 있습니다.(격리불가능)

치명적 오류 발생시 하나의 공간이기에 격리가 불가능해 서비스 전체에 악영향을 미칠수 있습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

출처 :

 

[마이크로서비스 아키텍처 관한글]

https://docs.microsoft.com/ko-kr/azure/architecture/guide/architecture-styles/microservices

https://giljae.medium.com/마이크로서비스-아키텍처-microservices-architecture--장점과-단점-7c45615cfe1a

 

 

[모놀로식 아키텍처에 관한글]

https://lion-king.tistory.com/entry/%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C-%EC%84%9C%EB%B9%84%EC%8A%A4-vs-%EB%AA%A8%EB%86%80%EB%A6%AC%EC%8B%9D-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-MicroService-vs-Monolithic-Architecture-%EA%B0%84%EB%8B%A8-%EC%86%8C%EA%B0%9C-%EB%B0%8F-%EC%A3%BC%EA%B4%80%EC%A0%81-%EC%9D%98%EA%B2%AC