# Project Odysseus - 데이터 인텔리전스 시스템
## 프로젝트 개요
프로젝트 오디세우스는 다양한 데이터 소스를 통합하여 지식 그래프를 구축하고, 이를 통해 비즈니스 인사이트를 제공하는 데이터 인텔리전스 시스템입니다.
## 시스템 아키텍처
```
project_odysseus/
├── connectors/ # 데이터 커넥터 계층
│ ├── base.py # 추상 기본 클래스
│ └── implementations.py # 구체적인 커넥터 구현
├── ontology/ # 온톨로지 계층
│ ├── models.py # 온톨로지 모델 정의
│ └── engine.py # 데이터 매핑 엔진
├── governance/ # 거버넌스 및 보안 계층
│ ├── logger.py # 감사 로깅
│ └── access_control.py # 접근 제어
├── applications/ # 애플리케이션 계층
│ ├── sdk.py # 프로그래밍 SDK
│ └── workshop_app.py # Streamlit 대시보드
├── main.py # 메인 실행 파일
└── requirements.txt # 의존성 패키지
```
## 주요 기능
### 1. 데이터 연결 (Connectors Layer)
- **FileConnector**: CSV, JSON 등 파일 기반 데이터 소스 연결
- **DatabaseConnector**: SQLite 등 데이터베이스 연결
- 확장 가능한 커넥터 아키텍처
### 2. 온톨로지 관리 (Ontology Layer)
- **OntologyModel**: RDF 그래프 기반 지식 모델링
- **MappingEngine**: 데이터를 온톨로지로 자동 매핑
- SPARQL 쿼리 지원
### 3. 거버넌스 (Governance Layer)
- **감사 로깅**: 모든 데이터 접근 및 수정 활동 기록
- **접근 제어**: 역할 기반 권한 관리 (RBAC)
- 보안 및 컴플라이언스 기능
### 4. 애플리케이션 (Applications Layer)
- **SDK**: 프로그래밍 방식의 온톨로지 접근
- **대시보드**: Streamlit 기반 웹 인터페이스
- SPARQL 쿼리 실행 및 시각화
## 설치 및 실행
### 1. 의존성 설치
```bash
pip install -r requirements.txt
```
### 2. 메인 시나리오 실행
```bash
cd project_odysseus
python main.py
```
### 3. 웹 대시보드 실행
```bash
streamlit run applications/workshop_app.py
```
## 사용 예시
### 공급망 최적화 시나리오
시스템은 다음과 같은 시나리오를 통해 공급망 최적화를 시연합니다:
1. **데이터 수집**: 트럭 정보(CSV)와 주문 정보(SQLite DB) 연결
2. **온톨로지 구축**: 트럭, 주문, 관계 정보를 RDF 그래프로 변환
3. **권한 관리**: 관리자와 분석가의 역할별 접근 제어
4. **데이터 분석**: SPARQL 쿼리를 통한 비즈니스 인사이트 추출
### SPARQL 쿼리 예시
```sparql
PREFIX ods: <http://project-odysseus.com/ontology#>
SELECT ?truckId ?driverName ?currentLocation
WHERE {
?truck a ods:Truck .
?truck ods:truckId ?truckId .
?truck ods:driverName ?driverName .
?truck ods:currentLocation ?currentLocation .
}
```
## 생성되는 파일
- `knowledge_graph.ttl`: 지식 그래프 TTL 파일
- `audit_trail.log`: 거버넌스 감사 로그
- `data/trucks.csv`: 트럭 정보 CSV 파일
- `data/orders.db`: 주문 정보 SQLite 데이터베이스
## 확장 가능성
- 추가 데이터 소스 커넥터 구현
- 복잡한 비즈니스 로직 온톨로지 모델링
- 고급 보안 및 권한 관리 기능
- 실시간 데이터 스트리밍 지원
- 머신러닝 기반 인사이트 추출
## 기술 스택
- **Python**: 핵심 개발 언어
- **RDFLib**: RDF 그래프 및 SPARQL 처리
- **Pandas**: 데이터 처리 및 분석
- **Streamlit**: 웹 대시보드 구축
- **SQLite**: 경량 데이터베이스
- **Logging**: 감사 및 로깅 시스템
Raw data
{
"_id": null,
"home_page": null,
"name": "project-odysseus",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "ontology, data-intelligence, knowledge-graph, palantir, enterprise",
"author": null,
"author_email": "Project Odysseus Team <odysseus@example.com>",
"download_url": "https://files.pythonhosted.org/packages/c2/1b/cdcc1492784b2d18a6439461fc07656c7b26fa72a6e148b216c5aa0c2fc4/project_odysseus-1.0.0.tar.gz",
"platform": null,
"description": "# Project Odysseus - \ub370\uc774\ud130 \uc778\ud154\ub9ac\uc804\uc2a4 \uc2dc\uc2a4\ud15c\r\n\r\n## \ud504\ub85c\uc81d\ud2b8 \uac1c\uc694\r\n\r\n\ud504\ub85c\uc81d\ud2b8 \uc624\ub514\uc138\uc6b0\uc2a4\ub294 \ub2e4\uc591\ud55c \ub370\uc774\ud130 \uc18c\uc2a4\ub97c \ud1b5\ud569\ud558\uc5ec \uc9c0\uc2dd \uadf8\ub798\ud504\ub97c \uad6c\ucd95\ud558\uace0, \uc774\ub97c \ud1b5\ud574 \ube44\uc988\ub2c8\uc2a4 \uc778\uc0ac\uc774\ud2b8\ub97c \uc81c\uacf5\ud558\ub294 \ub370\uc774\ud130 \uc778\ud154\ub9ac\uc804\uc2a4 \uc2dc\uc2a4\ud15c\uc785\ub2c8\ub2e4.\r\n\r\n## \uc2dc\uc2a4\ud15c \uc544\ud0a4\ud14d\ucc98\r\n\r\n```\r\nproject_odysseus/\r\n\u251c\u2500\u2500 connectors/ # \ub370\uc774\ud130 \ucee4\ub125\ud130 \uacc4\uce35\r\n\u2502 \u251c\u2500\u2500 base.py # \ucd94\uc0c1 \uae30\ubcf8 \ud074\ub798\uc2a4\r\n\u2502 \u2514\u2500\u2500 implementations.py # \uad6c\uccb4\uc801\uc778 \ucee4\ub125\ud130 \uad6c\ud604\r\n\u251c\u2500\u2500 ontology/ # \uc628\ud1a8\ub85c\uc9c0 \uacc4\uce35\r\n\u2502 \u251c\u2500\u2500 models.py # \uc628\ud1a8\ub85c\uc9c0 \ubaa8\ub378 \uc815\uc758\r\n\u2502 \u2514\u2500\u2500 engine.py # \ub370\uc774\ud130 \ub9e4\ud551 \uc5d4\uc9c4\r\n\u251c\u2500\u2500 governance/ # \uac70\ubc84\ub10c\uc2a4 \ubc0f \ubcf4\uc548 \uacc4\uce35\r\n\u2502 \u251c\u2500\u2500 logger.py # \uac10\uc0ac \ub85c\uae45\r\n\u2502 \u2514\u2500\u2500 access_control.py # \uc811\uadfc \uc81c\uc5b4\r\n\u251c\u2500\u2500 applications/ # \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uacc4\uce35\r\n\u2502 \u251c\u2500\u2500 sdk.py # \ud504\ub85c\uadf8\ub798\ubc0d SDK\r\n\u2502 \u2514\u2500\u2500 workshop_app.py # Streamlit \ub300\uc2dc\ubcf4\ub4dc\r\n\u251c\u2500\u2500 main.py # \uba54\uc778 \uc2e4\ud589 \ud30c\uc77c\r\n\u2514\u2500\u2500 requirements.txt # \uc758\uc874\uc131 \ud328\ud0a4\uc9c0\r\n```\r\n\r\n## \uc8fc\uc694 \uae30\ub2a5\r\n\r\n### 1. \ub370\uc774\ud130 \uc5f0\uacb0 (Connectors Layer)\r\n- **FileConnector**: CSV, JSON \ub4f1 \ud30c\uc77c \uae30\ubc18 \ub370\uc774\ud130 \uc18c\uc2a4 \uc5f0\uacb0\r\n- **DatabaseConnector**: SQLite \ub4f1 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc5f0\uacb0\r\n- \ud655\uc7a5 \uac00\ub2a5\ud55c \ucee4\ub125\ud130 \uc544\ud0a4\ud14d\ucc98\r\n\r\n### 2. \uc628\ud1a8\ub85c\uc9c0 \uad00\ub9ac (Ontology Layer)\r\n- **OntologyModel**: RDF \uadf8\ub798\ud504 \uae30\ubc18 \uc9c0\uc2dd \ubaa8\ub378\ub9c1\r\n- **MappingEngine**: \ub370\uc774\ud130\ub97c \uc628\ud1a8\ub85c\uc9c0\ub85c \uc790\ub3d9 \ub9e4\ud551\r\n- SPARQL \ucffc\ub9ac \uc9c0\uc6d0\r\n\r\n### 3. \uac70\ubc84\ub10c\uc2a4 (Governance Layer)\r\n- **\uac10\uc0ac \ub85c\uae45**: \ubaa8\ub4e0 \ub370\uc774\ud130 \uc811\uadfc \ubc0f \uc218\uc815 \ud65c\ub3d9 \uae30\ub85d\r\n- **\uc811\uadfc \uc81c\uc5b4**: \uc5ed\ud560 \uae30\ubc18 \uad8c\ud55c \uad00\ub9ac (RBAC)\r\n- \ubcf4\uc548 \ubc0f \ucef4\ud50c\ub77c\uc774\uc5b8\uc2a4 \uae30\ub2a5\r\n\r\n### 4. \uc560\ud50c\ub9ac\ucf00\uc774\uc158 (Applications Layer)\r\n- **SDK**: \ud504\ub85c\uadf8\ub798\ubc0d \ubc29\uc2dd\uc758 \uc628\ud1a8\ub85c\uc9c0 \uc811\uadfc\r\n- **\ub300\uc2dc\ubcf4\ub4dc**: Streamlit \uae30\ubc18 \uc6f9 \uc778\ud130\ud398\uc774\uc2a4\r\n- SPARQL \ucffc\ub9ac \uc2e4\ud589 \ubc0f \uc2dc\uac01\ud654\r\n\r\n## \uc124\uce58 \ubc0f \uc2e4\ud589\r\n\r\n### 1. \uc758\uc874\uc131 \uc124\uce58\r\n```bash\r\npip install -r requirements.txt\r\n```\r\n\r\n### 2. \uba54\uc778 \uc2dc\ub098\ub9ac\uc624 \uc2e4\ud589\r\n```bash\r\ncd project_odysseus\r\npython main.py\r\n```\r\n\r\n### 3. \uc6f9 \ub300\uc2dc\ubcf4\ub4dc \uc2e4\ud589\r\n```bash\r\nstreamlit run applications/workshop_app.py\r\n```\r\n\r\n## \uc0ac\uc6a9 \uc608\uc2dc\r\n\r\n### \uacf5\uae09\ub9dd \ucd5c\uc801\ud654 \uc2dc\ub098\ub9ac\uc624\r\n\r\n\uc2dc\uc2a4\ud15c\uc740 \ub2e4\uc74c\uacfc \uac19\uc740 \uc2dc\ub098\ub9ac\uc624\ub97c \ud1b5\ud574 \uacf5\uae09\ub9dd \ucd5c\uc801\ud654\ub97c \uc2dc\uc5f0\ud569\ub2c8\ub2e4:\r\n\r\n1. **\ub370\uc774\ud130 \uc218\uc9d1**: \ud2b8\ub7ed \uc815\ubcf4(CSV)\uc640 \uc8fc\ubb38 \uc815\ubcf4(SQLite DB) \uc5f0\uacb0\r\n2. **\uc628\ud1a8\ub85c\uc9c0 \uad6c\ucd95**: \ud2b8\ub7ed, \uc8fc\ubb38, \uad00\uacc4 \uc815\ubcf4\ub97c RDF \uadf8\ub798\ud504\ub85c \ubcc0\ud658\r\n3. **\uad8c\ud55c \uad00\ub9ac**: \uad00\ub9ac\uc790\uc640 \ubd84\uc11d\uac00\uc758 \uc5ed\ud560\ubcc4 \uc811\uadfc \uc81c\uc5b4\r\n4. **\ub370\uc774\ud130 \ubd84\uc11d**: SPARQL \ucffc\ub9ac\ub97c \ud1b5\ud55c \ube44\uc988\ub2c8\uc2a4 \uc778\uc0ac\uc774\ud2b8 \ucd94\ucd9c\r\n\r\n### SPARQL \ucffc\ub9ac \uc608\uc2dc\r\n\r\n```sparql\r\nPREFIX ods: <http://project-odysseus.com/ontology#>\r\nSELECT ?truckId ?driverName ?currentLocation\r\nWHERE {\r\n ?truck a ods:Truck .\r\n ?truck ods:truckId ?truckId .\r\n ?truck ods:driverName ?driverName .\r\n ?truck ods:currentLocation ?currentLocation .\r\n}\r\n```\r\n\r\n## \uc0dd\uc131\ub418\ub294 \ud30c\uc77c\r\n\r\n- `knowledge_graph.ttl`: \uc9c0\uc2dd \uadf8\ub798\ud504 TTL \ud30c\uc77c\r\n- `audit_trail.log`: \uac70\ubc84\ub10c\uc2a4 \uac10\uc0ac \ub85c\uadf8\r\n- `data/trucks.csv`: \ud2b8\ub7ed \uc815\ubcf4 CSV \ud30c\uc77c\r\n- `data/orders.db`: \uc8fc\ubb38 \uc815\ubcf4 SQLite \ub370\uc774\ud130\ubca0\uc774\uc2a4\r\n\r\n## \ud655\uc7a5 \uac00\ub2a5\uc131\r\n\r\n- \ucd94\uac00 \ub370\uc774\ud130 \uc18c\uc2a4 \ucee4\ub125\ud130 \uad6c\ud604\r\n- \ubcf5\uc7a1\ud55c \ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1 \uc628\ud1a8\ub85c\uc9c0 \ubaa8\ub378\ub9c1\r\n- \uace0\uae09 \ubcf4\uc548 \ubc0f \uad8c\ud55c \uad00\ub9ac \uae30\ub2a5\r\n- \uc2e4\uc2dc\uac04 \ub370\uc774\ud130 \uc2a4\ud2b8\ub9ac\ubc0d \uc9c0\uc6d0\r\n- \uba38\uc2e0\ub7ec\ub2dd \uae30\ubc18 \uc778\uc0ac\uc774\ud2b8 \ucd94\ucd9c\r\n\r\n## \uae30\uc220 \uc2a4\ud0dd\r\n\r\n- **Python**: \ud575\uc2ec \uac1c\ubc1c \uc5b8\uc5b4\r\n- **RDFLib**: RDF \uadf8\ub798\ud504 \ubc0f SPARQL \ucc98\ub9ac\r\n- **Pandas**: \ub370\uc774\ud130 \ucc98\ub9ac \ubc0f \ubd84\uc11d\r\n- **Streamlit**: \uc6f9 \ub300\uc2dc\ubcf4\ub4dc \uad6c\ucd95\r\n- **SQLite**: \uacbd\ub7c9 \ub370\uc774\ud130\ubca0\uc774\uc2a4\r\n- **Logging**: \uac10\uc0ac \ubc0f \ub85c\uae45 \uc2dc\uc2a4\ud15c\r\n",
"bugtrack_url": null,
"license": null,
"summary": "Palantir-style Ontology Infrastructure Library for Enterprise Data Intelligence",
"version": "1.0.0",
"project_urls": {
"Bug Tracker": "https://github.com/project-odysseus/odysseus/issues",
"Documentation": "https://odysseus.readthedocs.io",
"Homepage": "https://github.com/project-odysseus/odysseus",
"Repository": "https://github.com/project-odysseus/odysseus"
},
"split_keywords": [
"ontology",
" data-intelligence",
" knowledge-graph",
" palantir",
" enterprise"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "2472711a2d0b977f814e736c8e7e1ec547b31b8f0f61624b7a93d4e2a1efc52e",
"md5": "aaefc79a1f5518301d98a96125defc8f",
"sha256": "f0e4ef28cf236acfcb031fdd507415e9f8c54710be52c1f820a8d0e607eb8cc9"
},
"downloads": -1,
"filename": "project_odysseus-1.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "aaefc79a1f5518301d98a96125defc8f",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 39479,
"upload_time": "2025-07-09T04:51:52",
"upload_time_iso_8601": "2025-07-09T04:51:52.963360Z",
"url": "https://files.pythonhosted.org/packages/24/72/711a2d0b977f814e736c8e7e1ec547b31b8f0f61624b7a93d4e2a1efc52e/project_odysseus-1.0.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "c21bcdcc1492784b2d18a6439461fc07656c7b26fa72a6e148b216c5aa0c2fc4",
"md5": "9a224b5e2c1497b43427ac8195d9df29",
"sha256": "42c63a06e7d633044a137a166abadf638fd75c86c908cff6931d8bd8ad16606a"
},
"downloads": -1,
"filename": "project_odysseus-1.0.0.tar.gz",
"has_sig": false,
"md5_digest": "9a224b5e2c1497b43427ac8195d9df29",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 34357,
"upload_time": "2025-07-09T04:51:54",
"upload_time_iso_8601": "2025-07-09T04:51:54.446413Z",
"url": "https://files.pythonhosted.org/packages/c2/1b/cdcc1492784b2d18a6439461fc07656c7b26fa72a6e148b216c5aa0c2fc4/project_odysseus-1.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-09 04:51:54",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "project-odysseus",
"github_project": "odysseus",
"github_not_found": true,
"lcname": "project-odysseus"
}