DICOM Viewer 와 PACS

DICOM 2022. 6. 15. 11:01

DICOM 이미지 뷰어는 어떻게 PACS에서 이미지를 가져오는 것일까?
"뭐 그냥 Socket 연결해서 통신 하는거 아냐?" 단순히 이렇게 생각할 수도 있는데...
우리의 친구 DICOM은 역시나 많은 부분을 정의하고 있습니다.
아래의 그림을 기준으로 설명해 보려고 합니다.

당연히 처음에는 초음파, X-Ray, CT, MRI 등에서 C-STORE 요청을 사용해서 DICOM 영상을 PACS로 보냅니다.
우선 DICOM이미지 뷰어는 PACS로부터 가져올 이미지를 검색해야 하는데 이것은 위 그림에서 C-FIND 요청으로 할 수 있습니다.

DICOM 이미지 뷰어가 이미지를 요청하는 방법

가져올 이미지를 정했다면 실제로 이미지를 가져와야 하는데 이때에 2 가지 방법이 있습니다.
C-GET을 이용하는 방법과 C-MOVE 를 이용하는 방법입니다.

1. C-GET 을 이용하는 방법

DICOM Client(SCU) 즉 이미지 뷰어가 C-GET을 요청하면 뷰어(SCU) 와 PACS(SCP) 사이에 1개의 TCP Socket 연결이 이루어 집니다.
C-GET 요청에 의한 연결은 계속 유지되고 SCP(PACS) 는 해당 연결을 통해서 DICOM Image를 전송해 줍니다. 여기까지 보면 아주 평범해 보이고 당연히 그럴거 같습니다.
이 방법의 문제는 뷰어(SCU)가 이미지 1개를 요청하든 1000개를 요청하든 그 연결이 계속 유지되어야 한다는 것입니다.
SCP는 SCU로 부터의 연결을 점유 당한채 계속 유지하고 있어야 하구요.
Network programming 에서 일반적으로 서버가 하나의 Client에게 연결을 지속적으로 맺을 수 있게 하는 것은 성능상 매우 바람직하지 않습니다. 1000 개의 Client가 동시에 연결을 요청하면 그대로 받아야 하니까 문제가 생길 수 밖에 없습니다.
따라서 C-GET 방법은 잘 사용하지 않습니다.

2. C-MOVE를 이용하는 방법

C-MOVE는 뷰어(SCU)가 PACS(SCP)로 TCP 연결을 요청하고 처음에 "이런 이미지를 나에게 보내줘!" 라고 요청만 합니다. 그런데 C-GET과는 다르게 요청만 하고 끝입니다.
그러면 PACS는 뷰어에게 이미지를 보내는데, 문제는 뷰어가 연결한 TCP socket으로 보내지 않고 PACS가 뷰어로 새로운 TCP 연결을 하여 이미지를 보냅니다. 이때는 뷰어가 C-STORE를 처리하는 SCP(서버)역할을 할 수 있어야 합니다.
즉, PACS 와 뷰어 사이에는 2개의 TCP 연결이 생기게 됩니다.
1. 뷰어(클라이언트) ---( TCP 연결 요청 ) ---> PACS(서버)
2. PACS(클라이언트) ---( TCP 연결 요청 ) ---> 뷰어(서버)
즉, C-MOVE로 Retrieve를 요청하는 경우에는 뷰어와 PACS 양쪽이 모두 서버, 클라이언트 역할을 동시에 하게 되어 뷰어는 C-STORE를 받아서 처리하는 SCP 역할을 할 수 있어야 합니다.

그러므로 2번 과정(PACS 가 뷰어로 연결)을 위해서 처음에(1번 과정) 뷰어는 목적지 정보를 PACS에게 넘겨줘야 합니다.
그래서 1번 과정에 Move destination 이라는 걸 PACS로 알려 줍니다. 위 그림에서는 뷰어 자신의 AE title을 의미합니다. 참고로 이 목적지가 자신이 아닌 다른 시스템의 AE title일 수도 있습니다.
즉, "PACS야 이미지를 나한테 보낼때에 내가 보내준 AE title(목적지) 로 보내줘!" 라고 요청하는 것입니다.
그러면 PACS가 2번 과정을 수행 하는 것입니다.

이것의 장점은 PACS가 자신의 작업을 관리할 수가 있다는 것입니다.
병원에서 PACS는 매우 중요한 시스템이기 때문에 항상 동작하고 있어야 하며 down 되어서도 안되고 한 쪽의 요청만 처리해도 안됩니다.
그렇기 때문에 C-MOVE를 사용하게 되면 PACS의 입장에서는 많은 작업들을 스스로 관리할 수 있게 되는 것입니다.
요청이 너무 많아서 바쁜 경우는 조금 미뤄두고 나중에 처리할 수 있게 되는 것입니다.

C-MOVE 사용시 주의할 점

C-MOVE 요청시 양쪽이 SCP, SCU 역할을 동시에 하기 때문에 만약 PACS가 C-STORE를 뷰어에 보낼때에 PACS와 다른 subnet 안에 있으면 C-STORE 가 동작하지 않습니다. PACS가 subnet 안에 있는 뷰어의 IP addres를 알 수가 없기 때문입니다. 물론 Port forwarding 을 하면 되겠지만 뷰어 하나만을 위해서 그렇게 하는 것은 바람직하지 않아 보입니다.

DICOM에서는 위와 같은 서비스를 Query/Retrieve Service Class 라고 정의합니다.

즉, 이미지를 요청하고 받는 방법에 대한 서비스를 의미합니다.

간혹 어떤 개발자는 "DICOM 이미지 뷰어(DICOM Client)를 이런 이런 식으로 만들어 볼까?" 하고 얘기합니다.
그런데 말이죠 PACS를 이용할 거면 protocol을 임의로 만들거나 하면 안되고 반드시 DICOM 표준을 따라야 합니다.

728x90
반응형

'DICOM' 카테고리의 다른 글

IHE Integration Profile  (0) 2022.06.17
Storage Commitment  (0) 2022.06.15
DICOM Multi-frame Image  (0) 2022.06.15
DICOM file의 저장  (0) 2022.06.15
DICOM Private Data Element  (0) 2022.06.14
admin