Architecture 17

클린 아키텍처(Clean Architecture)

클린 아키텍처(Clean Architecture)는 로버트 C. 마틴이 제안한 소프트웨어 아키텍처 패턴으로 소프트웨어의 유지보수성과 확장성을 높이기 위해 관심사를 분리하는 구조를 의미한다.이 아키텍처는 의존성 규칙(Dependency Rule) 을 기반으로 계층을 나누고 핵심 비즈니스 로직이 외부 요소(데이터베이스, UI, 프레임워크 등)에 의존하지 않도록 설계된다. 1. 클린 아키텍처의 핵심 원칙클린 아키텍처는 아래 4가지 원칙을 따른다.① 독립성(Independence)프레임워크로부터 독립 🏗️ → 특정 프레임워크에 종속되지 않음 (예: 스프링, 장고 등)UI로부터 독립 🖥️ → 웹, 모바일, CLI 등 다양한 UI에서 사용 가능데이터베이스로부터 독립 🛢️ → MySQL, PostgreSQL 등..

Architecture 2025.01.30

헥사고날 아키텍처(Hexagonal Architecture)

헥사고날 아키텍처(Hexagonal Architecture)는 2005년 앨리스테어 콕번(Alistair Cockburn)이 제안한 소프트웨어 설계 패턴으로 애플리케이션의 비즈니스 로직을 외부 인터페이스(예: UI, 데이터베이스, 메시지 큐 등)로부터 분리하는 것을 목표로 한다. "포트와 어댑터 아키텍처(Ports and Adapters Architecture)"라고도 한다. 🎯 헥사고날 아키텍처의 핵심 개념헥사고날 아키텍처는 크게 세 가지 주요 구성 요소로 나뉜다.1. 도메인(Domain) / 애플리케이션 코어비즈니스 로직을 포함하는 핵심 부분데이터베이스, UI, 프레임워크 등의 외부 요소에 의존하지 않음독립적으로 테스트가 가능해야 함도메인 객체, 애그리게이트, 서비스 등이 포함됨2. 포트(Ports..

Architecture 2025.01.30

레이어드 아키텍처(Layered Architecture)

레이어드 아키텍처(Layered Architecture)는 소프트웨어 시스템을 계층(Layer)으로 나누어 설계하고 구현하는 소프트웨어 설계 패턴 중 하나이다. 이 아키텍처는 시스템을 여러 수준으로 나누고 각 계층이 특정한 역할과 책임을 맡도록 구성하여 코드의 유지보수성과 재사용성을 높이고 개발 프로세스를 단순화한다. 레이어드 아키텍처의 주요 계층프레젠테이션 계층(Presentation Layer)사용자와의 상호작용을 담당하는 계층UI(User Interface)를 포함하며 사용자가 데이터를 입력하거나 결과를 확인할 수 있도록 도와준다.일반적으로 HTML, CSS, JavaScript 또는 모바일 애플리케이션의 프론트엔드 부분이 포함된다.예: 웹 브라우저에서 렌더링되는 화면, 앱의 UI 구성 요소애플리케..

Architecture 2025.01.12

이벤트소싱 패턴

이벤트 소싱(Event Sourcing) 패턴은 마이크로서비스 아키텍처에서 데이터를 저장하고 처리하는 방법 중 하나로 시스템의 상태를 단순히 저장하는 것이 아니라 발생한 이벤트(event)를 순서대로 기록하고 이를 통해 상태를 재구성하는 방식이다. 핵심 개념이벤트 중심 저장데이터의 상태 변화는 이벤트로 기록된다.예를 들어, 은행 계좌의 잔액을 저장하는 대신 "입금", "출금"과 같은 이벤트를 기록한다.상태의 재구성현재 상태는 이벤트 로그를 순차적으로 재생(replay) 하여 재구성한다.이벤트 로그는 시스템의 단일 진실 소스(single source of truth)가 된다.불변성이벤트는 변경되거나 삭제되지 않고 불변(immutable) 성질을 가진다.모든 이벤트는 시간 순서대로 저장된다. 장점감사 및 추..

Architecture 2025.01.05

CQRS 패턴 (Command and Query Responsibility Segregation)

CQRS(Command and Query Responsibility Segregation) 패턴은 명령(Command)과 조회(Query)를 분리하여 데이터에 대한 작업을 처리하는 설계 패턴이다. 이 패턴은 특히 마이크로서비스 아키텍처에서 유용하며 다음과 같은 이유로 활용된다. 핵심 개념명령(Command)데이터의 변경(예: 생성, 수정, 삭제)을 처리한다.일반적으로 데이터베이스를 업데이트하거나 변경 작업이 포함된다.비즈니스 로직과 검증이 중요한 부분이다.조회(Query)데이터를 조회(예: 검색, 읽기)하는 작업을 처리한다.데이터 무결성과 비즈니스 로직은 크게 관여하지 않으며 빠르고 최적화된 조회가 목표이다.명령과 조회를 분리함으로써 각 작업에 대해 별도의 모델을 유지할 수 있다. CQRS의 구조Comm..

Architecture 2024.12.28

사가(Saga) 패턴

사가(Saga) 패턴은 마이크로서비스 아키텍처에서 분산 트랜잭션 관리 문제를 해결하기 위해 사용하는 설계 패턴이다. 각 마이크로서비스가 독립적으로 작동하면서도 여러 서비스 간의 상태 일관성을 유지하는 데 도움을 준다. 사가 패턴의 개념사가 패턴은 장기 실행 트랜잭션을 여러 개의 작은 트랜잭션으로 나누고 각 트랜잭션이 독립적으로 수행되도록 한다.각각의 트랜잭션은 보상 트랜잭션(compensating transaction)을 함께 정의하여 실패 시 이전 상태로 롤백할 수 있다. 사가 패턴의 주요 특징트랜잭션 분리한 서비스에서 모든 작업을 처리하는 대신 여러 서비스에 걸쳐 분산 트랜잭션을 수행한다.이벤트 기반서비스 간 통신은 이벤트를 통해 이루어진다.예) 하나의 서비스가 작업을 완료하면 관련된 이벤트를 발행하..

Architecture 2024.12.28

저장소 분리 패턴

마이크로서비스 아키텍처에서 저장소 분리 패턴 (Database per Service Pattern)은 각 마이크로서비스가 독립적인 데이터 저장소를 가지도록 설계하는 원칙이다. 이 패턴은 마이크로서비스의 자율성을 강화하고 서비스 간의 의존성을 줄이며 시스템의 확장성과 유지보수성을 개선하기 위해 사용된다. 저장소 분리 패턴의 핵심 개념독립적 데이터베이스각 마이크로서비스는 자신만의 데이터베이스를 소유하며 다른 서비스와 데이터베이스를 공유하지 않는다.예를 들어, 주문 관리 서비스와 사용자 관리 서비스가 각각 별도의 데이터베이스를 가지게 된다.독립적 데이터 스키마각 서비스는 자신의 데이터 스키마를 독립적으로 정의하고 관리한다.이는 다른 서비스와의 데이터 구조 충돌을 방지하고 각 서비스가 독립적으로 진화(evolu..

Architecture 2024.12.25

마이크로서비스 통신 패턴 (동기, 비동기)

마이크로서비스 아키텍처에서 동기(Synchronous)와 비동기(Asynchronous) 통신 방식은 서로 다른 서비스 간 데이터 교환 및 작업 처리를 다루는 방식으로 각각의 특성과 용도가 있다. 1. 동기 호출(Synchronous)특징호출자가 요청을 보내고 응답을 받을 때까지 기다리는 방식.서비스 간의 호출은 실시간으로 이루어지며 요청-응답 패턴이 명확.일반적으로 HTTP/REST API가 동기 통신의 대표적인 예이다.장점구현이 간단하며 직관적.호출 순서가 보장되고 응답 결과를 바로 처리할 수 있음.디버깅이 상대적으로 쉬움 (문제가 발생한 지점 추적이 간단).단점의존성 문제 : 호출하는 서비스가 응답하지 않거나 느리면 호출자가 대기 상태에 빠짐.성능 병목 : 여러 서비스가 연결되어 있으면 하나의 느린..

Architecture 2024.12.25

서킷 브레이커 패턴(Circuit Breaker Pattern) 이란

서킷 브레이커 패턴(Circuit Breaker Pattern)은 마이크로서비스 아키텍처에서 시스템의 안정성과 탄력성을 향상시키기 위해 사용하는 중요한 설계 패턴이다. 이 패턴의 주요 목적은 서비스 간의 장애 전파를 방지하고 실패한 서비스와의 불필요한 호출을 줄여 시스템의 복구를 돕는 것이다. 주요 개념회로 차단기처럼 동작서킷 브레이커는 전기 회로 차단기와 유사하게 작동한다. 시스템에서 특정 조건(예: 실패 횟수나 시간 초과)이 발생하면 서킷 브레이커는 "열림(open)" 상태가 되어 추가 요청을 차단한다. 서비스가 복구되었다고 판단될 때 "닫힘(closed)" 상태로 돌아간다.상태서킷 브레이커는 다음 세 가지 상태를 가집니다:Closed (닫힘) : 정상 상태로 모든 요청이 서비스로 전달된다.Open ..

Architecture 2024.12.21

MSA에서 인증/인가 패턴

마이크로서비스 아키텍처에서 인증(Authentication)과 인가(Authorization)는 분산된 시스템 구조에서 중요한 역할을 한다. 각각의 마이크로서비스가 독립적으로 작동하기 때문에 인증 및 인가 메커니즘을 효율적으로 설계하는 것이 필수적이다. 1. 인증(Authentication) 패턴인증은 사용자의 신원을 확인하는 과정이다.1.1 토큰 기반 인증 (Token-Based Authentication)JWT (JSON Web Token)클라이언트가 인증 서버에 로그인하면 JWT를 발급받는다.클라이언트는 이후 요청에 이 토큰을 포함하며 마이크로서비스는 이 토큰을 검증하여 사용자의 신원을 확인한다.장점 : 무상태(stateless)로 작동하므로 확장성이 좋다.단점 : 토큰이 클라이언트에 저장되기 때문..

Architecture 2024.12.21

BFF 패턴의 개념

BFF(Backend For Frontend) 패턴은 마이크로서비스 아키텍처에서 주로 사용되는 설계 패턴으로 클라이언트 애플리케이션(프론트엔드)과 백엔드 서비스 간의 통신을 최적화하기 위해 만들어진 백엔드 레이어를 말한다. 이 패턴은 특히 다양한 클라이언트(웹, 모바일, IoT 등)를 지원해야 하는 환경에서 유용하다. BFF 패턴의 개념BFF는 각 클라이언트 유형(웹, 모바일 등)에 특화된 백엔드 서비스를 제공하여 클라이언트 요구사항에 맞는 데이터를 적절히 가공하거나 특정 기능을 캡슐화한다. 이를 통해 프론트엔드 개발자가 불필요한 작업을 줄이고 클라이언트 경험을 최적화할 수 있다. BFF 패턴의 특징클라이언트 맞춤화각 클라이언트(예: 모바일 앱, 웹 앱)에 적합한 API를 제공하며 데이터를 변환하거나 클..

Architecture 2024.12.20

API 게이트웨이 패턴이란?

API 게이트웨이 패턴은 마이크로서비스 아키텍처(MSA)에서 클라이언트와 백엔드 서비스 간의 단일 진입점(Single Entry Point) 역할을 수행하는 중요한 구성 요소이다. 클라이언트는 각각의 마이크로서비스와 직접 통신하지 않고 API 게이트웨이를 통해 모든 요청을 주고 받는다. 주요 역할 및 기능클라이언트와 서비스 간의 추상화클라이언트는 API 게이트웨이를 통해서만 마이크로서비스에 접근하므로, 개별 서비스의 구현 세부 사항이 숨겨진다.서비스 URL 구조 변경이나 내부 로직 변경이 클라이언트에 직접적으로 영향을 미치지 않는다.요청 라우팅API 게이트웨이는 요청을 적절한 마이크로서비스로 라우팅한다.예를 들어, /user 요청은 사용자 서비스로 /order 요청은 주문 서비스로 전달된다.인증 및 인가..

Architecture 2024.12.20

Service Discovery

Service Discovery는 분산 시스템에서 서비스 간의 통신을 가능하게 하기 위해 서비스의 위치를 동적으로 찾는 메커니즘을 말한다. 이는 마이크로서비스 아키텍처에서 특히 중요한 개념으로 서비스가 동적으로 생성되고 종료되는 환경에서 안정적이고 효율적인 통신을 가능하게 한다. 주요 개념서비스 등록 (Service Registration)서비스가 시작되면 자신의 정보를 서비스 디스커버리 시스템에 등록한다.정보에는 서비스의 이름, IP 주소, 포트 등이 포함된다.서비스 조회 (Service Lookup)클라이언트가 다른 서비스를 호출하기 전에 디스커버리 시스템에서 대상 서비스의 위치를 조회한다. 동작 방식중앙 집중형 서비스 디스커버리별도의 디스커버리 서버(레지스트리)가 서비스를 등록하고 조회하는 역할을 ..

Architecture 2024.12.06

캐시 스탬피드(Cache Stampede) 개념과 해결 방법

캐시 스탬피드(Cache Stampede)는 캐시된 데이터가 만료될 때 다수의 클라이언트가 동시에 동일한 데이터를 요청하는 현상을 말한다. 이로 인해 원본 데이터 소스(예: 데이터베이스나 API)에 과부하가 발생하며 시스템 성능이 급격히 저하되거나 심지어 장애가 발생할 수 있다. 현상의 원인캐시 만료 시점 동시 요청동일한 데이터를 요청하는 여러 클라이언트가 캐시된 데이터가 만료된 직후 동시에 원본 데이터 소스에 접근하려고 시도한다.예를 들어, 인기 있는 웹 페이지의 캐시가 만료되면 그 페이지를 요청하는 수많은 사용자의 요청이 한꺼번에 데이터베이스로 전달될 수 있다.원본 데이터 소스의 처리 한계데이터베이스, API, 파일 시스템 등 원본 데이터 소스는 높은 동시 요청을 처리할 수 있는 용량에 한계가 있다...

Architecture 2024.11.28

트랜잭셔널 메시징

트랜잭셔널 메시징은 마이크로서비스 아키텍처에서 데이터 일관성과 메시지 전달의 신뢰성을 유지하기 위해 사용되는 기법이다. 이 개념은 데이터베이스 트랜잭션과 메시징 시스템 간의 연계를 통해 데이터 상태와 메시지 전달이 항상 일치하도록 보장하고자 한다. 이를 통해 시스템 간의 분산 트랜잭션 문제를 해결할 수 있다. 트랜잭셔널 메시징의 핵심 개념데이터 일관성 보장데이터 상태가 변경될 때 반드시 관련 메시지도 전달되어야 함메시지가 전달되지 않으면 데이터 변경이 롤백되어야 함단일 트랜잭션 원칙데이터베이스 업데이트와 메시지 브로커에 메시지 발행이 하나의 트랜잭션처럼 작동해야 함중복 메시지 처리메시지가 중복 전달될 가능성이 있으므로 멱등성(idempotency)을 고려한 메시지 처리 설계가 필요트랜잭셔널 메시징 구현 ..

Architecture 2024.11.26
반응형