Node.js์๋ ์์ฃผ ๊ฐํธํ๊ฒ http ์๋ฒ๋ฅผ ๋ง๋ค ์ ์๋ ๋ชจ๋์ด ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฌ๋์ด์๋ค.์๋์ ๊ฐ์ ์ฝ๋๋ง ์์ฑํ ๋ค, ์คํํ๋ฉด ์น์๋ฒ๊ฐ ์๋ํ๊ฒ ๋๋ค.๋ธ๋ผ์ฐ์ ์์ \[localhost:3000](http://localhost:3000) ์ผ๋ก ์ ์ํ๋ฉด H
์จ๋ผ์ธ ์ผํ๋ชฐ์์ ์ฅ๋ฐ๊ตฌ๋์ ๋ฌผ๊ฑด์ ๋ด๊ฑฐ๋, ํน์ ์น์ฌ์ดํธ์์ ๋คํฌ ๋ชจ๋๋ฅผ ์ค์ ํ๋ ๋ฑ์ ํ์๋ฅผ ํ๋ฉด ์ฌ์ฉ์๋ ๋ค์ ๋ฒ์๋ ์ฅ๋ฐ๊ตฌ๋์ ๋ฌผ๊ฑด์ด ๋ด๊ฒจ์์ ๊ฒ์ด๊ณ , ๋คํฌ ๋ชจ๋๊ฐ ๊ทธ๋๋ก ์ ์ง๋ ๊ฒ์ด๋ผ๊ณ ์์ํ๋ค.(์ค์ ๋ก ๊ทธ๋ ๊ฒ ์๋ํ๊ธฐ ๋๋ฌธ์ ๊ฒฝํ์ ์ํด์)์ด๋ ๊ฒ ์์ฃผ ์์ง๋ง
๋ธ๋ผ์ฐ์ ์ ์๋ฒ๊ฐ HTTP ํต์ ์ ํ ๋, Request๋ฅผ ๋ณด๋ด๊ณ Response๋ฅผ ๋ฐ๋๋ค.์ด Request์ Response๋ ์ฌ์ค ์์์ด ์ ํด์ง ๋ฌธ์์ด์ผ ๋ฟ์ด๋ค.GET /path?q1=a HTTP/1.1\\r\\n๋๋ต ์์ ๊ฐ์ ๋ชจ์ต์ ํ๊ณ ์๋ค.์ฒ์์ GET, P
ํ์๊ฐ์ , ๋ก๊ทธ์ธ ๋ฑ์ ๊ตฌํํ ๋, <form> ํ๊ทธ ๋ด๋ถ์ ์์นํ <input /> ๋ด๋ถ์ ๊ฐ ID, ๋น๋ฐ๋ฒํธ ๋ฑ์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ ๋ ฅํ๊ฒ ํ ๋ค, ๋ง์ง๋ง์ Submit ๋ฒํผ์ ๋๋ฅด๋ฉด ๋ชจ๋ ์ ๋ณด๊ฐ ์๋ฒ๋ก ์ ์ก๋๊ณ , ๊ทธ ์ ๋ณด๋ฅผ ํ ๋๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฌ์ฉ์์
์ธํฐ๋ท์์ ํน์ ํค์๋๋ ์ด๋ฏธ์ง ๋ฑ์ ๊ฒ์ ํ ๋, ๋ณดํต QueryString์ ๊ฒ์์ด์ ๋ํ ์ ๋ณด๋ฅผ ๋ฃ์ด์ ์๋ฒ๋ก ์ ๋ฌํ๊ฒ ๋๋ค.์๋ฅผ ๋ค์ด ๋ค์ด๋ฒ์์ macbook์ ๊ฒ์ํ๋ค๋ฉด, ๋ค์ url๋ก ์ด๋๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.https://search.naver.
REST๋, Representational State Transfer์ ์ฝ์ด๋ก ์ํํธ์จ์ด ์ํคํ ์ณ ์คํ์ผ์ ์ผ์ปซ๋๋ค.์ข ๋ ํ์ด์ ์ค๋ช ํ๋ฉด, REST์ ๊ตฌ์ฑ ์์๋ก ์์(Resource), ํ์(Verb), ํํ(Representation)์ด ์กด์ฌํ๋๋ฐ, ์ฌ๊ธฐ์ ์์์
Node.js ์ง์์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ์น ํ๋ ์์ํฌ๋ ๋จ์ฐ์ฝ express๋ค.State of JS 2022์ ์ค๋ฌธ ๊ฒฐ๊ณผ๋ฅผ ๋ด๋ express๊ฐ ์๋์ ์ด๊ณ , ์ค์ ๋ค์ด๋ก๋ ์๋ ๊ฐ์ฅ ๋๋ค.๋ฌผ๋ก ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ค๋ ๊ฒ์ด ๊ฐ์ฅ ์ข๋ค๋ ๋ป๋ ์๋๊ณ , ์ต๊ทผ์๋ expre
์์ Node.js์ ๊ธฐ๋ณธ http ๋ชจ๋์ ์ฌ์ฉํ๋ฉด์ ๋ค์ํ ์ข ๋ฅ์ Request๋ฅผ ํ์ฑํด ๋ณด์๋ค.์ง๊ธ๊น์ง ํ๋ ๊ฒ๋ค์ ์ ๋ถ ๋ชจ์์ express์์๋ ์ด๋ป๊ฒ ํ๋์ง, ๊ฐ๋จํ๊ฒ ์ดํด๋ณด๋๋ก ํ์.http://localhost:3000/?a=1&b=2URL ๋งจ ๋ค
์์ Node.js์ http ๋ชจ๋์ ๊ฐ์ง๊ณ ๊ฐ๋จํ TODO CRUD ๊ธฐ๋ฅ์ด ์๋ ์๋ฒ๋ฅผ ๋ง๋ค์ด ๋ณด์๋ค.(์๋ ๋งํฌ ์ฐธ์กฐ) https://velog.io/@mainfn/Node.js-http-%EB%AA%A8%EB%93%88%EB%A1%9C-RESTful-API-%EC
์๋ฒ๊ฐ ๊ฐ๊ณ ์๋ ์ฌ๋ฌ ์ข ๋ฅ์ ํ์ผ์ ํด๋ผ์ด์ธํธ์ ๊ทธ๋๋ก ์ ๋ฌํด์ผ ๋ ๋๊ฐ ์๋ค.์๋ฒ์ ์ ์ฅ๋ ์ด๋ฏธ์ง๋ฅผ ์ ๊ณตํ๋ ์ด๋ฏธ์ง ์๋ฒ๋ผ๋๊ฐ, json ๋ฐ์ดํฐ๋ฅผ ํด๋ผ์ด์ธํธ์์ ๋ค์ด๋ก๋ ๋ฐ์ ์ ์๋๋ก ์ ๊ณตํ๋ ๋ฑ, ์ด๋ค ํ์ ์ ํ์ผ์ด๋ผ๋ ์ ๋ฌ์ด ๊ฐ๋ฅํ๋ฐ, express์ ๋ด์ฅ ๋ฏธ
node main.jsNode.js๋ก main.js JS ํ์ผ์ ์คํํ๋ ๋ช ๋ น์ด๋ค.Java๋ C์ฒ๋ผ ์ฌ๋ฌ ์ต์ ์ ๋ฃ์ด ์ปดํ์ผํ ๋ค ์คํํ๋ ๋ฒ๊ฑฐ๋ก์ด ๊ณผ์ ์ ์์ง๋ง, ์ฝ๋๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์ฌ์คํ ํด์ผ ํ๋ค๋ ๋จ์ ์ด ์๋ค.GET /๋ก ์ ์ํ๋ฉด 'OK'๋ผ๋ ์๋ต์ ๋ฐ์ ์
๊ณต์ ๋ฌธ์๋ฅผ ์ดํด๋ณด๋ฉด ๋ฏธ๋ค์จ์ด๋ Request, Response์ ์ ๊ทผ ๋ฐ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ฉฐ, Request-Response ์ฌ์ดํด์ ์ข ๋ฃํ ์ ์๊ณ , next() ํจ์ ํธ์ถ์ ํตํด ๋ค์ ๋ฏธ๋ค์จ์ด์ ์คํ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ ์ ์๋ค๊ณ ์ค๋ช ํ๊ณ ์๋ค.https://ex
๋ฏธ๋ค์จ์ด๋ ์์ฑ ์์๊ฐ ๋งค์ฐ ์ค์ํ๋ค.๋ผ์ฐํฐ๋ ๊ฒฐ๊ตญ Request-Response Cycle์ ์คํ๋๋ ๋ฏธ๋ค์จ์ด๋ผ๊ณ ๋ณผ ์ ์์ ๊ฒ์ด๋ค.๊ทธ๋ ๊ธฐ์ ๋ผ์ฐํฐ๋ ์์ฑ ์์๊ฐ ์ค์ํ๋ค.ํนํ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์๋ ์์๊ฐ ๋ฌ๋ผ์ง๋ฉด ๊ฐ๋ฐ์์ ์๋์ ์ ํ ๋ค๋ฅด๊ฒ ๋์ํ ๊ฐ๋ฅ์ฑ์ด ์๋ค.
ํ์๊ฐ์ /๋ก๊ทธ์ธ์ ๊ฑฐ์ ๋ชจ๋ ์น ์๋น์ค์์ ์ ๊ณตํ๋ ์์ฃผ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ์ด๋ค.์๋ฅผ ๋ค์ด ์ธ์คํ๊ทธ๋จ๊ฐ์ด ์ฌ์ง ๊ณต์ ์์ ๋คํธ์ํฌ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ค๋ฉด, ์ฌ์ฉ์๊ฐ ์ฌ์ง์ ์ ๋ก๋ํ๊ณ ๋ค๋ฅธ ์ฌ์ฉ์๋ฅผ ํ๋ก์ฐ ํ๋ ๋ฑ, ๊ฐ ์ฌ์ฉ์์ ๋ฐ์ดํฐ๊ฐ ์ง์์ ์ผ๋ก ๋์ ๋ ๊ฒ์ด๋ค.์ด๋ ๊ฒ ์์ธ ๋ฐ์ด
์ด์ ์ฅ์ ์์ฑํ๋ ํ์๊ฐ์ ์์คํ ์ ์ข ๋ ๊ฐ์ ํด๋ณด๋๋ก ํ๊ฒ ๋ค.๋ค์๊ณผ ๊ฐ์ด 4๋ช ์ ํ์์ด ์ฐ๋ฆฌ ์๋น์ค์ ๊ฐ์ ํ์ฌ users.json์ ์ ๋ณด๊ฐ ์ ์ฅ๋ ์ํ๋ผ๊ณ ์๊ฐํด๋ณด์.๋ง์ฝ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋ด์ ์ด ํ์ผ์ด ํด์ปค์ ์ํด ํ์ทจ๋๋ค๋ฉด?์ผ๋ฐ์ ์ผ๋ก ๋ง์ ์ฌ์ฉ์๋ค์ด ์ฌ๋ฌ ์๋น์ค์
๊ตฌ๊ธ, ์ ํ, ํ์ด์ค๋ถ, ๋ค์ด๋ฒ ๋ฑ ๊ฑฐ๋ ํ๋ซํผ ํ์ฌ์ ๊ณ์ ์ ํตํด ๋ก๊ทธ์ธ ํ๋ ๊ธฐ๋ฅ๋ ์๋นํ ์ค๋๋์๊ธฐ ๋๋ฌธ์ ๋๋ถ๋ถ์ ์ฌ์ฉ์๋ค์ด ์ด๋ฌํ ๊ธฐ๋ฅ์ ๋ํด์ ์ ์๊ณ ์์ ๊ฒ์ด๋ค.๊ทธ๋ฌ๋ ๋ด๋ถ์ ์ผ๋ก ์ด๋ป๊ฒ ๋์๊ฐ๋์ง ์๋ ์ฌ๋์ ๋ณ๋ก ์๋๋ฐ,์ฌ์ฉ์๊ฐ ์ ํ๋ฉด์์ ๋ก๊ทธ์ธ ํ
์ํคํผ๋์๋ ์ฟ ํก ๋ฑ์ ์๋น์ค๋ฅผ ์ด์ฉํ๋ฉด์ ์ฐ๋ฆฌ๊ฐ ์ง์ ์ด๋ฏธ์ง๋ฅผ ์ ๋ก๋ ํ ์ผ์ ๋ณ๋ก ์๊ฒ ์ง๋ง ์ํคํผ๋์์์๋ ์๋ง์ ์ง์์ธ๋ค์ด, ์ฟ ํก์์๋ ์๋ง์ ํ๋งค์๋ค์ด, ๋งค์ผ๊ฐ์ด ์ด๋ฏธ์ง๋ฅผ ์ถ๊ฐ/์ญ์ ํ๋ ๊ธฐ๋ฅ์ ์ด์ฉํ๊ณ ์์ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ ๊ฒ ์ถ๊ฐ๋ ์ด๋ฏธ์ง๋ ์ฐ๋ฆฌ ๊ฐ์