MicroService

유석현(SeokHyun Yu)·2023년 10월 25일
0

도커&쿠버네티스

목록 보기
6/7
post-thumbnail

1. 마이크로서비스 소개

마이크로서비스 아키텍처는 하나의 큰 애플리케이션을 작은 서비스 단위로 분할하여 관리하는 방식이다. 각각의 서비스는 독립적인 기능을 수행하며, 이들이 협력하여 하나의 복잡한 기능을 완성한다. 이러한 서비스들은 각각 독립적으로 개발, 배포, 확장이 가능하다는 장점을 가진다. 이는 전체 시스템의 유연성을 크게 향상시키고, 시장 변화에 빠르게 대응할 수 있게 한다.

마이크로서비스 아키텍처는 모듈화 높은 수준을 제공한다. 각 서비스는 특정 비즈니스 기능에 초점을 맞추며, 서비스 간의 강한 결합을 피하고 느슨한 결합(Loose Coupling)을 유지한다. 이는 시스템의 한 부분을 수정하거나 업데이트할 때 다른 부분에 미치는 영향을 최소화한다.

또한, 마이크로서비스는 확장성유지보수 측면에서도 이점을 가진다. 시스템의 특정 부분에 대한 수요가 증가하면 해당 서비스만을 별도로 확장할 수 있으며, 작은 단위로 구성되어 있기 때문에 각 서비스의 유지보수 및 업데이트가 용이하다.

이러한 특징들로 인해 마이크로서비스 아키텍처는 복잡한 애플리케이션을 효율적으로 관리하고 빠르게 진화시킬 수 있는 현대적인 소프트웨어 개발 방식으로 널리 사용되고 있다.


2. 마이크로서비스 아키텍처의 주요 특징

마이크로서비스 아키텍처에서는 여러 중요한 특징이 있다:

  • 독립적인 개발 및 배포: 각 마이크로서비스는 독립적인 코드베이스를 가지고 있어, 한 서비스의 수정이 다른 서비스에 영향을 미치지 않는다. 이는 각 서비스의 유연한 개발과 빠른 반영을 가능하게 한다.

  • 서비스 간 통신: 서비스들은 RESTful API메시지 큐와 같은 표준 프로토콜을 사용하여 서로 데이터를 주고받는다. 이러한 방식은 서비스 간의 원활한 통신과 통합을 촉진한다.

  • 한 팀이 관리: 각 마이크로서비스는 하나의 작은 팀에 의해 관리되며, 이는 의사결정과 개발 프로세스를 더욱 신속하고 효율적으로 만든다. 작은 팀은 빠른 반응과 유연한 대응이 가능하다.

  • 독립적인 배포: 하나의 서비스에서 오류가 발생해도 해당 서비스만 영향을 받으며, 시스템 전체의 안정성은 유지된다. 이는 전체 시스템의 내구성과 신뢰성을 향상시킨다.

이와 같은 특징들은 마이크로서비스 아키텍처가 복잡한 시스템에서 유연성, 확장성, 그리고 안정성을 제공하는 데에 기여한다.


3. 마이크로서비스 아키텍처의 도전 과제

마이크로서비스 아키텍처에서 주요 과제는 다음과 같다:

  • 성능: 네트워크 지연이나 데이터 일관성 등의 이슈가 발생할 가능성이 있다. 이는 각 마이크로서비스 간의 통신 때문에 생기는 병목 현상이나 일관된 데이터 상태를 유지하는 데 어려움을 초래할 수 있다.

  • 코드 중복: 공통된 로직이 여러 서비스에 걸쳐 반복될 수 있다. 이는 각 서비스가 독립적으로 개발되고 유지되면서 발생하는 문제로, 코드의 중복을 피하기 위한 전략이 필요하다.

  • 트랜잭션 관리: 각 서비스가 독립적으로 작동하기 때문에, 여러 서비스가 참여하는 트랜잭션을 관리하기 어렵다. 이는 크로스 서비스 트랜잭션에 대한 복잡성과 관리의 어려움을 의미한다.

  • 미들웨어 프레임워크 필요: 서비스 간의 통신을 조율하고 로깅, 모니터링 등의 기능을 제공하기 위해 추가적인 미들웨어가 필요하다. 이는 시스템의 복잡성을 증가시키며, 추가적인 관리와 유지보수가 필요하다.

이러한 과제들은 마이크로서비스 아키텍처를 구현하고 운영하는 데 있어 중요한 고려 사항이며, 효과적인 해결 방안을 마련하는 것이 필수적이다.


4. 마이크로서비스 크기 결정 요소

마이크로서비스 아키텍처에서는 다양한 요소들이 서비스의 크기와 구성에 영향을 미친다. 주요 고려사항은 다음과 같다:

  • 모듈화 수준: 너무 작은 서비스는 관리의 부담을 증가시킨다. 적절한 크기의 서비스는 유지 관리와 개발이 용이해야 한다.

  • 분산 통신 과부하: 서비스 간 과도한 통신은 네트워크 지연과 같은 성능 저하 문제를 야기할 수 있다. 효율적인 통신 전략이 필요하다.

  • 애자일 팀 크기: 서비스는 한 팀이 관리할 수 있는 적정 수준의 복잡성을 유지해야 한다. 팀이 관리하기에 너무 복잡한 서비스는 효과적인 개발과 운영에 장애가 될 수 있다.

  • 인프라 구조: 클라우드 인프라와 데이터베이스 구성은 서비스의 설계와 운영에 큰 영향을 미친다. 인프라의 성능과 확장성은 서비스의 크기 결정에 중요한 요소가 된다.

이러한 요소들은 마이크로서비스를 설계하고 구현할 때 반드시 고려되어야 하며, 적절한 균형을 찾는 것이 서비스의 성공을 위해 중요하다.


5. 마이크로서비스 적용 시점

대규모 시스템이 복잡성을 관리하기 어려울 정도로 커졌을 때, 마이크로서비스 아키텍처로의 전환을 고려할 수 있다. 마이크로서비스 아키텍처는 시스템을 작고 독립적인 서비스 단위로 분할하는 접근 방식이다. 이 아키텍처는 각 서비스가 특정 비즈니스 기능에 집중하도록 하여 시스템의 전체적인 관리와 확장성을 개선한다.

마이크로서비스는 각각 독립적으로 배포, 확장 및 개발될 수 있으며, 이는 개발 팀이 더 민첩하게 움직이고 빠르게 혁신할 수 있도록 한다. 또한, 이러한 서비스들은 API를 통해 서로 통신하므로, 다양한 프로그래밍 언어와 데이터 저장소 기술을 사용할 수 있는 유연성을 제공한다.

그러나 마이크로서비스 아키텍처로의 전환은 기존 시스템 구조를 완전히 재설계하고, 서비스 간 통신, 데이터 일관성 유지 등 새로운 도전을 수반한다. 따라서 전환은 신중하게 계획하고 단계적으로 진행해야 한다.

profile
Backend Engineer

0개의 댓글