본문 바로가기
지식창고

Micro-Service Architecture(MSA) 정체가 뭘까?

by 킹명주 2022. 10. 24.

요즘 백엔드로 취업을 준비하고 있는데 우대사항에  MSA, CI/CD 경험이 진짜 많이 들어가있다.

아니 개발만 잘하면 취업하는거 아니야? 라고 생각하면 취업 절대 못한다는 것을 느꼈다... 세상에는 이런 저런 기술을 다 경험해본 신입 괴물들이 왜이렇게 많은가? 억울하다.. 학교 수업 열심히 들었는데,,

신세한탄은 그만하고 MSA에 대해 알아보자

 

잠깐! CI/CD가 궁금하다면,

https://mjoo1106.tistory.com/entry/CICD-%EB%8F%84%EB%8C%80%EC%B2%B4-%EB%AD%98%EA%B9%8C

 


Micro 넌 뭐니..?

 

MSA를 설명하기 앞서 Micro 라는 용어에 대해 공부할 필요가 있다. 우선 Micro 를 설명할 때  꼭 비교되는 용어인 Monolithic에 대해서도 알아보고 가겠다. 

구글 번역기님께서 monolithic이란 단단히 짜여 하나로 되어있는 것이라고 해석을 해주셨다. 

그럼 반대되는 micro는 어떻게 해석할 수 있을까? 대략적으로 유추해보면 하나로 안되어 있는 것이라고 알 수 있다.

 

원래 micro 는 아주 작은 단위, 물건을 나타날 때 사용되는 용어다. 이 용어를 개발에 대입했을 때는 작은 단위로 나눈 것으로 해석가능하다.


그래서 MSA가 뭐죠?

 

앞서 micro에 대해 해석을 했고 정리하자면 개발에서는 크게 두 가지 의미로 사용할 수 있다.

 1. 하나로 안되어 있는 것 (monolithic 반대)

 2. 작은 단위로 나눈 것

 

그렇다면 Micro-Service Architecture는 무엇일까? 해석 그대로를 사용해보면 다음과 같다.

작은 단위로 나누어 하나로 되어 있지 않는 서비스 구조

 

시간이 없다면 일단 위에 문장이라도 암기하고 가자! 0.1% 정도는 합격 가능성이 오를 것 같다. 본격적으로 이미지를 통해 Monolithic Architecture와 Micro-Service Architecture의 차이점과 장단점에 대해 알아보겠다.

 

Monolithic Architecture

[출처] https://jelvix.com

Monolithic Architecture 를 한 줄로 요약하자면 전체 애플리케이션이 하나로 되어있는 구조이다. 즉, 흔히 볼 수 있는 구조라고 생각하면 된다. 아마 토이 프로젝트나 학교 프로젝트를 진행한 사람들은 보통 동일한 개발 언어(Java, Python, C  ...)를 사용해 개발하고 동일한 데이터베이스를 사용하여 애플리케이션을 배포했을 것이다. 이것이 monolithic architecture이다. 그렇다면 장점과 단점은 무엇이 있을까?

 

장점

1. 환경이 동일하기 때문에 개발 및 환경설정이 간단하다.

2. 서비스 배포와 End-to-End 테스트가 용이하다.

3. 작은 규모의 시스템을 개발할 때 유리하다. 

 

단점

1. 프로젝트의 규모가 커질수록 어플리케이션 구동시간이 늘어나고 빌드,배포 시간도 길어진다.

2. 조그마한 기능 수정이 있어도 전체를 빌드하고 배포한다.

3. 유지보수가 힘들다.

4. 일부분의 오류가 전체에 영향을 미친다.

5. 팀 프로젝트에서 똑같은 기술, 언어, 프레임워크를 선택하기가 어렵다.

 

⭐ 정리

monolithic architecture는 하나로 되어 빌드에서 배포 과정을 진행하므로 개발과 환경설정이 간단하다는 장점이 있지만 대규모 프로젝트에서 백엔드 개발자 여러명이 똑같은 기술, 언어, 프레임워크를 선택하여 진행하기 어렵다는 단점이 있다.

 

 

Micro-Service Architecture

[출처] https://jelvix.com

Micro-Service Architecture 은 앞서 보았던 monolithic 과 다르게 각 서비스(또는 기능)가 독립된 서버와 데이터베이스로 구성되어 있는 구조이다. 아마 대규모 팀 프로젝트에서는 msa 형태를 많이 사용할 것이다. 예를 들어 인공지능은 python으로 서비스를 구성하고 회원 관리는 java로 서비스를 구성할 수 있다. 이 경우에는 monolithic 형태를 사용할 수 없다. 그러므로 자연스럽게 msa 를 적용하는 것이다. 그렇다면 장점과 단점은 무엇이 있을까?

 

장점

1. 각 서비스(기능) 별로 나누어져 있으므로 유지보수가 용이하다.

2. 새로 추가되거나 수정사항이 있는 부분만 빠르게 빌드하여 배포가 가능하다.

3. 해당 서비스(기능)에 맞는 기술, 언어, 프레임워크 등을 자유롭게 선택하여 사용할 수 있다.

4. 특정 서비스(기능)에 오류가 있다면 해당 부분만 고쳐 빠르게 정상화 가능하다.

 

단점

1. 서비스(기능)들이 분산되어있기 때문에 모니터링이 힘들다.

2. 다른 서비스(기능)를 호출하는 코드 추가 등으로 개발이 까다롭다.

3. 애플리케이션 배포가 까다롭다.

모놀리식의 경우 그냥 그 서비스 하나만 배포하기 때문에 port, end-to-end 등의 설정이 쉽지만 msa는 여러 서비스들의 port, end-to-end 를 맞춰야 하기 때문에 배포가 까다롭다. (이부분은 지극히 주관적인 생각입니다!!)

 

⭐ 정리

Micro-Service Architecture는 각 서비스(또는 기능)가 독립된 서버와 데이터베이스로 구성되어 있는 구조로 서비스(기능)에 맞는 기술, 언어, 프레임워크를 자유롭게 선택할 수 있다는 장점이 있지만 다른 기능을 호출하는 경우 백엔드 통신 코드가 추가되므로 개발이 monolithic 보다는 까다로운 편이다.


마무리

 

현재 대외활동에서 MSA 를 적용하여 프로젝트를 진행하고 있다.

실제 진행하는 프로젝트 구조

위 사진처럼 인공지능과 관련된 내용은 django에서 관리하고 있고 spring은 회원 관리 기능을 하고있다.

MSA를 사용하면서 느낀 가장 큰 장점은 우선 개발 언어에 의존되지 않는 점이였고, 서로 데이터가 독립적이다 보니 관리도 용이했다. 내것만 관리하면 되니까😁😁

 

그런데 생각보다 MSA로 서비스를 배포하는 것이 정말 어려웠다.. 개인적으로 이게 가장 큰 단점이다. 하지만 추후 소개할 nginx 개념을 알게 된다면 프로젝트 배포도 쉽게 진행할 수 있을 것이다.

 

'지식창고' 카테고리의 다른 글

[Github Actions] CI 맛보기!  (2) 2022.11.06
CI/CD 도대체 뭘까..?  (2) 2022.09.03