🧠 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