ServBay로 Express.js 프로젝트 생성 및 실행하기
Express.js란 무엇인가요?
Express.js는 Node.js 기반의 빠르고, 오픈소스이며, 미니멀한 웹 애플리케이션 프레임워크입니다. 싱글 페이지, 멀티 페이지, 혼합 웹앱 구축에 필요한 다양한 강력한 기능을 제공합니다. 단순하면서도 유연하게 설계된 Express.js는 Node.js 생태계에서 가장 인기 있는 프레임워크 중 하나로, 많은 개발자의 사랑을 받고 있습니다.
Express.js의 주요 특징과 장점
- 간결함과 유연성: Express.js는 간결한 API와 유연한 미들웨어 메커니즘을 제공하여 웹 애플리케이션 개발 효율성을 크게 높여줍니다.
- 미들웨어: 다양한 미들웨어를 지원해 요청 및 응답 처리, 예를 들면 요청 본문 파싱, 세션 처리, 정적 파일 제공 등을 쉽게 할 수 있습니다.
- 라우팅: GET, POST, PUT, DELETE 등 다양한 HTTP 메서드 및 URL 경로별로 요청을 처리할 수 있는 강력한 라우팅 기능을 제공합니다.
- 강력한 통합성: Pug, EJS, Handlebars 등의 템플릿 엔진, MongoDB, MySQL, PostgreSQL 등 데이터베이스, 그 외 여러 Node.js 모듈과 무리 없이 연동할 수 있습니다.
- 커뮤니티와 생태계: 대규모 커뮤니티 지원과 풍부한 서드파티 미들웨어 및 플러그인 덕분에, 문제 해결 자료를 쉽게 찾을 수 있습니다.
Express.js를 사용하면 고성능 웹앱과 API를 빠르게 구축할 수 있습니다. ServBay는 강력한 로컬 웹 개발 환경을 제공하며, Express.js 프로젝트 실행을 위한 최적화된 Node.js 환경은 물론, 손쉬운 웹사이트(리버스 프록시) 및 데이터베이스 관리 기능까지 지원합니다.
ServBay로 Express.js 프로젝트 생성 및 실행하기
이 가이드에서는 ServBay에서 제공하는 Node.js 환경으로 Express.js 프로젝트를 생성, 설정, 실행하는 방법을 설명합니다. ServBay의 웹사이트 기능을 이용해 웹서버를 설정하고 리버스 프록시를 통해 프로젝트에 접속할 수 있습니다. 이 방식은 Node.js, Python, Go, Java 등 특정 포트에서 서비스를 구동해야 하는 애플리케이션에 매우 적합합니다.
사전 준비 사항
시작에 앞서, 아래 조건을 충족해야 합니다.
- macOS에 ServBay가 정상적으로 설치되어 있어야 합니다.
- ServBay 내에서 Node.js 패키지가 설치되어 있고 활성화되어 있어야 합니다. ServBay 패널의 ‘패키지’ 탭에서 관리 가능합니다.
- (선택) 데이터베이스 연결 계획이 있다면, MariaDB, PostgreSQL, MongoDB, Redis, MySQL 등 해당 데이터베이스 패키지 역시 설치 및 활성화되어야 합니다.
- 터미널 또는 명령어 줄 기본 사용법을 알고 있어야 합니다.
Express.js 프로젝트 생성
프로젝트 초기화
먼저 터미널을 열고 ServBay 권장 웹사이트 루트 디렉터리인
/Applications/ServBay/www
로 이동합니다.npx express-generator
명령어로 빠르게 Express.js 프로젝트의 기본 뼈대를 생성합니다.npx
는 Node.js 5.2+에서 기본 제공되는 도구로, 패키지의 실행 파일을 바로 실행할 수 있습니다.bashcd /Applications/ServBay/www npx express-generator servbay-express-app
1
2위 명령으로
/Applications/ServBay/www
경로에servbay-express-app
라는 새 폴더가 생성되며, 기본 Express.js 프로젝트 구조가 세팅됩니다.프로젝트 종속성 설치
새로 생성된
servbay-express-app
폴더로 이동해 다음과 같이 종속 패키지들을 설치합니다. Express.js 프레임워크 및 템플릿 엔진, 정적 파일 서비스 등에서 기본적으로 필요한 패키지가 함께 설치됩니다.bashcd servbay-express-app npm install
1
2설치가 완료될 때까지 기다립니다.
Express.js 프로젝트의 출력 내용 변경하기
프로젝트가 정상적으로 실행되는지 확인하기 위해, 기본 홈페이지 출력을 수정해봅니다.
routes/index.js
파일 수정Express.js 프로젝트의 라우터 파일에서는 서로 다른 URL 요청을 처리합니다. 프로젝트 안의
routes/index.js
파일을 엽니다. 이 파일은 루트 경로/
의 GET 요청을 처리합니다. 코드를 수정하여 기본 Pug 템플릿을 렌더링하는 대신, 단순한 텍스트 응답을 직접 보내도록 합니다.javascriptvar express = require('express'); var router = express.Router(); /* GET home page. */ router.get('/', function(req, res, next) { // 텍스트 응답 전송으로 변경 res.send('Hello ServBay!'); }); module.exports = router;
1
2
3
4
5
6
7
8
9
10파일을 저장합니다.
개발 모드 진입
개발 과정에서 실시간 변경사항 확인을 위해 로컬 개발서버를 실행합니다. Express.js 프로젝트는 npm start
명령어로 내장 HTTP 서버를 쉽게 띄울 수 있습니다.
개발서버 실행
servbay-express-app
프로젝트 디렉터리에서 아래 명령어로 개발 서버를 시작합니다.PORT
환경변수를 설정해 서버가 들을 포트를8585
로 지정하고,DEBUG
환경변수로 디버그 출력을 활성화합니다.bashcd /Applications/ServBay/www/servbay-express-app PORT=8585 DEBUG=servbay-express-app:* npm start
1
2터미널에 서버가 포트
8585
에서 실행 중임을 알리는 메시지가 나타납니다.ServBay 웹사이트 리버스 프록시 설정
Express.js 앱이 표준 웹포트(80/443)가 아닌 사용자 지정 포트(8585)에서 구동되므로, ServBay의 웹사이트 기능으로 리버스 프록시를 세팅해야 합니다. ServBay의 웹서버(기본값 Caddy)는 80/443 포트를 감시하고 특정 도메인 요청을
127.0.0.1:8585
의 Express.js 애플리케이션에 전달합니다.ServBay 패널을 열고 ‘웹사이트’ 탭으로 이동한 뒤 새 웹사이트 추가를 클릭하세요. 다음과 같이 설정합니다.
- 이름:
My first Express.js dev site
(식별하기 쉬운 이름) - 도메인:
servbay-express-test.servbay.demo
(.servbay.demo
도메인은 ServBay의 User CA를 통한 자동 HTTPS 사용 가능) - 사이트 유형:
리버스 프록시
선택 - IP:
127.0.0.1
(또는localhost
) - 포트:
8585
(Express.js 앱이 듣는 포트)
저장 후 ServBay의 변경사항을 적용합니다. ServBay가 웹서버 자동 구성 및 SSL 인증서(도메인이
.servbay.demo
일 경우) 생성을 처리해줍니다.자세한 설정 절차는 ServBay 문서의 Node.js 개발 사이트 추가 가이드를 참고하세요.
- 이름:
개발 모드 사이트 방문
브라우저를 열고 방금 설정한 도메인
https://servbay-express-test.servbay.demo
를 방문하세요. ServBay 웹서버가 요청을 받아 8585 포트의 Express.js 앱에 프록시합니다. "Hello ServBay!" 페이지가 보이면 성공입니다.ServBay는 맞춤 도메인과 무료 SSL 인증서를 지원하므로,
.servbay.demo
도메인으로도 자동 HTTPS가 적용됩니다. 따라서 실서비스와 유사한 환경에서 개발하며 SSL 관련 이슈도 미리 발견할 수 있습니다.
운영(프로덕션) 버전 배포
Express.js 프로젝트 개발이 완료되면, 운영 환경에서 배포를 준비할 수 있습니다. 최종 테스트를 위해 로컬에서 프로덕션 환경과 동일하게 실행하는 것이 좋습니다.
운영 환경 준비
일반적으로 Express.js 앱을 운영 환경에 배포할 때는
NODE_ENV
환경변수를production
으로 설정합니다. 이는 일부 라이브러리에 디버그 비활성화, 성능 최적화 등 영향을 줍니다. 프로젝트 코드가NODE_ENV=production
상태에서도 잘 동작하는지 반드시 확인해야 합니다.운영 서버 실행
프로젝트 루트(
servbay-express-app
)에서 아래 명령으로 프로덕션 서버를 띄웁니다. 개발 모드와 구분하기 위해 포트를8586
으로 지정하고,NODE_ENV
를production
으로 설정합니다.bashcd /Applications/ServBay/www/servbay-express-app PORT=8586 NODE_ENV=production npm start
1
2서버가 포트
8586
에서 구동됨을 알리는 정보가 표시됩니다.ServBay 운영 모드 리버스 프록시 설정
개발 모드와 동일하게, 운영 모드 사이트를 위한 별도의 ServBay 웹사이트 리버스 프록시를 만듭니다.
ServBay 패널 → ‘웹사이트’ 탭 → 새 웹사이트 추가. 설정 예시는 아래와 같습니다.
- 이름:
My first Express.js production site
- 도메인:
servbay-express-test-prod.servbay.demo
(또는 임의의 운영 도메인) - 사이트 유형:
리버스 프록시
선택 - IP:
127.0.0.1
- 포트:
8586
(운영 인스턴스 포트)
저장 후 ServBay 변경사항을 다시 적용하세요.
- 이름:
운영 모드 사이트 접속
브라우저에서 설정한 도메인
https://servbay-express-test-prod.servbay.demo
로 접속하면, ServBay 리버스 프록시를 통해 8586 포트의 Express.js 운영 인스턴스에 접근할 수 있습니다. 이를 통해 운영 환경 구성도 로컬에서 미리 테스트할 수 있습니다.
데이터베이스 연결
ServBay는 MariaDB, PostgreSQL, MongoDB, Redis 등 다양한 데이터베이스 패키지를 지원합니다. 이 DB들은 ServBay 내에서 활성화 및 구동되므로, Express.js 프로젝트에서 쉽게 연결 가능합니다. 일반적으로 MariaDB/MySQL의 root 비밀번호는 password
, PostgreSQL의 기본 계정은 user
(비밀번호 password
, 기본 DB는 servbay_default
) 등으로 기본값이 설정되어 있습니다. ServBay의 DB 패널 또는 기본값에 따라 연결 정보를 입력하면 됩니다.
아래는 각 DB에 Node.js 환경에서 연결하는 예시입니다. 사전에 반드시 npm install <패키지명>
으로 해당 드라이버를 설치해주세요.
MongoDB 연결
우선,
mongoose
모듈을 설치합니다(ORM 라이브러리):bashnpm install mongoose
1다음으로 Express.js 코드(예:
app.js
또는 별도 DB 설정 파일)에서 접속합니다.javascriptvar mongoose = require('mongoose'); // ServBay의 로컬 MongoDB 인스턴스에 접속, DB명은 servbay-express-app // ServBay 기본 MongoDB는 인증 없이 접속 가능 mongoose.connect('mongodb://localhost/servbay-express-app', { useNewUrlParser: true, useUnifiedTopology: true }) .then(() => console.log('Connected to MongoDB')) .catch(err => console.error('MongoDB connection error:', err));
1
2
3
4
5
6
7
8
9
10ServBay에서 MongoDB 패키지가 실행 중인지 확인하세요.
Redis 연결
먼저
redis
클라이언트 라이브러리 설치:bashnpm install redis
1연결 및 사용 예시:
javascriptvar redis = require('redis'); // ServBay의 Redis는 기본적으로 localhost:6379, 비밀번호 없음 var client = redis.createClient({ host: 'localhost', port: 6379 }); client.on('connect', function() { console.log('Connected to Redis'); }); client.on('error', function (err) { console.log('Redis Error: ' + err); }); // 예시: 키 설정 및 조회 // client.set('mykey', 'Hello from Express!', redis.print); // client.get('mykey', function(err, reply) { // if (err) throw err; // console.log(reply); // "Hello from Express!" 출력 // }); // 필요시 client로 Redis 연산 수행
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23ServBay에서 Redis 패키지가 실행 중인지 확인하세요.
MariaDB / MySQL 연결
ServBay는 MariaDB, MySQL 모두 지원합니다.
mariadb
또는mysql2
패키지를 쓰면 됩니다(여기서는mariadb
예시).드라이버 설치:
bashnpm install mariadb # 또는 npm install mysql2
1ServBay의 기본 계정(root/
password
)으로 접속:javascriptvar mariadb = require('mariadb'); // ServBay의 MariaDB/MySQL은 localhost:3306 var pool = mariadb.createPool({ host: 'localhost', port: 3306, // 기본 포트 user: 'root', // ServBay 기본 계정 password: 'password', // ServBay 기본 password database: 'servbay_express_app', // ServBay에서 생성한 DB명 connectionLimit: 5 // 풀 크기 }); pool.getConnection() .then(conn => { console.log("Connected to MariaDB/MySQL"); // conn으로 쿼리 실행 // conn.query("SELECT 1").then(...).catch(...).finally(() => conn.release()); conn.release(); // 사용 후 풀에 반환 }) .catch(err => { console.log("Not connected due to error: " + err); });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21연결 전 ServBay의 DB 관리 툴(phpMyAdmin, Adminer 등)로
servbay_express_app
DB를 생성해야 할 수 있습니다. MariaDB/MySQL 패키지가 구동 중인지 확인하세요.PostgreSQL 연결
PostgreSQL 클라이언트(
pg
) 설치:bashnpm install pg
1기본 계정(user/
password
), DB(servbay_default
)로 연결 예시:javascriptvar { Pool } = require('pg'); // ServBay의 PostgreSQL은 localhost:5432 var pool = new Pool({ user: 'user', // ServBay 기본 계정 host: 'localhost', database: 'servbay_default', // ServBay 기본 DB 또는 직접 생성한 DB password: 'password', // ServBay 기본 패스워드 port: 5432, // 기본 포트 }); pool.connect((err, client, done) => { if (err) { console.error('PostgreSQL connection error:', err); return; } console.log('Connected to PostgreSQL'); // client로 쿼리 실행 // client.query('SELECT NOW()', (err, res) => { ... done(); }); done(); // 클라이언트 반환 }); // async/await 방식 예시 // try { // const client = await pool.connect(); // console.log('Connected to PostgreSQL'); // // const res = await client.query('SELECT NOW()'); // // console.log(res.rows[0]); // client.release(); // 커넥션 반환 // } catch (err) { // console.error('PostgreSQL connection error:', err); // }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31PostgreSQL 패키지가 실행 중인지 꼭 확인하세요.
요약
이상의 과정을 통해 ServBay로 Express.js 프로젝트를 성공적으로 생성, 설정, 구동할 수 있게 되었습니다. 배운 내용은 다음과 같습니다.
express-generator
로 프로젝트 초기화- Express.js 앱을 원하는 포트에서 실행
- ServBay의 웹사이트 기능을 통한 리버스 프록시 구성 및 표준 HTTP/S 포트에서 Node.js 앱 접근
- ServBay에서 지원하는 다양한 데이터베이스와 연동
ServBay는 로컬 Node.js(Express.js) 개발 환경 구축 및 관리를 크게 단순화하여, 오로지 코드 개발에 집중할 수 있게 도와줍니다. 또한 자동 SSL 인증서, 사이트 백업, 로그 조회 등 유용한 부가 기능도 제공하므로, 보다 효율적인 개발 워크플로우를 경험할 수 있습니다.