티스토리 뷰

개요
모던 소프트웨어 엔지니어링 을 읽는데 본질적인 복잡성과 우발적인 복잡성 이야기가 나왔다. 도메인 주도 설계 관련 책을 읽으며 보았던 표현으로 기억해서, 이 참에 내 걸로 만들기위해 간단 정리해둔다.
어디서 나온 말인가?
“본질적 복잡성(essential complexity)” 과 “우발적 복잡성(accidental complexity)” 이라는 개념은 프레데릭 브룩스(Frederick P. Brooks) 가 1986년에 발표한 유명한 논문 「No Silver Bullet: Essence and Accidents of Software Engineering」 에서 처음 나온 개념이다. 논문은 소프트웨어 개발에 “마법 같은 획기적 해결책(silver bullet)” 은 없다고 주장한다. 다들 많이 들어본 표현일 것이다.
프레드 브룩스는 소프트웨어의 복잡성을 둘로 나누어 본질적 복잡성은 어떤 기술이나 툴로도 제거할 수 없지만, 우발적 복잡성은 더 나은 설계와 도구로 줄일 수 있다고 구분했다.
본질적인 복잡성
문제 자체가 가지고 있는 피할 수 없는 복잡성이기 때문에 제거할 수 없다.
예시
- 항공권 예약 시스템은 다양한 노선, 가격 변동, 취소 규정 등을 다룬다.
- 현실 세계 자체가 복잡하기 때문에 어떠한 방법으로도 단순화할 수 없다.
우발적인 복잡성
문제를 해결하는 방법이나 도구 때문에 생긴 불필요한 복잡성을 말한다. 즉, 본질과 상관없이 인간이 덧붙인 복잡성이기에 해결할 수 있다. 우발적이라는 표현은 어색한데 또 그렇다고 좋은 대안이 떠오르지는 않는다.
예시
- 필요한 것보다 지나치게 복잡한 프레임워크를 도입해서 코드가 더 복잡해졌다.
- 네트워크 통신 하나 하려고 별도 스레드 관리, 세션 관리, 커넥션 풀 등을 직접 구현해버렸다.
마무리
본질적 복잡성은 “풀어야 할 문제 자체의 복잡성” 이라 한다면, 우발적 복잡성은 “풀면서 스스로 만들어낸 복잡성”이다. 요리로 비교하자면 다음과 같다. 우리는 우발적 복잡성을 풀어내어야 한다.
- 본질적 복잡성: 요리할 때 “재료 손질”은 피할 수 없다. 생선 요리를 하려면 비늘을 벗겨야 한다.
- 우발적 복잡성: 칼이 너무 무뎌졌다. 조리대가 너무 좁다.
'development' 카테고리의 다른 글
| 카디널리티 vs 선택도: 데이터베이스 인덱스 최적화의 핵심 (0) | 2025.08.11 |
|---|---|
| Next.js 프로젝트 생성하기: 처음부터 완벽하게 시작하는 방법 (0) | 2025.05.12 |
| TIL: 순환복잡도 cyclomatic complexity (0) | 2025.04.27 |
| 데이터베이스 인터널스 - Belady’s Anomaly (0) | 2025.04.19 |
| YouTub 좋아요를 누르면 TickTick에 추가하기 (0) | 2025.04.09 |
- Total
- Today
- Yesterday
- 티스토리챌린지
- agile
- Echo
- notion
- ChatGPT
- 영화
- golang
- OpenAI
- MCP
- go
- 독서
- gocore
- API
- postgres
- bun
- solid
- 오블완
- middleware
- 체호프
- 인텔리제이
- clean agile
- strange
- 클린 애자일
- backend
- Gin
- github
- websocket
- 잡학툰
- intellij
- 독서후기
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |