
언어: English | 한국어
외부 DICOM 라이브러리 없이 kcenon 에코시스템을 기반으로 DICOM 표준을 처음부터 구현한 현대적인 C++20 PACS 시스템입니다.
PACS System은 kcenon 에코시스템의 고성능 인프라를 활용하여 DICOM 표준을 순수 구현한 C++20 PACS (Picture Archiving and Communication System)입니다.
핵심 가치:
- 외부 DICOM 라이브러리 제로: kcenon 에코시스템을 활용한 순수 구현
- 고성능: SIMD 가속, lock-free 큐, 비동기 I/O 활용
- 프로덕션 품질: 종합적인 CI/CD, 새니타이저, 품질 메트릭
- 모듈식 아키텍처: 인터페이스 기반 설계로 관심사의 명확한 분리
- 크로스 플랫폼: Linux, macOS, Windows 지원
현재 단계: Phase 4 완료 - 고급 서비스 및 프로덕션 강화
| 단계 |
범위 |
상태 |
| Phase 1: 기반 |
DICOM 코어, 태그 사전, 파일 I/O (Part 10), 전송 구문 |
완료 |
| Phase 2: 네트워크 |
Upper Layer Protocol (PDU), Association 상태 머신, DIMSE-C, 압축 코덱 |
완료 |
| Phase 3: 핵심 서비스 |
Storage SCP/SCU, 파일 스토리지, 인덱스 DB, Query/Retrieve, 로깅, 모니터링 |
완료 |
| Phase 4: 고급 서비스 |
REST API, DICOMweb, AI 통합, 클라이언트 모듈, 클라우드 스토리지, 인쇄 관리, 보안, 워크플로우 |
완료 |
테스트 커버리지: 141+ 테스트 파일에서 1,980+ 테스트 통과
| 기능 |
설명 |
상태 |
| DICOM 코어 |
태그, 요소, 데이터셋, Part 10 파일 I/O |
안정 |
| 전송 구문 |
Implicit/Explicit VR, JPEG, JPEG 2000, JPEG-LS, RLE, HTJ2K |
안정 |
| 네트워크 프로토콜 |
PDU, Association 상태 머신, DIMSE |
안정 |
| Storage SCP/SCU |
C-STORE 서비스 |
안정 |
| Query/Retrieve |
Patient/Study Root Q/R |
안정 |
| Modality Worklist |
MWL SCP/SCU |
안정 |
| REST API |
Crow 기반 RESTful API |
안정 |
| DICOMweb |
WADO-RS, STOW-RS, QIDO-RS |
안정 |
| AI 통합 |
AI 서비스 커넥터, 결과 처리 (SR/SEG) |
안정 |
| 클라우드 스토리지 |
S3/Azure 클라우드 백엔드 |
안정 |
| 보안 |
RBAC, 익명화 (PS3.15), 디지털 서명, TLS |
안정 |
| 워크플로우 |
자동 프리페치, 작업 스케줄러, 연구 잠금 |
안정 |
| 컴파일러 |
최소 버전 |
비고 |
| GCC |
13+ |
network_system 전이 의존성 |
| Clang |
17+ |
network_system 전이 의존성 |
| Apple Clang |
14+ |
std::jthread 제한 (자동 fallback) |
| MSVC |
2022+ |
std::min/std::max 괄호화 필요 |
| 코덱 |
의존성 |
목적 |
| JPEG |
libjpeg-turbo |
JPEG Baseline/Lossless |
| JPEG 2000 |
OpenJPEG |
JPEG 2000 압축 |
| JPEG-LS |
CharLS |
JPEG-LS 압축 |
| HTJ2K |
OpenJPH |
High-Throughput JPEG 2000 |
# 빌드
cmake -S . -B build
cmake --build build
# 테스트 실행
cd build && ctest --output-on-failure --timeout 120
# CLI 도구 실행
./build/bin/pacs_store --help
./build/bin/pacs_query --help
# 빌드 스크립트
./scripts/build.sh --debug --tests
# 또는 CMake 직접
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build
| 옵션 |
기본값 |
설명 |
PACS_BUILD_TESTS |
ON |
Catch2 단위 테스트 |
PACS_BUILD_EXAMPLES |
OFF |
32개 예제 프로그램 |
PACS_BUILD_STORAGE |
ON |
SQLite3 스토리지 |
PACS_BUILD_CODECS |
ON |
압축 코덱 |
PACS_WITH_OPENSSL |
ON |
TLS/SSL 지원 |
PACS_WITH_REST_API |
ON |
REST API (Crow) |
PACS_WITH_AWS_SDK |
OFF |
AWS S3 클라우드 스토리지 |
PACS_WITH_AZURE_SDK |
OFF |
Azure 클라우드 스토리지 |
+------------------------------------------------------------------+
| PACS System |
+------------------------------------------------------------------+
| REST API | DICOMweb | Web UI | AI Svc | Workflow |
| (Crow) | WADO/STOW| (React) | Connector | Scheduler |
+------------------------------------------------------------------+
| Services (Storage/Query/Retrieve/Worklist/MPPS/Commit/Print) |
+------------------------------------------------------------------+
| Network (PDU/Association/DIMSE) + Security (RBAC/TLS/Anon) |
+------------------------------------------------------------------+
| Core (Tag/Element/Dataset/File) + Encoding (VR/Codecs/SIMD) |
+------------------------------------------------------------------+
| kcenon Ecosystem (common + container + network + thread + logger)|
+------------------------------------------------------------------+
| 라이브러리 |
설명 |
pacs_core |
태그, 요소, 데이터셋, Part 10 파일 I/O, 사전 |
pacs_encoding |
VR 타입, 전송 구문, 압축 코덱 |
pacs_security |
RBAC, 익명화, 디지털 서명, TLS |
pacs_network |
PDU, Association 상태 머신, DIMSE, 파이프라인 |
pacs_client |
작업/라우팅/동기/프리페치/원격 노드 관리 |
pacs_services |
SCP/SCU 구현, SOP 클래스 레지스트리, IOD 검증기 |
pacs_storage |
파일 스토리지, SQLite 인덱싱, 클라우드 (S3/Azure), HSM |
pacs_ai |
AI 서비스 커넥터, 결과 처리 (SR/SEG) |
pacs_monitoring |
헬스 체크, Prometheus 메트릭 |
pacs_workflow |
자동 프리페치, 작업 스케줄러, 연구 잠금 |
pacs_web |
REST API (Crow), DICOMweb (WADO/STOW/QIDO) |
pacs_integration |
kcenon 에코시스템 어댑터 |
| 카테고리 |
SOP 클래스 |
| 검증 |
C-ECHO (Verification) |
| 스토리지 |
CT, MR, US, XA, NM, PET, RT, SR, SEG, MG, CR, SC |
| Query/Retrieve |
Patient Root, Study Root |
| 워크플로우 |
Modality Worklist, MPPS, Storage Commitment |
| 인쇄 |
Print Management |
| 기타 |
UPS, PIR, XDS-I.b |
| 구문 |
설명 |
| Implicit VR Little Endian |
기본 전송 구문 |
| Explicit VR Little Endian |
명시적 VR |
| JPEG Baseline / Lossless |
손실/무손실 JPEG |
| JPEG 2000 |
웨이블릿 기반 압축 |
| JPEG-LS |
근무손실 JPEG |
| RLE |
런 길이 인코딩 |
| HTJ2K |
고처리량 JPEG 2000 |
| HEVC |
H.265 비디오 코딩 |
전체 DICOM Upper Layer association 관리를 구현합니다. PDU 인코딩/디코딩, A-ASSOCIATE, A-RELEASE, A-ABORT 처리를 포함합니다.
| 도구 |
설명 |
pacs_store |
DICOM 파일 전송 (C-STORE SCU) |
pacs_query |
DICOM 쿼리 (C-FIND SCU) |
pacs_retrieve |
DICOM 검색 (C-MOVE/C-GET SCU) |
pacs_echo |
연결 검증 (C-ECHO SCU) |
| API |
라이브러리 |
설명 |
dicom_dataset |
pacs_core |
DICOM 데이터셋 조작 |
dicom_file |
pacs_core |
Part 10 파일 읽기/쓰기 |
association |
pacs_network |
DICOM Association 관리 |
storage_scp |
pacs_services |
Storage SCP 서비스 |
query_scu |
pacs_services |
Query SCU 서비스 |
rest_server |
pacs_web |
REST API 서버 |
wado_handler |
pacs_web |
WADO-RS 핸들러 |
| 예제 |
난이도 |
설명 |
| echo_scu |
초급 |
C-ECHO 연결 테스트 |
| store_scu |
초급 |
DICOM 파일 전송 |
| query_retrieve |
중급 |
Query/Retrieve 워크플로우 |
| dicomweb_client |
중급 |
DICOMweb API 사용 |
| full_pacs_server |
고급 |
전체 PACS 서버 구성 |
| 메트릭 |
값 |
| 테스트 수 |
1,980+ |
| 테스트 파일 |
141+ |
| 통과율 |
100% |
- 다중 플랫폼 CI/CD (Ubuntu GCC/Clang, macOS, Windows MSVC)
- ThreadSanitizer / AddressSanitizer / UBSanitizer 클린
- DCMTK 상호운용성 테스트
- CVE 스캔, SBOM 생성
- 정적 분석, 퍼징
common_system (Tier 0) [필수] -- Result<T>, IExecutor
container_system (Tier 1) [필수] -- DICOM 직렬화
thread_system (Tier 1) [network_system 경유]
logger_system (Tier 2) [network_system 경유]
monitoring_system (Tier 2) [선택, network_system 경유]
database_system (Tier 3) [선택]
network_system (Tier 4) [필수] -- TCP/TLS, 비동기 I/O
pacs_system (Tier 5) <-- 이 프로젝트
| 어댑터 |
에코시스템 컴포넌트 |
목적 |
| network_adapter |
network_system |
TCP/TLS 전송 |
| container_adapter |
container_system |
데이터 직렬화 |
| logger_adapter |
logger_system |
로깅 |
| monitoring_adapter |
monitoring_system |
메트릭/헬스 체크 |
| database_adapter |
database_system |
인덱스 DB |
| 플랫폼 |
컴파일러 |
상태 |
| Linux |
GCC 13+, Clang 17+ |
완전 지원 |
| macOS |
Apple Clang 14+ |
완전 지원 |
| Windows |
MSVC 2022+ |
완전 지원 |
기여를 환영합니다! 자세한 내용은 기여 가이드를 참조하세요.
- 리포지토리 포크
- 기능 브랜치 생성
- 테스트와 함께 변경 사항 작성
- 로컬에서 테스트 실행
- Pull Request 열기
이 프로젝트는 BSD 3-Clause 라이선스에 따라 배포됩니다 - 자세한 내용은 LICENSE 파일을 참조하세요.
Made with ❤️ by 🍀☀🌕🌥 🌊