본문 바로가기

카테고리 없음

Microservices Architecture란?

Microservices Architecture는 소프트웨어 아키텍처 스타일로, 기존의 대규모 애플리케이션을 여러 개의 작은, 개별적인 서비스로 분리하여 개발, 배포, 유지보수를 하는 것을 말합니다.이러한 마이크로서비스 아키텍처를 사용하면, 각 서비스는 독립적으로 동작하며, 서로 의존성을 가지지 않습니다. 이러한 구조는 서비스의 개발, 배포, 운영을 보다 유연하고 유지보수하기 쉽게 합니다.

 

Microservices Architecture는 기본적으로 서비스 구조를 가지고 있습니다. 각 서비스는 자신의 역할을 수행하며, 서로 의존성을 가지지 않습니다. 일반적으로 Microservices Architecture는 아래와 같은 구성 요소로 구성됩니다.

 

  • API Gateway : 서비스 간의 통신을 처리하는 라우터 역할을 하며, 요청을 받아 각 서비스로 라우팅합니다.
  • Service Discovery : 서비스들을 찾기 위해, 서비스 간의 의존성을 관리합니다. 서비스들은 이 기능을 통해 서로를 찾아낼 수 있으며, 서비스가 동작하는 위치를 알 수 있습니다.
  • Services : 각각의 서비스들은 자신의 역할만을 수행하며, 독립적으로 동작합니다.
  • Data Store : 각 서비스는 자신만의 데이터 저장소를 가지며, 서비스 간 데이터 공유는 API Gateway를 통해 이루어집니다.

 

아래는 Microservices Architecture를 구성하는 파이썬 코드 예시입니다. 이 코드는 간단한 게시판 서비스를 구성하는 예시로, 게시판 서비스를 구성하는 3개의 서비스를 구현하였습니다.

 

 

API Gateway

from flask import Flask, request
import requests

app = Flask(__name__)

@app.route("/board", methods=["GET"])
def get_board():
    board_id = request.args.get("id")
    board_info = requests.get(f"http://board-service/{board_id}").json()
    posts = requests.get(f"http://post-service/{board_id}").json()
    return {"board_info": board_info, "posts": posts}

if __name__ == "__main__":
    app.run(port=8000)

 

Board Service

from flask import Flask, jsonify

app = Flask(__name__)

@app.route("/<board_id>", methods=["GET"])

def get_board_info(board_id):
    # 게시판 정보를 DB에서 가져오는 코드
    board_info = {"id": board_id, "name": "Example Board"}
    return jsonify(board_info)

if name == "main":
    app.run(port=8001)

 

이 코드들을 구동시키면, API Gateway가 클라이언트의 요청을 받아 Board Service와 Post Service를 호출하여 게시판 정보와 게시글 목록을 클라이언트에게 전달합니다.

 

 

Microservices Architecture의 장점

  • 개발 생산성을 높일 수 있다. 각 서비스는 독립적으로 개발, 배포, 운영되므로 개발 팀은 서로 영향을 주지 않으면서 효율적으로 일을 수행할 수 있다.
  • 유지보수를 쉽게 할 수 있다. 각 서비스는 독립적으로 동작하므로 하나의 서비스가 장애를 일으키더라도 다른 서비스들은 영향을 받지 않는다.
  • 확장성이 좋다. 새로운 서비스를 추가하거나 기존 서비스를 제거하는 것이 쉽다.
  • 운영 환경에 대한 자유도가 높다. 각 서비스는 독립적으로 동작하므로 서비스마다 다른 운영 환경을 사용할 수 있다.

 

Microservices Architecture 운영을 위한 개발팀의 적정 규모

  • Microservices Architecture를 운영하는 개발팀은 서비스별로 개발, 운영 팀을 구성하는 것이 좋다. 각 서비스마다 세부적인 지식이 필요하므로 각 서비스별로 전문적인 팀을 구성하면 효율적인 개발과 운영을 할 수 있다.
  • 서비스별 개발, 운영 팀을 구성하면 각 서비스별로 전문적인 개발, 운영을 할 수 있으며, 서비스 간의 의존성을 줄일 수 있다.
  • 각 서비스별로 전문적인 팀을 구성하면 각 서비스별로 다른 운영 환경을 사용할 수 있다.
  • 개발팀의 적정 규모는 서비스의 복잡도에 따라 달라질 수 있으며, 충분한 인력과 전문성을 가진 팀을 구성해야 한다.

 

Microservices Architecture의 단점

  • 구축 및 운영 비용이 높다. 각 서비스를 독립적으로 구축하면 각 서비스마다 다른 운영 환경을 구축해야 하므로 비용이 많이 들 수 있다.
  • 서비스 간의 통신 비용이 높다. 각 서비스는 자신만의 데이터 저장소를 가지며, 서비스 간 데이터 공유는 API Gateway를 통해 이루어지므로 서비스 간 통신 비용이 많이 들 수 있다.
  • 서비스 간의 의존성이 높다. 각 서비스는 자신만의 데이터 저장소를 가지며, 서비스 간 데이터 공유는 API Gateway를 통해 이루어지므로 서비스 간 의존성이 많이 높아질 수 있다.
  • 개발 및 운영 복잡도가 증가한다. 각 서비스를 독립적으로 개발, 배포, 운영하면 각 서비스마다 다른 운영 환경을 구축해야 하므로 개발 및 운영이 복잡해질 수 있다.