Author: byun1114

  • Orthanc DICOM 서버

    필요에 의해서 DICOM 서버를 구축해야 했다. 필요한 이유는 많은 PACS 이미지를 전송 받아서 분석에 이용하기 위해서는 DICOM 포맷으로만 가능하다고 한다. 이게 단순히 dcm 파일로만 전송해 줄 수 있다는 것이 아니다. DICOM 이라는 규격을 준수하면 파일을 주고 받을 수 있다는 것이다. 즉, DICOM 서버가 필요하다는 소리이다. 인터넷 검색을 통하여 몇 개를 찾을 수 있었는데, 그 중에서 Orthanc 가 Rest API도 지원이 되고, 오픈 소스이기 때문에 사용을 해보았다.

    처음에는 Docker에서 진행하여 보았다. 홈페이지에서도 도커를 언급하고 있으므로, 안되는 것은 아니다. 다만, 완전 초보인 경우에는 설정 파일을 수정하기 전까지는 localhost의 web에서 접속을 함으로써 성공 여부를 평가할 수 있다. 급한 것은 아니나 프로그램에 익숙해 진 이후에 하면 되는 것이라서 이럴 때마다 희생되는 나의 옛 데탑 PC에 Ubuntu Desktop을 설치한 이후에 프로그램을 실행하였다.

    Debian이나 Ubuntu repository에 등록된 프로그램이기 때문에 설치는 간단하다. 일단은 관련 플러그인도 다 설치하여 보았다.

    $ sudo apt install orthanc orthanc-*

    기본 설정으로 DICOM 포트는 4242이며, web이나 rest api 포트는 8042이다. 병원 PACS에서 파일 전송을 위한 SCP 등록을 위해서 업체 관리자에게 부탁해서 등록을 했다. 알려주어야 하는 것은 이름(title), IP, 포트이다. 이렇게 등록이 되면 PACS에서 send 를 클릭하는 것으로 한 방에 보낼 수 있다.

    기본 설치를 하게 되면 /usr/sbin 에 Orthanc라는 실행 파일이 설치가 된다. 그리고 이는 /etc/init.d/orthanc 라는 스크립트에 의하여 관리가 된다. 상태를 보면 다음과 같다.

    $ sudo systemctl status orthanc
    ...
    CGroup: /system.slice/orthanc.service
             /usr/sbin/Orthanc --logdir=/var/log/orthanc /etc/orthanc/

    Orthanc는 JSON 포맷으로 설정을 관리한다. 그리고 특정 파일을 지정할 수 있다. 폴더를 지정하면 폴더 내의 모든 파일을 합하여 인식이 된다고 한다. 즉, /etc/orthanc/ 에 있는 파일이 설정 파일이다. localhost 이외의 컴퓨터에서 접속을 하기 위해서는 /etc/orthanc/orthanc.json 파일을 수정해야 한다. 기본 설정인 상태에서 다음의 부분을 수정한다. 설정 파일에 보면 나와 있지만 사용자 계정과 비밀번호는 plain text로 저장이 되므로, 그냥 예시에서 주석을 해제하여 이용하였다. 그리고 서비스를 재시작하면 다른 PC에서도 접속할 수 있다.

    ...
    "RemoteAccessAllowed" : true,
    ...
    "AuthenticationEnabled" : true,
    ...
    "RegisteredUsers": {
    "ID": "PW"
    }

  • 호라티우스의 시학, 김남우 옮김

    카르페 디엠으로 유명한 그 분이다. 그래서 그 책 인줄 알고 빌려 보았는데, 그것은 아니었다. 시로서 굉장히 유명한 분이라고 하는데.. 그 ‘시’를 보지 못했으니 그건 일단 논외로 하고, 인상 깊은 구절을 인용해 보겠다.

    세월이 포도주처럼 시를 좋게 만든다면
    글에 얼마의 세월이 좋은 가치를 가져옵니까?
    죽은 지 이제 백 년 된 시인은 어찌 나눕니까?
    완벽한 옛것입니까? 어설픈 새것입니까?
    정확히 몇 년으로 정하면 논쟁이 끝나리다.
    “백 년이 넘은 것은 탁월한 옛것입니다.”

    그럼 백 년에서 일 년 아니 한 달이 모자란다면
    어찌 됩니까? 탁월한 옛것입니까?
    지금 혹 장차도 무사할 것입니까?
    “작은 한 달 혹은 가득 일 년 모자라는 것은
    마땅히 훌륭한 옛것으로 보아야겠지요.”

    아우구스투스에게 보내는 편지

    “욕심이 없으시다? 떠나시오. 어떄요? 탐욕과 함께
    다른 오류들도 사라졌소? 당신 가슴속에 헛된
    쓸데없는 야심은? 적움의 공포나 분노는 없으시오?
    불면, 끔찍한 마법, 기괴한 사건, 마녀들,
    밤의 유령들, 테살리아의 괴물은 웃어넘기시오?
    운명을 기쁘게 챙기며, 친구들을 용서하시오?
    나이 들어 늙어감에 부드럽고 온순해지시오?
    많은 잘못 중 어째 하날 들어내니 홀가분하쇼?
    옳게 살 줄 모른다면 아는 이들에게 맡기시오.
    댁은 놀 만큼 노셨고, 먹을 만큼, 마실 만큼 마시셨소.
    이제 그만 떠날 시간이오. 너무 많이 마셨다고
    더 잘 노는 세대가 조롱하고 몰아내지 않도록.”

    플로루스에게 보내는 편지

    영화 오블리비언에 탐 크루즈가 “공포스러운 적을 상대로 선조와 신들의 사원을 위해 싸우다 죽는것보다 더나은 죽음은 없나니” 라는 구절을 인용하는 부분이 있다. 그 때 호라티우스라는 이름을 처음 알게 된 것 같다. 그런데 알고 봤더니 그건 이름은 같고, 성은 다른 호라티우스였다. 그 책은 따로 신청해서 보도록 할 예정이다.

  • Docker 에서 Container 실행/시작시에 명령어가 실행되도록 하기

    Docker 이미지를 build 할 때에 CMD나 ENTRYPOINT를 이용하면 이미지를 실행할 때에 실행된다고 하는 글들이 많은데 이상하게 nginx나 apache, mysql 등은 통하지 않았다. 여러 글들을 찾아본 끝에 유일하게 성공한 방법은 .bashrc를 이용하는 것이다.

    이는 container의 기본 설정에서 bash를 실행하도록 되어 있다는 것을 이용한 것이다.

    따라서, NGINX 를 컴파일하여 설치한 경우 Image를 실행할 때에 nginx를 실행하도록 하기 위해서는 다음과 같은 내용을 /root/.bashrc 에 추가하여 준다.

    /usr/local/nginx/sbin/nginx

    Apache나 MariaDB를 실행하려고 하면 다음과 같이 한다.

    service apache2 start
    service mysql start
  • NGINX를 Reverse Proxy로 Apache를 Web으로 연결하기

    나의 프로젝트에서는 NGINX를 reverse proxy로 동작하게 할 것이다. 프로젝트용 홈페이지 구현은 중요하기 때문에 이를 우선적으로 구현해 보고자 하였다.

    나와 같은 초보자에게 이 부분은 꽤나 어렵다. 그 이유는 Client – Server (Web) 라는 단순한 구조가 아니기 때문이다. Client – NGINX – Web 으로 구성이 되어야 하는데 기본 설정으로만 따라가면 Web은 NGINX에서 오는 데이터로만 받아보기 때문이다. 잘 모르는 상태에서 글로만 표현하려니 힘든데, 이 부분의 설정을 수정하지 않으면 WordPress 기반으로 운영할 Web 서비스에서 링크가 blog.my-network으로 Client에게 제공이 된다. 당연히 Client는 Docker 밖에 있으니 저런 링크로는 서비스가 제대로 이루어질 수 없게 된다.

    우선 NGINX 가 있는 컨테이너의 nginx.conf 파일을 다음과 같은 설정으로 reverse proxy를 구성한다. WordPress를 설치한 컨테이너로는 8080 포트를 이용하도록 했다. proxy_pass 이외의 설정이 있어야 client 의 정보도 같이 전달이 된다고 한다.

    location / {
    	proxy_pass http://blog.my-network:8080;
    	proxy_set_header Host $host;
    	proxy_set_header X-Real_IP $remote_addr;
    	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    WordPress를 설치한 컨테이너에서 Apache의 ports.conf 파일을 수정하여 80포트가 아닌 8080 포트로 서비스 하도록 한다.

    Listen 8080

    Apache의 apache2.conf 파일을 수정한다. 왜 인지는 모르겠는데, 이렇게 하니까 되었다. ㅠ

    ServerName my-domain
    
    <VirtualHost my-domain:8080>
            ServerName my-domain:8080
            ServerAlias my-domain
    </VirtualHost>