티스토리 뷰
작성일: 2026년 1월 9일
카테고리: AI, Ontology, Knowledge Graph, Tax Consulting
키워드: 온톨로지, 지식그래프, AI 에이전트, SHACL, GraphRAG, LangGraph
블로그 URL: https://blog.imprun.dev/120
시리즈: 총 20부작
대상 독자: 온톨로지에 입문하는 시니어 개발자
기술 스택: Python, RDF/OWL 2 DL/SHACL, LangChain/LangGraph
초점: 시스템 설계와 작동 원리 (코드 구현보다 아키텍처 이해)
시리즈 소개
이 시리즈는 지식그래프(Knowledge Graph)와 AI 에이전트를 결합하여 세무 데이터 기반 월간 컨설팅 리포트를 자동 생성하는 시스템의 설계 원리를 다룬다.
세무사가 기장한 기업의 재무제표, 세금 신고 내역 등 다양한 세무 정보를 수집하고, 이를 온톨로지로 구조화한 뒤, AI 에이전트가 분석하여 기업 대표에게 의미 있는 인사이트를 제공하는 것이 최종 목표다.
왜 지식그래프인가?
| 접근 방식 | 장점 | 한계 |
|---|---|---|
| LLM만 사용 | 자연스러운 대화, 범용성 | 환각(Hallucination), 계산 오류, 최신 데이터 부재 |
| 규칙 기반 | 정확한 계산, 일관성 | 유연성 부족, 자연어 처리 어려움 |
| 지식그래프 + LLM | 정확성 + 유연성, 추론 가능 | 초기 구축 비용 |
전체 시스템 아키텍처
flowchart TB
subgraph DataSource["데이터 소스"]
ERP["세무 ERP"]
end
subgraph KnowledgeLayer["지식 표현 계층"]
TBox["TBox (OWL 2 DL)<br/>스키마 정의"]
ABox["ABox (RDF)<br/>실제 데이터"]
SHACL["SHACL<br/>검증/추론 규칙"]
end
subgraph AILayer["AI 에이전트 계층"]
RAG["GraphRAG<br/>지식 기반 검색"]
Agent["분석 에이전트<br/>LangGraph"]
end
subgraph Output["출력"]
Report["월간 컨설팅 리포트"]
end
ERP -->|ETL| ABox
TBox --> ABox
SHACL --> ABox
ABox --> RAG
RAG --> Agent
Agent --> Report
style DataSource stroke:#6b7280,stroke-width:2px
style KnowledgeLayer stroke:#2563eb,stroke-width:2px
style AILayer stroke:#16a34a,stroke-width:2px
style Output stroke:#ea580c,stroke-width:2px
학습 경로
시맨틱 웹 경험자 (권장)
Part A (4편 훑어보기) → Part B 전체 → Part C → Part D → Part E온톨로지 개념은 알지만 세무 도메인과 실제 적용이 궁금한 경우.
시맨틱 웹 처음인 시니어 개발자
Part A 전체 (정독) → Part B (5-8편) → Part D (14편) → Part C → Part D-ERDF/OWL/SHACL 기초를 다지고, 실제 데이터 구조를 먼저 파악한 뒤 본격 설계로 진입.
빠른 구현 목표
4편 (아키텍처) → 8편 (ERP 데이터) → 14편 (ETL) → 16편 (GraphRAG) → 18-20편전체 그림을 잡고 핵심 구현 포인트만 파악.
목차
Part A: 기초 개념 (1-4편)
시스템의 철학적/기술적 기반. "왜 이렇게 설계하는가"의 답.
| # | 제목 | 핵심 질문 |
|---|---|---|
| 1 | 온톨로지란 무엇인가: 컴퓨터에게 세상을 가르치는 방법 | 왜 데이터에 "의미"를 부여해야 하는가? |
| 2 | 지식그래프 입문: RDB vs Graph DB, 언제 무엇을 쓰는가 | 관계형 DB와 그래프 DB의 차이는? |
| 3 | AI 에이전트 개념: 도구를 사용하는 AI | 에이전트가 "도구"를 사용한다는 것의 의미는? |
| 4 | 세무 AI 시스템 아키텍처 설계 | 전체 시스템을 어떻게 구성하는가? |
Part B: 지식 표현 기술 (5-9편)
온톨로지 설계의 핵심. TBox/ABox 분리와 SHACL 규칙.
| # | 제목 | 핵심 질문 |
|---|---|---|
| 5 | RDF 기초: 세계를 트리플로 표현하기 | (주어, 술어, 목적어)만으로 무엇을 표현할 수 있는가? |
| 6 | OWL로 세무 용어 정의하기: TBox 설계 | 클래스 계층과 제약조건을 어떻게 정의하는가? |
| 7 | SPARQL 쿼리 마스터하기 | 그래프 데이터를 어떻게 질의하는가? |
| 8 | SHACL 규칙으로 데이터 검증하기 | 비즈니스 규칙을 어떻게 선언적으로 정의하는가? |
| 9 | 재무제표 온톨로지 완성하기 | BS/IS/CF를 온톨로지로 어떻게 통합하는가? |
Part C: AI 프레임워크 (10-13편)
LangChain/LangGraph 기반 에이전트 설계.
| # | 제목 | 핵심 질문 |
|---|---|---|
| 10 | LangChain 입문: 첫 번째 체인 만들기 | 체인의 개념과 조합 방법은? |
| 11 | RAG 구현: 문서 기반 질의응답 | 검색 증강 생성의 아키텍처는? |
| 12 | LangGraph로 상태 기반 에이전트 구축 | 복잡한 워크플로우를 어떻게 그래프로 표현하는가? |
| 13 | 커스텀 도구(Tool) 만들기 | 에이전트가 사용할 도구를 어떻게 설계하는가? |
Part D: 세무 도메인 적용 (14-17편)
실제 ERP 데이터를 지식그래프로 변환하고 분석.
| # | 제목 | 핵심 질문 |
|---|---|---|
| 14 | 회계 ERP 데이터를 RDF로 변환하기 | JSON → RDF 매핑 전략은? |
| 15 | 세무 분석 규칙 SHACL로 정의하기 | 부채비율 경고, 이상 탐지를 어떻게 규칙화하는가? |
| 16 | GraphRAG: 지식그래프 + LLM 통합 | 구조화된 지식을 LLM 컨텍스트로 어떻게 활용하는가? |
| 17 | 세무 분석 에이전트 구현 | 자율적으로 분석하는 에이전트를 어떻게 설계하는가? |
Part E: 시스템 통합 (18-20편)
프로덕션 배포와 운영.
| # | 제목 | 핵심 질문 |
|---|---|---|
| 18 | 월간 리포트 자동 생성 파이프라인 | 데이터 수집부터 PDF 출력까지의 흐름은? |
| 19 | 멀티 에이전트 협업 시스템 | 여러 에이전트가 어떻게 협업하는가? |
| 20 | 배포와 운영: 프로덕션 가이드 | 모니터링, 비용 최적화, 장애 대응은? |
핵심 설계 결정
이 시리즈에서 다루는 주요 아키텍처 결정:
1. TBox/ABox 분리
TBox (스키마): "손익계산서는 매출, 비용, 순이익을 포함한다"
ABox (데이터): "A회사의 2024년 손익계산서의 매출은 52.9억이다"스키마와 데이터를 분리하면 스키마 변경 없이 데이터 추가가 가능하다.
2. SHACL vs OWL 규칙
- OWL: 개념 정의 (클래스, 상속, 제약)
- SHACL: 데이터 검증 + 비즈니스 규칙
부채비율 > 200% → 경고 (SHACL Rule)
손익계산서 ⊂ 재무제표 (OWL SubClassOf)3. GraphRAG vs 일반 RAG
- 일반 RAG: 텍스트 청크 검색
- GraphRAG: 구조화된 관계 기반 검색
세무 데이터는 관계가 명확하므로 GraphRAG가 더 정확한 답변을 생성한다.
사용하는 ERP 데이터
이 시리즈는 실제 세무 ERP에서 추출한 다음 데이터를 사용한다:
| 카테고리 | 데이터 | 용도 |
|---|---|---|
| 기초정보 | 거래처, 계정과목, 회사정보 | 엔티티 정의 |
| 전표 | 일반전표, 매입매출전표 | 트랜잭션 기록 |
| 장부 | 분개장, 총계정원장, 거래처원장 | 집계 데이터 |
| 결산 | 손익계산서, 재무상태표, 제조원가명세서 | 재무제표 |
| 세무 | 세금계산서합계표, 부가가치세 | 세무 신고 |
사전 준비 사항
- Python 3.10 이상
- RDF/OWL 개념에 대한 기초 이해 (1-5편에서 다룸)
- (선택) GraphDB 또는 Apache Jena 설치
참고 자료
온톨로지/지식그래프
LangChain/LangGraph
재무/세무
'실제 경험과 인사이트를 AI와 함께 정리한 글' 카테고리의 다른 글
| 지식그래프 입문: RDB vs Graph DB, 언제 무엇을 쓰는가 (0) | 2026.01.09 |
|---|---|
| 온톨로지란 무엇인가: 데이터에 '의미'를 부여하는 기술 (0) | 2026.01.09 |
| Claude Code 2.1.0 릴리즈 노트 리뷰: 스킬 핫리로드부터 Vim 모션까지 (0) | 2026.01.09 |
| Claude Code 스크롤 버그, Warp로 해결하기 (0) | 2026.01.08 |
| 컨텍스트 창을 지배하는 자, AI 코딩을 지배한다 (0) | 2026.01.06 |
- Total
- Today
- Yesterday
- security
- AI agent
- EnvironmentAgnostic
- Tax Analysis
- Development Tools
- CLAUDE.md
- Claude Opus 4.5
- Developer Tools
- api gateway
- AGENTS.md
- GPT-5.1
- imprun.dev
- Rag
- AI
- SHACL
- authorization
- architecture
- Go
- authentication
- troubleshooting
- react
- backend
- Tailwind CSS
- frontend
- Ontology
- claude code
- LLM
- Kubernetes
- Next.js
- knowledge graph
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
