1. ์น
- ์ฌ์ ์ ์๋ฏธ: World Wide Web, ์ธํฐ๋ท์์์ ๋์ํ๋ ๋ชจ๋ ์๋น์ค
- ์ผ๋ฐ์ ์๋ฏธ: ์น ๋ธ๋ผ์ฐ์ ๋ก ์ ์ํด์ ์ด์ฉํ๋ ์๋น์ค, ์น ์ฌ์ดํธ
1-1. ์น ์๋น์ค ๋์ ๋ฐฉ์
- HTTP ์์ฒญ๊ณผ ์๋ต์ ๋ฐ๋ณต
- HTTP ์์ฒญ
- ์ฌ์ฉ์๊ฐ ์ด๋ค ๋ฐ์ดํฐ๊ฐ ํ์ํ์ง ์๋ฒ์๊ฒ ์๋ฆฌ๋ ์ญํ
- ์ด๋ค ์ฌ์ฉ์๊ฐ, ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ํ์๋ก ํ๋์ง ๋ฑ์ ๋ด๊ณ ์์
- HTTP ์๋ต
- HTTP ์์ฒญ์ ํด๋นํ๋ ์ ์ ํ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ์ญํ
- ์์ฒญํ ๋ฐ์ดํฐ์, ์ด๋ค ๋ฐ์ดํฐ๊ฐ ์ ์ก๋๋์ง ๋ฑ์ ๋ด๊ณ ์์
1-2. ๋ฐฑ์๋์ ํ๋ก ํธ์๋
ํ๋ก ํธ์๋
- ์ฌ์ฉ์๊ฐ ์ง์ ์ฌ์ฉํ๊ฒ ๋๋ ์น ํ์ด์ง๋ฅผ ์ฃผ๋ก ๋ด๋น
- = ํด๋ผ์ด์ธํธ
๋ฐฑ์๋
- ์ฌ์ฉ์์๊ฒ ๋ณด์ด์ง ์๋ ๋ฐ์ดํฐ ๊ฐ๊ณต ๋ฑ์ ๊ธฐ๋ฅ์ ์ฃผ๋ก ๋ด๋น
- = ์๋ฒ
1-3. ์ ์ ์น๊ณผ ๋์ ์น
์ ์ ์น
- ์ฌ์ฉ์์ ์ํธ์์ฉํ์ง ์๋ ํ์ด์ง โก ๋จ๋ฐฉํฅ ํต์
- Link๋ฅผ ํตํ ํ์ด์ง ์ด๋ ์ ๋๋ง ๊ฐ๋ฅ
- ์ผ๋ฐ์ ์ผ๋ก ๋ณํ์ง ์๋ html ํ์ผ๋ก ์ ๊ณต
๋์ ์น
- ์ฌ์ฉ์์ ์ํธ์์ฉ์ ํจ โก ์๋ฐฉํฅ ํต์
- ํ๋ก ํธ์๋์ ๋ฐฑ์๋๊ฐ ์ ๊ธฐ์ ์ผ๋ก ํต์ ํ๋ฉฐ ๋์
1-4. ๋์ ์น์ ๋ ๊ฐ์ง ๊ตฌํ ๋ฐฉ๋ฒ
2. ์น ํ๋ ์์ํฌ
- ์น ์๋น์ค์ ํ์ํ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํด์ฃผ๋(Web) ๋ค์ํ ๋๊ตฌ๋ค์ ๋ชจ์(Framework)
- ์ ํํ๋ ๋ถ๋ถ์ ๊ฐ๋จํ๊ฒ ๊ตฌํํ๊ณ , ํ์ํ ๋ถ๋ถ๋ง ์ง์คํด์ ๊ฐ๋ฐํ ์ ์๋ค.
2-1. ์น ํ๋ ์์ํฌ์ ๊ธฐ๋ณธ ๊ตฌ์ฑ์์
์น ์๋น์ค์ ์ ํํ ๋ ๊ตฌ์ฑ์ ๋ง์ ์น ํ๋ ์์ํฌ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต
1) HTTP ์์ฒญ/์๋ต ์ฒ๋ฆฌ
- ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ํ์๋ก ํ๋์ง, ์ด๋ค ์ฌ์ฉ์๋ก๋ถํฐ ์์ฒญ์ด ์์ ๋์๋์ง ๋ฑ
- ์๋ต ๋ฐ์ดํฐ๊ฐ ์ด๋ค ํ์์ธ์ง, ์๋ต ์ํ๊ฐ ์ ์์ ์ธ์ง ๋ฑ
2) ๋ผ์ฐํ
- HTTP ์์ฒญ์ ๋ถ๊ธฐํ๋ ๋ฐฉ๋ฒ
- HTTP ์์ฒญ URL์ ํด๋นํ๋ ์๋ง์ ์๋ต์ ๊ฒฝ๋ก๋ฅผ ๋ฏธ๋ฆฌ ์ค์
3) HTML Templating
- SSR์ ๊ตฌํํ๊ธฐ ์ํ ๋ฐฉ๋ฒ
- SSR์์ ์๋ต์ผ๋ก ๋ณด๋ผ HTML์ ์๋ฒ์์ ์์ฑํ๊ธฐ ์ํด HTML์ ๋ผ๋๋ฅผ ๋ฏธ๋ฆฌ ์์ฑ
3. Express.js
3-1. Express.js๋ฅผ ์ฌ์ฉํ๋ ์ด์
- Node.js์ ์น ํ๋ ์์ํฌ ์ค ๊ฐ์ฅ ์ ๋ช ํ ์น ํ๋ ์์ํฌ
- ํ์์ ๋ฐ๋ผ ์ ์ฐํ ๊ตฌ์กฐ ์ค์ ๊ฐ๋ฅ
- ๋ค์ํ ๋ฏธ๋ค์จ์ด๋ฅผ ํตํด ํ์ํ ๊ธฐ๋ฅ์ ๊ฐ๋จํ๊ฒ ์ถ๊ฐ ๊ฐ๋ฅ
3-2. Express.js ์์ํ๊ธฐ
- express-generator: ํ๋ก์ ํธ ์์ฑ๊ธฐ, ํ๋ก์ ํธ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ ์๋ ์์ฑ
$npm i -g express-generator
$express my-web
$cd my-web
$npm i
$npm start
- npx + express-generator๋ก express-generator๋ฅผ ์ค์นํ์ง ์๊ณ ๋ฐ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
$npx express-generator my-web
$cd my-web
$npm i
$npm start
3-3. Express.js์ ๊ตฌ์กฐ
app.js | Express.js์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ ํ์ผ, ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ฅ์ ์ ์ |
bin/www | Express.js์ ์คํ ๋ถ๋ถ์ ๋ด๋น, ํฌํธ์ ์คํ ์ค๋ฅ ๋ฑ์ ์ ์ |
package.json | ํ๋ก์ ํธ ์์กด์ฑ ๋ฐ ์คํฌ๋ฆฝํธ ์ ์ |
public | ์ฝ๋๋ฅผ ํตํ์ง ์๊ณ , ์ง์ ์ ๊ณต๋๋ ํ์ผ ๋๋ ํฐ๋ฆฌ |
routes | ๋ผ์ฐํ ํ์ผ ๋๋ ํฐ๋ฆฌ |
views | HTML Template ๋๋ ํฐ๋ฆฌ |
4. Express.js์ ๋์ ๋ฐฉ์
express-generator ๋ก ๋ง๋ค์ด์ง ํ๋ก์ ํธ ๋๋ ํฐ๋ฆฌ์ ์ ๊ทผ
npm start ๋ก Express.js ํ๋ก์ ํธ๋ฅผ ์คํ
localhost:3000 ์ ์ ์ํ์ฌ Welcome to Express ํ์ด์ง ํ์ธ
4-1. app.js
var express = require('express');
...
var app = express();
- require ๋ชจ๋๋ก ๋ก๋๊ฐ ๋ express๋ฅผ ํจ์ํ ๋ชจ๋๋ก ์ฌ์ฉํด์ app ๊ฐ์ฒด ์์ฑ
- app ๊ฐ์ฒด: Express.js์ ๊ธฐ๋ฅ์ ๋ด์ ๊ฐ์ฒด
- Express.js์ ๋ชจ๋ ๋์์ app ๊ฐ์ฒด์ ์ ์ โก express๋ app ๊ฐ์ฒด๋ก๋ถํฐ ์์ํด์ ๋ชจ๋ ์์ฒญ์ ์ฒ๋ฆฌ
โจ app ๊ฐ์ฒด์ ์ฃผ์ ๊ธฐ๋ฅ
app.use( )
- middleware๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ํจ์
app.listen( )
- http ์๋ฒ๋ฅผ ์์ฑํด์ฃผ๋ ํจ์
- express-generator๋ฅผ ์ฌ์ฉํ๋ฉด http.createServer๋ฅผ ์ฌ์ฉํ๋๋ฐ, app.listen ํจ์๋ก ๋์ฒด ๊ฐ๋ฅ
app.locals
- app์์ ์ฌ์ฉํ ๊ณตํต ์์
- Express.js์์ global ๋ณ์๋ฅผ ์ ์ธํ์ง ์๊ณ ์ด ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅ
4-2. ๋ผ์ฐํ
1) app ๋ผ์ฐํ
app.get('/', (req, res) => {
res.send('GET /');
});
app.post('/', (req, res) => {
res.send('POST /');
});
app.all('/all', (req, res) => {
res.send('ANY /');
});
- app ๊ฐ์ฒด์ ์ง์ get, post, put, delete ํจ์๋ฅผ ์ฌ์ฉํ์ฌ HTTP method๋ก ๋ผ์ฐํ ๊ฐ๋ฅ
- HTTP method์ ์ฒซ ๋ฒ์งธ ์ธ์ = ์ด ๋ผ์ฐํ ์ ์คํํ URL
- HTTP method์ ๋ง์ง๋ง ์ธ์ = ์ด ๋ผ์ฐํ ์ด ์คํ๋ ๋ ์๋ํ๋ ํจ์
- all ํจ์ ์ฌ์ฉ ์, HTTP method์ ์๊ด์์ด ๋ผ์ฐํ ๊ฐ๋ฅ
2) Express.Router
const express = require('express');
const router = express.router();
router.get('/', (req, res, next) => {
res.send('respond with a resource');
});
module.exports = router;
- router ๊ฐ์ฒด์๋ get, post, put, delete ํจ์ ์ฌ์ฉ ๊ฐ๋ฅ
- ์ฒซ ๋ฒ์งธ ์ธ์ = ๋ผ์ฐํ ๋ URL
- ๋ง์ง๋ง ์ธ์ = ๋ผ์ฐํ ์ ์คํ๋ ํจ์
- ๋ผ์ฐํฐ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ชจ๋๋ก ๋ง๋ค์ด์ ์ฌ์ฉ
// .app.js
const userRouter = require('./routes/users');
const app = express();
app.use('/users', userRouter);
// .routes/users.js
const petRouter = require('./pets');
const router = express.Router();
router.use('/pets', petRouter);
module.exports = router;
- ์์ฑ๋ ๋ผ์ฐํฐ ๋ชจ๋์ app ์ use ํจ์๋ก ์ฐ๊ฒฐํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅ
- router ๊ฐ์ฒด์๋ ํ์ ๋ผ์ฐํฐ๋ฅผ use ํจ์๋ก ์ฐ๊ฒฐํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅ
3) path parameter ์ฌ์ฉ
- ์ฃผ์์ ์ผ๋ถ๋ฅผ ๋ณ์์ฒ๋ผ ์ฌ์ฉ ๊ฐ๋ฅ
/users/:id โก /users/123, /users/456 ๋ฑ์ผ๋ก ์ ์ํ์ ๋ ๋ผ์ฐํ ์ ์ฉ
/messages/:from-:to โก /message/123-456 ๋ฑ์ผ๋ก ์ ์ํ์ ๋ ๋ผ์ฐํ ์ ์ฉ
4) Request Handler
- ๋ผ์ฐํ ์ ์ ์ฉ๋๋ ํจ์
- HTTP ์์ฒญ๊ณผ ์๋ต์ ๋ค๋ฃฐ ์ ์๋ ํจ์
- ์ค์ ๋ ๋ผ์ฐํ ๊ฒฝ๋ก์ ํด๋นํ๋ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์คํ
router.get('/:id', (req, res) => {
const id = req.params.id;
res.send(`hello ${id}`);
});
- router๋ app์ HTTP method ํจ์์ ๊ฐ์ฅ ๋ง์ง๋ง ์ธ์๋ก ์ ๋ฌ๋๋ ํจ์
- Request ๊ฐ์ฒด์ Response ๊ฐ์ฒด ์กด์ฌ
- Request ๊ฐ์ฒด์ ์ฃผ์ ๊ฐ ๋ฐ ํจ์
req.params | URL ํํ ์ค /path/:id ์์ :id ๋ฅผ req.params.id๋ก ์ฌ์ฉ ๊ฐ๋ฅ |
req.queries | URL ํํ ์ค /path?page=2 ์์ page ๋ถ๋ถ์ req.queries.page๋ก ์ฌ์ฉ ๊ฐ๋ฅ |
req.body | ์ผ๋ฐ์ ์ผ๋ก POST ์์ฒญ์ ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์๊ณ , req.body์ ์์ฒญ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ด ๋ค์ด์ด |
req.get('') | HTTP Request์ ํค๋ ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์์, req.get('ํค๋๋ช ') |
- Response ๊ฐ์ฒด์ ์ฃผ์ ๊ฐ ๋ฐ ํจ์
res.send() | text ํ์์ HTTP ์๋ต ์ ์ก |
res.json() | json ํ์์ HTTP ์๋ต ์ ์ก |
res.render() | HTML Template์ ์ฌ์ฉํ์ฌ ํ๋ฉด ์ ์ก |
res.set() | HTTP ์๋ต์ ํค๋ ์ค์ |
res.status() | HTTP ์๋ต์ ์ํ ๊ฐ ์ค์ |
โจ Express.js ๋์๋ฐฉ์ ์ ๋ฆฌ
Express.js ๋ app ๊ฐ์ฒด๋ฅผ ์์์ผ๋ก ๋ชจ๋ ๋์์ด ์ด๋ฃจ์ด์ง
app ๊ฐ์ฒด๋ Express.Router ๋ฅผ ์ฌ์ฉํ์ฌ ๋ผ์ฐํ ์ ๊ตฌํํ ์ ์์
Request Handler๋ฅผ ํตํด HTTP ์์ฒญ๊ณผ ์๋ต์ ์ฒ๋ฆฌํ ์ ์์
'elice > WIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[week_06] MongoDB์ Mongoose (0) | 2022.02.16 |
---|---|
[week_06] Express.js์ REST API | Middleware, JSON, Postman (0) | 2022.02.15 |
[week_06] Node.js ๊ธฐ์ด | NPM์ ์ดํด, NPX, Node.js์ ๋ชจ๋, ES Module (0) | 2022.02.12 |
[week_06] Node.js ๊ธฐ์ด | Node.js์ ์ดํด, ํน์ง, ES6, ๋น๋๊ธฐ ์ฝ๋ฉ, ์ด๋ฒคํธ ๋ฃจํ (0) | 2022.02.12 |
[week_05] async/await๊ณผ API (0) | 2022.02.09 |