개발/DICOM 이야기

18. DICOM 통신 구조 – C-STORE, C-FIND, C-MOVE의 의미

devbake 2025. 7. 29. 18:00

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 전송 형식 (압축 여부, 바이트 순서 등)
DICOM은 TCP/IP 기반의 통신을 사용하며, 요청과 응답은 DIMSE(DICOM Message Service Element) 메시지로 이루어진다.

이어서 설명할 C-STORE, C-FIND, C-MOVE 등이 이 DIMSE 메세지에 해당한다. 

 

2. C-STORE – 파일 전송 명령

개요

  • 목적: 클라이언트에서 서버(PACS 등)로 DICOM 파일을 전송
  • 흐름:
    1. 연결 요청 (Association Request)
    2. 전송 명령 (C-STORE)
    3. 응답 수신 (C-STORE Response)
    4. 연결 종료 (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 – 서버 내 검색 명령

DICOM 통신 구조 – C-STORE, C-FIND, C-MOVE의 의미

개요

  • 목적: 서버에 특정 조건의 환자, Study, Series 등을 검색 요청
  • 흐름:
    1. 검색 조건 전송 (예: 환자 이름 = KIM*)
    2. 서버가 조건에 맞는 Study 목록 반환
    3. 클라이언트가 해당 결과를 파싱하여 선택

예시 검색 조건

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를 서버에서 클라이언트로 전송 요청
  • 흐름:
    1. 클라이언트가 C-MOVE 요청
    2. 서버는 내부 검색 후, 대상 이미지를 지정된 AE Title로 전송 (C-STORE를 이용해)
    3. 클라이언트는 별도 포트를 열어 대기

📌 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 설치 및 연동 실습을 다룰 예정이다.