20220407

nginx unit 써보기

nginx unit 1.26 써보고 기록. unit은 nginx inc에서 만든 "앱 서버"인데, Python/PHP/Node/Go 등 여러 런타임을 통합 관리 해주는 도구. 처음 봤을 때 "이게 뭐지" 싶었는데 써보니 꽤 흥미로움.

설치 후 config는 REST API로 푸시한다. 파일 편집 아님.

curl -X PUT --data-binary @config.json \
  --unix-socket /var/run/control.unit.sock \
  http://localhost/config/

config.json 예 (fastapi 앱).

{
  "listeners": {
    "*:8000": { "pass": "applications/api" }
  },
  "applications": {
    "api": {
      "type": "python 3.10",
      "path": "/srv/app",
      "module": "main",
      "callable": "app",
      "processes": { "max": 8, "spare": 2 }
    }
  }
}

장점 체감:

  • 런타임 교체 무중단. config 푸시하면 graceful reload. gunicorn 재시작 고민 안 해도 됨.
  • 프로세스 오토스케일. spare, max로 부하에 맞춰 워커 수 자동 조절.
  • 멀티앱을 한 인스턴스에 올리기 편함. 사내 툴용 소규모 서비스 세 개 하나로 합쳤다.

단점 및 주의:

  • 운영 도구(로그, 메트릭) 생태계가 nginx 본체보다 약함. access log 포맷이 JSON만.
  • 공식 helm chart가 아직 공식 지원은 아님. 직접 구성.
  • 문서 부족. Python+fastapi 조합은 잘 되지만 Node.js express 연동하다가 static file serving에서 약간 삽질.

결론 — gunicorn/uwsgi 대체 용도로는 꽤 괜찮다. 다만 넣어야 할 이유가 명확해야 함. 단순 단일 앱이면 기존 스택 유지가 낫다. 우리는 런타임 여러 개 섞인 사내 포털에 적용.

댓글 없음: