StrongCenter
주니어 개발자들을 위한 패턴 언어 - 시스템의 정체성과 안정성을 결정하는 핵심을 먼저 구축하는 법
Contents
The Story 1: The Infrastructure vs. The Bidding (Programming)
두 명의 개발자, 민수와 하나가 '경매 시스템'을 만들고 있다.
민수의 접근 (The Infrastructure First): 민수는 꼼꼼하다. "시스템은 튼튼해야 해." 그는 1주 차에 로그인과 회원가입을, 2주 차에 로그 기록과 에러 핸들링 프레임워크를, 3주 차에 DB 보안 설정을 마쳤다. 3주가 지났지만, 정작 이 시스템의 본질인 '입찰(Bidding)' 기능은 코드 한 줄도 없다. 민수는 주변부를 튼튼히 하느라 에너지를 다 썼고, 정작 가장 중요한 로직을 짤 때는 지쳐버렸다.
하나의 접근 (The Strong Center): 하나는 본질에 집중한다. "경매 시스템의 핵심은 입찰 경쟁이야." 그녀는 1일 차에 로그인도 DB도 없이 오직 '입찰' 로직만 짰다. "더 높은 가격이 들어오면 낙찰자를 바꾼다." 이 핵심 로직을 중심으로 주문과 결제 기능이 나중에 붙었다. 하나는 시스템의 강한 중심(Strong Center)을 먼저 세웠고, 주변부는 이 중심을 감싸듯이 추가되었다.
The Story 2: The Hearth of the Home (Ordinary Life)
민수와 하나는 자신들이 꿈꾸는 '집'을 설계하고 있다.
민수의 설계 (The Wall First): 민수는 집의 외벽과 담장, 그리고 대문의 디자인부터 고민했다. "튼튼하고 멋진 대문이 있어야 안전한 집이지." 민수는 담장을 쌓고 마당을 꾸미는 데 모든 예산을 썼다. 하지만 정작 집 안으로 들어갔을 때, 가족들이 모여 쉴 거실과 주방은 비좁고 어두웠다. 겉모습은 화려하지만 정작 그곳에 사는 사람의 삶이 담길 공간(중심)이 부실한 집이 되었다.
하나의 설계 (The Living Room First): 하나는 가족들이 가장 많은 시간을 보낼 '벽난로가 있는 거실'을 설계의 시작점으로 잡았다. "이 거실이 우리 집의 심장이야." 거실의 크기와 창문의 위치를 가장 먼저 정하고, 그 거실을 중심으로 침실과 욕실을 배치했다. 담장과 대문은 가장 마지막에 거실의 모양에 맞춰 세워졌다. 집의 본질적인 기능(중심)이 확고했기에, 집 전체가 조화롭고 아늑한 공간이 되었다. 진정한 아키텍처는 가장 가치 있는 중심에서 시작됨을 하나는 알고 있었다.
Context
OrganicGrowth를 시작하려고 한다. 무엇부터 만들어야 할지 고민 중이다. 코딩뿐만 아니라 무언가 복잡한 구조물을 설계해야 하는 모든 상황에 해당한다.
일상적인 상황:
- 프로젝트를 시작할 때 로그인, 설정 파일, 유틸리티 함수부터 만든다.
- 인프라 설정(Docker, CI/CD, DB migration)에 며칠을 보낸다.
- 정작 중요한 비즈니스 로직은 프로젝트 후반부로 밀린다.
- 주변부는 화려한데, 핵심 기능이 부실하거나 나중에 전체 구조와 충돌한다.
당신은 지금 집을 지으려는데, 거실과 방(핵심)을 생각하지 않고 담장과 대문(주변)부터 만들고 있다.
Problem
핵심 가치를 담은 "중심"이 없으면, 주변부 기능들은 방향을 잃고 비대해진다.
Christopher Alexander는 "모든 살아있는 구조는 중심(Center)들로 구성되며, 그중 가장 지배적인 강한 중심이 전체의 통일성을 만든다"고 했습니다.
본질의 상실: 인프라나 부가 기능에 집착하다 보면, 진짜 해결해야 할 문제의 본질적 복잡성(Essential Complexity)을 놓치게 됩니다.
중력의 부재: 강한 중심이 없으면 다른 기능들이 어디에 어떻게 붙어야 할지 결정하기 어렵습니다. 설계가 표류하게 됩니다.
피드백 지연: 가장 중요한 비즈니스 로직에 대한 검증을 가장 늦게 받게 되어, 나중에 근본적인 구조를 뒤엎어야 할 위험이 커집니다.
Solution
시스템이 제공하는 가장 본질적인 가치, 즉 "강한 중심"을 가장 먼저, 가장 단단하게 구축하라.
인프라와 도구는 중심을 돕기 위해 존재하는 조연일 뿐입니다.
Principle 1: Find the Essential Complexity (본질적 복잡성 찾기)
이 시스템에서 "이 기능이 없으면 존재 의미가 없다"는 것이 무엇인지 찾으십시오.
쇼핑몰이라면 '결제와 주문'입니다. 메신저라면 '메시지 전달'입니다. 이것이 당신의 강한 중심입니다. 로그인은 중심이 아닙니다.
Principle 2: Logic-First Construction (로직 우선 구축)
DB, 네트워크, 프레임워크에 의존하지 않는 순수한 비즈니스 로직으로 중심을 먼저 만드십시오.
CleanIsolation을 사용하여 핵심 로직을 주변 환경으로부터 격리하십시오. 이 중심은 가장 많이 테스트되고, 가장 정교하게 다듬어져야 합니다.
Principle 3: Radiating Growth (방사형 성장)
중심이 서면, 그 주변으로 필요한 기능들을 하나씩 붙여 나갑니다.
- 중심이 강하면(Stable), 주변 기능들은 중심이 제공하는 규칙(Rule)을 따르게 됩니다.
- 인프라는 중심의 요구사항에 맞춰서 결정되어야 합니다. 중심이 DB를 선택해야지, DB가 중심을 제약해서는 안 됩니다.
Real Examples
Example 1: Git
Git의 강한 중심은 '파일의 스냅샷을 관리하는 데이터 구조'입니다. 리누스 토발즈는 처음 며칠 동안 네트워크나 화려한 CLI 대신 오직 객체를 저장하고 읽는 핵심 로직만 만들었습니다.
Example 2: Spreadsheet
스프레드시트의 중심은 '셀 간의 관계와 자동 계산 엔진'입니다. 화면 UI나 파일 저장 기능보다 이 핵심 중심이 먼저 세워졌을 때 전체 아키텍처가 결정되었습니다.
Common Pitfalls
"But we need login to start!"
착각입니다. 로그인 없이도 핵심 기능을 만들 수 있습니다. 하드코딩된 정보를 사용하거나 함수 인자로 넘기십시오. 로그인은 나중에 붙여도 되는 "세부 사항"일 뿐입니다.
The Infrastructure Trap (인프라의 덫)
특정 프레임워크의 폴더 구조나 설정에 에너지를 다 쓰는 것. 구조는 중심이 성장하면서 자연스럽게 나타나야 합니다. 처음부터 완벽한 틀을 만들려 하지 마십시오.
Connection to Other Patterns
OrganicGrowth - 유기적 성장은 강한 중심에서 시작하여 바깥으로 펼쳐져야(Unfolding) 합니다. 성장의 닻
CleanIsolation - 중심을 주변의 소음으로부터 격리하여 순수성을 유지할 때 중심은 더욱 강력해집니다. 보호막
TwoWorlds - 문제 공간에서 가장 가치 있는 것을 찾아내어 중심으로 삼으십시오. 전략적 선택
DataAsFoundation - 강한 중심은 대개 잘 설계된 데이터 구조라는 단단한 땅 위에 세워집니다. 기반
Signs of Success
- 프로젝트 초기에 가장 어렵고 가치 있는 비즈니스 로직이 이미 해결되어 있다.
- 인프라(DB, 프레임워크)를 교체해도 핵심 로직은 거의 변하지 않는다.
- 코드를 읽을 때 "이 시스템이 무엇을 하는지"가 첫 화면에서 바로 보인다.
- 다른 기능들이 핵심 로직의 인터페이스를 중심으로 자연스럽게 정렬된다.
The Ultimate Insight
중심이 서면 전체가 선다. 중심이 흔들리면 모든 것이 흔들린다.
주변부의 화려함에 현혹되지 마십시오. 당신이 해결하려는 문제의 가장 깊은 곳, 그 강한 중심을 먼저 정복하십시오. 나머지는 그 중심의 중력에 이끌려 제 자리를 찾게 될 것입니다.
CategoryPatternLanguage CategoryProgramming CategoryArchitecture CategoryDesign
