들어가며
MSA는 현대적인 아키텍처론이며, 전자정부 프레임워크에서도 적용을 권장하고 있는 방법이다. 내가 현재 근무하고 있는 회사는
아직 모놀리식 구조를 고수하고 있다.
큰 서비스에서는 적용한지 10년이 가까워지고 있고, 많은 회사들도 쿠버네티스와 함께 도입하고 있는 과정 중이거나 이미 적용이 되고 있다.
지금 근무하고 있는 회사의 이전 개발자들은 개발속도에 대한 압박이 매우 심했던 것 같다. 운영과 유지보수 보다는 지금 당장의 구현을 위해 적용한 여러가지 현실과 타협한 부분들이 많았다.
이런 문제를 어떻게 개선해서 다음 개발자들이 조금이라도 유리하게 일할 수 있을까를 고민하며 같이 일하고 있는 분들한테도 많이 이야기해봤다.
인프라를 관리하고 있는 개발자가 쿠버네티스를 도입하기 위해 여러가지 시도를 하고 있는데, 개발팀을 위해 내가 할 수 있는 일은 무엇인가를 고민해보니 MSA를 적용 시킬 수 있는 여러 기반 시스템을 구축하는 것이 가장 합리적인 생각이였다.
러닝커브는 당연히 있고, 이미 알고 있는 것들도 있지만 정리하며 차근차근 준비를 해두면 후에 들어올 개발자들이 좀 더 편한 환경 (운영 , 유지보수)을 구축하고 싶다.
그래서 차근차근 내가 공부하고 이해한 내용을 정리해서 올려보려고 한다.
정보는 인터넷과 전자 정부프레임워크 공식사이트를 참고해 써본다.
MSA란

마이크로서비스(microservice)는 애플리케이션을 느슨히 결합된 서비스의 모임으로 구조화하는 서비스 지향 아키텍처(SOA) 스타일의 일종인 소프트웨어 개발 기법이다.
마이크로서비스 아키텍처에서 서비스들은 섬세(fine-grained)하고 프로토콜은 가벼운 편이다. 애플리케이션을 더 조그마하나 여러 서비스로 분해할 때의 장점은 모듈성을 개선시키고 애플리케이션의 이해, 개발, 테스트를 더 쉽게 해주고 애플리케이션 침식에 더 탄력적으로 만들어 준다. 규모가 작은 자율적인 팀들이
팀 서비스를 독립적으로 개발, 전개, 규모 확장을 할 수 있게 함으로써 병렬로 개발할 수있게 한다. 또, 지속적인 리팩토링을 통해 개개의 서비스 아키텍처가 하나로 병합될 수 있게 허용한다. 마이크로서비스 기반 아키텍처는 지속적인 배포와 전개(Deploy)를 가능케 한다
(표준프레임워크 MSA 적용 개발 가이드 발췌)
말을 들으면 꽤나 어지럽지만, 정리하면 기존에 모놀리식 에서 작은 단위로 분리해서 각각의 컴포넌트 단위로 서비스를 운영하는 것을 말한다. 그리고 이사이를 연결하는 관리 시스템이 유기적으로 여러 시스템들이 안정적으로 운영되도록 돕는것이다.
정처기를 공부해보면 코드의 커플링에 대한 이야기가 있는데 어플리케이션의 구성도 동일하다.
서로 연관되어 종속되고 의지되기 시작하면 유지보수가 답도 없이 어려워진다.
예를들어 외부시스템과 연동을 통해 정보를 가공하는 서비스를 만든다고 가정하자.
통짜로 외부시스템의 의존하여 정보를 가져오고 있으면, 당연히 해당 시스템의 문제가 생겼을때
전체 시스템의 문제가 발생하며 심각한 경우 서비스자체가 죽어버리는 경우도 발생할 수 있다.

이럴때 외부시스템과 연동하여 정보를 가공하는 파트와 해당 정보를 가지고 표출하기 위한 기능을 작성한 서비스를 분리해서 어플리케이션 구조를 만들면
데이터 자체가 잘안나오는 문제가 발생할 수 있지만, 서비스를 조치하는 시간을 벌 수 있다.
필자가 생각했을때는 이점이 가장 핵심적인 이유라고 생각한다. 예를 들어 핸드폰을 사용하는데 내가사용하고 있는 주소록 어플리케이션이 죽는다고, 전화가 안되면 그것보다 못만든 시스템이 있을까?
특징
1.애플리케이션 로직을 각자 책임이 명확한 작은 컴포넌트들로 분해하고 이들을 조합해서 솔루션을 제공한다.
2.각 컴포넌트는 작은 책임 영역을 담당하고 완전히 상호 독립적으로 배포된다. 마이크로 서비스는 비즈니스 영역의 한 부분에서만 책임을 담당한다. 그리고 애플리케이션에서 재사용할 수 있어야 한다.
3.마이크로 서비스는 몇 가지 기본 원칙(표준이 아닌 원칙임에 유의)에 기반을 두며, 서비스 소비사와 서비스 제공자 사이의 데이터 교환을 위해 HTTP 와 JSON(JavaScript Object Notation) 같은 경량 통신 프로토콜을 사용한다.
4.애플리케이션은 항상 기술 중립적 프로토콜(JSON 이 가장 보편적이다)을 사용해 통신하므로 서비스 구현 기술과는 무관한다. 따라서 마이크로서비스 기반의 애플리케이션을 다양한 언어와 기술로 구축할 수 있다는 것을 의미한다.
5.작고 독립적이며 분산된 마이크로 서비스를 사용해 조직은 명확히 정의된 책임 영역을 담당하는 소규모 팀을 보유할 수 있다. 이 팀들은 애플리케이션 출시처럼 하나의 목표를 향해 일하지만, 자기가 개발하는 서비스만 책임진다.
정리해보면 각각 작은 단위로 분리 , 각 컴포넌트의 책임을 줄이고, 해당 컴포넌트가 가지고 있는
기능을 재사용할 수 있게한다. 어디서 보지 않았는가? 필자의 생각에서는 객체지향프로그래밍론인
OOP에서의 5가지 원칙을 코드레벨이 아닌 상위 어플리케이션에서 적용한 것으로 보여진다.
목적
마이크로서비스 아키텍처(MSA)는 다음과 같은 장점들을 통해 시스템에 대한 개발 및 운영 복잡성을 효율적으로 낮출 수 있다.
- Microservice 는 독립적으로 구성될 수 있으며, 상호 독립적으로 구축 및 운영될 수 있음
- .특정 서비스만 집중할 수 있고, 코드 규모가 작아 효율적인 유지보수가 가능
- Restful API 와 같이 경량 통신을 통해 효과적인 상호 연계가 가능
- 독립적인 서비스 단위 확장(scale-out)을 지원하기 때문에 효율적인 시스템 자원 활용
REST에 대한 이야기는 해당 필자 블로그에 REST에 대한 이야기가 있으니 참고해보면 좋을 것같다.
'Software Design' 카테고리의 다른 글
MSA에 대해 배우자 - 2. 데이터 저장 방식을 마이크로화 하자 (0) | 2025.03.23 |
---|