StrongCenter
주니어 개발자들을 위한 패턴 언어 - 시스템의 정체성과 안정성을 결정하는 핵심을 먼저 구축하는 법
Contents
The Story: The Peripheral vs. The Core
두 명의 개발자, 민수와 하나가 '경매 시스템'을 만들고 있다.
민수의 접근 (The Infrastructure First): 민수는 꼼꼼하다. "시스템은 튼튼해야 해."
- 1주 차: 로그인, 회원가입, 권한 관리 기능을 완벽하게 구현했다.
- 2주 차: 로그 기록 시스템과 에러 핸들링 프레임워크를 구축했다.
- 3주 차: DB 연결 풀링과 보안 설정을 마쳤다.
3주가 지났지만, 정작 이 시스템의 본질인 '입찰(Bidding)' 기능은 코드 한 줄도 없다. 민수는 주변부를 튼튼히 하느라 에너지를 다 썼고, 정작 가장 중요한 로직을 짤 때는 지쳐버렸다.
하나의 접근 (The Strong Center): 하나는 본질에 집중한다. "경매 시스템의 핵심은 입찰 경쟁이야."
- 1일 차: 로그인도, DB도 없이 오직 '입찰' 로직만 짰다. "더 높은 가격이 들어오면 낙찰자를 바꾼다." (순수 로직)
- 2일 차: 이 핵심 로직을 중심으로 주문, 결제 기능을 붙였다.
하나는 시스템의 강한 중심(Strong Center)을 먼저 세웠다. 로그인이나 로그 기록 같은 주변부(Peripheral)는 나중에 이 중심을 감싸듯이 추가되었다. 하나는 첫날부터 경매 시스템의 핵심 가치를 검증할 수 있었다.
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의 강한 중심은 '파일의 스냅샷을 관리하는 데이터 구조(Content-addressable storage)'다. Linus Torvalds는 처음 며칠 동안 네트워크나 화려한 CLI를 만들지 않았다. 오직 객체를 저장하고 읽는 핵심 데이터 구조와 로직만 만들었다. 이 강한 중심이 있었기에 이후 수만 개의 기능이 붙어도 Git은 견고함을 유지할 수 있었다.
Example 2: Spreadsheet (VisiCalc)
스프레드시트의 중심은 '셀 간의 관계와 자동 계산 엔진'이다. 화면 UI나 파일 저장 기능보다, "A1을 바꾸면 B1이 바뀐다"는 이 핵심 중심이 먼저 세워졌을 때 전체 아키텍처가 결정되었다.
Common Pitfalls
"But we need login to start!" (로그인이 있어야 시작하죠!)
착각이다. 로그인 없이도 핵심 기능을 만들 수 있다. 하드코딩된 유저 정보를 쓰거나, 함수 인자로 넘기면 된다. 로그인은 나중에 붙여도 되는 "세부 사항"일 뿐이다.
The Infrastructure Trap (인프라의 덫)
클린 아키텍처나 특정 프레임워크의 폴더 구조를 잡느라 에너지를 다 쓰는 것. 구조는 중심이 성장하면서 자연스럽게 나타나야 한다(OrganicGrowth). 처음부터 틀을 만들려 하지 마라.
Weak Center (약한 중심)
핵심 로직이 여러 곳에 흩어져 있는 상태. 중심이 약하면 주변 기능들이 중심의 역할을 침범하기 시작하고, 결국 시스템은 스파게티 코드가 된다.
Connection to Other Patterns
OrganicGrowth - 유기적 성장은 강한 중심에서 시작되어야 한다. 출발점
TwoWorlds - 문제 공간에서 가장 가치 있는 것을 찾아내어 중심으로 삼아라. 전략
DataAsFoundation - 강한 중심은 대개 잘 설계된 데이터 구조에서 시작된다. 기반
WorkingFirst - 중심이 작동할 때, 비로소 시스템이 살아있다고 할 수 있다. 전제
Signs of Success
- 프로젝트 초기에 가장 어려운 비즈니스 로직이 이미 해결되어 있다.
- 인프라(DB, 프레임워크)를 교체해도 핵심 로직은 거의 변하지 않는다.
- 코드를 읽을 때 "이 시스템이 무엇을 하는지"가 첫 화면에서 바로 보인다.
- 다른 기능들이 핵심 로직의 인터페이스를 중심으로 자연스럽게 정렬된다.
The Ultimate Insight
중심이 서면 전체가 선다. 중심이 흔들리면 모든 것이 흔들린다.
주변부의 화려함에 현혹되지 마라. 당신이 해결하려는 문제의 가장 깊은 곳, 그 강한 중심을 먼저 정복하라. 나머지는 그 중심의 중력에 이끌려 제 자리를 찾게 될 것이다.
CategoryPatternLanguage CategoryProgramming CategoryArchitecture CategoryDesign
