90. 아키텍처 드라이버 (Architecture Drivers) - 시스템 설계의 절대 기준
⚠️ 이 문서는 아키텍트(설계자)가 모바일 앱을 만들 때 서버를 1대로 할지 클라우드로 할지, DB를 오라클로 할지 몽고DB로 할지 결정해야 하는 수만 가지 선택의 갈림길에서, **"우리 회사의 이번 프로젝트 아키텍처 방향성을 강제로 한쪽으로 멱살 잡고 끌고 가는 가장 치명적이고 양보 불가능한 핵심 요구사항들의 집합인 '아키텍처 드라이버(Architecture Drivers)'"**를 다룹니다.
핵심 인사이트 (3줄 요약)
- 본질: 단순히 "버튼 색깔을 빨갛게 해주세요" 같은 겉절이 요구사항이 아니다. 이걸 못 지키면 프로젝트 자체가 망하고 회사가 문을 닫게 만드는, 아키텍처의 뼈대(모양)를 180도 뒤틀어버리는 '조종대(Driver)' 역할을 하는 극소수의 핵심 조건들이다.
- 가치: 세상에 싸고, 1만 명 버티고, 하루 만에 개발 끝나는 마법의 시스템은 없다. 아키텍트는 쏟아지는 백 가지 요구사항 중에서 이 드라이버 5개만 핀셋으로 뽑아내어, 한정된 돈과 시간 안에서 시스템 설계의 최우선 타협점(Trade-off) 잣대로 삼는다.
- 기술 체계: 시스템이 제공해야 할 핵심 기능(Primary Functionality), 1초 안에 떠야 한다는 식의 품질 속성(Quality Attributes), 그리고 돈이 1억밖에 없거나 무조건 오픈소스만 쓰라는 제약 사항(Constraints) 이 3박자가 모여 드라이버를 구성한다.
Ⅰ. 아키텍처의 방향키: 왜 모든 요구사항이 평등하지 않은가?
게시판 폰트 크기 변경은 아키텍처를 뒤흔들지 않지만, "10만 명 동시 접속"은 뼈대를 박살 낸다.
- 일반 요구사항과 드라이버의 차이:
- 신규 쇼핑몰을 만든다. 고객이 요구사항 100개를 던졌다.
- [요구사항 13번]: "장바구니 아이콘은 우측 상단에 놔주세요." $\rightarrow$ 이건 개발자가 그냥 HTML 화면 하나 고치면 끝난다. 아키텍처(서버 뼈대)에는 1%의 타격도 없다. 일반 요구사항이다.
- [요구사항 45번]: "블랙프라이데이 때 동시 접속자 100만 명의 결제 트래픽이 몰려도 서버가 터지지 않게 해주세요." $\rightarrow$ 이 한마디 때문에 아키텍트는 기존에 짰던 단일 DB(Monolithic) 도면을 갈기갈기 찢어버리고, AWS 오토스케일링과 카프카(Kafka) 비동기 메시지 큐라는 거대한 뼈대 수술을 단행해야 한다. 이것이 바로 아키텍처를 멱살 잡고 끄는 조종대(Driver)다.
- 트레이드 오프 (Trade-off)의 강제:
- 드라이버는 무조건 서로 싸운다(상충).
- [드라이버 A]: "결제 속도는 무조건 0.1초 내로!(성능)"
- [드라이버 B]: "모든 결제 내역은 3중 암호화와 3곳의 망분리 DB에 백업해라!(보안/가용성)"
- 암호화를 3번 하면 속도는 무조건 1초로 느려진다. 아키텍트는 이 드라이버들 사이에서 사장님과 피 터지게 협상하여 "속도를 0.5초로 양보하고 암호화는 2번만 합시다"라는 최적의 타협점(Sweet Spot) 도면을 그려내야 한다.
📢 섹션 요약 비유: 자동차를 주문 제작합니다. "시트 색깔 핑크색으로 해주세요"는 껍데기 주문이라 자동차 프레임 공장(아키텍처)에 영향이 없습니다. 하지만 "시속 300km로 달리게 해주시고(성능 드라이버), 예산은 1,000만 원 이하(제약 드라이버)로 맞춰주세요"라고 하면 공장장은 멘붕에 빠집니다. 값싼 철판을 쓰면 차가 바람에 날아가고, 무거운 철판을 쓰면 300km를 못 달립니다. 이 불가능한 조종대(드라이버) 사이에서 가장 안 터지는 뼈대를 고민하는 것이 아키텍트의 숙명입니다.
Ⅱ. 아키텍처 드라이버의 3대 핵심 뼈대
기능, 품질, 그리고 가장 무서운 '제약 조건'이 도면을 결정한다.
- 핵심 기능 (Primary Functionality):
- 시스템이 존재하는 근본적인 '밥줄' 역할이다.
- 은행 시스템이라면 "계좌 이체 기능", 우버(Uber)라면 "택시와 승객의 실시간 매칭 기능".
- 이 핵심 기능들이 도면에 큼지막한 컴포넌트(결제 모듈, 매칭 모듈) 덩어리로 제일 먼저 정중앙에 박히게 된다. (이 핵심 기능 외에 '공지사항 게시판' 같은 겉절이는 드라이버에 끼지 못한다.)
- 품질 속성 (Quality Attributes) $\star$:
- 사실상 아키텍트의 영혼을 가장 많이 갈아 먹는 드라이버 군단이다.
- 가용성 (Availability): "서버가 불타도 1초의 끊김 없이 옆 서버가 이어받아야 한다" $\rightarrow$ 아키텍트는 액티브-스탠바이(Active-Standby) 이중화 도면을 그린다.
- 보안성 (Security): "DB가 털려도 개인정보는 절대 못 풀게 하라" $\rightarrow$ 아키텍트는 암호화 모듈과 사설망(Private Subnet) 격리 도면을 추가한다.
- 확장성 (Scalability): "회원 수가 10배 늘어도 시스템을 갈아엎지 않게 하라" $\rightarrow$ 아키텍트는 마이크로서비스(MSA) 도면을 그린다.
- 제약 사항 (Constraints):
- 돈, 시간, 법률, 회사 정치처럼 "아무리 기술이 좋아도 절대 거역할 수 없는 통제선"이다.
- 비즈니스 제약: "개발 기한은 딱 3개월, 예산은 5천만 원." $\rightarrow$ 아키텍트는 멋진 클라우드를 포기하고, 이미 만들어둔 낡은 오픈소스를 가져다 쓰는 가성비 도면으로 타협한다.
- 기술 제약: "우리 회사 인프라팀은 자바(Java)와 오라클밖에 다룰 줄 모른다." $\rightarrow$ 아키텍트가 아무리 파이썬이 좋다고 우겨도 무조건 도면은 자바(Spring) 기반으로 그려져야 한다.
📢 섹션 요약 비유: 식당을 엽니다. 핵심 기능은 "불맛 나는 짬뽕을 제공한다" 입니다(주방에 강력한 화구 배치). 품질 속성은 "주문 후 무조건 5분 안에 나와야 한다(성능)" 입니다(재료를 미리 다 썰어놓는 냉장고 동선 배치). 제약 사항은 "보증금이 5천만 원뿐이고, 식당 평수가 10평밖에 안 된다" 입니다(가게 크기에 맞춰 테이블을 다닥다닥 붙인 타협된 인테리어 도면 작성). 이 3가지 팩폭 요인들이 인테리어 업자(아키텍트)의 도면을 100% 결정짓습니다.
Ⅲ. 드라이버의 도출과 유틸리티 트리 (Utility Tree)
추상적인 헛소리를 구체적인 '측정 가능한 시나리오'로 멱살 잡고 끌어내라.
- "시스템이 좀 빨랐으면 좋겠어요"의 붕괴:
- 사장님이 이렇게 요구사항(품질 속성)을 던지고 가면 아키텍트는 아무 도면도 그릴 수 없다.
- 빠른 게 1초인지, 0.1초인지 기준이 없기 때문이다. 아키텍트는 이 뭉툭한 요구사항을 뾰족한 숫자로 다듬어내는 과정을 거친다.
- 유틸리티 트리 (Utility Tree) 기법:
- 트리(나무) 구조로 뭉툭한 소원을 구체적 시나리오로 쪼개는 훌륭한 워크샵 기법이다.
- 최상위 루트: [성능 향상]
- $\rightarrow$ 중간 가지: [응답 시간]
- $\rightarrow$ 최하단 잎사귀(시나리오): "평상시(환경), 고객 1만 명이(자극), 결제 버튼을 누르면(사건), 99%의 요청이(측정), 0.5초 이내에 완료되어야 한다(응답)."
- 우선순위 매기기 (H/M/L):
- 이렇게 구체적인 시나리오를 30개 뽑아낸 뒤, 사장님과 모여서 우선순위를 알파벳으로 매긴다.
- [비즈니스 중요도(H/M/L) / 아키텍처 구현 난이도(H/M/L)]
- 예: 결제 0.5초 처리 시나리오는 중요도 H(High), 난이도 H(High) 다. $\rightarrow$ 이 녀석이 바로 우리 프로젝트를 멱살 잡고 끌고 갈 핵심 1순위 아키텍처 드라이버로 당당하게 선정되며, 첫 달 개발비의 절반이 이 뼈대를 구축하는 데 쏟아붓게 된다.
📢 섹션 요약 비유: 고객이 인테리어 업자에게 "집이 좀 따뜻했으면 좋겠어요"라고 말하면 망합니다. 업자(아키텍트)는 유틸리티 트리를 통해 "겨울철 영하 10도(환경)일 때, 보일러를 켜면(자극), 거실 온도가 10분 내에(측정), 24도에 도달해야 한다(응답)"는 구체적인 계약서 시나리오를 뽑아냅니다. 그리고 이 '따뜻함'이 '집의 디자인(통창뷰)'보다 중요한지 H/M/L 투표를 붙입니다. 따뜻함이 압도적 1위(드라이버)가 되면, 예쁜 유리 통창뷰는 싹 다 지워버리고(트레이드 오프) 벽돌과 단열재를 3중으로 때려 박는 방향으로 최종 건축 도면이 확정되는 냉혹한 검증 과정입니다.