220. 유비쿼터스 언어 (Ubiquitous Language) - 비즈니스와 기술의 공통 언어 소통 도메인 전문가 개발자 용어 사전 모델링 일치성 DDD
핵심 인사이트: (219번 DDD 심화 1) 은행원(도메인 전문가)이 말했다. "고객이 대출을 '실행'하면 계좌에 돈을 넣어주세요." 멍청한 개발자가 자기 맘대로 코드를 짰다.
loan.start(),account.insert(). 며칠 뒤 은행원이 코드를 보고 빡쳤다. "야! 대출은 '실행(Disburse)'하는 거고, 돈은 '입금(Deposit)'하는 거지, 무슨 컴퓨터 게임처럼 start랑 insert를 써! 나중에 내가 이 코드 보고 어떻게 업무 흐름을 검증하냐!" 에릭 에반스가 외쳤다. "야! 개발자 놈들아! 너희들끼리 쓰는 DB 용어 다 버려! 무조건 현업 전문가가 쓰는 현실 세계의 단어(예: Disburse, Deposit)를 그대로 복사해서 자바 클래스 이름, 함수 이름, 변수 이름에 100% 똑같이 쑤셔 박아!! 그래서 은행원이 자바 코드를 읽어도 소설책 읽듯이 업무 흐름이 쫙 보이게 만들어라!!" 번역의 장벽을 부숴버린 DDD의 영혼, 유비쿼터스 언어다.
Ⅰ. 바벨탑의 저주 (소통의 단절)
- 프로젝트 실패의 90%는 소통 부재에서 터집니다.
- 현업(도메인 전문가): "이번 쇼핑몰 이벤트에서 VIP 회원에게 10% 할인을 **'적용'**해 주세요."
- 개발자: "아~ DB의 User 테이블에서 Rank가 1인 레코드의 Coupon 칼럼을 '업데이트(Update)' 하라는 뜻이구나!"
- 현업과 개발자의 머릿속에 있는 단어가 다르면, 1달 뒤 시스템이 완성됐을 때 요구사항이 미묘하게 비틀려(버그) 회사가 망합니다. 개발자가 도메인을 이해하지 못한 탓입니다.
Ⅱ. 유비쿼터스 언어 (Ubiquitous Language)의 개념 🌟
- Ubiquitous (어디에나 존재하는): 라틴어로 '어디에나 있는'이라는 뜻입니다.
- 개념: 프로젝트에 참여하는 모든 사람(도메인 전문가, 기획자, 디자이너, 백엔드 개발자)이 회의실 칠판에서부터 엑셀 설계 문서, 그리고 가장 깊숙한 소스 코드(클래스/메서드 명)와 DB 테이블 이름에 이르기까지, 단 하나의 예외도 없이 100% 완벽하게 똑같이 사용하는 '절대적인 공통 비즈니스 언어(사전)'를 정의하고 사용하는 원칙입니다.
Ⅲ. 유비쿼터스 언어의 3대 철칙 🌟 핵심 🌟
1. 코드와 도메인 모델의 100% 일치 (Model-Code Gap 제거)
- 기획서에 "사용자가 상품을 **'결제(Pay)'**한다"라고 적혀있으면,
- 자바 코드도 무조건
User.pay(Product)로 작성되어야 합니다! - 개발자가 편하다고 자기 맘대로
User.buy()나Order.process()같이 번역(변형)해서 코드를 짜는 순간 198번 유비쿼터스 언어 헌법 위반으로 사형입니다.
2. 도메인 전문가의 용어가 왕이다
- 개발자가 쓰는 IT 은어(
Update,Delete,Initialize)를 현업에게 가르치려 들면 안 됩니다. - 현업 은행원이
계좌 해지(Close)라는 단어를 쓰면, 개발자도 DB에서 데이터를 삭제할 때deleteAccount()가 아니라closeAccount()라고 함수 이름을 적어야 합니다. 코드의 뼈대를 비즈니스의 언어가 강제로 멱살 잡고 끌고 갑니다.
3. 지속적인 사전(Glossary) 가꾸기
- 프로젝트 초기에 기획자, 개발자, 실무자가 다 같이 모여 용어 사전을 엑셀로 깎습니다.
- 만약 회의 중에 "음.. '고객' 말고 '회원'이라는 단어가 더 정확하겠네요"라고 결정이 나면, 그날 밤 개발자는 밤을 새워서라도 소스 코드 1만 줄에 있는
Customer라는 변수명을 모조리Member로 다 뜯어고쳐(리팩토링) 싱크(Sync)를 100% 맞춰놔야 합니다.
Ⅳ. 궁극적인 도입 효과
- 코드 = 살아있는 기획서: 자바나 파이썬 코드를 한글로 소리 내어 읽으면, 그 자체로 현업의 완벽한 비즈니스 기획서가 됩니다.
- 새로운 신입 개발자가 들어와서 코드만 읽어도 이 회사의 은행 업무 프로세스(도메인)를 완벽하게 파악할 수 있는 기적이 일어납니다.
📢 섹션 요약 비유: 기존의 소프트웨어 개발은 '스페인 요리사(도메인 전문가)'가 요리법을 설명하면 '한국인 번역가(개발자)'가 그걸 자기 맘대로 대충 한국식 된장찌개 레시피로 번역해서 노트(코드)에 적어놓는 끔찍한 오역의 과정이었습니다. 나중에 스페인 요리사가 노트를 보고 자기가 말한 파에야가 된장찌개로 변한 걸 보고 피를 토합니다. **유비쿼터스 언어(Ubiquitous Language)**는 번역가를 없애고, 요리사와 개발자가 무조건 '스페인어(비즈니스 도메인 언어)' 단 하나로만 대화하기로 합의한 절대 규칙입니다. 요리사가 "빠에야(Paella) 팬에 쌀을 아소프리토(Sofrito) 하라"고 말하면, 개발자도 자신의 비밀 레시피 노트(소스 코드)에 무조건 함수 이름을
doSofritoInPaellaPan()이라고 똑같이 스페인어로 적어 넣습니다. 이렇게 100% 단어를 일치시키면, 나중에 요리사가 개발자의 암호 같은 레시피 노트를 쓱 보더라도 "오, 여기서 아소프리토를 제대로 하고 있군!" 하고 직관적으로 오류를 잡아낼 수 있는, 소통의 장벽을 부숴버린 마법의 공용어 사전입니다.