Cloud Visualizer

Software Architecture 시각적으로 이해하기

각 개념의 아키텍처를 애니메이션 다이어그램으로 살펴보세요. 카드를 클릭하면 더 깊은 내용을 확인할 수 있습니다.

🔍
📱Client🖥️Server🗄️Data
🖥️

Client/Server

요청을 보내는 쪽과 처리하는 쪽을 분리하는 가장 기본적인 구조

Client-Server는 사용자 인터페이스를 가진 클라이언트와 요청을 처리하는 서버를 나누는 가장 기본적인 소프트웨어 구조입니다. 클라이언트는 입력과 표시를 맡고, 서버는 데이터와 규칙을 중앙에서 관리합니다.

🖼️UI🧱Service🗄️DB
🧱

Layered

서버 내부 책임을 층으로 나눠 복잡도를 낮추는 구조

Layered Architecture는 애플리케이션 내부 책임을 프레젠테이션, 애플리케이션, 도메인, 인프라처럼 층으로 나누는 구조입니다. 각 층은 자기보다 가까운 층과만 대화하면서 역할 경계를 유지합니다.

👥Users🏢Single App🗄️Shared DB
🏢

Monolith

하나의 코드베이스와 하나의 배포 단위로 움직이는 애플리케이션

Monolith는 여러 기능이 하나의 애플리케이션 안에 함께 묶여 빌드되고 배포되는 구조입니다. 내부에는 여러 모듈이 있을 수 있지만, 운영에서는 보통 하나의 덩어리처럼 다뤄집니다.

🚪Entry🧩Svc A🧩Svc B🗄️Own Data
🧩

Microservices

도메인 경계를 서비스 단위로 나눠 독립적으로 운영하는 구조

Microservices는 애플리케이션을 여러 개의 작은 서비스로 나누고, 각 서비스가 자기 책임과 데이터를 중심으로 독립 배포되도록 설계하는 구조입니다. 팀별 ownership과 운영 자율성을 높일 수 있지만, 분산 시스템의 복잡성도 함께 가져옵니다.

📱Clients🚪Gateway🧩Services
🚪

Gateway

여러 백엔드 앞에 두는 공통 진입점

API Gateway는 여러 서비스 앞에 단일 진입점을 두고 인증, 라우팅, 집계, 정책 적용을 중앙에서 처리하는 패턴입니다. 클라이언트는 내부 서비스 구조를 몰라도 되고, 공통 횡단 관심사를 한곳에서 다루기 쉬워집니다.

🧩Service🧭Registry📍Endpoint
🧭

Discovery

변하는 서비스 인스턴스 위치를 이름으로 찾게 해주는 메커니즘

Service Discovery는 현재 살아 있는 서비스 인스턴스의 위치를 런타임에 찾게 해주는 메커니즘입니다. 컨테이너와 오토스케일링 환경처럼 주소가 계속 변하는 구조에서 특히 중요합니다.

📤ProducerEvent Bus📥Consumer

EDA

직접 호출 대신 사건의 발생을 중심으로 연결하는 구조

Event-Driven Architecture는 서비스가 서로를 직접 호출하기보다 '무슨 일이 일어났다'는 이벤트를 발행하고, 다른 컴포넌트가 그 이벤트에 반응하는 구조입니다. 생산자와 소비자 사이의 결합을 느슨하게 만들 수 있지만, 비동기 흐름을 운영해야 합니다.

📤Producer📬Queue🛠️Worker
📬

Queue

생산자와 소비자 사이의 속도 차이를 흡수하는 작업 버퍼

Message Queue는 작업이나 메시지를 일단 적재해 두고, 소비자가 자기 속도에 맞춰 가져가게 하는 구조입니다. 순간적인 트래픽 스파이크와 비동기 처리에 특히 유용합니다.

📣Publisher🛰️Topic👂Subscribers
📣

Pub/Sub

하나의 사건을 여러 구독자에게 fan-out하는 메시징 구조

Publish/Subscribe는 발행자가 토픽에 메시지를 올리고, 여러 구독자가 자기 책임에 맞게 그 메시지를 받아 처리하는 구조입니다. 생산자는 누가 듣는지 몰라도 되어 확장성이 좋아집니다.

🖥️App🧠Cache🗄️DB
🧠

Caching

반복 조회를 빠르게 만들기 위해 가까운 곳에 복사본을 두는 기법

Caching은 자주 읽는 데이터를 원본 저장소보다 더 가까운 위치에 복사해 두고 빠르게 재사용하는 기법입니다. 지연을 줄이고 원본 저장소 부하를 낮출 수 있지만, 오래된 데이터 문제를 함께 관리해야 합니다.

✍️WriteSync📖Read
✍️

CQRS

읽기와 쓰기의 모델을 분리해 서로 다른 요구를 따로 최적화하는 구조

CQRS(Command Query Responsibility Segregation)는 상태를 바꾸는 경로와 읽어 오는 경로를 서로 다른 모델로 분리하는 패턴입니다. 읽기와 쓰기의 요구가 크게 다를 때 특히 힘을 발휘합니다.

1️⃣Step 12️⃣Step 2↩️Compensate
🔄

Saga

여러 로컬 트랜잭션을 순서와 보상으로 이어 붙이는 분산 흐름 패턴

Saga는 여러 서비스에 걸친 작업을 하나의 전역 트랜잭션으로 묶지 않고, 로컬 트랜잭션과 보상 작업의 연쇄로 처리하는 패턴입니다. 분산 시스템에서 일관성을 다루는 대표적인 방법 중 하나입니다.

📞Caller🛑Breaker🌐Remote
🛑

Breaker

실패하는 원격 호출을 잠시 끊어 연쇄 장애를 막는 패턴

Circuit Breaker는 오류율이나 타임아웃이 임계치를 넘으면 원격 호출을 일시적으로 차단해 연쇄 장애를 막는 패턴입니다. 복구 가능성이 생기면 제한적으로 다시 열어 보며 상태를 조정합니다.

📨Req♻️KeyOne Result
♻️

Idempotency

같은 요청이 여러 번 와도 결과를 한 번처럼 유지하는 성질

Idempotency는 같은 요청이 중복으로 실행되더라도 최종 상태가 한 번 실행한 것과 같게 유지되는 성질입니다. 재시도, 중복 전달, 네트워크 불확실성이 있는 시스템에서 특히 중요합니다.

🧩Service🔭Signals👩‍💻Ops
🔭

Observability

시스템 내부 상태를 외부 신호로 드러내 원인을 추적하게 하는 능력

Observability는 로그, 메트릭, 트레이스 같은 신호를 통해 시스템 내부 상태를 외부에서 추론할 수 있게 만드는 능력입니다. 복잡한 분산 시스템일수록 '보는 능력' 자체가 기능 못지않게 중요해집니다.