ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MSA(Microservices Architecture) 개발 방법론 알아보기
    기타 2023. 7. 30. 10:25

    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

     

Designed by Tistory.