오늘은 주말에 잠시 분산서버에 대해 알아보다가 MSA라는 마이크로서비스 아키텍쳐 구조를 튜터님께서 알려주셔서 오늘만은 팀원 다같이 이것에 대해 각자 공부해보는 시간을 가졌습니다.
마이크로서비스 아키텍처란?
마이크로서비스 아키텍처(MSA)는 응용 프로그램을 여러 독립적인 서비스로 나누어 구성하는 소프트웨어 개발 방식입니다. 각각의 마이크로서비스는 특정 비즈니스 기능을 수행하며, 독립적으로 배포, 개발 및 확장이 가능합니다.
MSA의 특징
- 독립성: 각 서비스는 독립적으로 배포 및 확장이 가능합니다.
- 모듈화: 서비스가 작고, 특정 기능에 집중하게 됩니다.
- 다양한 기술 스택 허용: 각 서비스는 서로 다른 기술을 사용할 수 있게 됩니다.
- 이벤트 기반 통신: 서비스 간 데이터를 전달하기 위해 메시징 시스템(TCP, HTTP/REST, gRPC, 메시지 큐등)을 활용합니다.
MSA의 장점
- 애플리케이션 확장성 및 유지보수성 증가
- 장애 격리가 가능해 한 서비스의 문제가 전체 시스템에 영향을 미치지 않음.
- 독립적인 배포가 가능해 빠른 배포 주기를 지원합니다.
MSA의 단점
- 복잡한 네트워크 관리
- 배포 및 테스트가 복잡
- 서비스 간 통신 지연
Node.js로 MSA 설계하기
Node.js는 비동기 I/O 및 경량화 된 서버 실행 환경을 제공하므로, 특히 싱글 스레드로구성되어 MSA를 구축하기에 적합합니다.
기본 설계
1. 서비스 분할
- 기능별로 서비스를 나눔(예: 사용자 관리 서비스, 결제 서비스, 상품 관리 서비스 등).
- 통신 방식 선택
- TCP 소켓, HTTP/REST, gRPC, 또는 메시지 브로커(RabbitMQ, Kafka 등)를 사용할 수 있음.
- API 게이트 웨이
- 클라이언트 요청을 라우팅하고 인증/인가를 처리하는 중앙 진입점.
- 데이터베이스 분리
- 각 마이크로서비스가 자신의 데이터베이스를 소유하도록 설계.
TCP 기반의 설계
TCP는 연결 지향적이며, 빠르고 효율적인 데이터 전송을 제공하므로 서비스 간 실시간 통신이 필요한 경우 적합합니다.