Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

밤빵's 개발일지

[TIL]20240824 MSA(Microservices Architecture) 본문

개발Article

[TIL]20240824 MSA(Microservices Architecture)

최밤빵 2024. 8. 24. 21:43

▶ MSA(Microservices Architecture)란?

MSA(Microservices Architecture)는 하나의 애플리케이션을 여러 개의 작은 독립적인 서비스로 구성하는 아키텍처 스타일로, 각 서비스는 독립적으로 배포, 확장, 개발될 수 있으며, 서로 다른 기술 스택과 데이터베이스를 사용할 수 있다. 이러한 MSA는 모놀리틱 아키텍처(Monolithic Architecture)와 대비되는 개념으로, 최근 다양한 대규모 시스템 개발에 많이 사용되고 있다.

 

▶ MSA의 개념과 특징

MSA는 큰 애플리케이션을 여러 개의 작은 서비스로 나누어, 각 서비스가 독립적으로 운영되도록 하는 아키텍처로 각 서비스는 고유한 비즈니스 기능을 담당하며, 다른 서비스와 느슨하게 결합되어 있다. 이러한 MSA의 특징은 다음과 같다.

 

→ 독립적인 배포:

각 서비스는 독립적으로 배포되고, 개별적으로 관리할 수 있다.

→ 자율적 팀 구성:

각 서비스는 작은 팀에 의해 독립적으로 개발될 수 있으며, 팀 간의 의존성이 줄어든다.

→ 다양한 기술 스택:

각 서비스는 다른 프로그래밍 언어나 데이터베이스를 사용할 수 있어, 기술적 다양성을 허용한다.

→ 고가용성 및 확장성:

서비스가 분리되어 있기 때문에, 특정 서비스의 장애가 전체 시스템에 영향을 미치지 않으며, 필요한 서비스만 확장할 수 있다.

 

▶ MSA의 장점

→ 독립적 개발 및 배포:

서비스 간의 의존성이 낮아, 독립적으로 개발하고 배포할 수 있어 개발 속도가 빨라진다.

→ 확장성:

특정 서비스에만 트래픽이 몰릴 때 해당 서비스만 확장할 수 있어 자원 효율성이 높아진다.

→ 기술 스택의 유연성:

각 서비스는 독립적으로 개발되므로, 필요에 따라 적합한 기술 스택을 선택하여 사용할 수 있다.

→ 장애 격리:

특정 서비스에 문제가 발생해도 다른 서비스에 영향을 주지 않아, 시스템 안정성이 높다.

→ 재사용성:

작은 서비스 단위로 개발하기 때문에 다른 프로젝트나 기능에 재사용하기 쉽다.

 

▶MSA의 단점

→ 복잡한 관리:

서비스가 많아지면, 각 서비스의 배포, 모니터링, 로깅 등을 관리하는 데 필요한 복잡성이 증가한다.

→ 데이터 일관성 문제:

각 서비스가 독립된 데이터베이스를 사용할 경우, 데이터의 일관성을 유지하기 어려울 수 있다.

→ 네트워크 지연:

서비스 간의 통신이 네트워크를 통해 이루어지기 때문에, 네트워크 지연이 발생할 수 있다.

→ 분산 트랜잭션 관리의 어려움:

각 서비스가 독립적이기 때문에, 분산 트랜잭션을 관리하기 어렵다.

→ 테스트의 복잡성:

여러 서비스가 함께 동작하므로, 통합 테스트의 복잡도가 증가한다.

 

▶ MSA 도입 시 고려해야 할 점

→ 팀 구성:

각 서비스는 독립적인 팀에서 관리되어야 하므로, 조직 구조를 재편성할 필요가 있다.

→ 서비스 설계:

각 서비스의 경계를 명확하게 정의해야 한다. 서비스 간의 결합도가 낮고, 응집도가 높은 서비스로 설계해야 한다.

→ 데이터 관리 전략:

각 서비스가 고유한 데이터베이스를 사용할 경우, 데이터 일관성 문제를 해결할 방법을 고려해야 한다.

→ 배포 및 운영 도구:

서비스가 많아지면, 컨테이너 오케스트레이션 도구(Kubernetes 등)와 같은 배포 및 운영 도구를 도입하는 것이 좋다.

→ 보안 관리:

서비스 간의 통신이 증가하므로, 인증 및 권한 부여 메커니즘을 강화해야 한다.

→ 모니터링 및 로깅:

여러 개의 서비스로 분리되어 있으므로, 각 서비스의 상태를 모니터링하고 로그를 관리할 수 있는 시스템이 필요하다.

 

▶ 모놀리틱 아키텍처와 MSA의 차이점

모놀리틱 아키텍처와 MSA는 각각 장단점이 있고, 아래 표는 두 아키텍처의 주요 차이점을 정리했다.

구분 모놀리틱 아키텍처(Monolithic Architecture) 마이크로서비스 아키텍처(Microservices Architecture)
구조 모든 기능이 하나의 애플리케이션으로 통합 각 기능이 독립적인 서비스로 분리
배포 전체 애플리케이션을 하나로 배포 개별 서비스 단위로 독립적으로 배포
개발 속도 초기 개발은 빠를 수 있으나, 확장 시 복잡성이 증가 초기에는 복잡할 수 있지만, 확장 및 유지보수가 용이
스케일링 전체 애플리케이션을 확장해야 하므로 비효율적 필요한 서비스만 확장 가능, 자원 효율성 높음
의존성 관리 코드가 하나로 결합되어 있어, 모듈 간 의존성 관리가 어려움 각 서비스가 독립적이므로 모듈 간 의존성이 낮아 관리가 용이
장애 처리 하나의 모듈에 장애가 발생하면 전체 애플리케이션이 영향을 받을 수 있음 각 서비스가 독립적으로 운영되므로 장애가 발생해도 다른 서비스에는 영향 없음
데이터 관리 하나의 데이터베이스를 사용하며, 데이터 일관성 관리가 용이 각 서비스마다 독립된 데이터베이스를 사용, 데이터 일관성 유지가 어려울 수 있음
테스트 단일 애플리케이션에 대한 테스트가 상대적으로 쉬움 각 서비스 간의 통합 테스트 및 종단 간 테스트의 복잡성 증가
도입 비용 도입 초기 비용이 낮음 도입 초기에는 복잡성이 증가할 수 있으나 장기적으로 유지보수 비용이 낮음

▶ 정리 

MSA(Microservices Architecture)는 여러 개의 독립적인 서비스를 결합하여 하나의 애플리케이션을 구성하는 아키텍처로, 개발 속도와 확장성을 높이는 데 적합하다. 반면, 모놀리틱 아키텍처는 하나의 통합된 애플리케이션을 기반으로 빠른 초기 개발이 가능하지만, 확장성과 유지보수 측면에서 단점이 있다. MSA를 도입할 때는 서비스 설계, 데이터 관리 전략, 보안 관리 등을 철저히 고려해야 하며, 여러 개의 독립된 서비스로 관리해야 하는 복잡성이 증가할 수 있다.