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의 관계
마이크로서비스의 복잡성과 종속성이 증가함에 따라 배포, 모니터링 및 수명 주기 자동화에 대한 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.