brunch

You can make anything
by writing

C.S.Lewis

API를 이용한 뉴 아키텍처, MSA

기술스크랩

MSA(MicroService Architecture)


    MSA(MicroService Architecture)는 소프트웨어 개발 기법 중 하나로, 단일 프로그램을 작은 컴포넌트로 나누어 느슨한 서비스들의 모임으로 구조화하는 방법을 말한다. MSA와 대비되는 기존 Monolithic Architecture 방식에서는, 모든 요소가 한 프로젝트 내에 통합된 형태로 구축되어 있었기 때문에 각 구성요소들이 서로 연관되어 있었다. 따라서 하나의 프로세스 안에서 각 서비스 간 호출이 이뤄지므로 빠르게 처리가 가능한 대신에, 한 부분에 문제가 생기면 전체 부분이 모두 장애를 갖게 되는 단점이 있었다. 또한, 하나의 통합된 시스템이므로 부분 수정이 어렵고 파악 자체도 어렵다는 한계점이 있었다. Monolithic Architecture와 비교했을 때 MSA는 각 컴포넌트가 개별적인 서비스로 이루어져 있기 때문에 다른 서비스에 의존적이지 않다. 따라서 일부 서비스에 장애가 발생했을 때 필요한 부분만 업데이트하거나, 한 서비스에 확장이 필요할 때 그 부분만 확장하는 등 필요에 따른 유연한 대처가 가능하므로, 각광받게 된 Architecture 기법이다.


Monolithic Architecture와 MSA

MSA 방식에서는 데이터를 저장할 때, 하나의 중앙 데이터베이스에 모든 데이터를 저장하는 것이 아니라 각 독립된 서비스당 다른 데이터 베이스에 저장한다. 또는, 같은 데이터 베이스를 나누어 각각 서비스에 대응하는 데이터를 저장하는 방식이다. 이때 서비스 간 호출에는 API 통신을 이용한다.


API(Application Programming Interface는 HTTP와 같은 프로토콜, XML과 같은 데이터 포맷 방식으로 요청 작업 식별자를 제공하는 인터페이스이다. 시스템이 API에 데이터를 요청하면, API에서 다른 시스템에 다시 데이터를 요청하고, 데이터를 전달받아 다시 원래의 시스템에 전달해 준다.  

MSA 구현을 위해서는 API 게이트웨이 기능이 필수적이다. API 게이트웨이는, 모든 API 서버의 엔드포인트를 묶어서 API 인증 및 인가 기능, 여러 서버로 메시지를 라우팅하는 기능을 담당하고 있다.


먼저 API게이트웨이의 인증 및 인가 기능은 토큰이라는 방식으로 사용자로 하여금 API를 호출할 수 있도록 허가해 주는 기능이다. 클라이언트 인증 후 토큰이 발급되면, 클라이언트는 토큰을 이용하여 API를 호출하게 되고, 이 호출을 승인할지를 API 게이트웨이가 검증하는 역할을 하는 것이다. 토큰 방식 중 서버에 토큰 정보가 저장되는 형식이라면 API를 호출할 때마다 매번 해당 토큰 저장소로부터 읽어온 정보로 호출 승인 여부가 결정되는 것이다. 


  API 토큰을 이용한 API 호출 인증

 API 게이트웨이의 또 다른 기능은 API 호출을 라우팅하는 기능이다. 여기에는 로드밸런서 기능과 헤더기반 라우팅 등이 있다.



활용 사례


    API 기술을 이용한 MSA 방식의 활용 사례로, 금융회사를 생각해 볼 수 있다. 기존 금융회사는 Monolithic Architecture 방식을 사용해 왔기 때문에 전체 시스템과 데이터가 하나로 구조화되어 있었다. 하지만, 디지털 환경에서의 빠른 대응을 하기 위해서는 MSA가 효과적이게 되었다. 데이터를 통합하지 않음으로써 금융비즈니스에서 수많은 변화 환경에 곧바로 적용이 가능해졌다. 또한, 서비스의 상호의존성을 배제함으로써 소프트웨어 모듈의 독립성을 보장하고, 복잡한 금융 시스템 내부 인터페이스에서 오는 문제점을 해결할 수 있게 해 주었다.



기술과 사례에 대한 인사이트


    위에 소개된 금융사업에서의 활용뿐만 아니라, MSA는 그 특성이 유리하게 발휘될 수 있는 어느 분야에서나 활용이 가능하다. 예를 들면 배달의 민족, 넷플릭스, 쿠팡, 카카오톡 이모티콘 서비스에 이르기까지 오늘날 수많은 기업들이 개발에 MSA 방식을 구현하여 사용하고 있다. 물론 MSA는 배포가 복잡하고, 통합된 테스트를 진행하는 것이 어려우며, 각 모듈의 인터페이스를 신중하게 다뤄야 하기에 개발이 복잡하다는 단점 또한 갖고 있다. 따라서, 어떤 서비스 구현에 있어서 Monolithic Architecture와 MSA 중 어느 방식에서 자사의 효율성을 극대화시킬 수 있을지 신중하고 명확한 판단이 수반되어야 효과적인 비즈니스 모델 수립이 가능해질 것이다.



함께 생각해 볼 만한 논점


Q1. 구체적으로 어떤 산업에서 Monolithic Architecture에 비해 MSA가 효과적일까? 또는, 어떤 산업에서 MSA보다 Monolithic Architecture를 사용하는 것이 더 유리할까?


Q2. MSA는 뚜렷한 장점에도 불구하고, 단점으로 인해 몇몇 상황에서는 사용되지 못하고 있다. 어떻게 MSA의 단점을 보완할 수 있을 것인가? 미래에는 어떠한 개선된 Architecture의 모습으로 발전할 수 있을 것인가?



Reference

https://hahahoho5915.tistory.com/71

https://www.samsungsds.com/kr/insights/msa_architecture_edm.html

https://medium.com/javarevisited/do-you-know-about-microservices-and-their-design-patterns-e8d7c8193dfe 

https://yozm.wishket.com/magazine/detail/1900/

https://www.2e.co.kr/news/articleView.html?idxno=301229


작성자: ITS 24기 이예림




브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari