nodeJS
기본 세팅
-
package.json 파일 생성
-
package-lock.json 파일 인스톨
-
개별 패키지 설치
-
npm i -g nodemon
-
-g 는 전역 (global) 설치를 의미
기본 문법
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// index .mjs
// import 사옹할패키지 from "패키지 명";
import express from "express";
import morgan from "morgan";
import http from "http";
// 기본적으로 express, morgam, http
// express 함수를 실행시켜 app 을 만든다.
const app = express();
const PORT = 8000; // PORT 상수 저장
// 로그를 출력하기 위해, morgan 의 모드를 개발용인 dev 로 지정
// GET /api/v1/hello-world 404 16.623 ms - 157
app.use(morgan("dev"));
// express 서버는 JSON 포맷이 기본임을 명시
app.use(express.json());
// 필요한 API 작성
app.get("/api/v1/hello-world", (req, res) => { ... });
// 지금까지 만든 app 객체를 HTTP 서버로 만든다.
const server = http.createServer(app);
// 들어진 server 객체를 8000 포트에 동작시키며, 성공 시 메세지를 출력
server.listen(PORT, () => console.log(`This server is listening on${PORT}`));
-
Ctrl + C 는 서버를 종료시키기에,
-
서버 개발자는 복사를 하는 단축키를 쓸 때 Ctrl + C 대신 Ctrl + Insert 를 사용
HTTP Request Methods
요청의 종류에 따라, 다음의 네 가지 메서드를 사용한다.
-
GET
-
POST
-
PATCH
-
DELETE
HTTP Status Code
2XX : 성공
200
-
OK
-
가장 흔하게 볼 수 있다. 요청이 성공적으로 처리되었다는 뜻이다.
-
return res.json() 에서 별도의 status 를 지정하지 않을 경우 기본값이다.
201
-
Created
-
POST 요청으로 서버에 데이터가 생성되었음을 뜻한다.
-
수정 성공은 별도의 Status Code 가 없기 때문에 201 을 사용한다.
204
-
No Content
-
DELETE 요청이 성공했을 때 쓰인다.
-
참고할만한 사항으로, 응답 body 가 없기 때문에 res.status(204).json({ message: “삭제 성공” }) 같이 body 를 실어보내도 클라이언트는 받을 수 없다. 따라서, res.status(204).json() 으로만 보내고 클라이언트에선 status code 만으로 판단하게 한다.
3XX : 리다이렉션
304
-
Not Modified
-
브라우저에 저장된 캐시 기반으로 요청이 처리되었다는 뜻이다. 동일한 내용을 매번 서버에서 리턴하면 스트레스이므로, 브라우저 선에서 처리했다는 뜻이다.
-
지금까지 배웠던 “캐시 비우기 및 강력 새로고침” 을 하면, 304 가 아닌 200 이 발생할 것이다.
4XX : 클라이언트 오류
400
-
Bad Request
-
경로는 맞는데, 적합한 형태의 요청을 보내지 않았을 때 발생한다.
-
값의 범위가 1 부터 100 까지인데 해당 범위를 넘었다거나, 객체 프로퍼티 값의 타입이 틀렸다거나, 필요한 프로퍼티를 누락했다거나, 기타 여러가지 클라이언트의 부적절한 요청에 모두 해당할 수 있다.
401
-
Unauthorized
-
인증되지 않은 사용자가 어떤 콘텐츠에 접근하려할 때 발생한다.
-
관리자가 아닌데 관리자페이지에 접근한다거나, 자기가 쓴 게시글이 아닌데 삭제하려 한다거나 하는 상황에서 쓰인다.
403
-
Forbidden
-
401 과 비슷한데, 이 경우는 필요한 인증 정보조차 누락된 경우 발생한다. (토큰, 결제정보 등)
-
결제 없이 결제 완료 처리를 요청한다거나, 필요한 토큰이나 키를 누락했을 경우 발생시킨다.
404
-
Not Found
-
특정 경로에 데이터가 존재하지 않을 때 발생한다.
-
12345 번 게시글 데이터에 접근하려 했으나, 해당 게시글이 애초에 존재하지 않을 때 발생시킨다.
451
-
Unavailable for Legal Reasons
-
특정 국가에서 법적인 사유로 접근할 수 없을 경우 적합하다.
5XX : 서버 오류
500
-
Internal Server Error
-
서버가 현재 서비스를 하기 적합하지 않은 상태일 때 발생한다.
503
-
Service Temporarily Unavailable
-
현재 요청이 지나치게 많아 서비스를 할 수 없을 때 사용한다.
-
수강신청, 추석 열차표, 콘서트 티켓 예매 등 다양한 환경에서 볼 수 있다.
DB
sqlite3 robot_system.db “.read dummy.sql”
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
31
import express from "express";
import morgan from "morgan";
import http from "http";
import sqlite3Module from "sqlite3";
import { promisify } from "node:util";
const sqlite3 = sqlite3Module.verbose();
const foundDB = new sqlite3.Database("./robot_system.db");
const db = promisify(foundDB.all.bind(foundDB));
const app = express();
const PORT = 8000;
app.use(morgan("dev"));
app.use(express.json());
app.get("/api/v1/command-logs", async(req, res) => {
try {
const rows = await db("SELECT * FROM command_log");
return res.json(rows);
} catch(error) {
return res.status(error.status || 500).json({
message: error.message,
});
}
});
const server = http.createServer(app);
server.listen(PORT, () => console.log(`This server is listening on${PORT}`));