Author: byun1114

  • Docker Network

    Docker에서 실행하는 컨테이너는 실행할 때마다 정해진 IP를 받아오는 것이 아니다. 따라서, 컨테이너를 재시작 하였을 때 이전과 동일한 IP를 받는다는 보장이 없다. 이럴 경우 컨터이너를 특정 network으로 지정하면 DNS와 비슷한 개념으로 이용할 수 있다.

    우선 network을 만든다. 예를 들어 my-network이라는 bridge를 만든다고 하자.

    # sudo docker network create my-network

    그 다음에는 컨테이너를 시작할 때에 –network 를 이용하여 설정한다. 다음의 예시는 my-debian-blog라는 이미지를 blog라는 이름으로 시작하면서 my-network이라는 bridge에 할당하는 것이다.

    # sudo docker run -itd \
            --name blog \
            --network my-network \
            my-debian-blog
    

    이 다음부터는 컨테이너에서 blog 컨테이너와 통신해야 할 경우 blog.my-network 라고 주소를 설정하고 진행하면 된다.

    이미 만들어진 컨테이어도 연결하거나 연결을 끊을 수 있다.

    # sudo docker network connect my-network 컨테이너
    # sudo docker network disconnect my-network 컨테이너
  • Docker Private Registry

    Debian 도커 이미지의 경우 apt update 부터 실행해야 할 정도로 날 것이기 때문에 최소한의 사용에 맞게 설정해야 할 필요가 있다. 이번에는 별도의 컴퓨터에 Registry를 설치해서 push와 pull 을 할 수 있도록 했다.

    인터넷에서 관련 정보를 찾으면 보통 registry 이미지를 5000번 포트를 이용해서 사용하는 예제들이 있다. 이를 따라해 보도록 한다.

    # sudo docker run --name private-repository -d -p 5000:5000 registry

    이미지를 build 할 때 IP 와 포트 등을 지정한다.

    # sudo docker build 192.168.88.250:5000/byun1114/my-debian

    Docker는 설치 단계에서 repository 의 정보를 받을 때 HTTPS를 이용한다. 그래서 그런지 build 할 때에도 기본적으로 https를 이용하는 것을 전제하고 있다. HTTPS를 이용하지 않는다면 오류가 발생한다. “http: server gave HTTP response to HTTPS client” 이런 오류 메세지가 나타나면 2가지 방법으로 해결할 수 있다고 하는데 그 중에 하나인 daemon.json 을 이용하는 방법을 사용하였다. 이 방법은 Docker 를 build 하는 컴퓨터에서 적용하는 것이다. 이 파일의 내용을 추가한 다음 Docker 를 재시작하고 build 하면 된다.

    /etc/docker/daemon.json
    {
        "insecure-registries": ["192.168.88.250:5000"]
    }
  • RxNorm 매핑하기

    한국의약품안전관리원에서 주관하는 MOA-CDM에 참여하고 있다. 약물에 대한 concept_id는 RxNorm 이나 RxNorm Extension 으로 해야 한다고 한다. EDI에서 ATC로 변환하는 것은 심평원에서 정기적으로 제공하는 파일이 있어서 어렵지 않은데 RxNorm으로 하려면 상당히 난감하다. 의약품안전관리원에서 일부 EDI 코드에 대한 concept_id 매핑 테이블은 제공하지만, 반수 이하만이 가능할 뿐이다. 그래서 RxNorm 으로 매핑을 진행하기로 했다. 유지 비용을 받으니 일을 해야 한다. ㅠ

    처음에는 아무런 concept_id를 하고 있었는데 확인해 봤더니 class를 ‘Clinical Drug’로 해야 한다고 한다. 이게 골 때리는 부분이다. 정리하면 다음과 같다.

    • 우선 약물 처방 코드로는 무슨 종류의 약물인지 알기가 매우 어렵다.
    • EDI에서 RxNorm 매핑에 대한 자료는 없다.

    이 2가지 부분은 난감한 부분이지만 좀 편하게 해결하기 위한 방법이 있다.

    • 그래도 다행인점은 약물 이름에 대한 정보가 있다는 점이다.
    • 약물 이름이 성분명에 가까우면 ‘Clinical Drug’ class에서 검색이 되는 경우가 있다.
    • 약물 이름으로 검색을 하면 ‘Branded Drug Comp’ class 에서 해당 내용을 찾을 수 있다. 약물 이름은 끝부분에 [약물이름] 형식으로 되어 있다.
    • 그리고 앞 부분에는 성분명, 용량이 제시된다. 이 다음이 중요한데 성분명, 용량이 제시되는 순서를 그대로 다시 concept_name에서 검색을 하면 ‘Clinical Drug’ class에 대부분 전방 일치로 정보가 있다는 것이다. 보통 추가되는 정보는 투여 경로와 제형으로 이 정보를 이용하면 추가로 확인할 수 있다.

    말로 하면 어려우니 캡쳐 화면을 직접 보면 이해가 쉽다.

    이 것을 적당히 함수로 구현해서 작업을 들어가면 예전보다 훨씬 더 빠른 속도로 진행할 수 있다.

  • 사람은 무엇으로 사는가, 레프 톨스토이, 홍대화 옮김

    이 책은 톨스토이 단편집 모음이다. 제목인 ‘사람은 무엇으로 사는가’는 이 책에서 처음으로 소개하고 있는 소설이다. 이 책의 여러 단편들을 읽어 보면, 왠만하면 한 번쯤은 들어봄직한 그런 이야기들이 많이 있다.

    다 읽지는 못하고 반납을 한 ‘전쟁과 평화’와 동일한 작가라는 것이 믿어지지 않을 정도로 다루고 있는 주제가 다르다. ‘전쟁과 평화’에서는 귀족 사회, 전쟁, 이혼, 결투 등에 대한 이야기드를 다루고 있었다. 그에 비하여 이 단편집에서는 기독교적인 사랑 이야기, 하나님에 대한 이야기, 과욕에 대한 경계가 많이 다루어 지고 있다.

    그 중에서 가장 마음을 울리는 것은 처음이 아닌 마지막 이야기의 마지막 문단이다. 이 책에서 소개하는 마지막 단편집은 ‘세 가지 질문’이다. 그리고 마지막 구절은 다음과 같다.

    그러니 기억하게. 가장 중요한 시간은 바로 지금이라네. 가장 중요한 이유는 그 시간에만 우리는 자신을 통제할 수 있기 때문이네. 가장 필요한 사람은 지금 만나고 있는 그 사람인데, 다른 사람과 어떤 관계를 맺게 될지 아무도 모르기 때문이지. 그리고 가장 중요한 것은 그에게 선을 행하는 것이라네. 우리는 오직 그것을 위해서만 살아가도록 보냄을 받았기 때문이라네.