MSA(Microservices Architecture) 개발 방법론 알아보기

MSA(Microservices Architecture)는 소프트웨어를 개발하는 방법론 중 하나로, 애플리케이션을 작은 독립적인 기능 단위인 마이크로서비스로 분해하는 아키텍처 스타일이다.

확장 가능한 서비스를 개발하고, 더 빠른 배포와 리소스 관리를 위해서 사용되는 MSA에 대해서 알아보고 기록을 남겨보고자 하였다.

 

🍅 MSA를 통해서 애플리케이션을 작은 조각으로 분할하여 개별적으로 개발, 배포, 확장할 수 있다.

  • MSA의 핵심 아이디어는 각 마이크로서비스가 하나의 특정 기능을 수행하도록 설계되며, 이들은 서로 독립적으로 실행될 수 있다.
  • 마이크로서비스는 작은 규모의 독립적인 서비스로 구성되며, 별도의 데이터베이스, 통신 메커니즘, 프로세스 등을 가지고 있을 수 있다.
  • 각 마이크로서비스는 표준화된 API(응용 프로그래밍 인터페이스)를 통해 상호 작용하며, 이를 통해 서로간에 통신하고 데이터를 교환한다.
  • 각 서비스들은 느슨하게 결합되며 서비스의 모임으로 구조화되는 서비스 지향 아키텍처(SOA) 스타일의 일종으로 간주된다.


MSA의 장점 ✨

  1. 모듈화 및 유연성
    마이크로서비스는 각각 독립적으로 개발되고 배포될 수 있으므로, 시스템 전체의 유연성과 확장성이 향상된다. 특정 서비스의 변경이 다른 서비스에 영향을 미치지 않고 이루어질 수 있다.
  2. 독립적인 배포
    개별적인 마이크로서비스 단위로 배포가 가능하므로, 전체 시스템의 배포가 간소화되고 서비스의 개선과 확장이 빠르게 이루어질 수 있다.
  3. 기술 다양성
    MSA는 다양한 기술 스택을 사용할 수 있는 유연성을 제공한다. 각 마이크로서비스는 독립적으로 개발되므로, 최적의 기술 선택이 가능하다.
  4. 장애 격리 및 회복성
    MSA는 각각의 마이크로서비스가 독립적으로 실행되기 때문에, 하나의 서비스의 장애가 다른 서비스에 영향을 미치지 않을 수 있다. 또한, 장애가 발생한 서비스를 빠르게 회복하고 대체할 수 있다.


MSA의 한계 🥲

  1. 분산 시스템 복잡성
    여러 마이크로서비스가 상호 작용하므로, 통신, 보안, 데이터 일관성 등 분산 시스템의 복잡성이 증가할 수 있다.
  2. 테스트 및 디버깅의 어려움
    다양한 마이크로서비스가 동시에 실행되기 때문에 테스트 및 디버깅이 어려울 수 있다.
  3. 팀의 조직 및 관리
    MSA는 서비스 단위로 조직을 구성하고 운영해야 하므로, 조직의 구조와 관리 방법에 대한 새로운 접근이 필요할 수 있다.

MSA는 큰 규모의 애플리케이션을 더 작고 관리 가능한 단위로 분할하여 개발 및 운영할 수 있는 장점을 제공한다. 그러나 애플리케이션의 특성과 요구사항을 고려하여 아키텍처 선택을 결정하는 것이 중요하다.

 

 

🥒 JavaScript를 사용한 간단한 MSA 예제

다음은 Express.js 프레임워크를 사용하여 간단한 마이크로서비스를 구현하는 예제이다. 

서비스 1 - 사용자 관리 서비스

// user-service.js

const express = require('express');
const app = express();
const port = 3001;

app.get('/users', (req, res) => {
  // 사용자 목록 반환
  const users = [
    { id: 1, name: 'John Doe' },
    { id: 2, name: 'Jane Smith' },
  ];
  res.json(users);
});

app.listen(port, () => {
  console.log(`User service listening at http://localhost:${port}`);
});


서비스 2 - 주문 관리 서비스

// order-service.js

const express = require('express');
const app = express();
const port = 3002;

app.get('/orders', (req, res) => {
  // 주문 목록 반환
  const orders = [
    { id: 1, product: 'Product A' },
    { id: 2, product: 'Product B' },
  ];
  res.json(orders);
});

app.listen(port, () => {
  console.log(`Order service listening at http://localhost:${port}`);
});


위의 코드는 두 개의 간단한 마이크로서비스를 구현한다.
`user-service`는 `/users` 엔드포인트를 통해 사용자 목록을 반환하고, `order-service`는 `/orders` 엔드포인트를 통해 주문 목록을 반환다.

두 서비스는 각각 별도의 포트(3001, 3002)에서 실행된다.
따라서, 각 서비스는 독립적으로 실행되고, 필요에 따라 개별적으로 개발, 배포, 확장할 수 있다.

이 예제는 MSA의 기본 개념을 보여주기 위한 간단한 예제이며, 복잡한 시스템에서는 서비스 간 통신, 데이터 동기화, 오류 처리 등의 추가 기능이 필요할 수 있다.

 

- 참고 자료

https://ko.wikipedia.org/wiki/%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4

 

마이크로서비스 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 마이크로서비스(microservice)는 애플리케이션을 느슨하게 결합된 서비스의 모임으로 구조화하는 서비스 지향 아키텍처(SOA) 스타일의 일종인 소프트웨어 개발 기

ko.wikipedia.org