๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“’ JavaScript

Node.JS express๋กœ ์„œ๋ฒ„ ๊ตฌ์„ฑํ•˜๊ธฐ

by Tamii 2021. 2. 23.
๋ฐ˜์‘ํ˜•

ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์™œ ์‚ฌ์šฉํ• ๊นŒ?

Framework

๋ฐ˜๋ณต์ ์œผ๋กœ ์–ด๋””์—์„œ๋‚˜ ๋“ฑ์žฅํ•˜๋Š” ์ผ์„ ๋” ์ ์€ ์ฝ”๋“œ๋กœ ๋งŽ์€ ์ผ์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ

๋ฏธ๋ฆฌ ์ •์„ฑ๊ป ๊ตฌํ˜„ํ•ด๋†“์€ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•จ

 

๐Ÿค”

๊ฐœ๋ฐœ์ž๋Š”  

web์—์„œ ๋ฐ˜๋ณต์ ์œผ๋กœ ์–ด๋””์—์„œ๋‚˜ ์ผ์–ด๋‚˜๋Š” ์ผ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜์˜ ์ผ๋“ค์„  ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. 

- url ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ผ 

- ์ •์ ์ธ jsํŒŒ์ผ, imageํŒŒ์ผ๋“ค์„ ์ปดํ“จํ„ฐ์—์„œ ์ฝ์–ด์™€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณต

- ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„

- ๋ณด์•ˆ์ ์ธ ์ด์Šˆ ํ•ด๊ฒฐ

express

node.js ์˜ ๋ณดํŽธ์  ์›นํ”„๋ ˆ์ž„์›Œํฌ์ค‘ ํ•˜๋‚˜

๋ฐฐ์šฐ๊ธฐ ์–ด๋ ต์ง€๋งŒ, ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹์€ ํ”„๋ ˆ์ž„์›Œํฌ ์ค‘ ํ•˜๋‚˜

 

Node.js

์„œ๋ฒ„์‚ฌ์ด๋“œ์—์„œ ๋™์ž‘ํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ํ™˜๊ฒฝ

์„œ๋ฒ„์ธก์˜ ํ‘œ์ค€ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ฑ ๋Œ€๊ฑฐ ํฌํ•จ

nvm: ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ๋„๊ตฌ ์‚ฌ์šฉํ•˜์—ฌ ๋ฒ„์ „ ๊ด€๋ฆฌ

 

npm (node package manager)

Node.js ๊ฐœ๋ฐœ์—์ด์šฉํ•˜๋Š” ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ํˆด

์–ด๋–ค ํŒจํ‚ค์ง€์˜ ์–ด๋Š ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋Š”์ง€ "package.json" ์ด๋ผ๋Š” ํŒŒ์ผ์— ๊ธฐ๋กํ•ด ๊ด€๋ฆฌ 

 

 


ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ด์šฉํ•˜์ง€ ์•Š์€ ๊ฐ„๋‹จํ•œ ์„œ๋ฒ„ ๊ตฌ์ถ•ํ•ด๋ณด๊ธฐ (์‹ค์Šต)

๊ฐ„๋‹จํ•œ local ์„œ๋ฒ„ ๊ตฌ์ถ•

 

1๏ธโƒฃ ์ž‘์—…์šฉ ์ž„์˜ ํด๋” ์ƒ์„ฑ 

npm init -y

์ด ํด๋”์—์„œ ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ํ• ๋ž˜! ๋ผ๊ณ  npm์— ์ „๋‹ฌ

-> package.json ํŒŒ์ผ ์ƒ์„ฑ

 

2๏ธโƒฃjs ํŒŒ์ผ ์ƒ์„ฑ ( app.js)

 

const http = require('http');
const server = http.createServer((req,res)=>{
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World');
})
//8080์ด๋ผ๋Š” ํฌํŠธ์— 
server.listen(8080);

http ๋ชจ๋“ˆ๋กœ๋“œ

createServer ๋ฉ”์„œ๋“œ ์ด์šฉํ•˜์—ฌ ์„œ๋ฒ„ ์ƒ์„ฑ  ๋ณ€์ˆ˜์— ์ €์žฅ

req(request ์˜ ์„ธ๋ถ€ ์‚ฌํ•ญ)

res(response ๋ณด๋‚ด๊ธฐ ์œ„ํ•œ ํˆด ๊ทธ๋ฃน)

writeHead ๋ฉ”์„œ๋“œ๋กœ ์‘๋‹ตํ—ค๋” ์ง€์ • -> "Hello World" ํ…์ŠคํŠธ ๋ฉ”์„ธ์ง€ ๋ฐ˜ํ™˜ 

 

-> ์ƒ์„ฑ๋œ server object๊ฐ€ listen ๋ฉ”์„œ๋“œ ์‹คํ–‰ํ•˜์—ฌ ์š”์ฒญ ์ˆ˜์‹  

 

 

3๏ธโƒฃ app.js ํŒŒ์ผ ์‹คํ–‰

node app.js

 

โœจ์งœ์ž”~ ๋‚˜๋งŒ์˜ local ์„œ๋ฒ„ ์™„์„ฑ

์ฐธ๊ณ ์ž๋ฃŒ

[์งง์€ ์„œ๋ฒ„ ๊ธฐ์ดˆ๊ฐ•์˜] :www.youtube.com/watch?v=CGV_01QdM-4

 

 

 

 


๊ทธ๋Ÿฌ๋‚˜. ๋งค๋ฒˆ ์š”์ฒญ(request)์— ๋”ฐ๋ฅธ ์‘๋‹ต(response)์„ ํƒํ•˜๋Š”๊ฒƒ์€ ๊ท€์ฐฎ์ง€ ์•Š์„๊นŒ?

๊ทธ๋ž˜์„œ Node.js express ๋ผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค

 

Node.js ์˜ express ํ”„๋ ˆ์ž„์›Œํฌ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ (์‹ค์Šต)

express-generator: ์–‘์‹์„ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์ฃผ๋Š” ํˆด

1๏ธโƒฃ express ์„ค์น˜ 

npm install express --save

express ์„ค์น˜ํ•˜๊ณ , package.json ๋„ ์ •๋ฆฌํ•˜์‹œ๊ธธ-!

node_modulse ์ƒ์„ฑ

package-lock.json ์ƒ์„ฑ

express ์„ค์น˜ ํ™•์ธ 

 

 

2๏ธโƒฃํด๋”์™€ ํŒŒ์ผ ์ค€๋น„

< ํ•ด๋‹น๊ณผ ๊ฐ™์ด ํŒŒ์ผ๊ณผ ํด๋” ์„ค์ •

 

๐Ÿ“Œpublic :์— ์ •์ ํŒŒ์ผ๋“ค ๋ชจ์•„๋‘ 

    - css

    - images

    - js

 

๐Ÿ“Œindex.html : ์›นํŽ˜์ด์ง€์˜ ๋ผˆ๋Œ€ 

 

๐Ÿ“Œapi: ๋ฏธ๋“ค์›จ์–ด ๋‘˜๊ณณ๋“ค ( ํ›„์— ๋‚˜์˜ด)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3๏ธโƒฃ html, css ๊ตฌํ˜„

index.html

sample.css

sample.js

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>hello wrold!</h1>
    <p id="hoge"></p>
    <div>
        <img src="/img/sample.jpg">
    </div>
    <script src="./js/sample.js"></script>
</body>
</html>
h1{
    font-size: 1.5rem;
    color:pink;
}

img{
    max-width:100%;
}
{
    const el = document.getElementById('hoge');
    el.innerText=("hahahaha");
}

4๏ธโƒฃWeb ์„œ๋ฒ„ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ ( app.js )

const express = require('express');
const app=express();
//ํŒจ์Šค ์ง€์ •์šฉ ๋ชจ๋“ˆ
const path = require('path');
//8080ํฌํŠธ๋กœ ๊ธฐ๋‹ค๋ฆผ
app.listen(8080,()=>{
    console.log('Running at Port 8080');
})

//์š”์ฒญํŒŒ์ผ ๋ฃจํŒ…
app.use(express.static(path.join(__dirname,'public')));
//๊ธฐํƒ€ ๋ฆฌํ€˜์ŠคํŠธ 404์—๋Ÿฌ
app.use((req,res)=>{
    res.sendStatus(404);
})

โˆ™ express ๋ชจ๋“ˆ ๋กœ๋“œ ( http.createServer ๋Œ€์ฒด)

โˆ™ listen ๋ฉ”์„œ๋“œ : ๋ฆฌํ€˜์ŠคํŠธ ๋Œ€๊ธฐ  

โˆ™app.listen( ํฌํŠธ๋ฒˆํ˜ธ, ์‹œ์ž‘ ํ›„ ์ฝœ๋ฐฑํ•จ์ˆ˜ )

โˆ™app.use( express.static

   __dirname: Node.js์—์„œ ๋ฏธ๋ฆฌ ๋กœ๋“œํ•  ํ•„์š” ์—†๋Š” ๋ชจ๋“ˆ์ด ์ž‘์„ฑ๋œ ํŒŒ์ผ๊ฒฝ๋กœ ๋ฐ˜ํ™˜ : test

   path.join(__dirname,'public') : ์ •์ ํŒŒ์ผ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ํด๋”(public)๊ณผ ์—ฐ๊ฒฐํ•˜์—ฌ ์ „์ฒด๊ฒฝ๋กœ์ƒ์„ฑ : test/public

   express.static: Node.js์˜ ์ •์  ๋ฉ”์„œ๋“œ

   app.use( :๋ฃจํŒ…ํ•˜๋Š” ๋ฏธ๋“ค์›จ์–ด : Node.js express์˜ ์ •์ ๋ฉ”์„œ๋“œ์˜ ์ •์ ํŒŒ์ผ์ด ๋ชจ์—ฌ์žˆ๋Š” ํด๋” ๊ฒฝ๋กœ ์ „๋‹ฌ (๋ค๊ฒฝ๋กœ)

 

404 : ํ•ด๋‹น ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š์„๋•Œ 404 ์˜ค๋ฅ˜ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์„ค์ • 

 

์™„์„ฑ

 

 

 

 


API 

  :์ธํ„ฐํŽ˜์ด์Šค  SW ์™€ ์‚ฌ์šฉ์ž ์‚ฌ์ด์˜ ์†Œํ†ตํ•  ์ˆ˜ ์žˆ๋Š” ์ฐฝ๊ตฌ

   ์ง€์ •๋œ ํ˜•์‹์œผ๋กœ ์š”์ฒญ ๋ช…๋ น์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋‹จ

 

Rest API

HTTP ์„œ๋ฒ„์— REST API ์š”์ฒญ์„ ๋ณด๋‚ผ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์‹ ํ˜ธ ๊ทœ์•ฝ 

  :HTTP ์š”์ฒญ ๋ณด๋‚ผ๋•Œ ์–ด๋˜ URI ์–ด๋–ค ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ง€ ๊ฐœ๋ฐœ์ž๋“ค ์‚ฌ์ด์— ํ˜•์…ฉ๋œ ๊ทœ์น™ 

  : ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๋Š” ๋“ฑ , ์š”์ฒญ์„ ๋ณด๋‚ธ ์ฃผ์†Œ๋งŒ์œผ๋กœ๋„ ์–ด๋–ค ์š”์ฒญ์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ๋Š” 

  : ๊ฐ ์š”์ฒญ์ด ์–ด๋–ค ๋™์ž‘์ด๋‚˜ ์ •๋ณด๋ฅผ ์œ„ํ•œ ๊ฒƒ์ธ์ง€ ์š”์ฒญ์˜ ๋ชจ์Šต ์ž์ฒด๋กœ ์ถ”๋ก  ๊ฐ€๋Šฅ 

 

* ์กฐํšŒ (URI) : ์ž์›์„ ๊ตฌ์กฐ์™€ ํ•จ๊ป˜ ๋‚˜ํƒ€๋‚ด๋Š”

* ์ •๋ณด ์‚ญ์ œ, ์ˆ˜์ • : CREATE READ UPDATE DELETE

 

GET ๋ฐ์ดํ„ฐ Read (์กฐํšŒ)   www.naver.com ์ด ์„œ๋ฒ„์— html,js,css์š”์ฒญ
POST Create( ์ถ”๊ฐ€)  id: xxx pw:xxxx
์„œ๋ฒ„๋กœ ๋ณด๋‚ด์กŒ์„ ๋•Œ valid ํ•œ์ง€ ํ™•์ธ

DELETE 

์ œ๊ฑฐ ์œ ์ €๊ฐ€ ํƒˆํ‡ด
PUT Upadte (๋ณ€๊ฒฝ) ํ†ต์งธ๋กœ ํ”„๋กœํŒŒ์ผ ๋ณ€๊ฒฝ ์‹œ ์—…๋ฐ์ดํŠธ
PATCH  Update ์ผ๋ถ€ 

์ •๋ณด์ค‘ ์ผ๋ถ€๋ฅผ ํŠน์ • ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ

*P*** ( Body : ๋” ๋งŽ์ด ์ „์†ก ๊ฐ€๋Šฅ)

 

 

 


 

 

 

 

์ถœ์ฒ˜ 

์•„์ฃผ๋„์›€๋งŽ์ด ๋ฐ›์€ ๋ธ”๋กœ๊ทธ :codingcoding.tistory.com/1305

๋Œ“๊ธ€