MSA 트레이닝 센터
NGINX Unit 앱 서버 - 멀티 애플리케이션 동시 실행
NGINX Unit 앱 서버 를 사용하면 개발자와 DevOps팀이 원하는 언어로 서비스를 개발하고 원하는 방식(선언적으로, 동적으로, 즉시)으로 배포하여 신속하게 배포할 수 있습니다. 동일한 애플리케이션 서버에서 다른 언어로 서비스를 실행하는 방법과 선언적으로 빠르게 배포하는 방법(UNIT 방식)을 알아보세요.
앱 서버 멀티 애플리케이션 구성
NGINX Unit의 RESTful API를 활용하여 여러 애플리케이션을 동시에 실행하도록 설정합니다. Python과 Node.js 애플리케이션을 예로 들어 설명합니다.
애플리케이션 준비
Python 애플리케이션 (python_app.py)
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello from Python!", 200
Node.js 애플리케이션 (node_app.js)
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello from Node.js!\n');
});
server.listen(3000, () => {
console.log('Node.js server running on port 3000');
});
멀티 애플리케이션 설정
Python 애플리케이션 구성
curl -X PUT --unix-socket /var/run/control.unit.sock \
-d '{
"type": "python",
"path": "/path/to/python_app",
"module": "python_app"
}' http://localhost/config/applications/python_app
Node.js 애플리케이션 구성
curl -X PUT --unix-socket /var/run/control.unit.sock \
-d '{
"type": "external",
"executable": "node",
"arguments": ["/path/to/node_app.js"]
}' http://localhost/config/applications/node_app
라우팅 설정을 통해 애플리케이션별로 포트를 분리하여 트래픽을 라우팅합니다.
curl -X PUT --unix-socket /var/run/control.unit.sock \
-d '{
"listeners": {
"*:8080": {
"pass": "applications/python_app"
},
"*:8081": {
"pass": "applications/node_app"
}
}
}' http://localhost/config
NGINX Unit 앱 서버 동작 확인
- Python 애플리케이션 테스트
브라우저 또는curl명령어를 사용하여 확인합니다.
curl http://localhost:8080
출력: Hello from Python!
- Node.js 애플리케이션 테스트
브라우저 또는curl명령어를 사용하여 확인합니다.
curl http://localhost:8081
출력: Hello from Node.js!
멀티 애플리케이션 관리 및 확장
NGINX Unit은 동적 구성을 지원하며, JSON 형식의 RESTful API를 통해 쉽게 설정을 변경할 수 있습니다.
애플리케이션 추가
새로운 애플리케이션을 추가하려면 아래 명령을 사용합니다. 예를 들어, PHP 애플리케이션을 추가하려면:
curl -X PUT --unix-socket /var/run/control.unit.sock \
-d '{
"type": "php",
"root": "/path/to/php_app",
"index": "index.php"
}' http://localhost/config/applications/php_app
애플리케이션 업데이트
애플리케이션의 환경 변수나 설정을 변경하려면 PATCH 요청을 사용합니다.
curl -X PATCH --unix-socket /var/run/control.unit.sock \
-d '{
"environment": {
"DEBUG": "true"
}
}' http://localhost/config/applications/python_app
애플리케이션 삭제
사용하지 않는 애플리케이션은 다음 명령으로 삭제할 수 있습니다.
curl -X DELETE --unix-socket /var/run/control.unit.sock \
http://localhost/config/applications/node_app
Best Practices
- 리소스 관리: 애플리케이션별로 리소스를 격리하여 효율적으로 사용합니다.
- 보안 강화: 애플리케이션의 실행 경로를 제한하고 환경 변수를 설정하여 보안을 유지합니다.
- 로깅 활성화: NGINX Unit 로그를 통해 애플리케이션 상태와 트래픽을 모니터링합니다.
- 자동화 구성: RESTful API를 활용해 CI/CD 파이프라인과 통합하여 배포를 자동화합니다.
결론
NGINX Unit은 단일 서버에서 다양한 언어로 작성된 애플리케이션을 동시 실행하고 관리할 수 있는 강력한 솔루션입니다. RESTful API를 사용한 유연한 설정과 동적 라우팅을 통해 DevOps 팀과 개발자는 더욱 빠르고 효율적으로 애플리케이션을 운영할 수 있습니다.
멀티 애플리케이션 환경에서 NGINX Unit의 강력한 기능을 활용하여 운영 효율성과 생산성을 극대화하기 위해 NGINX STORE에 문의하여 사용 사례에 맞는 NGINX Unit 활용 방법을 상담 받아보세요.