소프트웨어 디자인, 설계

아키텍쳐 설계 원리

  • 클린 아키텍쳐 설계를 준수해서 이론적인 부분과 간단한 예시들을 기술합니다.

1. Domain-Driven Design (DDD)

  • 개요

  • 복잡한 비즈니스 로직을 명확히 분리하여 도메인 모델을 중심으로 설계하는 패턴.

  • 엔티티(Entity), 값 객체(Value Object), 애그리게이트(Aggregate), 리포지토리(Repository), 서비스(Service) 개념을 활용.

  • 기술적 설명

  • 엔티티(Entity): 고유한 식별자를 가지는 객체.

  • 값 객체(Value Object): 불변성을 가지며, 개별적으로 식별되지 않는 객체.

  • 애그리게이트(Aggregate): 여러 개의 엔티티와 값 객체를 하나의 트랜잭션 단위로 묶는 개념.

  • 리포지토리(Repository): 영속성(Persistence) 계층을 관리하는 패턴.

  • 도메인 서비스(Domain Service): 엔티티나 값 객체가 처리하기 어려운 비즈니스 로직을 포함하는 서비스.

  • 적용 사례

중대형 규모의 기업 시스템 (예: 은행, 보험, ERP 시스템)에서 사용.

// 엔티티 예제
class Order {
  constructor(id, customer, items) {
    this.id = id
    this.customer = customer
    this.items = items
  }
}

2. Model View Controller (MVC)

  • 개요

  • 사용자 인터페이스와 비즈니스 로직을 분리하는 대표적인 아키텍처 패턴.

  • Model(데이터 및 비즈니스 로직), View(사용자 인터페이스), Controller(요청 처리 및 모델과 뷰 연결)로 구성.

  • 기술적 설명

  • Model: 애플리케이션의 데이터와 비즈니스 로직을 담당.

  • View: 사용자에게 데이터를 출력하는 역할.

  • Controller: 사용자의 입력을 처리하고 Model과 View를 연결.

  • 적용 사례

소규모~중규모 웹 애플리케이션 (예: 블로그, 쇼핑몰, 관리 시스템)에서 사용.

// Express 기반 MVC 예제
const express = require('express')
const app = express()

// Model
const users = [{ id: 1, name: 'Alice' }]

// Controller
app.get('/users', (req, res) => {
  res.json(users)
})

// View (API 기반이라 JSON 응답)
app.listen(3000, () => console.log('Server running'))

3. Microservices

  • 개요

  • 단일 애플리케이션을 여러 개의 독립적인 서비스로 나누어 운영하는 아키텍처 패턴.

  • 각 서비스는 독립적인 데이터 저장소를 가지고 있으며 API로 통신.

  • 기술적 설명

  • 서비스 분리: 기능별로 독립적인 서비스로 개발.

  • 데이터베이스 분리: 각 서비스가 개별적으로 데이터를 관리.

  • API Gateway: 클라이언트 요청을 적절한 서비스로 라우팅.

  • 적용 사례

대규모 서비스 (예: Netflix, Uber, Amazon)에서 사용.

// API Gateway 예제
const express = require('express')
const axios = require('axios')
const app = express()

app.get('/orders', async (req, res) => {
  const orders = await axios.get('http://order-service/orders')
  res.json(orders.data)
})

app.listen(4000, () => console.log('API Gateway running'))

4. Serverless Architecture

  • 개요

  • 서버 관리 없이 클라우드 서비스 제공자의 기능(Function)으로 애플리케이션을 운영하는 방식.

  • 기술적 설명

  • FaaS (Function as a Service): AWS Lambda, Azure Functions 등을 활용.

  • 이벤트 기반 실행: HTTP 요청, 메시지 큐, 배치 작업 등 특정 이벤트 발생 시 실행.

  • 적용 사례

스타트업, 빠른 프로토타이핑, 이벤트 기반 서비스 (예: IoT, 실시간 분석)에서 사용.

// AWS Lambda 예제
exports.handler = async (event) => {
  return { statusCode: 200, body: 'Hello Serverless!' }
}

5. Message Queue / Streams

  • 개요

  • 비동기 메시지 큐를 활용하여 서비스 간 통신을 수행하는 패턴.

  • 기술적 설명

  • Producer: 메시지를 생성하여 큐에 넣음.

  • Consumer: 큐에서 메시지를 가져와 처리.

  • Broker: 메시지를 관리하는 시스템 (예: Kafka, RabbitMQ).

  • 적용 사례

비동기 이벤트 처리, 대규모 트래픽 분산 (예: 로그 처리, 실시간 스트리밍)에서 사용.



이 패턴들을 활용하면 확장 가능하고 유지보수하기 쉬운 아키텍처를 설계할 수 있습니다. 🚀
이론적으로는 그렇다는 겁니다 하하 .....

참고 자료

위키피디아
AWS 공식문서
Apache Kafka 공식문서

Previous
아키텍쳐 원리