티스토리 뷰

nginx 웹 서버, Node.js WAS, 그리고 MySQL DB를 사용하여 웹 애플리케이션을 구축하는 것은 매우 일반적인 아키텍처입니다. 이 조합은 고성능 웹 애플리케이션을 구축하는 데 널리 사용되며, 각 기술이 서로 잘 호환되기 때문에 가능하고 추천되는 방법입니다.

아래는 nginx, Node.js, MySQL을 이용하여 웹 애플리케이션을 구축하는 전반적인 과정과 단계별 설명입니다.

1. 아키텍처 개요

  • Nginx: 리버스 프록시 및 정적 파일 서빙을 담당하는 웹 서버.
  • Node.js: 동적인 비즈니스 로직을 처리하는 WAS(웹 애플리케이션 서버).
  • MySQL: 데이터를 저장하고 관리하는 데이터베이스.

2. 구축 단계

1) nginx 웹 서버 설정

nginx는 주로 리버스 프록시로 사용되어, 클라이언트 요청을 Node.js 서버로 전달합니다. 또한 정적 파일(HTML, CSS, 이미지 등)을 서빙하는 역할도 합니다.

 

1. nginx 설치
Ubuntu를 사용하는 경우:

sudo apt update
sudo apt install nginx

 

2. nginx 설정
Node.js 애플리케이션을 리버스 프록시로 설정하여 포트 80(HTTP)의 요청을 Node.js 서버로 프록시합니다.
/etc/nginx/sites-available/default 파일을 편집하여 다음과 같이 설정합니다:

server {
    listen 80;

    server_name your_domain.com;

    location / {
        proxy_pass http://localhost:3000;  # Node.js 서버로 요청을 프록시
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

    location /static/ {
        alias /path/to/your/static/files/;  # 정적 파일 경로
    }
}

 


3. nginx 재시작

sudo systemctl restart nginx

 

2) Node.js WAS 설정

Node.js는 웹 애플리케이션 서버로 사용되며, Express.js와 같은 프레임워크를 통해 REST API 및 비즈니스 로직을 처리합니다.

Node.js 및 npm 설치

Ubuntu에서 설치:

sudo apt install nodejs npm


Express.js 프로젝트 설정

mkdir myapp
cd myapp
npm init -y
npm install express mysql2

 

서버 코드 작성 (app.js)

const express = require('express');
const mysql = require('mysql2');

const app = express();
const port = 3000;

// MySQL 연결 설정
const db = mysql.createConnection({
  host: 'localhost',
  user: 'your_mysql_user',
  password: 'your_mysql_password',
  database: 'your_db_name'
});

// 기본 라우트 설정
app.get('/', (req, res) => {
  res.send('Hello World!');
});

// MySQL 데이터 조회 예시
app.get('/products', (req, res) => {
  db.query('SELECT * FROM Products', (error, results) => {
    if (error) throw error;
    res.json(results);
  });
});

// 서버 시작
app.listen(port, () => {
  console.log(`Server running on http://localhost:${port}`);
});


서버 실행

node app.js



3) MySQL 설정
MySQL은 애플리케이션의 데이터를 저장하는 데이터베이스입니다.

MySQL 설치

Ubuntu에서 MySQL 설치:

sudo apt install mysql-server


MySQL 설정

MySQL 서버를 시작하고 보안을 강화합니다.

sudo mysql_secure_installation


MySQL DB 생성

MySQL에 접속한 후 데이터베이스 및 사용자, 권한을 설정합니다.

CREATE DATABASE discounts_db;
CREATE USER 'your_mysql_user'@'localhost' IDENTIFIED BY 'your_mysql_password';
GRANT ALL PRIVILEGES ON discounts_db.* TO 'your_mysql_user'@'localhost';
FLUSH PRIVILEGES;


테이블 생성
앞서 설계한 카테고리 및 상품 테이블을 생성합니다.

 

4) 연동
이제 nginx가 80번 포트에서 클라이언트 요청을 받고, 이를 Node.js 서버로 프록시하여 처리합니다.
Node.js는 요청을 처리하고, MySQL에서 데이터를 가져와서 클라이언트에게 응답합니다.

3. 전체 워크플로우

  1. 클라이언트(웹/앱) → nginx: 클라이언트가 웹 브라우저 또는 앱에서 요청을 보냅니다.
  2. nginx → Node.js: nginx는 이 요청을 리버스 프록시로 Node.js 서버로 전달합니다.
  3. Node.js → MySQL: Node.js는 요청을 처리하고, 데이터베이스에서 필요한 정보를 가져옵니다.
  4. MySQL → Node.js → nginx: MySQL에서 가져온 데이터를 Node.js가 응답으로 전달하고, nginx를 통해 클라이언트에게 응답을 전달합니다.
반응형