Split View: 도메인 지식이 왜 방어선인가 — 업을 아는 엔지니어와 기술만 아는 엔지니어
도메인 지식이 왜 방어선인가 — 업을 아는 엔지니어와 기술만 아는 엔지니어
- 같은 화면을 보고 다른 것을 읽는 사람
- 도메인 지식이 왜 방어선인가
- 업을 아는 엔지니어가 다르게 하는 세 가지
- 용어가 어긋나면 코드가 어긋납니다
- 도메인을 익히는 여섯 단계
- 도메인 지식이 안 통하는 자리
- 시리즈를 한 문장으로
- 직접 해보기
- 이어서 읽기
- 참고 자료
같은 화면을 보고 다른 것을 읽는 사람
구성한 예시입니다. 주문 취소 기능에 조건이 하나 붙어 있습니다. 출고 상태에서는 취소가 안 되고 반품으로 넘어갑니다. 코드만 아는 사람은 이것을 상태 전이 규칙으로 읽습니다. 업을 아는 사람은 출고 시점에 창고로 작업 지시가 이미 나갔고, 그 지시를 되돌리려면 창고의 사람이 손으로 잡아야 하며, 잡을 수 있는 시간이 몇 분인지에 따라 이 규칙의 경계가 정해졌다는 것을 압니다.
두 사람의 차이는 이 기능을 고칠 때는 잘 안 드러납니다. 이 기능을 바꿔도 되는지 판정할 때 드러납니다.
도메인 지식이 왜 방어선인가
1편에서 검증을 비싸게 만드는 첫 번째 요인으로 암묵적 맥락을 꼽았는데, 도메인 지식이 바로 그것입니다. 코드에 없고, 문서에도 대개 없고, 사람의 기억과 조직의 관행에만 있습니다.
3편에서 인용한 Brooks의 구분으로 옮기면 도메인 규칙은 우연적 복잡성이 아니라 본질적 복잡성입니다. 사용자가 서른 가지 일을 원하면 그 서른 가지는 문제 자체에서 나온 것이라 없앨 수 없다는 것이 그의 예시였습니다. 도구를 바꿔도 이쪽은 줄지 않습니다.
다만 방어선이라는 말이 남을 막는 해자로 읽히면 곤란합니다. 도메인 지식이 값어치를 갖는 이유는 희소해서가 아니라 그것 없이는 판정이 불가능하기 때문입니다. 그래서 이 지식은 나눠 준다고 줄지 않고, 오히려 나눠 줄 수 있는 형태로 만드는 일이 이 능력의 절반입니다.
업을 아는 엔지니어가 다르게 하는 세 가지
첫째, 질문의 종류가 다릅니다. 기술만 아는 쪽은 이 필드가 무슨 뜻이냐고 묻습니다. 업을 아는 쪽은 이 값이 비어 있는 주문이 실제로 있느냐고, 있다면 어떤 경우냐고 묻습니다. 두 번째 질문이 데이터의 진짜 모양을 꺼냅니다.
둘째, 예외를 대하는 태도가 다릅니다. 이상한 예외 조항을 보면 기술만 아는 쪽은 지저분하다고 느끼고 정리하고 싶어 합니다. 업을 아는 쪽은 이 조항이 어떤 사고의 흔적인지 먼저 묻습니다. 그런 조항은 대개 누군가 손해를 본 다음에 생겼고, 지우면 그 손해가 돌아옵니다.
셋째, 무엇이 진짜 요구인지 구별합니다. 6편에서 요구는 해결책의 모습으로 도착한다고 했는데, 그 번역을 되돌리려면 도메인을 알아야 합니다. 모르면 되물어도 돌아온 답을 이해하지 못합니다.
용어가 어긋나면 코드가 어긋납니다
도메인을 코드로 옮기는 지점에서 가장 자주 깨지는 것은 용어입니다.
Eric Evans가 도메인 주도 설계에서 제시한 유비쿼터스 언어가 이 문제를 다룹니다. Martin Fowler의 정리에 따르면 이것은 개발자와 사용자 사이에 공통되고 엄밀한 언어를 세우는 실천이며, 그 언어가 도메인 모델에 뿌리를 두어야 하는 이유는 소프트웨어가 모호함을 잘 다루지 못하기 때문입니다. 같은 글은 Evans를 인용해 역할을 나눕니다. 도메인 전문가는 이해를 전달하기에 어색하거나 부족한 용어에 이의를 제기하고, 개발자는 설계를 걸어 넘어뜨릴 모호함과 비일관성을 살핀다는 것입니다.
이게 안 되고 있다는 신호는 단순합니다. 회의에서 쓰는 단어와 코드에 있는 이름이 다르면 그 차이만큼 매번 번역이 일어나고, 번역은 매번 오역의 기회입니다.
예시 — 용어 대조표
사업 쪽 말 코드에 있는 이름 같은 것인가
정산 settlement, payout, clearing 확인 필요. 셋으로 나뉜 이유가 있나
출고 shipped 같음
반품 return, refund 다름. 물건과 돈이 따로 움직임
위험한 것은 첫 줄 같은 자리입니다. 사업 쪽에서 한 단어로 부르는 것이 코드에서 셋으로 나뉘어 있는데 아무도 그 차이를 문장으로 갖고 있지 않다면, 거기서 틀린 값이 나옵니다.
도메인을 익히는 여섯 단계
- 용어를 수집합니다. 회의록, 화면, 고객이 보낸 메일에서 나온 명사를 판단 없이 모읍니다.
- 같은 말과 다른 말을 가릅니다. 다른 단어가 같은 것을 가리키면 합치고, 같은 단어를 두 부서가 다르게 쓰면 나눕니다. 두 번째가 가장 값어치 있는 발견입니다.
- 사물과 사건을 나눕니다. 지속되는 대상인지 특정 시점에 일어난 일인지 가릅니다. 이 구분이 데이터 모델의 뼈대입니다.
- 관계에 개수를 붙입니다. 하나에 하나인지, 하나에 여럿인지, 여럿에 여럿인지. 여기서 오해가 가장 많이 나옵니다.
- 검증 질문을 만듭니다. 모델이 맞다면 답할 수 있어야 하는 질문 다섯 개를 도메인 전문가에게 물어봅니다. 답이 막히면 모델이 틀린 것입니다.
- 예외를 사냥합니다. 이 규칙이 안 맞는 경우가 있느냐고 반복해 묻습니다. 예외가 안 나오는 도메인은 아직 덜 파인 것입니다.
가장 자주 건너뛰는 것이 다섯 번째입니다. 모델을 그리는 데까지는 다들 가고, 그 모델로 답할 수 없는 질문을 찾는 데까지는 잘 안 갑니다. 4편의 표현으로는 모델을 그리는 것이 생성이고, 검증 질문을 만드는 것이 판정의 설계입니다.
도메인 지식이 안 통하는 자리
정직하게 적어야 할 한계가 세 가지 있습니다.
첫째, 이월이 잘 안 됩니다. 10년 쌓은 물류 도메인은 다른 업으로 옮기면 상당 부분 버려집니다. 그래서 도메인에만 투자하는 것은 위험하고, 앞의 아홉 편에서 다룬 이월되는 능력들과 함께 가야 합니다.
둘째, 업 자체가 줄어드는 경우가 있습니다. 깊이가 깊을수록 이 위험은 커지므로, 도메인을 고를 때 그 업이 어디로 가는지는 기술 선택만큼 중요한 질문입니다.
셋째, 과적합이 있습니다. 한 업에 오래 있으면 그 업의 관행을 물리 법칙으로 착각하기 쉽습니다. 원래 이렇게 한다는 말이 자기 입에서 나오면 점검할 때입니다. 이유를 문장으로 댈 수 없다면 그건 이유가 아니라 습관입니다.
시리즈를 한 문장으로
열 편을 한 문장으로 줄이면 이렇습니다. 값이 남는 기술은 검증 비용이 비싼 기술이고, 엔지니어의 일은 그 비싼 판정을 싼 판정으로 바꾸는 장치를 설계하는 것입니다. 디버깅, 읽기, 테스트, 쓰기, 문제 정의, 운영, 위임, 학습, 도메인은 전부 이 문장의 다른 얼굴이었습니다.
도구 목록으로 답하지 않은 이유도 여기 있습니다. 목록은 낡고 판별식은 덜 낡습니다. 다음에 새 도구가 나올 때 물어야 할 질문은 두 개입니다. 이것이 무엇을 싸게 만드는가. 그래서 무엇의 판정이 비싸게 남는가.
직접 해보기
이번 주에 자기 팀의 도메인 용어 열 개를 적고, 사업 쪽 사람이 쓰는 말과 코드에 있는 이름을 나란히 적어 보세요. 30분이면 됩니다. 다른 칸이 하나라도 나오면 그 자리가 번역이 일어나는 지점이고, 거기서 조용히 틀린 값이 나옵니다.
- FDE 엔지니어 키우기 RPG — 도메인 분석과 온톨로지 작성 코스가 위 여섯 단계를 그대로 훈련합니다. 제조 MES, 물류, 금융 여신 세 개 가상 업계에서 이해관계자 인터뷰를 읽고 용어를 정규화한 뒤, 객체 타입과 속성과 링크 타입을 카디널리티까지 붙여 조립하고 검증 질문으로 모델을 시험합니다.
- 협업 RPG — 도메인은 결국 사람에게서 옵니다. 묻는 선택과 미룬 대화가 몇 주 뒤에 어떤 값으로 돌아오는지를 시간차로 보여 줍니다.
안 통하는 경우도 적어 둡니다. 몇 주짜리 작업으로 들어간 자리에서 도메인을 깊게 파는 것은 회수가 안 됩니다. 그때는 3편의 결론과 같습니다. 이해가 아니라 경계만 파악하면 됩니다.
이어서 읽기
- 이 블로그의 관련 글: 고객의 도메인을 모델로 — 유비쿼터스 언어에서 온톨로지까지
비싸게 남는 기술 시리즈
참고 자료
- Ubiquitous Language — Martin Fowler — 공통되고 엄밀한 언어를 세우는 실천이라는 정의, 소프트웨어가 모호함을 잘 다루지 못한다는 논거, 도메인 전문가와 개발자의 역할에 대한 Evans 인용이 여기서 나옵니다. 2026-08-15 확인.
- No Silver Bullet — Wikipedia 요약 — 본질적 복잡성은 문제 자체에서 나오므로 제거할 수 없다는 정리와, 사용자가 서른 가지를 원하면 그 서른 가지가 본질이라는 예시가 여기서 나옵니다. 2026-08-15 확인.
- 여섯 단계 절차와 용어 대조표는 위 자료에 나오는 것이 아니라 이 글에서 정리한 것입니다.
Why Domain Knowledge Is a Defensible Line — The Engineer Who Knows the Business
- Two People Look at the Same Screen and Read Different Things
- Why Domain Knowledge Is a Defensible Line
- Three Things a Business-Literate Engineer Does Differently
- When the Words Diverge, So Does the Code
- Six Steps for Learning a Domain
- Where Domain Knowledge Does Not Carry
- The Series in One Sentence
- Try It This Week
- Further Reading
- Sources
Two People Look at the Same Screen and Read Different Things
A constructed illustration. Order cancellation carries one condition: once an order is in the shipped state, cancellation is unavailable and it becomes a return instead. Someone who only knows the code reads that as a state transition rule. Someone who knows the business knows that at the shipping moment a work order already went to the warehouse, that reversing it means a person there catching it by hand, and that the boundary of this rule was set by how many minutes that person has.
The difference between them barely shows when they change this feature. It shows when they judge whether the feature may be changed.
Why Domain Knowledge Is a Defensible Line
Part 1 named tacit context as the first thing that makes verification expensive, and domain knowledge is exactly that. Not in the code, usually not in the documents, held only in people's memory and organizational habit.
Translated into the Brooks distinction cited in part 3, domain rules are essential rather than accidental complexity. His own example was that if users want a program to do thirty different things, those thirty things come from the problem itself and cannot be removed. Changing tools does not shrink this side.
That said, "defensible line" should not be read as a moat that keeps others out. Domain knowledge has value not because it is scarce but because judgment is impossible without it. Giving it away does not reduce it — and putting it into a form that can be given away is half of this capability.
Three Things a Business-Literate Engineer Does Differently
First, the kind of question differs. The purely technical question is "what does this field mean?" The business-literate question is "are there real orders where this value is empty, and if so, in what case?" The second one surfaces the actual shape of the data.
Second, the posture toward exceptions differs. Faced with a strange exception clause in the requirements, the purely technical reaction is that it is messy and should be cleaned up. The business-literate reaction is to ask what accident that clause is the scar of. Clauses like that usually appeared after somebody lost money, and deleting them brings the loss back.
Third, they can tell what the real requirement is. Part 6 said requirements arrive dressed as solutions; unwinding that translation requires the domain. Without it, you can ask the question and still not understand the answer that comes back.
When the Words Diverge, So Does the Code
At the point where a domain becomes code, the thing that breaks most often is vocabulary.
The ubiquitous language Eric Evans proposed in domain-driven design addresses this. In Martin Fowler's summary it is the practice of building up a common, rigorous language between developers and users, and the reason it must be grounded in the domain model is that software does not cope well with ambiguity. The same page quotes Evans on the division of labor: domain experts should object to terms or structures that are awkward or inadequate for conveying domain understanding, and developers should watch for ambiguity or inconsistency that will trip up design.
The signal that this is failing is simple. When the word used in the meeting and the name in the code differ, a translation happens every single time, and every translation is an opportunity to mistranslate.
Example — a vocabulary comparison table
business word name in the code same thing?
settlement settlement, payout, clearing needs checking. why three?
shipped shipped yes
return return, refund no. goods and money move separately
The dangerous row is the first. When one word on the business side is split into three in the code and nobody holds the difference as a sentence, that is where a quietly wrong value comes out.
Six Steps for Learning a Domain
- Collect the vocabulary. Gather nouns from meeting notes, screens, and customer emails without judging them.
- Separate same from different. Merge different words that point at one thing; split one word that two departments use differently. The second is the most valuable find.
- Split things from events. Sort each into a lasting object or something that happened at a moment. That split is the skeleton of the data model.
- Attach cardinality. One to one, one to many, or many to many. This is where most misunderstandings come out.
- Write validation questions. Take five questions the model should be able to answer if it is right, and ask a domain expert. If the answer stalls, the model is wrong.
- Hunt exceptions. Repeatedly ask whether there are cases where this rule does not hold. A domain producing no exceptions has not been dug into yet.
The step most often skipped is the fifth. Everyone gets as far as drawing the model; few get as far as finding the questions the model cannot answer. In the language of part 4, drawing the model is generation and writing the validation questions is designing the judgment.
Where Domain Knowledge Does Not Carry
Three limits deserve an honest statement.
First, it does not transfer well. Ten years of logistics domain is largely discarded on the way to another industry. Investing only in the domain is therefore risky, and it has to travel alongside the transferable capabilities the previous nine parts covered.
Second, industries shrink. The deeper you are, the larger this risk gets, so where the industry is heading is as important a question as a technology choice when you pick a domain.
Third, there is overfitting. Stay in one industry long enough and its conventions start to feel like physical law. When "this is just how it is done" starts coming out of your own mouth, it is time to check. If you cannot put the reason into a sentence, it is not a reason, it is a habit.
The Series in One Sentence
Ten parts compress to this. The skills that hold value are the ones that stay expensive to verify, and an engineer's job is designing the machinery that turns expensive judgment into cheap judgment. Debugging, reading, testing, writing, framing, operating, delegating, learning, and domain were all faces of that one sentence.
That is also why the series never answered with a list of tools. Lists go stale; a discriminant goes stale more slowly. When the next tool arrives, there are two questions to ask. What does this make cheap? And therefore, what judgment stays expensive?
Try It This Week
Write down ten domain terms from your team and put the word the business side uses next to the name in the code. Thirty minutes. If even one row differs, that row is where the translation happens, and that is where a quietly wrong value comes out.
- FDE Career RPG — its domain-analysis and ontology-building course drills exactly the six steps above. Across three fictional industries — manufacturing MES, logistics, and lending — you read stakeholder interviews, normalize the terms, assemble object types, properties, and link types with cardinality, and test the model with validation questions.
- Collab RPG — a domain ultimately comes from people. It shows, on a delay, what the choice to ask and the conversation you postponed are worth weeks later.
Where this does not apply: on a several-week engagement, digging deep into the domain does not pay back. There the conclusion from part 3 holds — you need the boundaries, not the understanding.
Further Reading
- Related post on this blog: Turning a Customer Domain Into a Model — From Ubiquitous Language to Ontology
What Stays Expensive series
- Previous: Learning How to Learn — Telling Fundamentals From Fashion, and Choosing One Thing to Go Deep On
- Start of the series: What Stays Expensive — Four Things That Gain Value When Generation Gets Cheap
Sources
- Ubiquitous Language — Martin Fowler — the definition as building up a common, rigorous language between developers and users, the argument that it must be grounded in the domain model because software does not cope well with ambiguity, and the Evans quotation on what domain experts and developers should each watch for. Read 2026-08-15.
- No Silver Bullet — Wikipedia summary — the point that essential complexity is caused by the problem to be solved and nothing can remove it, and the example that if users want thirty things those thirty things are essential. Read 2026-08-15.
- The six-step procedure and the vocabulary comparison table are not from those sources; they are what this post assembles.