티스토리 뷰

개요

모던 소프트웨어 엔지니어링 을 읽는데 본질적인 복잡성과 우발적인 복잡성 이야기가 나왔다. 도메인 주도 설계 관련 책을 읽으며 보았던 표현으로 기억해서, 이 참에 내 걸로 만들기위해 간단 정리해둔다.

어디서 나온 말인가?

“본질적 복잡성(essential complexity)” 과 “우발적 복잡성(accidental complexity)” 이라는 개념은 프레데릭 브룩스(Frederick P. Brooks) 가 1986년에 발표한 유명한 논문 「No Silver Bullet: Essence and Accidents of Software Engineering」 에서 처음 나온 개념이다. 논문은 소프트웨어 개발에 “마법 같은 획기적 해결책(silver bullet)” 은 없다고 주장한다. 다들 많이 들어본 표현일 것이다.

프레드 브룩스는 소프트웨어의 복잡성을 둘로 나누어 본질적 복잡성은 어떤 기술이나 툴로도 제거할 수 없지만, 우발적 복잡성은 더 나은 설계와 도구로 줄일 수 있다고 구분했다.

본질적인 복잡성

문제 자체가 가지고 있는 피할 수 없는 복잡성이기 때문에 제거할 수 없다.

예시

  • 항공권 예약 시스템은 다양한 노선, 가격 변동, 취소 규정 등을 다룬다.
  • 현실 세계 자체가 복잡하기 때문에 어떠한 방법으로도 단순화할 수 없다.

우발적인 복잡성

문제를 해결하는 방법이나 도구 때문에 생긴 불필요한 복잡성을 말한다. 즉, 본질과 상관없이 인간이 덧붙인 복잡성이기에 해결할 수 있다. 우발적이라는 표현은 어색한데 또 그렇다고 좋은 대안이 떠오르지는 않는다.

예시

  • 필요한 것보다 지나치게 복잡한 프레임워크를 도입해서 코드가 더 복잡해졌다.
  • 네트워크 통신 하나 하려고 별도 스레드 관리, 세션 관리, 커넥션 풀 등을 직접 구현해버렸다.

마무리

본질적 복잡성은 “풀어야 할 문제 자체의 복잡성” 이라 한다면, 우발적 복잡성은 “풀면서 스스로 만들어낸 복잡성”이다. 요리로 비교하자면 다음과 같다. 우리는 우발적 복잡성을 풀어내어야 한다.

  • 본질적 복잡성: 요리할 때 “재료 손질”은 피할 수 없다. 생선 요리를 하려면 비늘을 벗겨야 한다.
  • 우발적 복잡성: 칼이 너무 무뎌졌다. 조리대가 너무 좁다.
반응형
반응형
잡학툰 뱃지
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/12   »
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
글 보관함