조건은 많고 행동은 여러 개일 때
독서실 출입 규칙에 회원 여부, 필수 동의, 연령, 보호자 동행, 이용 정지 상태가 얽혀 있다고 하자. 자연어 조항을 차례로 읽으면 각 문장은 이해돼도 두 조항이 동시에 적용되는 사례나 어느 조항에도 걸리지 않는 사례를 놓치기 쉽다. 의사결정표는 조건 조합을 열로, 실행할 행동을 행으로 배열한다.
한 열은 하나의 규칙이다. 위쪽 조건 부분에는 예·아니요·값 범위를 쓰고, 아래 행동 부분에는 실행 여부나 결과를 적는다. 열을 위에서 아래로 읽으면 “이 조건 조합이면 이 행동을 한다”가 된다. 진리표가 논리식의 참·거짓을 계산한다면 의사결정표는 여러 업무 행동과 정책 결과까지 연결한다.
| 조건·행동 | 규칙 1 | 규칙 2 | 규칙 3 | 규칙 4 |
|---|---|---|---|---|
| 회원인가 | 예 | 예 | 아니요 | 아니요 |
| 동의했나 | 예 | 아니요 | 예 | 아니요 |
| 입장 허용 | 실행 | — | — | — |
| 안내 전송 | — | 실행 | 실행 | 실행 |
조건·규칙·행동을 서로 다른 축에 둔다
조건 행에는 판단에 필요한 질문을 쓴다. 규칙 열에는 그 질문들의 한 조합을 쓴다. 행동 행에는 해당 조합에서 실행할 일을 쓴다. “회원에게 안내를 보낸다”를 조건 행에 넣거나 “동의함”을 행동 행에 넣으면 표의 방향이 무너진다.
표 머리에는 규칙 ID를 R1, R2처럼 붙인다. 조건값의 ‘—’는 보통 그 규칙에서 어떤 값이든 상관없다는 뜻이며, 미확인이나 빈칸과 다르다. 범례 없이 대시를 쓰면 누락인지 무관 조건인지 알 수 없다. 값 범위가 숫자라면 경계 포함 여부도 함께 쓴다.
| 요소 | 위치 | 읽는 법 | 오류 예방 |
|---|---|---|---|
| 조건 | 위쪽 행 | 판정 질문 | 값·단위·시점 명시 |
| 규칙 | 세로 열 | 조건 조합 하나 | R1처럼 ID 부여 |
| 행동 | 아래쪽 행 | 실행할 일 | 우선순위·담당자 별도 |
| — | 조건 셀 | 값과 무관 | 미확인과 구분 |
완전성은 가능한 조합이 빠지지 않았는지 본다
불 조건이 두 개면 네 조합이 있다. 제한형 의사결정표는 이 네 열을 모두 쓸 수 있다. 조건이 늘어 열 수가 커지면 ‘—’로 여러 조합을 압축하되, 압축된 열이 어떤 조합을 포함하는지 펼쳐 검사한다. 어떤 입력도 규칙과 맞지 않으면 공백이다.
예를 들어 “회원∧동의면 허용”만 있고 나머지 행동이 없다면 세 조합에서 무엇을 할지 미정이다. 실제 정책이 기본 거부라면 기본 규칙을 명시하고 안내 행동을 연결한다. 시스템이 알아서 거부할 것이라고 추정하지 않는다. 표의 공백은 운영 중 예외가 아니라 작성 시 발견해야 할 미정 상태다.
고유성은 두 규칙이 동시에 맞지 않는지 본다
R1이 “회원은 허용”, R2가 “동의한 사람은 허용”, R3가 “동의하지 않은 사람은 거부”라면 회원이면서 동의하지 않은 경우 R1과 R3가 동시에 맞는다. 행동이 허용과 거부로 충돌한다. 규칙 열을 각각 자연어로 읽는 것만으로는 이 겹침을 놓칠 수 있다.
규칙을 불 조건으로 바꾸고 교집합이 가능한지 검사한다. 겹침을 허용하지 않는 고유 히트 정책이라면 각 입력이 정확히 한 열에만 맞아야 한다. 겹침을 허용한다면 우선순위, 첫 일치, 결과 수집 같은 결합 방식을 표에 명시한다. 열 순서만으로 우선순위를 암시하지 않는다.
| 규칙 | 조건 | 행동 | 겹침 사례 |
|---|---|---|---|
| R1 | 회원 | 허용 | 회원∧비동의 |
| R2 | 동의 | 허용 | 회원∧동의 |
| R3 | 비동의 | 거부 | 회원∧비동의 |
| 수정 | 이용정지 우선·나머지 분할 | 한 결과 | 겹침 제거 |
우선순위는 표 밖의 암묵적 순서로 두지 않는다
이용 정지 회원은 동의했더라도 입장할 수 없다는 정책이 있다면 정지 규칙이 허용 규칙보다 앞선다. 위에서 먼저 보이는 열이 자동으로 이긴다고 가정하면 표를 재정렬할 때 결과가 바뀐다. 우선순위 열이나 히트 정책을 명시하고, 왜 그 순서인지 원문 조항을 연결한다.
OMG DMN의 의사결정표는 규칙 적중 방식인 히트 정책을 구분한다. 이 글에서는 고유, 첫 일치, 우선순위, 수집 같은 개념을 업무 검토에 활용한다. 특정 도구 문법을 그대로 구현하지 않더라도 “여러 규칙이 맞으면 어떻게 하나”를 반드시 답해야 한다.
| 방식 | 뜻 | 사용 조건 |
|---|---|---|
| 고유 | 정확히 한 규칙만 일치 | 조건 영역이 서로 배타적 |
| 첫 일치 | 위에서 처음 맞는 규칙 | 순서가 정책으로 고정 |
| 우선순위 | 결과 우선순위로 선택 | 우선순위 목록 명시 |
| 수집 | 여러 결과를 모아 결합 | 합계·목록 등 결합식 명시 |
숫자 경계는 포함 기호까지 적는다
“18세 미만은 보호자 동행”과 “18세 이상은 단독 가능”은 경계가 이어진다. 반면 첫 규칙을 나이≤18, 둘째를 나이≥18로 쓰면 18세가 겹친다. 나이<18과 나이>18로 쓰면 18세가 빠진다. 표에 <, ≤, ≥ 기호와 기준 시점을 정확히 적는다.
날짜·금액·점수도 같은 문제가 생긴다. “신청 후 48시간 이내”가 정확히 48시간을 포함하는지, 취소 수수료 구간의 시작과 끝이 어느 시간대인지 확인한다. 값 범위를 정렬하고 인접한 구간의 끝점 두 개를 시험 사례로 만든다.
| 규칙 쌍 | 18세 결과 | 판정 |
|---|---|---|
| 나이≤18 / 나이≥18 | 두 규칙 일치 | 중복 |
| 나이<18 / 나이>18 | 어느 규칙도 불일치 | 누락 |
| 나이<18 / 나이≥18 | 두 구간이 정확히 연결 | 수정 |
| 시험값 | 17, 18, 19 | 경계 양옆 검사 |
LLM에는 규칙 열마다 원문 근거를 붙이게 한다
LLM은 긴 규정을 표로 줄이는 데 도움을 줄 수 있지만, 예외를 일반 규칙으로 바꾸거나 비어 있는 기본 행동을 채울 수 있다. 각 규칙 열에 원문 문장 ID, 조건 해석, 행동, 우선순위 근거를 붙이고 추정한 셀은 만들지 않게 한다. 모호한 셀은 “확인 필요”로 남긴다.
표가 나온 뒤에는 완전성, 고유성, 경계값, 히트 정책을 각각 검사하게 한다. 모델의 “문제 없음” 요약만 믿지 말고 대표 조합을 직접 넣는다. 조건이 다섯 개라면 32개 조합을 스크립트로 열거해 각 조합이 몇 규칙에 맞는지 세는 방법도 유용하다.
잘못된 표는 대시로 빈칸을 숨긴다
수정 전 표는 값이 없는 모든 셀에 ‘—’를 넣었다. 어떤 대시는 “값과 무관”, 어떤 대시는 “아직 결정하지 않음”이어서 완전성 검사가 불가능했다. 값과 무관은 별표 또는 명시된 대시로, 미정은 “확인 필요”, 해당 없음은 “N/A”처럼 구분했다.
또 R2와 R3가 같은 조건 조합을 가졌지만 행동이 달랐다. 원문을 확인하니 R3에는 “이용 정지 상태” 조건이 빠져 있었다. 조건 행을 추가하고 정지 규칙의 우선순위를 명시하자 겹침을 해석할 수 있었다. 표를 줄이기보다 결정에 필요한 조건을 보존했다.
| 조건·행동 | 규칙 1 | 규칙 2 | 규칙 3 | 규칙 4 |
|---|---|---|---|---|
| 회원인가 | 예 | 예 | — | — |
| 동의했나 | 예 | — | 아니요 | — |
| 입장 허용 | 실행 | 실행 | — | — |
| 안내 전송 | — | — | 실행 | 실행 |
완료 기준은 모든 입력이 설명 가능한 한 결과로 가는 것
최종 검수에서는 조건 정의와 값 범위, 규칙 ID, 행동, 히트 정책, 기본 행동, 경계값을 확인한다. 가능한 입력을 펼쳤을 때 0개 규칙에 맞는 누락과 2개 이상 규칙에 맞는 중복을 보고한다. 겹침이 의도된 경우 선택 또는 결합 규칙이 있어야 한다.
의사결정표는 시간 흐름이나 담당자 인계를 설명하지 않는다. 규칙 판정 뒤 누가 안내를 보내는지는 활동도나 스윔레인에 연결한다. 표가 커져 모바일에서 읽기 어렵다면 조건 묶음별로 분할하고 공통 규칙 ID를 유지한다. 글자를 줄여 한 화면에 밀어 넣지 않는다.
| 검사 | 통과 기준 | 미통과 행동 |
|---|---|---|
| 완전성 | 모든 입력이 1개 이상 규칙과 일치 | 기본·누락 규칙 추가 |
| 고유성 | 고유 정책에서 정확히 1개 | 조건 분할 |
| 히트 정책 | 겹침 처리 명시 | 우선순위 결정 |
| 경계 | 끝점과 양옆 시험 통과 | 범위 기호 수정 |
| 근거 | 모든 열에 원문 ID | 추정 셀 보류 |
복사해서 쓸 수 있는 LLM 요청문
아래 요청문은 교육용 예시다. 원문을 함께 제공하고, 모델이 빈칸을 추측하지 않도록 금지 조건을 넣었다. 결과를 받으면 원문 문장과 노드·선의 대응을 사람이 다시 확인한다.
다음 업무 규정을 의사결정표로 바꿔 줘. 1. 원문을 문장ID로 나누고 조건, 조건값, 행동, 예외, 우선순위 표현을 분리한다. 2. 조건은 행, 규칙은 열, 행동은 아래 행으로 배치하고 각 규칙에 R1 같은 ID를 붙인다. 3. ‘—’는 값과 무관할 때만 쓰고 미정·누락·해당 없음을 별도 표기로 구분한다. 4. 각 규칙 열에 근거 문장ID를 붙이며 원문에 없는 기본 행동은 추정하지 않는다. 5. 가능한 입력 조합을 펼쳐 일치 규칙이 0개인 누락과 2개 이상인 중복을 보고한다. 6. 숫자·날짜 범위는 경계 포함 기호를 쓰고 경계값과 양옆 시험을 만든다. 7. 여러 규칙이 맞을 수 있으면 고유·첫 일치·우선순위·수집 중 어떤 히트 정책이 필요한지 설명한다. 8. 확인하지 못한 정책 결정은 ‘확인 필요’로 남기고 담당자 질문 목록을 낸다. [업무 규정] …
직접 실습하고 결과를 읽기
이 실습은 브라우저 안에 준비한 교육용 자료만 사용한다. 외부 LLM을 호출하거나 실제 기관 자료를 조회하지 않는다. 입력을 바꾸어 결과가 어떻게 달라지는지 보고, 설명과 맞지 않는 결과가 나오면 어떤 정보가 빠졌는지 적어 본다.
자료와 출처
아래 자료는 이번 글의 정의와 표기법을 확인하는 데 사용했다. 생각그림과 사례 문장은 원자료를 복제하지 않고 이 글의 교육 목적에 맞게 새로 구성했다.