🧠 Patterns: 소프트웨어 설계의 공통 언어

Patterns 문서는 소프트웨어 개발 과정에서 반복적으로 마주치는 문제들을 효율적이고 재사용 가능한 방식으로 해결하기 위한 설계 지식의 집합입니다.

이 문서에서는 크게 두 가지 패턴 계층을 다룹니다:

(1) 아키텍처 패턴 (Architectural Patterns)

  • 소프트웨어 아키텍처의 공통적인 발생 문제에 대한 일반적인, 재사용 가능한 해결책
  • 소프트웨어 디자인 패턴과 비슷하지만 더 넓은 범위
  • 하드웨어 성능 제한, 비즈니스 위험의 최소화와 고가용성 등의 문제를 해결하고자 함
  • 시스템 전체의 구조와 모듈 간의 책임 분리, 데이터 흐름을 설계하는 전략
  • 예: Layered Architecture, CQRS, DDD 등

(2) 디자인 패턴 (Design Patterns)

  • 특정 문맥에서 공통적으로 발생하는 문제에 대해 재사용 가능한 해결책
  • 프로그래머가 애플리케이션이나 시스템을 디자인할 때 공통된 문제들을 해결하는데에 쓰이는 형식화 된 가장 좋은 관행
  • 클래스, 객체, 메서드 수준의 구조와 협력 관계를 다루는 설계 해법
  • 예: Builder, Observer, Strategy 등

아키텍처 패턴과 디자인 패턴은 서로 어떤 관계?

  • 아키텍처 패턴과 디자인 패턴은 서로 다른 추상화 수준과 범위를 가진다.
구분 아키텍처 패턴 (Architecture Pattern) 디자인 패턴 (Design Pattern)
범위/수준 시스템 전체의 구조와 조직 (High-Level) 특정 모듈/클래스 내부의 관계와 상호작용 (Low-Level)
목적 시스템의 전반적인 골격과 구성 요소를 정의하고, 주요 기술적 문제(확장성, 분산, 보안 등)를 해결함. 특정 소규모 설계 문제를 해결하고, 코드의 유연성, 재사용성, 유지보수성을 높임.
적용 시점 프로젝트 초기 단계의 큰 그림을 그릴 때 이미 정의된 아키텍처 내에서 세부 코드를 작성할 때
예시 Layered (계층형), Microservices (마이크로서비스), MVC/MVP/MVVM Singleton, Observer, Factory Method (GoF 23개 패턴)
비유 집을 짓기 위한 전체 설계도와 구조 (방의 개수, 층수, 배관 시스템 등) 방 안에 놓을 가구의 세부적인 배치 방식 (책상, 의자, 조명 배치 등)

아키텍처 패턴

아키텍처 패턴은 시스템을 어떤 큰 틀로 구성할 것인지에 대한 지침.
예: 모든 기능을 세 개의 계층(프레젠테이션, 비즈니스 로직, 데이터)으로 나눈다.

디자인 패턴

디자인 패턴은 그 큰 틀 안에서 작은 부품들을 어떻게 만들고 상호작용하게 할 것인지에 대한 해법.
예: 데이터베이스 연결 객체는 단 하나만 생성되도록 싱글턴 패턴을 적용한다.

패턴을 공부하는 이유

“패턴은 단순한 이론이 아니라, 설계를 더 잘하기 위한 사고 도구입니다.”
이 문서를 통해 설계의 감각과 구조적 사고를 키워보도록 하겠습니다.

Reference

https://ko.wikipedia.org/wiki/소프트웨어_디자인_패턴
https://ko.wikipedia.org/wiki/아키텍처_패턴

Comments