개념 해설 · 2026-09-01
같은 단어를 같은 뜻으로 읽으면 안 됐다
법별 정의를 분리한 SKOS 용어집 v2로 세법 그래프의 해석 출발점을 다시 세우는 기록

특수관계인을 용어집에 처음 넣을 때는 한 항목이면 될 것 같았다. 상속·증여 규칙에도, 주식과 가족 사이의 거래를 읽는 규칙에도 같은 말이 나온다.
그래프는 깔끔해진다. 법률은 흐려진다.
국세기본법 제2조제20호와 상속세 및 증여세법 제2조제10호에는 모두 특수관계인이 있다. 두 조문은 친족관계, 경제적 연관관계, 경영지배관계를 중심으로 범위를 정하고 구체화는 대통령령에 맡긴다. 단어가 비슷하다고 해서 한 법의 정의를 다른 법의 규칙에 그대로 넣을 수는 없다. 어느 법의 규칙을 읽는지, 어느 시행령의 관계 범위를 다시 봐야 하는지, 개정이 일어나면 무엇이 영향받는지가 함께 남아야 한다.
거주자는 그 문제를 더 선명하게 보여 준다. 소득세법 제1조의2는 국내에 주소를 두거나 183일 이상의 거소를 둔 개인을 거주자로 정의한다. 상속세 및 증여세법 제2조제8호는 같은 기간 기준을 쓰면서 거주자를 사람으로 표현하고, 주소·거소와 판정의 세부 사항을 시행령으로 넘긴다. 이 문장 차이만으로 세무 결론을 내리자는 뜻은 아니다. 두 정의를 한 노드에 덮어쓰는 순간, 나중에 무엇이 달라졌는지 찾을 수 없어진다는 뜻이다.
조문을 많이 넣는 것만으로는 용어집이 되지 않았다
기존 용어집에는 양도가액, 필요경비, 취득가액 세 항목이 있었다. 정의 조문을 걸어 둔 덕분에 어느 원문을 다시 봐야 하는지는 알 수 있었다.
하지만 지식베이스의 자유텍스트에는 보유기간, 시가, 평가기준일, 과세표준, 순자산가치, 특수관계인처럼 더 많은 용어가 반복된다. 같은 용어가 여러 법에 나오면 한 줄 설명에 정의를 모아 넣는 방식은 오히려 위험하다. 기계는 어느 문장이 어느 규칙에 연결되는지 알 수 없기 때문이다.
상위법 수집도 필요했다. 개별 세법만 모아 두면 그 법이 전제로 삼는 기본 정의의 출처가 끊긴다. 국세기본법과 지방세기본법의 정의 조문을 증거 코퍼스에 넣는 일은 법의 위계를 장식하는 일이 아니다. 단어를 만났을 때 그것이 자기 법에서 정의되는지, 기본법을 따르는지, 다른 법률에 위임되는지 확인할 출발점을 만드는 일이다.
상위 개념 하나와 법별 개념 여러 개
용어집 v2에서 특수관계인은 단일 정의의 노드가 아니다. 사람이 읽는 상위 개념 하나 아래에 상속세 및 증여세법상 특수관계인과 국세기본법상 특수관계인을 각각 둔다. 하위 개념은 자기 법의 정의 조문과 원문을 가리킨다.
특수관계인
├── 상속세 및 증여세법상 특수관계인
│ └── 정의 조문: 상속세 및 증여세법 제2조제10호
└── 국세기본법상 특수관계인
└── 정의 조문: 국세기본법 제2조제20호
상하위 관계는 OWL 클래스의 상속 관계가 아니다. SKOS의 skos:narrower로 법별 정의가 상위 용어를 더 좁은 법률 맥락에서 읽는다는 사실만 적는다. 어떤 사람이 한 법에서는 특수관계인이고 다른 법에서도 반드시 그렇다는 자동 추론은 만들지 않는다. 용어집의 역할은 법률상 판단을 대신하는 것이 아니라, 판단이 시작될 때 잘못된 정의를 집어 들지 않게 하는 것이다.
거주자와 비거주자도 같은 방식으로 둔다. 상위 개념에는 공통된 문제를, 법별 하위 개념에는 원문과 개정 영향을 받는 정의를 둔다.
뜻과 사용처는 다른 연결이다
정의 조문만 연결하면 아직 절반이다. 법령이 바뀌면 더 필요한 질문은 “그래서 우리 지식베이스의 어느 규칙을 다시 읽어야 하나”다.
그래서 용어집에는 appearsIn을 둔다. 시가가 어떤 Valuation 개체의 자유텍스트에 나타난다면 그 IRI를, 특수관계인이 TaxRule의 관계 요건 설명에 나타난다면 그 규칙을 직접 연결한다. 사람이 읽을 맥락은 scopeNote에 남기되, 영향 범위를 찾는 정본은 IRI 목록이다.
이 연결은 연산 규칙이 아니다. family-wealth의 계산기나 Resolver가 용어집을 읽어 적용 여부를 결정하게 만들지 않는다. Resolver는 후보 규칙을 찾고 필요한 사실을 확인하며, 자료가 모자라면 INSUFFICIENT_FACTS로 남기는 현재 경계를 유지한다. 용어집은 “이 규칙의 단어를 어느 법의 정의로 다시 확인해야 하는가”를 알려 주는 문서화와 영향도 추적의 층이다.
원문 링크를 모델에 남긴다
정의의 원문은 evidence seed에 직접 연결한다. prov:hadPrimarySource는 조문을 읽었다는 표식이 아니라, 실제로 수집한 증거의 위치를 가리킨다. 나중에 PROV-O를 전체 파이프라인에 적용하더라도 같은 seed local name을 이어 쓸 수 있다.
다만 용어집만으로 provenance가 완성되는 것은 아니다. 이번 범위는 좁다. 정의의 근거는 원문 seed로, 법률 위치는 Provision으로, KB 안의 사용처는 appearsIn으로 남긴다. 세 연결이 있으면 적어도 “이 단어는 어디서 왔고, 어느 법의 뜻이며, 무엇을 다시 봐야 하는가”에는 답할 수 있다.
가상자산처럼 외부법의 정의를 인용하는 용어는 더 조심해야 한다. 아직 외부법을 증거 코퍼스에 넣지 않았다면 정의 조문을 지어내거나 빈 IRI를 달지 않는다. 위임 사실만 기록하고, 수집은 별도 과제로 남긴다.
용어집도 끊어진 링크를 검사한다
RDF 파일은 존재하지 않는 IRI를 가리켜도 대개 조용히 읽힌다. TTL 파싱 성공만으로는 충분하지 않다. definedInProvision이 실제 ABox의 Provision을 가리키는지, appearsIn이 실제 TaxRule·Valuation·EligibilityCondition을 가리키는지 따로 확인해야 한다.
새 check_glossary.py는 이 두 종류의 끊어진 연결과 모든 SKOS 개념의 필수 속성을 검사한다. 기존 check_orphans.py는 TaxLaw와 Provision이 부모 목록에 실제로 연결됐는지를 본다. 전자는 용어집의 인용과 사용처를, 후자는 법령 ABox의 고립을 막는다.
따라서 용어집 확장은 용어를 더 많이 등록했다는 숫자로 끝나지 않는다. 상위법 증거 수집, 정의 조문 Provision 등록, 법별 개념 분리, 사용처 연결, 끊어진 링크 검사가 한 변경 단위다.
다음 글의 숫자와 관계도 먼저 뜻을 묻는다
7편은 금융소득 기준금액을 세율과 조건, 산술로 나눈다. 8편은 시가와 평가기준일을 세율과 분리한다. 9편은 특수관계, 시간, 사건 순서가 결합된 규칙을 다룬다.
시가를 일반적인 가격이라는 한 문장으로 남기면 8편의 평가 규정이 가진 법률상 출처가 사라진다. 특수관계인을 가족관계의 동의어처럼 취급하면 9편의 관계 요건이 어느 법의 정의를 따라야 하는지도 흐려진다. 후속 글의 연산 구조는 그대로 두되, 그 구조가 쓰는 단어의 법률상 출발점을 보강한다.
같은 단어를 모아두는 일은 어휘 정리가 아니다. 어떤 규칙이 어느 법의 언어를 쓰는지 다시 밝혀 두는 일이다.
참고와 범위
국세기본법 제2조제20호와 상속세 및 증여세법 제2조제10호는 각각 특수관계인의 정의를 둔다. 소득세법 제1조의2와 상속세 및 증여세법 제2조제8호는 거주자·비거주자의 정의와 판정 관련 위임을 둔다. 법별 문언과 시행령의 구체적 범위는 해당 시점의 원문을 함께 확인해야 한다.
이 글은 SKOS 용어집 v2의 설계와 검증 경계를 설명한다. 특정인이 특수관계인·거주자에 해당하는지, 어떤 세액이 계산되는지는 개별 사실관계와 적용 시점 법령을 확인해야 하는 별도의 세무 판단이다.