CRUD란
CRUD는 소프트웨어 개발에서 기본적인 데이터 조작 작업을 설명하는 약어로, Create, Read, Update, Delete의 첫 글자를 따서 만든 용어입니다. 이 네 가지 작업은 대부분의 데이터베이스 애플리케이션에서 필수적인 기능으로, 데이터를 생성하고, 조회하고, 수정하고, 삭제하는 작업을 의미합니다.
CRUD (서버의 기본)
- POST : CREATE - 요청된 자원을 생성
- GET : READ - 요청된 자원을 읽음
- PUT : UPDATE - 요청된 자원을 수정
- DELETE : DELETE - 요청된 자원을 삭제
- Create: POST - 새로운 리소스 생성
- Read: GET - 기존 리소스 조회
- Update: PUT (전체 업데이트) 또는 PATCH (부분 업데이트) - 기존 리소스 수정
- Delete: DELETE - 기존 리소스 삭제
Create (생성):
새로운 데이터를 생성하여 데이터베이스에 추가하는 작업
Create (생성)
- HTTP 메서드: POST
- 설명: 새로운 리소스를 생성할 때 사용됩니다. 예를 들어, 새로운 사용자를 등록하거나, 새 항목을 데이터베이스에 추가할 때 POST 메서드를 사용합니다.
Read (읽기)
- HTTP 메서드: GET
- 설명: 서버에서 데이터를 조회할 때 사용됩니다. 데이터베이스에서 항목을 가져오거나, 특정 리소스의 내용을 읽을 때 GET 메서드를 사용합니다.
Update (수정)
- HTTP 메서드: PUT 또는 PATCH
- 설명: 기존 리소스를 수정할 때 사용됩니다. PUT은 전체 리소스를 대체할 때 사용되며, PATCH는 리소스의 일부만 업데이트할 때 사용됩니다.
Delete (삭제)
- HTTP 메서드: DELETE
- 설명: 기존 리소스를 삭제할 때 사용됩니다. 데이터베이스에서 특정 항목을 삭제하거나, 서버에서 리소스를 제거할 때 DELETE 메서드를 사용합니다.
# HTTP method
HTTP 메서드는 클라이언트가 서버와 통신할 때 사용되는 요청 방법을 정의합니다. 각 메서드는 서버에서 특정 작업을 수행하도록 지시하며, 주로 RESTful API 설계에서 사용됩니다. 주요 HTTP 메서드는 다음과 같습니다:
1. GET
- 설명: 서버에서 리소스를 요청하고 가져올 때 사용됩니다. 서버는 요청된 리소스를 반환합니다.
- 용도: 데이터를 조회할 때 사용됩니다.
- 특징:
- 서버의 상태나 데이터를 변경하지 않습니다.
- 요청 데이터는 URL에 쿼리 파라미터로 포함될 수 있습니다.
- 캐시될 수 있으며, 브라우저 기록에 저장됩니다.
2. POST
- 설명: 서버에 데이터를 전송하고, 서버에서 새로운 리소스를 생성할 때 사용됩니다.
- 용도: 새 데이터를 서버에 제출하거나, 서버의 상태를 변경하는 작업에 사용됩니다.
- 특징:
- 요청 데이터는 요청 본문(body)에 포함됩니다.
- 주로 데이터를 생성하는 작업에 사용됩니다.
- 캐시되지 않으며, URL에 요청 데이터가 포함되지 않기 때문에 보안상 유리합니다.
3. PUT
- 설명: 서버에 데이터를 전송하여 지정된 리소스를 업데이트할 때 사용됩니다. 주로 기존 리소스를 완전히 대체합니다.
- 용도: 리소스를 업데이트하거나 생성할 때 사용됩니다.
- 특징:
- 요청 데이터는 요청 본문에 포함됩니다.
- 주로 전체 리소스를 대체하는 작업에 사용됩니다.
- POST와 달리, PUT은 동일한 요청을 여러 번 보내도 동일한 결과를 보장하는 멱등성(idempotency)이 있습니다.
4. DELETE
- 설명: 서버에서 특정 리소스를 삭제할 때 사용됩니다.
- 용도: 데이터를 삭제하는 작업에 사용됩니다.
- 특징:
- 주로 서버의 상태를 변경합니다.
- 멱등성 특징을 가지며, 동일한 요청을 여러 번 보내도 동일한 결과(리소스가 삭제됨)를 보장합니다.
5. PATCH
- 설명: 서버에서 기존 리소스의 일부를 수정할 때 사용됩니다.
- 용도: 리소스의 일부분만 업데이트할 때 사용됩니다.
- 특징:
- PUT과 달리 전체 리소스를 대체하지 않고, 지정된 부분만 변경합니다.
- 멱등성을 보장하지 않으며, 여러 번 동일 요청을 보냈을 때 항상 동일한 결과가 나타나지 않을 수 있습니다.
6. HEAD
- 설명: GET 요청과 유사하지만, 서버는 응답 본문을 반환하지 않고, HTTP 헤더만 반환합니다.
- 용도: 리소스가 존재하는지 확인하거나, 리소스의 메타데이터(예: 수정 날짜)를 확인할 때 사용됩니다.
- 특징:
- 서버의 데이터를 변경하지 않으며, 응답 본문을 반환하지 않으므로 네트워크 오버헤드가 적습니다.
7. OPTIONS
- 설명: 특정 URL에서 사용할 수 있는 HTTP 메서드를 확인할 때 사용됩니다.
- 용도: 서버가 지원하는 메서드를 확인하거나, CORS(교차 출처 리소스 공유) 요청 전에 사전 검사를 수행할 때 사용됩니다.
- 특징:
- 서버의 상태나 데이터를 변경하지 않습니다.
8. CONNECT
- 설명: 클라이언트와 서버 간의 터널링을 설정할 때 사용됩니다.
- 용도: 주로 HTTPS 프로토콜에서 SSL 터널링을 설정하는 데 사용됩니다.
- 특징:
- 클라이언트와 서버 간의 TCP 연결을 통해 직접 통신할 수 있는 터널을 생성합니다.
9. TRACE
- 설명: 클라이언트가 서버로부터 받은 요청의 경로를 추적할 때 사용됩니다.
- 용도: 진단 및 디버깅 목적으로 사용됩니다.
- 특징:
- 요청의 경로를 그대로 반환하며, 중간 서버나 프록시를 포함한 전체 경로를 확인할 수 있습니다.
- 보안 문제로 인해 일반적으로 비활성화되어 있습니다.
1. get 메서드 : 서버에서 데이터를 요청할 때 사용
app.get('/users', (req, res) => {
// 예시: 사용자 목록을 반환
const users = [
{ id: 1, name: '인천' },
{ id: 2, name: '이젠컴퓨터' },
];
res.json(users);
});
2. post 메서드 : 서버에 데이터를 전송하여 새로운 리소스를 생성할 때 사용
app.post('/users', (req, res) => {
// 새로운 사용자 추가
const newUser = { id: 3, name: req.body.name };
// 실제로는 데이터베이스에 저장하는 과정이 있을 수 있음
res.status(201).json(newUser);
});
3. PUT 메서드 : 서버의 기존 리소스를 업데이트할 때 사용됩니다. 주로 전체 리소스를 대체
app.put('/users/:id', (req, res) => {
//사용자의 전체 정보를 업데이트
const updatedUser = { id: req.params.id, name: req.body.name };
// 실제로는 데이터베이스에서 해당 사용자의 정보를 업데이트
res.json(updatedUser);
});
4. DELETE 메서드 : 서버의 리소스를 삭제할 때 사용
app.delete('/users/:id', (req, res) => {
// 사용자를 삭제
// 실제로는 데이터베이스에서 해당 사용자를 삭제하는 로직이 필요함
res.status(204).send(); // 204 No Content 응답
});
5. PATCH 메서드 : 서버에서 기존 리소스의 일부를 수정할 때 사용됩니다.
app.patch('/users/:id', (req, res) => {
// 사용자의 이름만 업데이트
const partialUpdate = { name: req.body.name };
// 실제로는 데이터베이스에서 해당 부분만 업데이트
res.json({ id: req.params.id, ...partialUpdate });
});
6. HEAD 메서드 : GET 요청과 유사하지만, 서버는 응답 본문을 반환하지 않고, HTTP 헤더만 반환
특정 사용자가 존재하는지 확인하는 API
app.head('/users/:id', (req, res) => {
//사용자가 존재하는지 확인
// 실제로는 데이터베이스에서 해당 사용자가 존재하는지 체크
res.status(200).send(); // 사용자가 존재한다는 응답
});
7. OPTIONS 메서드 : 특정 URL에서 사용할 수 있는 HTTP 메서드를 확인할 때 사용
/users 엔드포인트에서 사용할 수 있는 메서드 확인
app.options('/users', (req, res) => {
res.set('Allow', 'GET, POST, OPTIONS');
res.send();
});
# Create (생성)
HTTP 메서드: POST : 로운 리소스를 생성할 때 사용
app.post('/users', (req, res) => {
// 새로운 사용자 생성 로직
res.status(201).json({ message: '메세지' });
});
# Read (읽기)
HTTP 메서드: GET : 서버에서 데이터를 조회할 때 사용
app.get('/users', (req, res) => {
// 사용자 목록 조회 로직
res.json(users);
});
app.get('/users/:id', (req, res) => {
// 특정 사용자 조회 로직
res.json(user);
});
# Update (수정)
HTTP 메서드: PUT 또는 PATCH
기존 리소스를 수정할 때 사용
PUT은 전체 리소스를 대체할 때 사용되며, PATCH는 리소스의 일부만 업데이트할 때 사용
PUT
app.put('/users/:id', (req, res) => {
// 전체 사용자 정보 업데이트 로직
res.json({ message: '메세지1' });
});
PATCH
app.patch('/users/:id', (req, res) => {
// 사용자 정보 일부 업데이트 로직
res.json({ message: '메세지2' });
});
# Delete (삭제)
HTTP 메서드: DELETE
기존 리소스를 삭제할 때 사용됩니다. 데이터베이스에서 특정 항목을 삭제하거나, 서버에서 리소스를 제거할 때 DELETE 메서드를 사용
app.delete('/users/:id', (req, res) => {
// 사용자 삭제 로직
res.json({ message: '메세지1' });
});
* 정리
- Create: POST - 새로운 리소스 생성
- Read: GET - 기존 리소스 조회
- Update: PUT (전체 업데이트) 또는 PATCH (부분 업데이트) - 기존 리소스 수정
- Delete: DELETE - 기존 리소스 삭제
# 미들웨어(Middleware)란?
미들웨어는 Express.js에서 요청(request)과 응답(response) 사이에 동작하는 함수입니다. 미들웨어는 HTTP 요청을 처리하는 과정에서 특정 작업을 수행하거나, 요청을 수정하고, 로그를 기록하거나, 에러를 처리하는 등의 다양한 역할을 할 수 있습니다. 미들웨어는 여러 개를 체인으로 연결할 수 있으며, 각 미들웨어는 다음 미들웨어로 요청을 전달하거나 요청 처리를 종료할 수 있습니다.
미들웨어의 주요 특징
- 요청(request) 객체를 수정할 수 있습니다.
- 응답(response) 객체를 수정할 수 있습니다.
- 요청을 종료하지 않고 다음 미들웨어로 제어를 넘길 수 있습니다.
- 요청-응답 주기 동안의 작업을 수행할 수 있습니다.
미들웨어의 종류
# 애플리케이션 레벨 미들웨어
- 애플리케이션 전체 또는 특정 경로에 적용되는 미들웨어입니다.
- 모든 경로에 적용하거나, 특정 경로에만 적용할 수 있습니다.
const express = require('express');
const app = express();
// 모든 경로에 적용되는 미들웨어
app.use((req, res, next) => {
console.log('Request Type:', req.method);
next(); // 다음 미들웨어로 제어 전달
});
// 특정 경로에만 적용되는 미들웨어
app.use('/user/:id', (req, res, next) => {
console.log('Request URL:', req.originalUrl);
next();
});
# 라우터 레벨 미들웨어
- 특정 라우터 객체에만 적용되는 미들웨어입니다.
- 라우터와 관련된 작업만 처리합니다.
const express = require('express');
const app = express();
const router = express.Router();
// 라우터에 적용되는 미들웨어
router.use((req, res, next) => {
console.log('Time:', Date.now());
next();
});
router.get('/user/:id', (req, res) => {
res.send('User Info');
});
app.use('/api', router);
# 내장 미들웨어
- Express.js에서 기본적으로 제공하는 미들웨어입니다.
- Express 버전 4.x부터는 내장된 미들웨어들이 따로 패키지로 분리되었으므로 별도로 설치해야 할 수 있습니다.
- express.static: 정적 파일을 제공하기 위한 미들웨어.
- express.json: JSON 요청 본문을 파싱하기 위한 미들웨어.
- express.urlencoded: URL-encoded 데이터를 파싱하기 위한 미들웨어.
const express = require('express');
const app = express();
// JSON 요청 본문을 파싱
app.use(express.json());
// URL-encoded 데이터 파싱
app.use(express.urlencoded({ extended: true }));
// 정적 파일 제공
app.use(express.static('public'));
# 서드파티 미들웨어
- 커뮤니티에서 제공하는 외부 미들웨어입니다.
- 다양한 기능을 쉽게 구현할 수 있도록 해줍니다.
- morgan: HTTP 요청 로깅 미들웨어.
- cors: 교차 출처 리소스 공유(CORS)를 지원하는 미들웨어.
- cookie-parser: 쿠키를 쉽게 파싱할 수 있게 해주는 미들웨어.
const express = require('express');
const morgan = require('morgan');
const cors = require('cors');
const cookieParser = require('cookie-parser');
const app = express();
// HTTP 요청 로깅
app.use(morgan('combined'));
// CORS 허용
app.use(cors());
// 쿠키 파싱
app.use(cookieParser());
# 에러 처리 미들웨어
- 요청 처리 중 발생한 에러를 처리하는 미들웨어입니다.
- 일반 미들웨어와 달리 err 객체를 첫 번째 인자로 받습니다.
const express = require('express');
const app = express();
// 에러 처리 미들웨어
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send('Something broke!');
});
axios
HTTP 요청을 보낼 때 사용하는 JavaScript 라이브러리로, 다양한 속성과 메서드 옵션을 제공합니다.
주로 axios 인스턴스를 생성하거나 axios.get, axios.post와 같은 메서드를 호출할 때 옵션을 설정할 수 있습니다.
- axios.get(url, config): GET 요청을 보낼 때 사용합니다.
- axios.post(url, data, config): POST 요청을 보낼 때 사용하며, data를 포함합니다.
- axios.put(url, data, config): PUT 요청을 보내고 데이터를 업데이트할 때 사용합니다.
- axios.delete(url, config): DELETE 요청을 보낼 때 사용합니다.
- axios.patch(url, data, config): PATCH 요청을 통해 일부 데이터를 수정할 때 사용합니다.
- axios.request(config): 메서드를 포함한 모든 설정을 수동으로 지정해 요청을 보낼 수 있는 기본 메서드입니다.
config 객체
const config = {
method: 'post',
url: '/user',
baseURL: 'https://api.example.com',
headers: { 'Content-Type': 'application/json' },
data: { name: 'Alice', age: 25 },
timeout: 3000,
responseType: 'json',
withCredentials: true,
};
axios(config)
.then(response => console.log(response))
.catch(error => console.error(error));
MVC 패턴 ( Model-View-Controller )
MVC 패턴은 Model-View-Controller의 약자로, 소프트웨어 디자인 패턴 중 하나로, 특히 웹 애플리케이션에서 많이 사용됩니다. 이 패턴은 애플리케이션의 비즈니스 로직과 사용자 인터페이스를 분리하여 개발 효율성을 높이고, 유지보수를 용이하게 만드는 목적을 가지고 있습니다. 각 구성 요소는 서로 분리되어 독립적으로 동작하지만, 긴밀하게 협력하여 애플리케이션의 기능을 구현합니다.
MVC 패턴의 구성 요소:
- Model (모델):
- 애플리케이션의 데이터와 비즈니스 로직을 관리하는 부분입니다.
- 데이터베이스와 상호작용하고, 데이터를 가져오거나 저장하는 역할을 합니다.
- 사용자와 직접적으로 상호작용하지 않으며, 데이터를 저장하고 불러오는 것과 관련된 모든 것을 담당합니다.
- View (뷰):
- 사용자에게 보여지는 화면입니다.
- 사용자가 볼 수 있는 UI를 구성하고, 모델의 데이터를 사용자에게 적절한 형태로 출력합니다.
- 뷰는 데이터의 표현과 관련된 모든 것을 담당하지만, 데이터를 수정하거나 처리하지는 않습니다.
- Controller (컨트롤러):
- 사용자의 입력을 받아 처리하는 중재자 역할을 합니다.
- 모델과 뷰를 연결하는 역할을 하며, 사용자로부터 받은 요청을 모델에 전달하고, 그 결과를 다시 뷰에 전달해 화면에 출력합니다.
- 사용자의 명령이나 입력 이벤트(버튼 클릭 등)를 모델과 뷰에 전달하여 애플리케이션이 작동하도록 만듭니다.
model.js
데이터 부분
controller.js
const getxxx = (req, res) => {
};
module.exports = {
getxxx
};
router.js
const express = require('express');
const xxRouter = express.Router();
xxRouter.get()
xxRouter.delete()
xxRouter.post()
xxRouter.put()
module.exports = xxRouter;
# express.Router
Express.js에서 제공하는 기능으로, 여러 개의 경로(route)를 모듈화하고 관리하기 위한 미들웨어입니다. 즉, 애플리케이션의 경로 처리 로직을 모듈 단위로 분리해서 관리할 수 있게 해줍니다.
express.Router를 사용하면 메인 애플리케이션의 크기가 커질 때, 경로 설정을 더 체계적으로 하고 코드 가독성을 높일 수 있습니다.
index.js
const xxRouter = require('./routes/xxxx');
app.use('/xxx', xxRouter)
npm install mysql2
npm install dotenv
project/
├── .env # 환경 변수 파일 (루트 디렉토리에 위치)
├── index.js # 서버 시작 파일
└── src/
├── controllers/ # 컨트롤러 파일
├── models/ # 모델 파일
└── router/ # 라우터 파일
index.js
require('dotenv').config(); // 루트에 있는 .env 파일 불러오기
const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`서버 실행 :${PORT}`);
});
mysql
CREATE DATABASE myworks;
USE myworks;
CREATE TABLE todos (
id INT PRIMARY KEY AUTO_INCREMENT,
text VARCHAR(255) NOT NULL,
isChk BOOLEAN DEFAULT FALSE
);
DROP TABLE todos;
INSERT INTO todos (text, isChk)
VALUES
('운동하기', FALSE),
('친구만나기', FALSE),
('프로젝트만들기', FALSE),
('점심시간', FALSE) ;
select * from todos;
env
# MySQL 연결 정보
DB_HOST=localhost # 데이터베이스 호스트
DB_USER=your_username # MySQL 사용자 이름
DB_PASSWORD=your_password # MySQL 비밀번호
DB_NAME=myworks # 사용하려는 데이터베이스 이름
DB_PORT=3306 # MySQL 포트 (일반적으로 3306)
# 서버 포트
PORT=3000 # Express 서버 포트
models => index.js
const mysql = require('mysql2');
const db = mysql.createConnection({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
port: process.env.DB_PORT,
});
module.exports = db;
index.js
require('dotenv').config();
const port = process.env.PORT || 3000;
쿼리문
- 조회: SELECT * FROM todos WHERE id = ?
- 삭제: DELETE FROM todos WHERE id = ?
- 추가: INSERT INTO todos (text, isChk) VALUES (?, ?)
- 수정: UPDATE todos SET isChk = ? WHERE id = ?
db.query(쿼리문, [전달값], (에러, 결과) => {
// 쿼리 실행 후 콜백 함수
});
조회
const sql = 'SELECT * FROM todos';
db.query(sql, (err, result) => {
if (err) {
console.error('Error executing query:', err);
return;
}
console.log('All todos:', result); // 전체 조회 결과 출력
});
번호조회
const id = 1; // 예시 id 값
const sql = 'SELECT * FROM todos WHERE id = ?';
db.query(sql, [id], (err, result) => {
if (err) {
console.error('Error executing query:', err);
return;
}
console.log('Query result:', result); // 조회 결과 출력
});
- sql: SELECT * FROM todos WHERE id = ?
- 전달값: [id]
- 결과: result에 조회된 항목이 배열 형식으로 저장됩니다.
# 삭제
const id = 1; // 삭제할 id 값
const sql = 'DELETE FROM todos WHERE id = ?';
db.query(sql, [id], (err, result) => {
if (err) {
console.error('Error executing delete:', err);
return;
}
console.log('Delete result:', result); // 삭제 결과 출력
});
- sql: DELETE FROM todos WHERE id = ?
- 전달값: [id]
- 결과: result의 affectedRows 속성이 1이면 삭제가 성공적으로 수행됨을 의미합니다.
# 추가
const text = '새로운 할 일';
const isChk = false;
const sql = 'INSERT INTO todos (text, isChk) VALUES (?, ?)';
db.query(sql, [text, isChk], (err, result) => {
if (err) {
console.error('Error executing insert:', err);
return;
}
console.log('Insert result:', result); // 추가 결과 출력
});
- sql: INSERT INTO todos (text, isChk) VALUES (?, ?)
- 전달값: [text, isChk]
- 결과: result의 insertId 속성에 삽입된 항목의 id가 저장됩니다.
# 수정
const id = 1; // 수정할 항목의 id
const isChk = true; // 새로운 isChk 상태 값
const sql = 'UPDATE todos SET isChk = ? WHERE id = ?';
db.query(sql, [isChk, id], (err, result) => {
if (err) {
console.error('Error executing update:', err);
return;
}
console.log('Update result:', result); // 수정 결과 출력
});
- sql: UPDATE todos SET isChk = ? WHERE id = ?
- 전달값: [isChk, id]
- 결과: result의 changedRows 속성이 1이면 수정이 성공적으로 수행됨을 의미합니다.
result 확인
ResultSetHeader 객체입니다. 이 객체는 데이터베이스에서 DELETE 쿼리를 실행한 후의 메타데이터를 포함하며, 필드 설명
ResultSetHeader {
fieldCount: 0,
affectedRows: 1,
insertId: 0,
info: '',
serverStatus: 2,
warningStatus: 0,
changedRows: 0
}
- fieldCount: DELETE 쿼리에서는 반환되는 데이터가 없기 때문에, 항상 0입니다.
- affectedRows: 영향을 받은 행(row)의 개수를 나타냅니다. 여기서는 1이므로, 해당 id에 해당하는 todo가 성공적으로 삭제되었음을 의미합니다. 삭제된 행이 없으면 0이 됩니다.
- insertId: INSERT 쿼리가 아닌 경우 0입니다. DELETE 쿼리에서는 의미가 없습니다.
- info: 쿼리에 대한 추가 정보가 들어갑니다. DELETE 쿼리에서는 일반적으로 빈 문자열입니다.
- serverStatus: 서버의 상태를 나타내는 값으로, 일반적으로 2는 서버가 실행 중임을 의미합니다.
- warningStatus: 경고 상태를 나타냅니다. 0은 경고가 없음을 의미합니다.
- changedRows: DELETE 쿼리에서는 항상 0입니다. UPDATE 쿼리에서 변경된 행의 개수를 나타냅니다.
insertId 는 새로운 레코드가 삽입되었을 때 MySQL이 자동으로 생성한 고유 ID를 반환합니다. 주로 INSERT 쿼리에서 유효하며, 새로운 행이 추가되면 그 행의 id 값을 알려줍니다. DELETE나 UPDATE 쿼리에서는 의미가 없으며, 항상 0으로 반환됩니다.
const sql = `INSERT INTO todos (title, isChk) VALUES (?, ?)`;
db.query(sql, [title, isChk], (err, result) => {
if (err) {
console.log(err);
} else {
console.log(result.insertId); // 새로 추가된 레코드의 ID
}
});
result.insertId를 통해 새로 추가된 레코드의 id를 참조할 수 있습니다.
[nodemon] app crashed - waiting for file changes before starting... 나올경우
npm uninstall -g nodemon
npm install -g nodemon
ex2)
USE myworks;
DROP TABLE customer;
CREATE TABLE customer (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
addr VARCHAR(100)
);
DELETE FROM customer;
-- 5명 추가
INSERT INTO customer (name, addr)
VALUES
('김동욱', '서울');
select * from customer;
'Node.js' 카테고리의 다른 글
[ Node ] 용어 (0) | 2024.09.28 |
---|---|
[ Node.js ] 05. 포스트맨 postman (0) | 2024.08.30 |
[ Node.js ] 03. express 서버 만들기 (0) | 2024.04.28 |
[ Node.js ] 02. 노드(Node.js) 내장모듈 - OS, path, url , dns, crypto, util, Console (0) | 2024.04.28 |
[ Node.js ] 01. 노드(node.js)의 정의 (0) | 2024.04.28 |