MSA 시작하기

wonjun_choi·2024년 8월 4일

MSA

목록 보기
1/2
post-thumbnail

들어가며

공고나, 블로그, 강의 광고를 보면 MSA에 대한 내용을 쉽게 볼 수 있다.
대략적으로는 MSA가 하나에 모든 기능을 담고 있는 서버와 다르게, 그 기능을 분리하여 서버를 작게 쪼개어 구성하는 것이라고는 알고 있었다.
그러나 아직은 내가 구현할 일이 없을 거로 생각했지만, 학교 졸업작품을 하기 위해서는 MSA를 알고 있어야 하고, 비슷한 형태로 많이 나온다는 것을 알게 되어 이번에 MSA를 구현하기 위해 공부하기 시작했다.
MSA가 무엇인지, 왜 사용하는지, 어떻게 구성해야 하고, 개발하고, 운영하는지 정리해 보고자 한다.

MSA란? Monolith과의 차이

먼저 MSA에 대해서 이해해야 한다.
그러기 위해서는 모노리스(Monolith)에 대해서 알고 있어야한다.

모노리스, Monolith

모노리스는 전통적인 시스템 구조로, 애플리케이션을 개발할 때 하나의 단위로 개발하는 구조를 의미한다.

모노리스 아키텍처 사진

모노리스는 보통 위 사진처럼 3티어로 구성된다.
사용자와 상호작용을 하는 클라이언트, 서버의 애플리케이션, 데이터를 저장하는 데이터베이스로 구성된다.

이런 구조는 하나의 단위로 개발하기에 개발이 단순하다.
빠르게 개발하여 배포할 수 있고, 디버깅, 운영에서 고려해야 하는 점이 줄어든다.

다만, 모노리스는 몇 가지 문제가 발생하는데, 애플리케이션이 커질수록 그 문제가 확연히 드러난다.
먼저 애플리케이션이 아무리 작은 변화일지라도 전체를 빌드하여 배포해야 하기에 주기가 길어진다.
특정 기능에 대한 트래픽이 증가할 때, 전체 애플리케이션을 확장해야 한다.
그리고, 모든 기능이 동일한 기술 스택을 사용해야 하므로, 기술적으로 유연해지기 어렵다.

이런 모노리스 아키텍처의 문제를 해결하기 위해 등장한 것이 바로
마이크로 서비스 아키텍처 (Micro Service Architecture)다.

MSA, Micro Service Architechure

마이크로 서비스 아키텍처(이하 MSA)는 모노리스와는 다르게 애플리케이션을 개발할 때 여러 개의 작은, 독립적으로 배포할 수 있는 서비스들로 구성하는 아키텍처 구조를 의미한다.

MSA 사진

MSA의 장점은 위 사진처럼 특정 서비스에 변경이 생긴 경우 그 서비스만 배포하면 되고,
기능이 추가되는 경우 새로운 서비스를 생성하면 되기에 버그 수정이나 기능 추가가 용이하다.
또 특정 서비스에 트래픽이 몰리는 경우, 개별 서비스에 대해 확장이 가능하여 확장도 용이하다.
각 서비스가 독립적으로 개발될 수 있기에, 팀이 병렬로 작업할 수 있어 개발 속도를 높일 수 있다.

서비스별로 다른 기술 스택을 사용하여 기술적으로 유연하게 대응할 수 있다.
특히 서비스별로 별도의 저장소를 가지고 있으며, 서비스의 특성에 따라 NoSql과 RDB를 사용할 수 있다.
이렇게 특정 서비스를 구축하는 데 사용되는 언어나 저장소를 자율적으로 선택할 수 있는 방식을
폴리글랏(Polyglot)하다고 한다.

MSA 장점만 있을까?

이렇게 모노리스의 단점을 극복한 MSA는 장점만 있지는 않다.
여러 서비스를 배포하는 만큼 서비스 간의 통신을 고려해야 하고,
서비스별로 다른 저장소를 사용하기에 데이터의 일관성을 고려해야 한다.
여러 서비스를 배포하고 운영해야 하므로 자동화된 배포 파이프라인과 모니터링이 필수적이다.
이를 위해 DevOps에 대한 지식과 도입이 필요하다.

데이터 일관성?

말 그대로 데이터가 일관적인지에 대한 이야기이다.
모노리스에서는 데이터를 수정할 때 서비스가 성공적으로 수행되었을 경우에만 저장소에 반영하도록 구현할 수 있다.
다만 MSA에서는 서비스별로 저장소를 구분하기에, 특정 데이터가 여러 저장소에 분산되어 저장되는 경우가 발생하고, 이 데이터가 서비스 A에서 변경이 되었을 때, 서비스 B의 저장소에도 변경되도록 구현이 필요하다.
이렇게 서비스에서 저장한 데이터의 정확성과 일관성을 유지하는 것을 데이터 일관성이라고 한다.

그럼, 왜 MSA를 사용하기로 하였나?

MSA를 공부하게 된 이유가 졸업작품에서 사용하기 위함이라는 이유가 있었다.
졸업작품을 MSA로 구현하기 위한 가장 큰 이유는 AI를 사용하기 때문이다.
졸업작품에서는 AI를 사용하는 서비스를 만드는 것이 주된 목표이며,
이를 모노리스로 구현하는 경우 여러 요청을 처리하기 위해 많은 리소스가 필요하기에 다른 서비스까지 영향을 주는 것이 예상된다.
또 AI의 경우 Python 사용이 거의 반강제적으로 되기에 기술 사용에 제약이 걸리게 된다.
이런 문제를 해결하기 위해 MSA를 사용하여 AI에 대한 서비스를 분리하고, 서비스별 트래픽에 대응할 수 있는 운영 환경을 구축하기 위해 졸업작품에서 MSA를 사용하기로 하였다.

0개의 댓글