프로젝트 단체개발 일지

현정재·2024년 9월 4일
2

MSA (Microservices Architecture) 마이크로서비스 아키텍처

MSA의 주요 특징:

  • 독립적인 배포: 각 마이크로서비스는 독립적으로 개발, 배포, 확장이 가능합니다. 이를 통해 시스템의 일부분만 수정하거나 확장할 수 있어 전체 시스템에 영향을 주지 않습니다.
  • 작은 서비스: 각 서비스는 하나의 비즈니스 도메인 또는 기능에만 집중하며, 단일 책임 원칙(Single Responsibility Principle)을 따릅니다.
  • 독립적인 데이터 저장소: 각 마이크로서비스는 자신만의 데이터베이스를 가질 수 있습니다. 이를 통해 서비스 간 데이터 충돌을 줄이고, 데이터 저장 방식이나 기술 선택에 유연성을 부여할 수 있습니다.
  • 경량 통신: 마이크로서비스는 일반적으로 HTTP(S) 기반의 REST API, gRPC, 메시지 브로커(예: RabbitMQ, Kafka)를 통해 통신합니다.
  • 자율성: 각 서비스는 자율적으로 개발되고 배포됩니다. 서로 다른 프로그래밍 언어나 기술 스택을 사용해도 문제가 없습니다.

MSA의 장점:

  • 유연한 확장성: 시스템의 특정 부분에만 부하가 걸릴 때, 해당 부분만 확장할 수 있어 자원을 효율적으로 사용할 수 있습니다.
  • 빠른 배포: 독립적인 서비스 개발과 배포가 가능해, 변경 사항을 빠르게 적용하고 배포할 수 있습니다.
  • 유지보수 용이성: 각각의 마이크로서비스는 상대적으로 작은 코드베이스로 유지되어, 코드 복잡성이 낮아집니다.
  • 강한 모듈화: 서비스 간 의존성이 낮아, 시스템 전체의 복잡도가 줄어듭니다.

MSA의 단점:

  • 복잡성 증가: 서비스가 많아지면 서비스 간의 통신, 데이터 관리, 장애 복구 등이 복잡해집니다.
  • 네트워크 통신 부담: 마이크로서비스 간의 통신이 네트워크를 통해 이루어지므로, 트래픽 증가에 따라 네트워크 부하가 늘어날 수 있습니다.
  • 데이터 일관성 관리: 각 서비스가 별도의 데이터베이스를 가질 때, 데이터 일관성을 유지하는 것이 어려울 수 있습니다.
  • 운영 복잡성: 서비스가 많아지면서 각각의 서비스를 모니터링하고 배포, 장애 대응 등을 관리하는 작업이 복잡해질 수 있습니다.

세션 강의를 듣고 알게 된 점

  • MSA 방식에 대한 코드를 어떻게 작성하는지에 대한 세션을 보고, 내가 참여하고 있는 프로젝트가 완벽한 MSA 방식은 아니지만, 어떤 장점이 있고 어떤 단점이 있는지 알고 사용해야 할 것 같아 다시 한번 정리를 해보았다.
  • 현재 내가 참여하고 있는 프로젝트에서는 두 개의 서버로 나누어 각각의 모듈로 하나의 DB를 사용하는 방식으로 구성되어 있다.
  • 우리나라 대부분의 회사에서는 완벽한 MSA 방식을 사용하지 않는다는 것을 알게 되었다. 각각의 모듈로 구성은 하지만, 모듈마다 각각의 DB를 사용하는 MSA는 유지보수하는 데 시간이 오래 걸리기 때문에 회사가 성장하면서 DB도 서서히 분리한다고 한다.
  • 지금 현재 우리 팀은 하나의 인텔리제이 안에 모듈을 분리시키지 않아서, 사용자 서버와 파트너 서버의 API를 테스트하려면 두 개의 인텔리제이를 사용하여 테스트해야 했다.
  • 하나의 인텔리제이 안에서 모듈화하여 두 개의 서버를 테스트하는 방법이 있다는 것을 알게 되어 한번 적용해 보고 싶었다.

Gateway API를 활용해보자!

하나의 인텔리제이에서 각각의 모듈을 테스트할 수 있지만, 요청 경로를 8080이면 localhost:8080, 8081이면 localhost:8081로 각각 따로 요청해야 해서 이 불편한 점을 해소하기 위해 Gateway API를 적용하면 아주 편리해진다. Gateway API를 설정하여 포트가 9000이면 localhost:9000으로 연결시켜 두어, 8080과 8081 서버의 API를 요청하더라도 9000으로 요청하면 쉽게 테스트를 진행할 수 있다.

현재 우리 프로젝트에서도 Gateway를 사용하고 있는가?

Gateway를 사용하지는 않지만 비슷해 보이는 것은 하나 있는 것 같다. 내 개인적인 생각이지만 Nginx를 통해 8080, 8081 서버를 연결해 주는 부분이 역할은 다르지만, 흐름은 비슷한 느낌을 받았다. Gateway를 통해 모든 모듈을 연동시키고 Nginx를 통해 모든 서버에 접근할 수 있다는 점, 하나가 여러 개를 연결해 준다는 관점에서 비슷한 느낌을 받았다.

모든 걸 혼자 하려면 엄청난 시간과 노력이 필요하지만, 이렇게 누군가 알려주면 생각조차 못 한 부분도 알 수 있게 되는 것 같아서 강의가 너무 좋았다.

profile
wonttock

1개의 댓글

comment-user-thumbnail
2024년 9월 4일

긋긋긋

답글 달기