C-STORE
C-STORE (DICOM Storage Service)
1. 개요
C-STORE는 DICOM(Digital Imaging and Communications in Medicine) 표준에서 정의한 저장 서비스로, 의료 영상 데이터인 인스턴스(Instance)를 네트워크를 통해 전송하고 저장 장치에 기록하기 위한 핵심 통신 서비스이다. 이 서비스의 주 목적은 모달리티(Modality, 영상 획득 장치)에서 생성된 의료 영상을 PACS(Picture Archiving and Communication System, 영상 저장 전송 시스템)나 다른 DICOM 호환 장치로 안전하게 전송하여 보관 및 공유하는 것이다.
2. 사전 준비: C-ASSOCIATE 협상 과정
C-STORE 요청을 보내기 전, 두 DICOM 엔티티는 반드시 Association(연결) 과정을 거쳐야 한다. 이는 TCP/IP 연결 위에 DICOM 계층의 논리적 연결을 설정하는 단계이다.
- A-ASSOCIATE-RQ (요청): SCU가 SCP에게 연결을 요청하며, 자신이 지원하는 Abstract Syntax(SOP Class)와 Transfer Syntax(전송 구문) 목록을 제안한다.
- A-ASSOCIATE-AC (응답): SCP는 제안된 목록 중 자신이 수용 가능한 항목을 선택하여 응답한다.
- 협상 완료: 양측이 합의한 SOP Class와 Transfer Syntax가 결정되면, 비로소 C-STORE-RQ 메시지를 주고받을 수 있는 상태가 된다.
3. 핵심 개념: SOP Class 및 Transfer Syntax
C-STORE의 정확한 동작을 이해하기 위해서는 DICOM의 객체 모델과 전송 방식을 이해해야 한다.
3.1 SOP Class (Service-Object Pair Class)
SOP Class는 '어떤 서비스(Service)'를 '어떤 데이터 객체(Information Object Definition)'에 적용할 것인지를 정의한 식별자이다. - 구성: $\text{SOP Class} = \text{Service (C-STORE)} + \text{Information Object (예: CT Image Storage)}$ - 역할: SCP는 자신이 어떤 SOP Class(예: MRI, CT, Ultrasound 등)를 저장할 수 있는지 정의하며, SCU는 전송하려는 데이터의 SOP Class가 SCP에 의해 지원되는지 확인해야 한다.
주요 SOP Class UID 예시
| SOP Class Name | SOP Class UID | 설명 |
|---|---|---|
| CT Image Storage | 1.2.840.10008.5.1.4.1.1.2 |
컴퓨터 단층촬영 영상 저장 |
| MR Image Storage | 1.2.840.10008.5.1.4.1.1.4 |
자기공명영상 저장 |
| Ultrasound Image Storage | 1.2.840.10008.5.1.4.1.1.6.1 |
초음파 영상 저장 |
| Digital X-Ray Image Storage | 1.2.840.10008.5.1.4.1.1.1 |
디지털 엑스레이 영상 저장 |
3.2 Transfer Syntax (전송 구문)
Transfer Syntax는 데이터가 네트워크를 통해 전송될 때의 인코딩 방식을 정의한다. - Little Endian vs Big Endian: 바이트 순서 결정. - Implicit vs Explicit VR: 데이터 타입(Value Representation) 정보를 명시적으로 포함할지 여부. - 압축 방식: JPEG Lossless, JPEG 2000 등 압축 알고리즘 적용 여부.
4. 동작 원리 및 프로세스
C-STORE는 클라이언트-서버 모델을 따르며, 요청을 보내는 SCU(Service Class User)와 요청을 받아 처리하는 SCP(Service Class Provider)로 나뉜다.
SCU와 SCP의 역할 비교
| 구분 | SCU (Service Class User) | SCP (Service Class Provider) |
|---|---|---|
| 역할 | 데이터 전송 요청자 (Client) | 데이터 수신 및 저장자 (Server) |
| 주요 동작 | C-STORE-RQ 메시지 생성 및 전송 | 메시지 수신, 데이터 검증 및 디스크 저장 |
| 예시 장치 | CT, MRI, 초음파 진단기, DICOM 뷰어 | PACS 서버, VNA (Vendor Neutral Archive) |
데이터 전송 흐름
- Association 설정:
A-ASSOCIATE과정을 통해 통신 규격 합의. - 전송 요청: SCU가
C-STORE-RQ메시지에 DICOM 데이터셋(Dataset)을 담아 전송. - 처리 및 저장: SCP가 데이터를 수신하여 무결성을 검사하고 저장소에 기록.
- 결과 응답: SCP가
C-STORE-RSP메시지를 통해 성공 또는 실패 여부를 회신. - 연결 해제: 모든 전송이 완료되면
A-RELEASE를 통해 연결 종료.
5. 메시지 구조 및 통신 과정
C-STORE 통신은 요청(Request)과 응답(Response)의 쌍으로 이루어진다.
5.1 C-STORE-RQ (Request)
SCU가 SCP에게 보내는 메시지로, 다음과 같은 핵심 파라미터를 포함한다. - Affected SOP Class UID: 전송되는 데이터의 종류 (예: CT Image Storage UID). - SOP Instance UID: 해당 영상 인스턴스의 고유 식별자. - Dataset: 환자 정보, 검사 정보, 영상 픽셀 데이터가 포함된 실제 DICOM 파일 내용.
5.2 C-STORE-RSP (Response)
SCP가 처리를 완료한 후 보내는 응답 메시지로, Status(상태 코드)가 가장 중요하다.
전송 상태 코드 표
| 상태 코드 (Hex) | 의미 | 설명 |
|---|---|---|
0000 |
Success | 데이터가 정상적으로 수신되고 저장됨 |
0100 ~ 01FF |
Warning | 저장은 되었으나 일부 주의사항이 있음 (예: 중복 데이터) |
A000 ~ AFFF |
Refused | SCP가 해당 SOP Class를 지원하지 않거나 수신을 거부함 |
C000 ~ FFFF |
Error | 네트워크 장애, 디스크 공간 부족, 데이터 손상 등으로 저장 실패 |
5.3 통신 시퀀스 다이어그램
sequenceDiagram
participant SCU as SCU (Modality)
participant SCP as SCP (PACS)
Note over SCU, SCP: [Association Phase]
SCU->>SCP: A-ASSOCIATE-RQ (SOP Class, Transfer Syntax 제안)
SCP-->>SCU: A-ASSOCIATE-AC (합의된 규격 응답)
Note over SCU, SCP: [Storage Phase]
SCU->>SCP: C-STORE-RQ (SOP Instance UID, Dataset)
Note right of SCP: 데이터 무결성 검사 및 저장
SCP-->>SCU: C-STORE-RSP (Status: 0000 Success)
Note over SCU, SCP: [Release Phase]
SCU->>SCP: A-RELEASE-RQ
SCP-->>SCU: A-RELEASE-RSP
6. 전송 제어 및 예외 처리
실제 의료 환경에서는 대용량 데이터 전송 중 다양한 변수가 발생하며, 이를 처리하기 위한 메커니즘이 필요하다.
- PDU(Protocol Data Unit) 분할 전송: DICOM 데이터는 한 번에 전송되지 않고 PDU라는 단위로 분할되어 전송된다. Association 단계에서 협상되는
Max PDU Size는 네트워크의 대역폭과 SCP의 메모리 사용량에 직접적인 영향을 미치며, 너무 크면 메모리 부하가 발생하고 너무 작으면 오버헤드가 증가한다. - 네트워크 오류: TCP 연결이 끊어질 경우, SCU는 Association을 재설정하고 전송되지 않은 인스턴스부터 재전송(Retry)을 시도한다.
- 저장 공간 부족: SCP가
Out of Resources(상태 코드C000계열)를 반환하면, SCU는 전송을 중단하고 관리자에게 알림을 보낸다. - 데이터 무결성 검증: SCP는 수신된 데이터셋의 필수 태그(Required Tags) 누락 여부를 확인하며, 전송 중 데이터 변조가 의심될 경우 오류를 반환하여 재전송을 유도한다.
7. 실제 활용 사례 및 워크플로우
가장 전형적인 사례는 모달리티에서 PACS로 영상을 전송하는 과정이다.
[워크플로우] $\text{CT 촬영 완료} \rightarrow \text{모달리티 내 임시 저장} \rightarrow \text{PACS와 Association 설정} \rightarrow \text{C-STORE-RQ 전송} \rightarrow \text{PACS 저장 및 C-STORE-RSP 응답} \rightarrow \text{전송 완료 표시}$
C-STORE 요청 의사코드 (Pseudo-code)
# DICOM 라이브러리를 이용한 C-STORE 전송 예시
import pydicom
from pynetdicom import AE
# 1. Application Entity (AE) 설정
ae = AE()
# CT Image Storage SOP Class UID 추가
ae.add_requested_context('1.2.840.10008.5.1.4.1.1.2')
# 2. SCP(PACS)와 Association 연결 시도
assoc = ae.associate('192.168.0.100', 104, ae_title='PACS_SERVER')
if assoc:
# 3. 전송할 DICOM 파일 로드
ds = pydicom.dcmread('patient_ct_image.dcm')
# 4. C-STORE-RQ 요청 전송
status = ae.store(ds, assoc)
if status == 0x0000:
print("전송 성공: Success")
else:
print(f"전송 실패: Status Code {status}")
# 5. 연결 해제
assoc.release()
8. 관련 서비스와의 비교
C-STORE는 단독으로 사용되기보다 C-FIND, C-MOVE/C-GET과 함께 유기적으로 작동한다.
C-STORE vs C-MOVE vs C-GET 비교
| 구분 | C-STORE | C-MOVE | C-GET |
|---|---|---|---|
| 목적 | 데이터 전송 및 저장 | 데이터 전송 요청 (Push) | 데이터 요청 및 수신 (Pull) |
| 데이터 흐름 | $\text{SCU} \rightarrow \text{SCP}$ | $\text{SCU} \rightarrow \text{SCP} \rightarrow \text{Destination SCU}$ | $\text{SCU} \leftrightarrow \text{SCP}$ |
| 특징 | 실제 데이터를 실어 나르는 서비스 | "저 영상을 저기로 보내라"는 명령 | "저 영상을 나에게 달라"는 요청 |
| 관계 | C-MOVE/C-GET의 최종 단계에서 호출됨 | C-STORE를 유발하는 트리거 역할 | 단일 Association 내에서 요청과 수신이 모두 이루어짐 |
이 문서는 AI 모델(gemma-4-31b)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.