47 lines
3.8 KiB
Markdown
47 lines
3.8 KiB
Markdown
---
|
|
id: P-REINFORCE-WIKI-DEV-SOC
|
|
title: "관심사의 분리와 모듈형 시스템 설계 (SoC)"
|
|
category: "10_Wiki/💻 Topics_Dev"
|
|
status: verified
|
|
canonical_id: ""
|
|
aliases: ["SoC", "관심사의 분리", "Separation of Concerns", "모듈화", "계층 분리"]
|
|
duplicate_of: ""
|
|
source_trust_level: A
|
|
confidence_score: 1.0
|
|
tags: ["Design_Principles", "Architecture", "Modularity", "Complexity_Management", "Clean_Code"]
|
|
raw_sources: ["Datacollector_Export_2026-05-02"]
|
|
last_reinforced: 2026-05-02
|
|
github_commit: ""
|
|
---
|
|
|
|
# [[관심사의 분리와 모듈형 시스템 설계 (SoC)]]
|
|
|
|
## 1. 개요
|
|
관심사의 분리(SoC, Separation of Concerns)는 컴퓨터 프로그램을 서로 겹치지 않는 뚜렷한 섹션(관심사)으로 나누어 설계하는 소프트웨어 엔지니어링의 핵심 원칙이다. "Divide and Conquer(분할 정복)" 전략을 소프트웨어 아키텍처에 적용한 것으로, 하나의 컴포넌트가 너무 많은 무관한 책임을 지는 것을 방지하여 복잡성을 제어하고 시스템의 이해도를 높이는 데 기여한다.
|
|
|
|
## 2. 주요 실천 방식 및 패턴
|
|
- **계층형 아키텍처 (Layered Architecture)**: 프레젠테이션, 비즈니스 로직, 데이터 접근 계층 등 수평적으로 책임을 나누어 인접 계층하고만 소통.
|
|
- **MVC (Model-View-Controller)**: 사용자 인터페이스(View), 비즈니스 데이터(Model), 흐름 제어(Controller)를 분리하여 UI 변경이 로직에 미치는 영향 최소화.
|
|
- **마이크로서비스 (Microservices)**: 비즈니스 도메인 단위로 아예 물리적 프로세스를 분리하여 극단적인 수준의 SoC 구현.
|
|
- **횡단 관심사 분리 (AOP)**: 로깅, 보안, 트랜잭션 등 여러 모듈에 공통적으로 나타나는 '횡단 관심사'를 비즈니스 로직과 분리하여 별도로 관리.
|
|
|
|
## 3. 엔지니어링 가치
|
|
- **복잡성 관리**: 거대한 시스템을 인간이 한 번에 인지할 수 있는 작은 단위로 조각내어 개발 및 유지보수 효율성 증대.
|
|
- **코드 재사용성 및 교체 용이성**: 특정 관심사(예: 데이터베이스 접근)가 격리되어 있어, 다른 모듈의 수정 없이 해당 관심사를 담당하는 코드만 교체하거나 재사용 가능.
|
|
- **병렬 개발 가속화**: 명확한 경계와 인터페이스가 정의되어 있으면, 여러 개발자가 서로의 코드 간섭 없이 서로 다른 계층을 동시에 개발 가능.
|
|
|
|
## 4. 트레이드오프 및 주의사항
|
|
- **인지 부하의 전이**: 너무 잘게 쪼개진 모듈은 전체적인 시스템의 동작 흐름을 한눈에 파악하기 어렵게 만들 수 있음(인지 부하가 파일 내부에서 파일 간 관계로 전이).
|
|
- **설계 오버헤드**: 초기 단계에서 명확한 경계를 설정하기 위한 설계 노력이 많이 필요하며, 경계가 잘못 설정될 경우 계층 간의 데이터 전달 비용만 증가하는 '만능 계층' 문제 발생.
|
|
- **강결합의 유혹**: 편의를 위해 다른 관심사의 코드를 한 곳에 섞기 시작하면 순식간에 '스파게티 코드'로 변질되므로, 지속적인 아키텍처 위반 검토 필요.
|
|
|
|
## 5. 지식 연결 (Related)
|
|
- [[SOLID_Principles]]: SoC를 객체 수준에서 구현한 단일 책임 원칙(SRP)을 포함하는 설계 체계.
|
|
- [[Clean_Architecture]]: 관심사 분리를 극대화하여 도메인을 보호하는 설계 사상.
|
|
- [[Modular_Programming]]: SoC를 실현하기 위한 구체적인 프로그래밍 패러다임.
|
|
|
|
## 🧪 검증 상태 (Validation)
|
|
- **정보 상태**: 검증 완료 (Verified)
|
|
- **출처 신뢰도**: A
|
|
- **검토 이유**: 시스템의 복잡성을 관리 가능한 수준으로 제어하고, 각 모듈의 독립성과 재사용성을 확보하기 위한 근본적인 소프트웨어 설계 원칙 정립.
|