npx create-react-app my-app: React 앱을 생성한다.npx tailwindcss init: Tailwind CSS 초기화 파일 생성한다.| 항목 | Nginx | Gunicorn | npx |
|---|---|---|---|
| 역할 | 웹 서버 및 리버스 프록시 | Python WSGI 애플리케이션 서버 | Node.js 패키지 실행 도구 |
| 언어 | C 기반 | Python 기반 | Node.js(JavaScript) 기반 |
| 주요 사용 사례 | 정적 파일 제공, 요청 분배 | Python 웹 애플리케이션 실행 | JavaScript 라이브러리/패키지 실행 |
| 사용 환경 | 프론트엔드와 백엔드 간 요청 처리 | 백엔드 애플리케이션 실행 | 개발 환경에서 npm 명령어 실행 |
서로 다른 역할을 수행하는 Nginx, Gunicon, Npx는 웹 애플리케이션의 개발 및 배포에 중요한 구성 요소로 사용된다.
Nginx와 Gunicorn을 함께 사용하여 Python 웹 애플리케이션(Django/Flask)을 배포하는 예제를 들어본다. 예제에서는 Nginx가 리버스 프록시로 동작하고, Gunicorn이 WSGI 서버로 Python 애플리케이션을 실행한다.
# app.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def home():
return "Hello, Nginx and Gunicorn!"
if __name__ == "__main__":
app.run()
Gunicorn을 사용해 Flask 애플리케이션을 실행한다.
# Gunicorn 설치
pip install gunicorn
# Gunicorn으로 Flask 앱 실행
gunicorn -w 4 -b 127.0.0.1:8000 app:app
-w 4: 워커 프로세스 4개.-b 127.0.0.1:8000: 127.0.0.1의 8000번 포트에서 실행한다.이제 Gunicorn이 Flask 애플리케이션을 실행하고 HTTP 요청을 받을 준비가 완료된 것이다.
Nginx를 설치하고 설정 파일을 작성한다.
sudo apt update
sudo apt install nginx
/etc/nginx/sites-available/myapp 경로에 새로운 설정 파일 생성:
server {
listen 80;
server_name myapp.local; # 도메인 이름 (localhost로 대체 가능)
location / {
proxy_pass http://127.0.0.1:8000; # Gunicorn이 실행 중인 포트
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
# 심볼릭 링크 생성
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
# Nginx 구성 확인
sudo nginx -t
# Nginx 재시작
sudo systemctl restart nginx
로컬 테스트: 브라우저에서 http://myapp.local로 접속한다.
결과: "Hello, Nginx and Gunicorn!" 메시지가 출력되면 성공이다.
http://myapp.local로 접속한다.React 프론트엔드도 Nginx로 함께 배포하려면, npx를 사용해 React 프로젝트를 생성할 수 있다.
# React 앱 생성
npx create-react-app my-react-app
# React 앱 빌드
cd my-react-app
npm run build
# 빌드된 정적 파일을 Nginx에서 제공
server {
listen 80;
server_name myapp.local;
root /path/to/my-react-app/build;
index index.html;
location / {
try_files $uri /index.html;
}
location /api/ {
proxy_pass http://127.0.0.1:8000; # Flask/Gunicorn API
}
}
이 설정은 React 정적 파일을 Nginx가 제공하고, /api/ 요청은 Gunicorn으로 전달하여 동작하도록 구성한다.
이러한 구성으로 백엔드와 프론트엔드를 Nginx를 통해 통합하여 완전한 웹 애플리케이션을 배포할 수 있다.
도대체 Nginx, Gunicorn 그리고 Npx는 정확히 무엇인지 궁금함에 위와 같이 정보를 찾아보며 공부하면 할수록, 평소에 서버 연결과 구성에 대해 제대로 공부한 적이 없었다는 걸 깨달았다. 특히, Nginx가 리버스 프록시로 작동하며 Gunicorn과 협력해 요청을 처리하는 방식이 신기했다. 각 도구의 역할이 명확하고 효율적이라는 점에서 감탄했고, 프론트엔드와 백엔드가 자연스럽게 연결되는 과정이 흥미로웠다. 앞으로 이런 서버 구성 원리를 더 깊이 공부하고 싶다.