microservice

    [DDD&MSA] 마이크로서비스 설계

    소프트웨어 설계 모듈화의 근본적인 가치는 각 모듈을 기능적으로 응집성을 높게(High Cohesion), 타 기능과의 결합도는 낮게(Low Coupling) 하는 것이다. 마이크로서비스 설계에서도 마찬가지이다. 마이크로서비스 도출 방법 마이크로서비스가 비즈니스의 변화 속도를 지원하면서 독립적으로 변경 및 배포되려면 각 마이크로서비스가 다른 서비스와 의존하지 않게 도출해야 한다. 따라서 시스템의 어떤 비즈니스 기능들을 묶어서 독립적인 마이크로서비스로 도출할 것인가를 결정하는 것이 매우 중요하다. 비즈니스 능력에 근거한 도출 크리스 치러드슨은 비즈니스 능력(capability)에 따라 서비스로 식별할 수 있다고 주장한다. 비즈니스 능력은 '비즈니스 가치를 생산하기 위해 하는 일'이라고 정의하며, 곧 '조직이..

    [DDD&MSA] 도메인 주도 설계와 마이크로서비스

    마이크로서비스를 만들기 위한 가장 효율적인 프로세스는 실제로 동작하는 제품 중심의 반복/점진적 애자일 개발 프로세스이다. 피드백을 통한 지속적인 개선을 추구하는 애자일 프로세스는 가장 효율적인 의사소통 구조와 협업 체계를 가진 다기능 팀을 필요로 하고, 그 다기능 팀이 만들어내는 결과물이 마이크로서비스이다. 애자일에는 빨리, 자주 실패를 경험해 보는 것이 중요하기 때문에 단순한 설계를 통해 우선 최소한의 실제로 동작하는 제품(MVP; Minimum Viable Product)을 만들어 자주 배포하는 것이 중요하다. 이러한 과정을 통하여 각 개발팀에 맞는 최적의 개발 프로세스를 지속적으로 향상시킬 수 있다. 애자일 문화는 어느정도 체계적인 소프트웨어 개발 문화에서 시작했다. 따라서 아직 개발 문화가 성숙하..

    [DDD&MSA] 마이크로서비스 애플리케이션 아키텍처

    관심사의 분리, Separation of Concerns 비즈니스 로직: 보통 시스템의 목적인 비즈니스 영역의 업무 규칙(Rule), 흐름(Flow), 개념(Concept)을 표현하는 용어다. 개발자의 역할은 문제 영역의 비즈니스 로직을 분석 및 이해하고 프로그래밍 언어라는 도구로 기능을 잘 동작하게 하고 이해하기 쉽고 변경하기 쉬운 시스템을 만드는 일이다. 관심사의 분리 원칙은 애플리케이션 아키텍처 설계 원칙 중 하나이다. 이것은 시스템의 각 영역이 처리하는 관심사가 분리되어 잘 관리돼야 한다는 의미이고, 시스템을 이해하고 변경하기 쉽게 만들어준다. 이 원칙에 따라 각 영역은 고유 관심사에 의해 분리되고 집중돼야 한다. 기술과 비즈니스 로직을 분리했을 때, 시스템을 이해하기 쉬워지므로 복잡성이 낮아지고..

    [DDD&MSA] 마이크로서비스 애플리케이션 패턴

    마이크로서비스 애플리케이션 패턴은 실제로 개발자가 구현해야 할 애플리케이션 영역에서, 좋은 마이크로서비스 애플리케이션을 구성하기 위한 패턴이다. 마이크로서비스의 구성과 관계를 설계할 때도 유연성, 확장성, 독립성 등을 고려해야 한다. 하나의 업무 기능은 보통 프론트엔드와 백엔드의 연계로 구현된다. 백엔드의 업무 기능 하나가 변경되어 재배포가 필요할 때, 프론트엔드가 클래식한 단일 모노리스로 구성되어 있다면, 프론트엔드는 하나의 덩어리이기 때문에 재배포가 필요없는(변경이 없는) 기능들 까지도 함께 빌드하고 배포하여야 한다. 이는 백엔드가 모노리스로 구성되었을 때와 똑같은 문제를 안게 된다. UI 컴포지트 패턴 또는 마이크로 프론트엔드 이를 위한 해결 방안이 UI 컴포지트(Composite) 패턴과 마이크로..

    [DDD&MSA] MSA(Microservice Architecture) 구성요소

    MSA(Microservice Architecture) 구성요소 소프트웨어 아키텍트인 크리스 리처드슨(Chris Richardson)은 마이크로서비스 아키텍처 패턴을 인프라 패턴, 애플리케이션 인프라 패턴, 애플리케이션 패턴 등으로 분류해서 정의했다. 시스템을 개발하는 개발자의 입장에서 마이크로서비스 시스템을 구현하기 위해 밟아야 할 단계들을 알아보자. 우선은 인프라가 구축돼야 하고, 그 위에 미들웨어가 올라가고, 미들웨어 위에서 애플리케이션이 동작해야 한다. 따라서 인프라, 미들웨어 영역을 대신하고 있는 플랫폼, 애플리케이션 관련 패턴들을 살펴보자. 인프라 구성요소: 마이크로서비스를 지탱하는 하부구조 인프라를 구축하는 데 필요한 구성요소 플랫폼 패턴: 인프라 위에서 마이클로서비스의 운영과 관리를 지원하..

    [DDD&MSA] 마이크로서비스(Microservice) 등장배경, 리액티브 선언

    리액티브 선언: 현대 애플리케이션이 갖춰야할 바람직한 속성들 2014년 요나스 보네르(Jonas Bonér) 등이 선언한 리액티브 선언문(The Reactive Manifesto)이다. 리액티브 시스템이란 다양한 상황에 따라 빠르고 적절하게 반응하는 시스템을 의미한다. 리액티브 선언문에서는 다음 4가지 특성을 강조하고, 이러한 요건을 만족하는 시스템을 리액티브 시스템이라고 정의한다. 응답성(Responsive): 사용자에게 신뢰성 있는 응답을 빠르고 적절하게 제공하는 것을 의미한다. 탄력성(Resilient): 장애가 발생하거나 부분적으로 고장 나더라도 시스템 전체가 고장 나지 않고 빠르게 복구하는 능력을 의미한다. 유연성(Elastic): 시스템의 사용량에 변화가 있더라도 균일한 응답성을 제공하는 것을..

    [DDD & MSA] 마이크로서비스(Microservice)의 개념과 필요조건

    마이크로서비스(Microservice) 란? 유명 아키텍트 구루인 마틴 파울러(Martin Fowler)는 그동안의 마이크로서비스(microservice) 발전 흐름을 정리해 마이크로서비스의 등장 배경과 개념, 특징을 설명하였다. 해당 아티클은 본 포스팅의 가장 마지막에 연결해 두겠다. 모노리스(Monolith) vs 마이크로서비스(Microservice) 전통적인 시스템 구조인 모노리스(monolith) 구조는 다음 그림과 같다. 서버 측 애플리케이션이 일체, 즉 논리적인 단일체로서 아무리 작은 변화에도 새로운 버전으로 전체를 빌드해서 배포해야 한다. 그리고 일체식 애플리케이션은 단일 프로세스에서 실행된다. 따라서 확장이 필요한 경우, 특정 기능만 확장할 수 없고 전체 애플리케이션을 동시에 확장해야 한..