1. Middleware
1-1. Express.js์ Middleware
- HTTP ์์ฒญ๊ณผ ์๋ต ์ฌ์ด์์ ๋จ๊ณ๋ณ ๋์์ ์ํํด์ฃผ๋ ํจ์
- HTTP ์์ฒญ๊ณผ ์๋ต ๊ฐ์ฒด๋ฅผ ์ฒ๋ฆฌํ๊ฑฐ๋, ๋ค์ ๋ฏธ๋ค์จ์ด ์คํ
- HTTP ์์ฒญ์ด ๋ค์ด์จ ์๊ฐ ์์ โก HTTP ์๋ต ๋ง๋ฌด๋ฆฌ๋ ๋ ๊น์ง ๋ฏธ๋ค์จ์ด ๋์ ์ฌ์ดํด ์คํ
1-2. Middleware ์์ฑ๋ฒ
- req, res, next๋ฅผ ๊ฐ์ง ํจ์๋ฅผ ์์ฑ
- req: HTTP ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๊ฐ์ฒด
- res: HTTP ์๋ต์ ์ฒ๋ฆฌํ๋ ๊ฐ์ฒด
- next: ๋ค์ ๋ฏธ๋ค์จ์ด๋ฅผ ์คํํ๋ ํจ์
const logger = (req, res, next) => {
console.log(`Request ${req.path}`);
next();
}
- next() ํจ์๊ฐ ํธ์ถ๋์ง ์์ผ๋ฉด ๋ฏธ๋ค์จ์ด ์ฌ์ดํด์ด ๋ฉ์ถ๊ธฐ ๋๋ฌธ์ ์ฃผ์
1-3. Middleware ์ฌ์ฉ๋ฒ
- ์ ์ฉ๋๋ ์์น์ ๋ฐ๋ผ: ์ดํ๋ฆฌ์ผ์ด์ / ๋ผ์ฐํฐ / ์ค๋ฅ์ฒ๋ฆฌ ๋ฏธ๋ค์จ์ด๋ก ๋ถ๋ฅ ๊ฐ๋ฅ
1) ์ดํ๋ฆฌ์ผ์ด์ ๋ฏธ๋ค์จ์ด
- ๋ฏธ๋ค์จ์ด ์์ฑ ํ app ๊ฐ์ฒด์ use๋ฅผ ํตํด ์ฐ๊ฒฐํ๊ฑฐ๋,
- app ๊ฐ์ฒด์ HTTP method ํจ์๋ฅผ ํตํด ์ฐ๊ฒฐ
- ๋ฏธ๋ค์จ์ด๋ฅผ ๋ชจ๋ ์์ฒญ์ ๊ณตํต์ ์ผ๋ก ์ ์ฉํ๊ธฐ ์ํ ๋ฐฉ๋ฒ
- HTTP ์์ฒญ์ด ๋ค์ด์จ ์๊ฐ๋ถํฐ ์ ์ฉ๋ ์์๋๋ก ๋์
2) ๋ผ์ฐํฐ ๋ฏธ๋ค์จ์ด
- ๋ฏธ๋ค์จ์ด๊ฐ router ๊ฐ์ฒด์ ์ ์ฉ๋๋ ๊ฒ
- ํน์ ๊ฒฝ๋ก์ ๋ผ์ฐํ ์๋ง ๋ฏธ๋ค์จ์ด๋ฅผ ์ ์ฉํ๊ธฐ ์ํ ๋ฐฉ๋ฒ
- app ๊ฐ์ฒด์ ๋ผ์ฐํฐ๊ฐ ์ ์ฉ๋ ์ดํ๋ก ์์๋๋ก ๋์
3) ๋ฏธ๋ค์จ์ด ์๋ธ์คํ
- use ๋ HTTP method ํจ์์ ์ฌ๋ฌ ๊ฐ์ ๋ฏธ๋ค์จ์ด๋ฅผ ๋์์ ์ ์ฉ
- ์ฃผ๋ก ํ ๊ฐ์ ๊ฒฝ๋ก์ ํน์ ํด์ ๋ฏธ๋ค์จ์ด๋ฅผ ์ ์ฉํ๊ธฐ ์ํด ์ฌ์ฉ
- ์ ๋ฌ๋ ์ธ์์ ์์ ์์ผ๋ก ๋์
4) ์ค๋ฅ์ฒ๋ฆฌ ๋ฏธ๋ค์จ์ด
- ์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฅ ๋ง์ง๋ง์ ์์นํ๋ ๋ฏธ๋ค์จ์ด
- err, req, res, next ๋ค ๊ฐ์ง ์ธ์๋ฅผ ๊ฐ์ง๋ค.
- ์์ ๋ฏธ๋ค์จ์ด์์ next ํจ์์ ์ธ์๊ฐ ์ ๋ฌ๋๋ฉด ์คํ๋จ
- ์ด์ ์ ์ ์ฉ๋ ๋ฏธ๋ค์จ์ด ์ค, next์ ์ธ์๋ฅผ ๋๊ธฐ๋ ๊ฒฝ์ฐ ์ค๊ฐ ๋ฏธ๋ค์จ์ด๋ค์ ๋ฐ์ด๋๊ณ ์ค๋ฅ์ฒ๋ฆฌ ๋ฏธ๋ค์จ์ด๊ฐ ๋ฐ๋ก ์คํ๋๋ค.
5) ํจ์ํ ๋ฏธ๋ค์จ์ด
- ํ๋์ ๋ฏธ๋ค์จ์ด๋ฅผ ์์ฑํ๊ณ , ์๋ ๋ชจ๋๋ฅผ ์ ํํ๋ฉด์ ์ฌ์ฉํ๊ณ ์ถ์ ๊ฒฝ์ฐ
- ex) API ๋ณ๋ก ์ฌ์ฉ์์ ๊ถํ์ ๋ค๋ฅด๊ฒ ์ ํํ๊ณ ์ถ์ ๊ฒฝ์ฐ
2. REST API
- REST ์ํคํ ์ณ๋ฅผ ์ค์ํ๋ ์น API
- API: ์๋น์ค๋ ํ๋ก๊ทธ๋จ ๊ฐ์ ๋ฏธ๋ฆฌ ์ ํด์ง ๊ธฐ๋ฅ์ ์คํํ ์ ์๋๋ก ํ๋ ๊ท์ฝ
- REST: ์น์์ ์๋ฃ๋ฅผ ์ ์กํ๊ธฐ ์ํ ํํ ๋ฐฉ๋ฒ์ ๋ํ ์ํคํ ์ณ
2-1. REST API ๊ธฐ๋ณธ ๊ฐ์ด๋ - HTTP Method์ ์ฌ์ฉ
- REST API๋ API์ ๋์์ HTTP method + ๋ช ์ฌํ URL๋ก ํํ
- ex) /posts๋ผ๋ URL์ด '๊ฒ์๊ธ'์ด๋ผ๋ ์์์ ๊ฐ๋ฆฌํฌ ๋, GET/POST/PUT/DELETE์ HTTP method์ ๊ฒฐํฉํ์ฌ API ๋์ ์ ์
2-2. REST API ๊ธฐ๋ณธ ๊ฐ์ด๋ - URL ํํ๋ฒ
- REST API URL์ ์์์ ๋ณต์ํ์ผ๋ก ํํ
- ํ๋์ ์์์ ๋ํ ์ ๊ทผ => ๋ณต์ํ + ์์ด๋
- ex) /posts/1
2-3. REST API ๊ธฐ๋ณธ ๊ฐ์ด๋ - ๊ณ์ธต์ ์์
- REST API๋ URL์ ํตํด ์์์ ๊ณ์ธต์ ์ผ๋ก ํํ
- ex) /users/1/posts = 1๋ฒ ์ ์ ์ ๊ฒ์๊ธ ์ ์ฒด
REST API์ ๋ํ ๋ณด๋ค ์์ธํ ๋ด์ฉ์ ์ฌ๊ธฐ์ ์ ๋ฆฌํด ๋์๋ค.
3. JSON
- ์น API์์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋ ํํ์์ผ๋ก ์ฃผ๋ก ์ฌ์ฉ
- ์ด๋ค ๊ฐ์ฒด๋ฅผ ์น API๋ฅผ ํตํด ๋ฌธ์์ด๋ก ์ ๋ฌํ๊ธฐ ์ํด JSON์ ์ฌ์ฉ
- Object => { "key" : value } ๋ก ํํ
- Array => [ item1, item2 ] ๋ก ํํ
4. Express.js.๋ก REST API ๊ตฌํํ๊ธฐ
๐น ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ด Node.js ๋ชจ๋ ํ์ฉ
๐น ๊ฐ๋จํ ๋ฉ๋ชจ์ ์์ฑ, ์์ , ์ญ์ , ํ์ธ๊ธฐ๋ฅ API ๊ตฌํ
๐น express-generator๋ฅผ ์ฌ์ฉํ์ง ์๊ณ MVC ํจํด ๊ตฌํ
4-1. MVC ํจํด
- Model - View - Controller
- ํ๋ก์ ํธ์ ๊ธฐ๋ฅ๋ค์ ์ด๋ป๊ฒ ๋ถ๋ฆฌํ ์ง์ ๋ํ ํ๋์ ๊ตฌ์ฑ ๋ฐฉ๋ฒ
1) Model
- ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ๊ธฐ๋ฅ ๋๋ ๋ฐ์ดํฐ ๊ทธ ์์ฒด
- ๋ฐ์ดํฐ์ ์ฝ๊ธฐ, ์ฐ๊ธฐ๋ Model์ ํตํด์๋ง ์ด๋ฃจ์ด์ง๋๋ก ๊ตฌ์ฑ
2) View
- ๋ฐ์ดํฐ๋ฅผ ํํํ๋ ๊ธฐ๋ฅ
- Controller์ ์ํด ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ๋ฐ๊ณ , ํ๋ฉด์ ํ์ํด์ฃผ๋ ๊ธฐ๋ฅ
3) Controller
- Model์ ํตํด ๋ฐ์ดํฐ์ ์ ๊ทผํด์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ View๋ก ์ ๋ฌํ๋ ๊ธฐ๋ฅ
- ์น ์๋น์ค์์๋ ์ฃผ๋ก ๋ผ์ฐํ ํจ์๊ฐ ํด๋น ๊ธฐ๋ฅ ์ํ
4-2. ํ๋ก์ ํธ ๊ตฌํ ์ฌํญ
- JavaScript์ Array ํจ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๊ตฌํ
- router์ route handler๋ฅผ ์ฌ์ฉํ์ฌ HTTP ์์ฒญ, ์๋ต ์ฒ๋ฆฌ ๊ตฌํ
- ์ค๋ฅ์ฒ๋ฆฌ ๋ฏธ๋ค์จ์ด๋ฅผ ์ฌ์ฉํ์ฌ, ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ ๊ตฌํ
- ์ ์๋์ง ์์ ๋ผ์ฐํ ์ ๋ํด 404 ์ค๋ฅ ์ฒ๋ฆฌ ๊ตฌํ
5. Postman
- API๋ฅผ ํ ์คํธํ ์ ์๋ ๋๊ตฌ
- HTTP ์์ฒญ์ ์์ฝ๊ฒ ์์ฑํ์ฌ ํ ์คํธํ ์ ์์
- API๋ฅผ ๋ฌธ์ํ ํ ์ ์๋ ๊ธฐ๋ฅ ๋ฐ ๋ค์ํ ๋๊ตฌ ์ ๊ณต
5-1. Postman์ผ๋ก API ๋ฌธ์ํํ๊ธฐ
- collection๋ง๋ค๊ธฐ
- api request ๋ง๋ค๊ธฐ
- document ์์ฑํ๊ธฐ
- ์ ์ฒด ๋ฌธ์ ํ์ธํ๊ธฐ
5-2. Postman์ผ๋ก API ํ ์คํธํ๊ธฐ
- HTTP Method ์ค์ ํ๊ธฐ
- query param ์ฌ์ฉํ๊ธฐ
- path variable ์ฌ์ฉํ๊ธฐ
- body ์ฌ์ฉํ๊ธฐ