Node.js - RESTful API
안녕하세요, 야심勃勃한 프로그래머 여러분! 오늘 우리는 Node.js와 RESTful API의 세상으로 흥미로운 여정을 떠납니다. 이 용어들이 지금은 외계어처럼 들리더라도, 이 튜토리얼이 끝나면 당신은 'REST'를 능숙하게 말할 수 있을 것입니다! ?
REST 아키텍처는 무엇인가요?
REST, 또는 Representational State Transfer는 인터넷을 통해 컴퓨터가 서로 소통할 때 따라야 할 규칙들의 집합입니다. 식당에 있는 상황을 생각해보세요. 당신(클라이언트)은 웨이터(API)에게 메뉴(데이터)를 요청합니다. 웨이터는 음식을 직접 만들지 않고, 대신 주방(서버)에서 당신이 필요한 것을 가져옵니다. 이 왕래가 REST의 작동 방식과 유사합니다!
REST의 주요 원칙:
- 클라이언트-서버: 사용자 인터페이스와 데이터 저장 간의 관심사 분리.
- 상태 없음: 클라이언트에서 서버로의 각 요청은 요청을 이해하기 위해 필요한 모든 정보를 포함해야 합니다.
- 캐시 가능: 응답은 자신을 캐시 가능하거나 아닌 것으로 정의해야 합니다.
- 일관된 인터페이스: 서버와의 상호작용을 표준화된 방식으로 정의.
- 계층 시스템: 클라이언트는 직접 서버에 연결되었는지 아니면 중간자에 연결되었는지 구분할 수 없습니다.
HTTP 메서드
이제 HTTP 메서드에 대해 이야기해보겠습니다. 이 메서드는 서버가 수행해야 할 작업을 알려주는 동사와 같습니다. 주요 메서드는 다음과 같습니다:
메서드 | 설명 | 예제 사용 |
---|---|---|
GET | 데이터 가져오기 | 사용자 프로필 가져오기 |
POST | 새로운 데이터 생성 | 새로운 블로그 글 추가 |
PUT | 기존 데이터 업데이트 | 사용자 상세정보 수정 |
DELETE | 데이터 제거 | 트윗 삭제 |
PATCH | 데이터 부분 수정 | 사용자 이메일만 업데이트 |
이제 간단한 Node.js 코드 예제를 통해 이러한 메서드를 실제로 확인해보겠습니다!
GET 요청 예제:
const http = require('http');
const server = http.createServer((req, res) => {
if (req.method === 'GET' && req.url === '/api/users') {
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ users: ['Alice', 'Bob', 'Charlie'] }));
}
});
server.listen(3000, () => {
console.log('서버가 포트 3000에서 실행 중입니다');
});
이 예제에서는 간단한 서버를 만들어 '/api/users'에 대한 GET 요청에 JSON 형식의 사용자 목록을 응답합니다. 이 코드를 실행하고 브라우저에서 'http://localhost:3000/api/users'를 방문하면 사용자 목록을 볼 수 있습니다!
POST 요청 예제:
const http = require('http');
const server = http.createServer((req, res) => {
if (req.method === 'POST' && req.url === '/api/users') {
let body = '';
req.on('data', chunk => {
body += chunk.toString();
});
req.on('end', () => {
const newUser = JSON.parse(body);
console.log('새로운 사용자 추가:', newUser);
res.writeHead(201, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ message: '사용자가 성공적으로 생성되었습니다' }));
});
}
});
server.listen(3000, () => {
console.log('서버가 포트 3000에서 실행 중입니다');
});
이 예제는 새로운 사용자를 추가하는 POST 요청을 처리하는 방법을 보여줍니다. 요청 데이터를 수신하고 처리한 후, 사용자가 생성되었음을 확인하는 응답을 보냅니다.
RESTful 웹 서비스
이제 기본 개념을 이해했으므로, Express라는 인기 있는 Node.js 프레임워크를 사용하여 전체 RESTful API를 만들어보겠습니다!
먼저, Express를 설치해보겠습니다:
npm init -y
npm install express
이제 도서 도서관을 위한 간단한 RESTful API를 만들어보겠습니다:
const express = require('express');
const app = express();
app.use(express.json());
let books = [
{ id: 1, title: 'The Great Gatsby', author: 'F. Scott Fitzgerald' },
{ id: 2, title: 'To Kill a Mockingbird', author: 'Harper Lee' }
];
// 모든 도서 가져오기
app.get('/api/books', (req, res) => {
res.json(books);
});
// 특정 도서 가져오기
app.get('/api/books/:id', (req, res) => {
const book = books.find(b => b.id === parseInt(req.params.id));
if (!book) return res.status(404).send('도서를 찾을 수 없습니다');
res.json(book);
});
// 새로운 도서 추가
app.post('/api/books', (req, res) => {
const book = {
id: books.length + 1,
title: req.body.title,
author: req.body.author
};
books.push(book);
res.status(201).json(book);
});
// 도서 업데이트
app.put('/api/books/:id', (req, res) => {
const book = books.find(b => b.id === parseInt(req.params.id));
if (!book) return res.status(404).send('도서를 찾을 수 없습니다');
book.title = req.body.title;
book.author = req.body.author;
res.json(book);
});
// 도서 삭제
app.delete('/api/books/:id', (req, res) => {
const book = books.find(b => b.id === parseInt(req.params.id));
if (!book) return res.status(404).send('도서를 찾을 수 없습니다');
const index = books.indexOf(book);
books.splice(index, 1);
res.json(book);
});
app.listen(3000, () => console.log('서버가 포트 3000에서 실행 중입니다'));
이 예제는 도서 도서관을 관리하는 완전한 RESTful API를 만듭니다. 각 라우트는 다음과 같습니다:
-
app.get()
은 모든 도서 또는 특정 도서를 가져오는 GET 요청을 처리합니다. -
app.post()
은 새로운 도서를 추가하는 POST 요청을 처리합니다. -
app.put()
은 기존 도서를 업데이트하는 PUT 요청을 처리합니다. -
app.delete()
은 도서를 삭제하는 DELETE 요청을 처리합니다.
각 라우트는 RESTful 원칙을 따르며, 적절한 HTTP 메서드와 상태 코드를 사용합니다.
API 테스트
API를 테스트하려면 Postman이나 curl 같은 도구를 사용할 수 있습니다. curl을 사용한 예제는 다음과 같습니다:
# 모든 도서 가져오기
curl http://localhost:3000/api/books
# 새로운 도서 추가
curl -X POST -H "Content-Type: application/json" -d '{"title":"1984","author":"George Orwell"}' http://localhost:3000/api/books
# 도서 업데이트
curl -X PUT -H "Content-Type: application/json" -d '{"title":"Updated Title","author":"Updated Author"}' http://localhost:3000/api/books/1
# 도서 삭제
curl -X DELETE http://localhost:3000/api/books/1
이제 Node.js와 Express를 사용하여 첫 RESTful API를 만들었습니다! 연습이 완벽함을 기억하십시오. 도서 도서관 API에 더 많은 기능을 추가해보세요, 예를 들어 도서 검색이나 정렬 기능 등입니다.
API를 만드는 것은 다른 소프트웨어 애플리케이션 간의 교량을 짓는 것과 같습니다. 만드는 각 API는 프로그램 간의 상호작용과 데이터 공유에 대한 새로운 가능성을 열어줍니다. 계속 탐구하고, 계속 코딩하고, 가장 중요한 것은 Node.js 전문가로 성장하는 여정에서 즐겁게 보내세요!
Credits: Image by storyset