이번 포스팅에서는 Node.js와 PostgreSQL을 활용하여 간편한 REST API를 구축하는 방법에 대해 단계별로 설명하겠습니다. 이 튜토리얼을 통해 여러분은 백엔드 개발의 기초를 다지고, 실제로 데이터를 CRUD(Create, Read, Update, Delete)하는 API를 만들어볼 수 있을 것입니다.
환경 설정
1. Node.js 설치
먼저, Node.js가 설치되어 있어야 합니다. Node.js 공식 웹사이트에서 설치 파일을 다운로드 후 설치하세요.
2. PostgreSQL 설치
PostgreSQL도 필요합니다. PostgreSQL 공식 웹사이트에서 설치 파일을 다운로드 후 설치하세요. 설치 후, 기본 데이터베이스와 사용자 계정을 생성합니다.
psql -U postgres
CREATE DATABASE myapi;
CREATE USER myuser WITH PASSWORD 'mypassword';
GRANT ALL PRIVILEGES ON DATABASE myapi TO myuser;
3. 프로젝트 초기화
Node.js 프로젝트를 초기화하려면 아래 명령어를 실행하세요.
mkdir myapi
cd myapi
npm init -y
이제 Express.js와 PostgreSQL을 연결하기 위한 패키지를 설치합니다.
npm install express pg body-parser cors
REST API 구축
4. 기본 서버 설정
index.js 파일을 생성하고, 아래와 같이 기본 서버를 설정합니다.
// index.js
const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const { Pool } = require('pg');
const app = express();
const port = 3000;
// CORS 설정
app.use(cors());
app.use(bodyParser.json());
// PostgreSQL 연결 설정
const pool = new Pool({
user: 'myuser',
host: 'localhost',
database: 'myapi',
password: 'mypassword',
port: 5432,
});
5. CRUD 엔드포인트 구현
다음으로, 간단한 CRUD 엔드포인트를 추가하겠습니다. 예를 들어, 'users' 테이블을 사용하여 사용자 정보를 관리하는 API를 만들어 보겠습니다.
// users 테이블 생성 SQL
// CREATE TABLE users (id SERIAL PRIMARY KEY, name VARCHAR(100), email VARCHAR(100));
// 사용자 생성
app.post('/users', async (req, res) => {
const { name, email } = req.body;
const result = await pool.query('INSERT INTO users (name, email) VALUES ($1, $2) RETURNING ', [name, email]);
res.status(201).json(result.rows[0]);
});
// 사용자 목록 조회
app.get('/users', async (req, res) => {
const result = await pool.query('SELECT FROM users');
res.status(200).json(result.rows);
});
// 특정 사용자 조회
app.get('/users/:id', async (req, res) => {
const { id } = req.params;
const result = await pool.query('SELECT FROM users WHERE id = $1', [id]);
if (result.rows.length = 0) {
return res.status(404).send('User not found');
}
res.status(200).json(result.rows[0]);
});
// 사용자 업데이트
app.put('/users/:id', async (req, res) => {
const { id } = req.params;
const { name, email } = req.body;
const result = await pool.query('UPDATE users SET name = $1, email = $2 WHERE id = $3 RETURNING ', [name, email, id]);
if (result.rows.length = 0) {
return res.status(404).send('User not found');
}
res.status(200).json(result.rows[0]);
});
// 사용자 삭제
app.delete('/users/:id', async (req, res) => {
const { id } = req.params;
const result = await pool.query('DELETE FROM users WHERE id = $1 RETURNING *', [id]);
if (result.rows.length === 0) {
return res.status(404).send('User not found');
}
res.status(204).send();
});
// 서버 시작
app.listen(port, () => {
console.log(Server running at http://localhost:${port});
});
6. API 테스트
이제 API를 테스트해보겠습니다. Postman이나 Insomnia와 같은 API 테스트 도구를 사용하여 각 엔드포인트를 호출하고 결과를 확인할 수 있습니다.
POST /users: 사용자 생성GET /users: 사용자 목록 조회GET /users/:id: 특정 사용자 조회PUT /users/:id: 사용자 업데이트DELETE /users/:id: 사용자 삭제
각 API 호출의 결과를 확인하고, 데이터베이스의 users 테이블에서 변경 사항을 확인해 보세요.
마무리
이번 튜토리얼에서는 Node.js와 PostgreSQL을 활용하여 간단한 REST API를 구축하는 방법을 알아보았습니다. 이 프로젝트를 통해 CRUD 기능을 구현하고, 데이터베이스와의 연결을 이해할 수 있었을 것입니다. 추가적으로, 인증 및 인가와 같은 고급 기능을 구현해보면 더욱 완성도 있는 API를 만들 수 있습니다. 다음 포스팅에서는 이러한 고급 기능들에 대해 다뤄볼 예정입니다. 감사합니다!