Close

Microservices: understanding what it is and its benefits

얼마 전까지 소프트웨어 애플리케이션을 구축하는 데 선호하는 방법은 하나의 자율적 유닛인 모놀리식 아키텍처였습니다. 이 접근 방식은 애플리케이션의 복잡성이 증가할 때까지는 많은 개발자에게 효과적이었습니다. 모놀리식 시스템에서 코드의 작은 부분을 수정하는 경우 전체 시스템을 다시 구축하고 전체 시스템에서 테스트를 실행하며 완전히 새로운 버전의 애플리케이션을 배포해야 합니다.

그 후 소프트웨어 시스템을 자율적으로 개발 및 배포하는 더 작은 유닛으로 나누는 접근 방식인 마이크로서비스가 등장했습니다. 마이크로서비스 아키텍처는 새로운 기능, 버그 수정 및 보안 개선과 같은 업데이트를 자주 제공하려는 DevOps 운동에 의해 전개됩니다. 또한 많은 경우 기업이 최신 프로그래밍 언어를 사용하여 레거시 애플리케이션을 다시 작성하고 기술 스택을 업데이트하는 경로가 되었습니다.

마이크로서비스는 크고 복잡한 애플리케이션을 지속적으로 제공하고 배포하는 소규모 유닛의 모음입니다.

마이크로서비스란 무엇입니까?


간단하게 “마이크로서비스”라고도 하는 마이크로서비스 아키텍처는 분산되고 자율적으로 개발되는 독립적으로 배포 가능한 일련의 서비스로 애플리케이션을 구축하는 접근 방식입니다. 이러한 서비스는 느슨하게 결합되어 있으며, 독립적으로 배포 가능하고 유지 관리가 쉽습니다. 모놀리식 애플리케이션은 나눌 수 없는 단일 유닛으로 구축되는 반면, 마이크로서비스는 단일 유닛을 더 큰 전체에 기여하는 독립적인 유닛 모음으로 나눕니다. 마이크로서비스는 팀이 사용자 요구 사항에 빠르게 적응할 수 있도록 하는 지속적 배포 관행의 기반이기 때문에 DevOps의 필수적인 부분입니다.

마이크로서비스 일러스트레이션

마이크로서비스는 도메인 로직의 한 부분을 담당하는 웹 서비스입니다. 여러 마이크로서비스가 결합하여 애플리케이션을 만들며, 각 마이크로서비스는 도메인에 대한 하나의 기능을 제공합니다. 마이크로서비스는 REST 또는 gRPC와 같은 API를 사용하여 서로 상호 작용하지만 다른 서비스의 내부 작동에 대해서는 알지 못합니다. 마이크로서비스 간의 이러한 조화로운 상호 작용이 마이크로서비스 아키텍처입니다.

개발자는 마이크로서비스 아키텍처를 사용하여 다양한 스택과 분리된 배포를 통해 서로 다른 서비스를 전문으로 하는 소규모 팀을 구성할 수 있습니다. 예를 들어 Jira는 여러 마이크로서비스로 구동되며, 각 마이크로서비스는 이슈 검색, 이슈 세부 정보 보기, 댓글, 이슈 전환 등의 특정 기능을 제공합니다.

마이크로서비스의 특징


마이크로서비스 아키텍처에 대한 공식적인 정의는 없지만 알아야 할 몇 가지 일반적인 패턴이나 특징이 있습니다.

마이크로서비스 아키텍처에서 각 구성 요소는 다른 서비스의 기능이나 애플리케이션의 무결성을 손상시키지 않으면서 개발, 배포, 운영, 변경 및 재배포할 수 있습니다.

마이크로서비스의 이점


Microservices provide many advantages. They simplify development and project management. Sometimes, they may eliminate the need for separate operations teams since developers can handle operations for the microservices they build. 

Some other benefits of microservices include:

저울 일러스트레이션

유연한 확장

마이크로서비스는 설계에 따라 분산되고 클러스터에 배포될 수 있으므로 서비스 경계를 넘어 동적인 수평 확장이 가능합니다. 마이크로서비스가 부하 용량에 도달하면 해당 서비스의 새 인스턴스를 포함하는 클러스터에 신속하게 배포하여 부담을 완화할 수 있습니다.

애자일 일러스트레이션

민첩성

작은 독립적인 팀이 일반적으로 마이크로서비스 내에서 서비스를 구축하기 때문에 팀이 애자일 관행을 채택하도록 장려합니다. 팀이 독립적으로 작업하고 빠르게 마이그레이션할 수 있어 개발 사이클 타임이 단축됩니다.

도구 상자 일러스트레이션

기술 유연성

마이크로서비스 아키텍처는 반드시 하나의 도구 체인으로 설정된 접근 방식을 따를 필요는 없지만 팀이 원하는 도구를 자유롭게 선택할 수 있도록 합니다.

쌓여 있는 블록 일러스트레이션

자주 릴리스

마이크로서비스의 주요 장점은 릴리스 주기가 빈번하고 빠르다는 것입니다. 지속적 통합 및 지속적 배포(CI/CD)의 핵심 요소인 마이크로서비스를 통해 팀은 새로운 기능을 실험해 보고 문제가 발생할 경우 롤백할 수 있습니다. 따라서 코드를 보다 쉽게 업데이트하고 새로운 기능의 시장 출시 시간을 단축할 수 있습니다.

마이크로서비스의 도전 과제


Microservices-based architecture has many benefits, but it also comes with challenges. 

One challenge of microservices is that the independent services generate their logs. This is a disadvantage compared to monoliths' centralized logs, which provide a single source of truth for developers and operations teams. Monitoring and infrastructure management are also more complicated since many moving pieces exist. Testing and debugging are challenging because, unlike monoliths, no integrated development environment (IDE) exists.

Atlassian's Compass can help with all these challenges. Compass facilitates collaboration and allows companies to manage the complexities of distributed architectures as they scale. It does this by bringing the disconnected information together in a central, searchable location.

무분별한 개발 확장

모놀리스에서 마이크로서비스로의 마이그레이션은 복잡성이 증가함을 의미합니다. 더 많은 장소에 여러 팀이 만든 더 많은 서비스가 있습니다. 따라서 각기 다른 구성 요소가 서로 어떻게 관련되어 있는지, 특정 구성 요소를 누가 소유하고 있는지, 종속 구성 요소에 부정적인 영향을 미치지 않으려면 어떻게 할지 파악하기가 어렵습니다. 무분별한 개발 확장을 관리하지 않으면 개발 속도가 느려지고 운영 성능이 저하되는 결과가 나타납니다. 시스템이 성장함에 따라 아키텍처의 지속적인 재배포와 빈번한 변경을 관리하려면 숙련된 운영 팀이 필요합니다.

명확한 소유권 부족

마이크로서비스 아키텍처는 누가 무엇을 소유하고 있는지 더욱 혼란스럽게 만듭니다. DevOps 팀은 사용자가 애플리케이션을 배포할 수 있도록 API, 구성 요소 라이브러리, 모니터링 도구 및 Docker 이미지의 조합을 실행할 수 있습니다. 소유자, 리소스 및 다른 구성 요소 간의 진화하는 관계를 포함하여 구성 요소의 정보에 대한 인사이트를 갖는 것이 중요합니다. 관련된 모든 직원이 제품을 이해하는 데 필요한 지식을 쉽게 찾을 수 있도록 여러 팀 간에 정확한 커뮤니케이션과 조정이 필요합니다.

기하급수적인 인프라 비용

프로덕션 배포에 추가되는 각각의 새로운 마이크로서비스에는 테스트 도구, 배포 플레이북, 호스팅 인프라, 모니터링 도구 등에 대한 자체적인 비용이 포함됩니다.

조직 오버헤드 추가

마이크로서비스 아키텍처 팀 간의 업데이트와 인터페이스를 조정하려면 또 다른 커뮤니케이션과 공동 작업이 이루어져야 합니다.

디버깅

각각 고유한 로그 집합이 있는 여러 마이크로서비스를 포함하는 애플리케이션을 디버깅하는 것은 어려울 수 있습니다. 여러 시스템에서 하나의 비즈니스 프로세스를 실행할 수 있으므로 디버깅이 더욱 복잡합니다.

인시던트 대응

마이크로서비스 사용자, 마이크로서비스 배포 위치, 마이크로서비스 배포 방법, 문제 발생 시 연락할 대상과 같은 정보를 포함하는 마이크로서비스 인시던트 대응 인텔리전스를 갖추는 것이 중요합니다.

마이크로서비스 및 DevOps의 관계


마이크로서비스의 복잡성과 종속성이 증가함에 따라 배포, 모니터링 및 수명 주기 자동화에 대한 DevOps 관행은 마이크로서비스 아키텍처에 필수적인 것으로 간주됩니다. 이것이 바로 마이크로서비스가 DevOps 문화를 수용하는 첫 번째 단계로 간주되는 이유이며, 이를 통해 다음과 같은 이점을 얻을 수 있습니다.

  • 자동화
  • 확장성 향상
  • 관리 편의성
  • 민첩성
  • 더 빠른 제공 및 배포

마이크로서비스 아키텍처를 위한 주요 기술 및 도구


컨테이너는 단순히 애플리케이션과 모든 종속성을 패키징한 것이므로 쉽고 일관되게 배포할 수 있습니다. 컨테이너에는 자체 운영 체제의 오버헤드가 없기 때문에 기존 가상 머신보다 작고 가볍습니다. 더 빠르게 가동하고 중단할 수 있으므로 마이크로서비스 아키텍처 내에서 발견되는 소규모 서비스에 매우 적합합니다.

서비스와 컨테이너가 확산됨에 따라 대규모 컨테이너 그룹을 오케스트레이션하고 관리하는 것이 필수적입니다. Docker는 개발자가 컨테이너를 구축, 배포 및 실행하도록 지원하는 널리 사용되는 컨테이너화 플랫폼 및 런타임입니다. 그러나 Docker만으로는 대규모 컨테이너를 실행하고 관리하기 어렵습니다. Kubernetes를 비롯해 Docker Swarm, Mesos, HashiCorp Nomad 등과 같은 기타 솔루션은 대규모 컨테이너화 문제를 해결하는 데 도움이 됩니다.

컨테이너화 및 컨테이너 배포는 분산 인프라의 새로운 패턴입니다. Docker와 Kubernetes는 신속하게 배포하고 폐기할 수 있는 완벽한 컨테이너로 서비스를 패키징합니다. 이러한 인프라 도구는 마이크로서비스 아키텍처를 보완합니다. 컨테이너 관리 시스템을 사용하여 마이크로서비스를 컨테이너화하고, 쉽게 배포하고 관리할 수 있습니다.

마이크로서비스란 무엇입니까?


간단하게 “마이크로서비스”라고도 하는 마이크로서비스 아키텍처는 분산되고 자율적으로 개발되는 독립적으로 배포 가능한 일련의 서비스로 애플리케이션을 구축하는 접근 방식입니다. 이러한 서비스는 느슨하게 결합되어 있으며, 독립적으로 배포 가능하고 유지 관리가 쉽습니다. 모놀리식 애플리케이션은 나눌 수 없는 단일 유닛으로 구축되는 반면, 마이크로서비스는 단일 유닛을 더 큰 전체에 기여하는 독립적인 유닛 모음으로 나눕니다. 마이크로서비스는 팀이 사용자 요구 사항에 빠르게 적응할 수 있도록 하는 지속적 배포 관행의 기반이기 때문에 DevOps의 필수적인 부분입니다.

마이크로서비스 일러스트레이션

마이크로서비스는 도메인 로직의 한 부분을 담당하는 웹 서비스입니다. 여러 마이크로서비스가 결합하여 애플리케이션을 만들며, 각 마이크로서비스는 도메인에 대한 하나의 기능을 제공합니다. 마이크로서비스는 REST 또는 gRPC와 같은 API를 사용하여 서로 상호 작용하지만 다른 서비스의 내부 작동에 대해서는 알지 못합니다. 마이크로서비스 간의 이러한 조화로운 상호 작용이 마이크로서비스 아키텍처입니다.

개발자는 마이크로서비스 아키텍처를 사용하여 다양한 스택과 분리된 배포를 통해 서로 다른 서비스를 전문으로 하는 소규모 팀을 구성할 수 있습니다. 예를 들어 Jira는 여러 마이크로서비스로 구동되며, 각 마이크로서비스는 이슈 검색, 이슈 세부 정보 보기, 댓글, 이슈 전환 등의 특정 기능을 제공합니다.

마이크로서비스의 미래


What tools do people commonly use in microservices?

Businesses often use containerization tools such as Kubernetes and Docker. They also frequently use API gateways between microservices and their clients. These gateways perform API traffic functions such as authentication, access control, and load balancing.

How do microservices differ from monolithic architecture?

Monoliths are large codebases that function as one system. They require system downtime for updates and debugging. Microservices architectures are distributed applications with smaller, independent chunks of functionality. Developers can upgrade, improve, and debug these modules without taking the entire application offline. This simplifies scaling and aids development velocity.

How do microservices impact DevOps?

Those who understand DevOps know that continuous integration and continuous delivery (the DevOps CI/CD pipeline) are the mainstays of DevOps methodologies. The modular nature of microservices aligns perfectly with this approach. Microservices empower developers to swiftly create, test, and deploy small, frequent releases.

Join the Atlassian Community for more microservices articles and discussions.

Compass를 사용하여 마이크로서비스 탐색

마이크로서비스 아키텍처로 작업할 때 Atlassian의 Compass는 확장 가능한 분산 아키텍처의 복잡성을 관리합니다. Compass는 엔지니어링 결과물에 대한 단절된 정보와 팀 차원의 공동 작업을 검색 가능한 중앙 위치로 모으는 확장 가능한 개발자 경험 플랫폼입니다. Compass는 컴포넌트 카탈로그를 통해 마이크로서비스의 무분별한 확장을 줄이는 데 도움이 될 뿐만 아니라 성과 기록표를 사용하여 모범 사례를 수립하고 소프트웨어 상태를 측정하며, Atlassian Forge 플랫폼에 구축된 확장 기능을 사용하여 DevOps 도구 체인 전반에 걸쳐 데이터와 인사이트를 제공할 수 있습니다.

Compass 마이크로서비스 일러스트레이션