DICOM은 단순히 파일 포맷이 아니라, 의료영상을 서버 간 교환하고 조회하는 통신 프로토콜까지 포함한 복합 표준이다.
병원 내부에서는 CT, MRI 장비에서 생성된 DICOM 파일이 PACS 서버로 전송되고, 의사는 이 서버에서 환자의 검사 결과를 조회하며, AI 시스템은 특정 조건의 영상을 자동으로 가져와 학습에 활용한다.
이 모든 과정은 DICOM 통신 명령(C-STORE, C-FIND, C-MOVE 등)을 통해 이루어진다.
이번 글에서는 각 명령어의 역할과 흐름, 그리고 서버-클라이언트 간 통신 구조를 정리하고, 실제 PACS 연동이나 DICOM 자동화 시스템 개발에 어떻게 적용되는지를 설명한다.
1. DICOM 통신의 기본 구조
DICOM 통신은 Application Entity (AE) 간의 상호작용으로 이루어진다.
AE는 클라이언트 또는 서버의 논리적 단위이며, 통신 시 아래 요소들이 필요하다:
항목 | 설명 |
AE Title | 통신 노드의 고유 이름 (예: PACS01, ORTHANC) |
Host | IP 주소 (예: 127.0.0.1) |
Port | TCP 포트 번호 (예: 104, 4242) |
SOP Class | 어떤 유형의 데이터인지 (예: CT 이미지, Worklist 등) |
Transfer Syntax | 전송 형식 (압축 여부, 바이트 순서 등) |
이어서 설명할 C-STORE, C-FIND, C-MOVE 등이 이 DIMSE 메세지에 해당한다.
2. C-STORE – 파일 전송 명령
개요
- 목적: 클라이언트에서 서버(PACS 등)로 DICOM 파일을 전송
- 흐름:
- 연결 요청 (Association Request)
- 전송 명령 (C-STORE)
- 응답 수신 (C-STORE Response)
- 연결 종료 (Release)
예시 상황
- CT 장비 → PACS로 영상 업로드
- DCMTK 또는 Python에서 서버로 테스트 전송
예시 명령어 (DCMTK):
storescu -aec PACS01 -aet CLIENT01 127.0.0.1 4242 sample.dcm
C-STORE는 말 그대로 DICOM 파일을 저장(Store) 요청하는 구조로,
전송 성공 여부는 응답 메시지 내 Status Code (0: 성공)로 확인한다.
3. C-FIND – 서버 내 검색 명령
개요
- 목적: 서버에 특정 조건의 환자, Study, Series 등을 검색 요청
- 흐름:
- 검색 조건 전송 (예: 환자 이름 = KIM*)
- 서버가 조건에 맞는 Study 목록 반환
- 클라이언트가 해당 결과를 파싱하여 선택
예시 검색 조건
findscu -k 0010,0010="KIM*" 127.0.0.1 4242
- (0010,0010)은 Patient's Name
- 와일드카드 * 사용 가능
- 검색 수준(Level)은 Patient / Study / Series / Image 단계로 설정 가능
📌 C-FIND는 서버가 소유한 메타데이터 목록을 조회하는 역할만 수행하며,
이미지를 직접 가져오지는 않는다.
4. C-MOVE – 이미지 가져오기 명령
개요
- 목적: 특정 Study 또는 Series를 서버에서 클라이언트로 전송 요청
- 흐름:
- 클라이언트가 C-MOVE 요청
- 서버는 내부 검색 후, 대상 이미지를 지정된 AE Title로 전송 (C-STORE를 이용해)
- 클라이언트는 별도 포트를 열어 대기
📌 C-MOVE는 요청은 클라이언트가 하지만, 전송은 서버가 클라이언트에게 PUSH하는 구조다.
예시 명령어:
movescu -aec PACS01 -aet CLIENT01 -k 0010,0020="P123456" 127.0.0.1 4242
- (0010,0020)은 Patient ID
C-MOVE를 정상적으로 사용하려면
클라이언트 측에도 C-STORE를 수신할 수 있는 DICOM 수신 서버가 구동 중이어야 한다.
5. C-GET – 요청과 수신을 동일 연결로 처리
개요
- C-MOVE의 대안 명령
- 요청과 수신을 동일 연결에서 처리하므로 설정이 단순
- 단점: 성능이 떨어지고 병원 환경에서는 거의 사용되지 않는 추
6. 구조 비교 요약
명령어 | 역할 | 전송 방향 | 특징 |
C-STORE | 이미지 업로드 | 클라이언트 → 서버 | CT → PACS 등 |
C-FIND | 목록 조회 | 클라이언트 → 서버 → 응답 | 환자/검사 검색 |
C-MOVE | 이미지 요청 | 서버 → 클라이언트 | 결과는 C-STORE로 전송 |
C-GET | 이미지 요청 | 클라이언트 ← 서버 (동일 채널) | 테스트용 또는 제한된 환경에서 사용 |
7. 실무 활용 시 주의 사항
- AE Title 불일치: 서버에서 허용한 AE Title이 아니면 연결 거부됨
- 포트 차단: 병원 내 방화벽 또는 보안 정책으로 특정 포트 전송 실패
- Transfer Syntax 불일치: 압축 형식이 서버와 클라이언트 간 호환되지 않을 경우 수신 실패
- 접속 인증: 일부 PACS는 인증 계정 또는 인증서 기반 접속이 필요함
결론
DICOM 통신은 단순한 파일 저장이 아닌, 서버-클라이언트 간 정보 교환, 조건 검색, 이미지 전송이 모두 가능한 구조로 설계되어 있다.
이를 가능하게 하는 명령어가 바로 C-STORE, C-FIND, C-MOVE이며, 이들의 개념과 흐름을 명확히 이해하면 PACS 연동, 데이터 자동화, 서버 테스트 등의 모든 작업에서 보다 안정적이고 효율적인 개발과 운영이 가능하다.
다음 글에서는 실제 PACS 서버를 구성할 수 있는 오픈소스 툴 Orthanc 설치 및 연동 실습을 다룰 예정이다.
'개발 > DICOM 이야기' 카테고리의 다른 글
20. PACS란 무엇인가 – 병원 영상 관리 시스템의 핵심 개념 (3) | 2025.07.29 |
---|---|
19. DICOM 서버와 클라이언트의 동작 방식 이해 (0) | 2025.07.29 |
17. DICOM 이미지 PNG, JPEG로 변환하기 (Python 예제 포함) (0) | 2025.07.29 |
16. Pydicom 입문 – Python으로 DICOM 파일 읽고 쓰기 (0) | 2025.07.29 |
15. DCMTK 사용법 – 명령어 기반 DICOM 도구 활용하기 (1) | 2025.07.29 |