Blog

  • Nginx HTTP 서버

    “Apache is like Microsoft Word, it has a million options but you only need six. Nginx does those six things, and it does five of them 50 times faster than Apache.”

    Chris Lea

    책 313페이지에 있는 구절의 영어 문장이다. NGINX의 장점에 대하여 언급하는 대표적인 구절이라고 한다. Apache에 비하여 많은 기능은 없으나 매우 뛰어난 성능을 보이는 부분이 많은 NGINX의 특성을 잘 설명한다고 생각하는 것 같다.

    PostgREST에서는 HTTPS를 지원하지 않기 때문에, NGINX에서 Reverse Proxy를 구현하도록 하고 있다는 내용이 있다. 그래서 한 번 읽어 보았다. NGINX에 대한 옵션을 설명하고 있기 때문에, 실제로 구현 가능할 것 같다.

    이 책의 문장의 일부만을 이용해서 사용하겠지만, 실제로 구입할 가능성이 높은 책 중의 하나일 것 같다.

  • MAC ADDRESS 알아내기

    장비마다 가지는 고유한 속성값은 여러개가 있을 수 있다. 이 중에서 손쉽게 구할 수 있고, 비교적 고유한 것으로 추정해도 큰 문제가 없는 것으로 이더넷의 MAC ADDRESS가 있다. 파이썬에서 이 값을 얻는 방법 중 UUID 모듈의 getnode를 이용하는 것이 가장 손쉽다. 16진법으로 변경한 다음 3번째 글자부터 이용하면 된다.

    ### import uuid
    ### hex(uuid.getnode())
    '0x180373e258a0'

  • DEFAULT CURRENT_TIMESTAMP

    시간을 입력받는 컬럼의 속성에서 DEFAULT CURRENT_TIMESTAMP 를 추가해 주면 자료가 입력되면서, 시간이 입력되는 구조로 동작한다. 굳이 쿼리에 넣어줄 필요가 없었던 부분이다.

    # ADD COLUMN time2 timestamp without time zone DEFAULT CURRENT_TIMESTAMP;
  • RESTful API를 이용하여 PostgreSQL 자료 입력

    psycopg2 를 이용하면 편하게 PostgreSQL에 접근하여 자료를 다룰 수 있다. 편하게 이용할 수 있는 방법인 반면에 DB 접속 권한이 노출된다는 단점이 있다.

    따라서, PostgreSQL이 설치된 서버에 RESTful API를 이용하여 자료를 전달하도록 한다. 보안 접속은 차차 구현해 보기로 하고, 기본형으로 시작한다.

    찾아보면 더 좋은게 있을지도 모르겠다. 최근까지 업데이트 흔적이 있고, 스폰서가 있는 PostgREST를 이용해 보기로 했다. 예제는 다음을 참고했다.

    https://postgrest.org/en/stable/tutorials/tut0.html

    설치 파일을 다운 받는다.

    https://github.com/PostgREST/postgrest/releases/tag/v7.0.1

    tar.xz 파일이 이상하게도 압축이 안풀려서 Windows에서 풀어서 설치 파일을 복사해서 사용했다. 환경 설정 파일 없이 실행하면 친절하게 최소한의 옵션에 따라서 환경 설정 파일을 만들라고 한다. 사용자 계정, 계정의 비밀번호, DB 이름, 스키마 이름, role을 지정한다.

    $ nano tutorial.conf
    db-uri = "postgres://user:pass@localhost:5432/dbname"
    db-schema = "public" 
    db-anon-role = "postgres"

    작성 후 실행한다. 적절하게 만들어졌다면 다음과 같이 실행된다. 기본적으로 3000 포트를 이용한다.

    $ ./postgrest tutorial.conf
    Attempting to connect to the database...
    Listening on port 3000
    Connection successful

    curl을 이용해서 테이블을 조회하여 본다. tablename이라는 테이블 내용을 조회하고 싶다면 다음과 같이 실행한다.

    $ curl http://server:3000/tablename

    JSON 포맷으로 tablename 테이블에 자료를 입력(POST)하고 싶다면 다음과 같이 입력한다.

    $ curl http://server:3000/tablename -X POST \
    -H "Content-Type: application/json" \
    -d '{"source_id": "200",
         "person_id": "15258756"}'

    테이블 이름이 tablename이고, col1의 값이 1234인 열의 자료를 조회하고 싶다면 다음과 같이 한다. 연산자는 다음의 링크를 참조한다.

    https://postgrest.org/en/v7.0.0/api.html

    $ curl http://server:3000/tablename?col1=eq.1234

    파이썬에서는 다음과 같이 한다. requests를 이용한다. POST는 다음과 같이 하면 된다.

    >>> import requests
    >>> requests.post('http://server:3000/tablename ', data={'col1': '1234'})

    GET을 하는 방법은 2가지 방법이 있는 것 같은데 일단은 curl을 시도한 것과 유사한 형식으로 하면 된다. JSON 포맷으로 받으려면 다음과 같이 한다.

    >>> tmp = requests.get('http://server:3000/tablename?col1=eq.1234').json()
    >>> tmp[0]['col1']