Gallery
Search

1. MVC ๋์์ธ ํจํด
History
โข
1979๋
์ ๋ก์ค ํ๋ก์ํ ์ฐ๊ตฌ์์์ย ํธ๋ผ์ด๋ธ ๋ฆฐ์ค์ผ์ด์ง๋ผ๋ ๋ถ์ด MVC๋ฅผ ์ฒ์ ๋ง๋ค์๋ค.
โข
๋ณต์กํ๊ณ ์ด๋ ค์ด ๋ฐ์ดํฐ๋ค์ ๋ค์ํ ๊ด์ ์์ ๋ค๋ฃจ๊ธฐ ์ํ ์๋ฃจ์
์ผ๋ก MVC๊ฐ ๋ฑ์ฅํ์
โฆ
์ฐธ๊ณ ๋ก ์ ์ฐ๊ตฌ์๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ OOP๋ฅผ ์ฐฝ์ํ ์จ๋ฐ ์ผ์ด๋ ์๋ค.
โฆ
ํ์ฌ ์ฌ์ฉ๋๊ณ ์๋ ์ปดํจํฐ ๋ฐ ๋คํธ์ํฌ ์ ๋ฐ์ ๋ํ ๊ฐ์ฅ ์ค์ํ ์์ฒ ๊ธฐ์ ์ ๊ฐ๋ฐํ ๊ณณ์ผ๋ก ์ ๋ช
(GUI OS, ์ด๋๋ท(LAN์ฐ๊ฒฐ๋ฐฉ์), ๋ณผ ๋ง์ฐ์ค, ๊ด ๋ง์ฐ์ค)
MVC(Model-View-Controller) ์ํํธ์จ์ด ๋์์ธ ํจํด?
โข
์ฌ์ฉ์ ์ธํฐํ์ด์ค, ๋ฐ์ดํฐ ๋ฐ ๋
ผ๋ฆฌ ์ ์ด๋ฅผ ๊ตฌํํ๋๋ฐ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์ํํธ์จ์ด ๋์์ธ ํจํด
โข
์ํํธ์จ์ด์ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ํ๋ฉด์ ๊ตฌ๋ถํ๋๋ฐ ์ค์ ์ ๋๊ณ ์์
โข
์ด๋ฌํ "๊ด์ฌ์ฌ ๋ถ๋ฆฌ" ๋ ๋ ๋์ ์
๋ฌด์ ๋ถ๋ฆฌ์ ํฅ์๋ ๊ด๋ฆฌ๋ฅผ ์ ๊ณต
โข
MVC์ ์ฃผ์ ์ฅ์
1.
์ปดํฌ๋ํธ์ ๋ช
ํํ ์ญํ ๋ถ๋ฆฌ๋ก ์ธํด ์๋ก๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ธฐ ์ํจ
2.
์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ ๋ฐ ํ์ฅ์ฑ์ ๋์ด๊ธฐ ์ํจ
3.
์๋น์ค๋ฅผ ์ ์ง๋ณด์ํ๊ณ ํ
์คํธํ๋๋ฐ ์ฉ์ดํด์ง
4.
๊ฐ๋ฐ์ ๊ฐ์ ์ปค๋ฎค๋์ผ์ด์
ํจ์จ์ฑ์ ๋์ผ ์ ์์
[Node.js] 13. MVC ๋์์ธ ํจํด๊ณผ ๋ฆฌํฉํ ๋ง

1. ํ๋ฌ๊ทธ์ธ ์ค์น
Marketplace์์ ์๋ ํค์๋๋ก ๊ฒ์ํ์ฌ ๊ฐ๊ฐ ์ค์นํ๋ค.
โข
SQLTools

โข
@tag:sqltools-driver

[Node.js] 12. ๋ฐ์ดํฐ๋ฒ ์ด์ค GUI VSCode ํ๋ฌ๊ทธ์ธ

Visual Studio Code์์ EJS ๋ฌธ๋ฒ ์ธ์ ๋ถ๊ฐ
๋ฌธ๋ฒ์ ๊ธฐ๋ฅ์ ์ ์ ์๋๋๋๋ฐ ์๋์ฒ๋ผ IDE๊ฐ ์ธ์ํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๋ค.

๋ง์ผํ๋ ์ด์ค์์ ๊ด๋ จ ํ๋ฌ๊ทธ์ธ์ ์ค์นํด๋ ํด๋น ๋ฌธ์ ๋ ํด๊ฒฐ๋์ง ์๋๋ค.

[Node.js] 11. Visual Studio Code์์ EJS ๋ฌธ๋ฒ <% โฆ %> ๋นจ๊ฐ์ค ์ธ์๋ถ๊ฐ ํด๊ฒฐ
Ajax โ Fetch API
์ด์ Ajax๋ฅผ ํตํด์ REST ์ํคํ
์ฒ๋ฅผ ๊ฐ์ถ์์ง๋ง jQuery AJAX๋ ์์ฒญ์ ๋ณด๋ด๊ณ , ์ฑ๊ณต ๋ฐ ์ค๋ฅ์ ๋ํ ๊ฐ๊ฐ์ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ง์ ๊ตฌํํ๊ณ ์์๋ค. success ๋ถ๋ถ์ function, error ๋ถ๋ถ์ function ์ด๋ฅผ ํตํด ๋น๋๊ธฐ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฅ์ ๊ตฌํ๋๊ณ ์๋ ๊ฒ์ด๋ค.
ํ์ง๋ง ์ฌ๋ฌ ์ฝ๋ฐฑํจ์๋ฅผ ์ง์ ์์ฑ, ์ฌ์ฉํด์ผ ํ๋ฏ๋ก ์ฝ๋๊ฐ ๋ค์ ๋ณต์กํด์ง ์ ์๋ ๋ฌธ์ ์ ์ด ์์๋ค.

์ด๋ฌํ ๋ฌธ์ ์ ์ ๊ฐ์ ํ ์ ์์๋๊ฑด Promise๊ฐ์ฒด๋ก ์คํจ, ์ฑ๊ณต ์ํ๋ฅผ ๊ฐ์ง๋ ๊ฐ์ฒด๋ก์จ Fetch API ํจ์๋ ํญ์ ์ด ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ ๊ฒ์ผ๋ก ์ค๊ณ๋์๋ค.

๋ฐ๋ผ์, fetch() ๋ฉ์๋๋ฅผ ํตํด์ ๋ฉ์๋ ์ฒด์ด๋(. ์ฐ๊ฒฐ)์ ํตํด .then()๊ณผ .catch() ๋ฉ์๋๋ฅผ ์ฌ์ฉ ํ ์ ์์ด ๊ตฌ์กฐ์ ์ผ๋ก ๊ฐ๋
์ฑ์ ๋์ด๋ ์ญํ ์ ํ๊ฒ ๋์๋ค.
[Node.js] 10. ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์คํ์ผFetch API ์์ฒญ ๋ฆฌํฉํ ๋ง

REST API
HTML ํผ(form) ์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก GET๊ณผ POST ๋ฉ์๋๋ง ์ง์ํ๊ณ ์๋ค. ํ๋ก ํธ์ form action์ method ์์ฑ์ put์ผ๋ก ๋ณ๊ฒฝํ๊ณ ๋ฐฑ์๋ ๋ผ์ฐํฐ ๋ํ app.put()์ผ๋ก ๋ณ๊ฒฝํด๋ ์๋ํ์ง ์๋๋ค.

ํ์ฌ CRUD ๊ธฐ๋ฅ์์ Create(POST), Read(GET), Update(POST), Delete(POST)์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
ํ์ง๋ง ํ์ง๋ง ์ฐ๋ฆฌ๋ RESTful API์์ ๊ฐ ๊ธฐ๋ฅ๋ณ ์ ์ ํ HTTP Method๋ฅผ ์ ํํด์ผํ๊ธฐ ๋๋ฌธ์ REST API๋ฅผ ์งํฅํ๊ธฐ ์ํด์๋ ์์ฒญ ๋ฉ์๋ ์์ฒด์ ๋ฌธ์ ๊ฐ ์๋ค. ์ผ๋ฐ์ ์ผ๋ก RESTful API ๋์์ธ์์๋ ์
๋ฐ์ดํธ๋ PUT ๋ฉ์๋, ์ญ์ ๋ DELETE ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ด๋ก์ ์ด๋ค.
[Node.js] 9. REST API๋ฅผ ์ํ ๋ฆฌํฉํ ๋ง jQuery+Ajax

ํ ์ด๋ธ ์์
์ฐ์ ํ์ฌ ํ
์ด๋ธ์ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ๋ค.
์ฌ๊ธฐ์ status๋ผ๋ ๊ธ์ ์ํ๋ฅผ ์ถ๊ฐํ์ฌ ongoing(์งํ์ค), done(์๋ฃ) ๋ก ๋ฌธ์์ ๋ํ ๋ต๋ณ ์ํ๋ฅผ ์ถ๊ฐํ๊ณ ์ ํ๋ค. ๋ฐ๋ผ์ ๋ฌธ์๊ฐ ์์ฑ๋๋ฉด ๊ธฐ๋ณธ๊ฐ์ผ๋ก ongoing์ํ๋ฅผ ๊ฐ์ ธ์ผ ํ๋ฉฐ ๊ด๋ฆฌ์๊ฐ ๊ธ์ ์ํ๋ฅผ ๋ณ๊ฒฝ(์
๋ฐ์ดํธ) ํ ์ ์๋๋ก ํ๋ค.
ํ
์ด๋ธ์ status๋ผ๋ ์ปฌ๋ผ์ ์ถ๊ฐํด์ผ ํ๋ค. ํ
์ด๋ธ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ alter table๋ก ์์๋๋ฉฐ status ์ปฌ๋ผ์ ์ถ๊ฐ(add)ํ๊ฒ ๋๋ค. default๋ก ongoing ๊ฐ์ ๊ฐ์ง๋๋ก ์ค์ ํ๋ค.
[Node.js] 8. CRUD-Update ๊ธฐ๋ฅ ์ถ๊ฐ

์กฐํ READ(select๋ฌธ) ๊ธฐ๋ฅ
app.js์ ์กฐํ API ์์ฑ
์ฐ์ READ๊ธฐ๋ฅ์ธ select ์ฟผ๋ฆฌ๋ฌธ์ ์คํํ ์ ์๋ ๋ก์ง์ด ๋ด๊ธด โ/contactListโ ์๋ํฌ์ธํธ์ GET์์ฒญ API๋ฅผ ์์ฑํ๋ค.
์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ก result๋ฅผ ๋ฐํํ๋ฉฐ lists๋ผ๋ ๋ณ์์ ๋ด์์ contactList.ejs๋ก render๋๋๋ก ์์ฑํ๋ค. ์๋๋ ์กฐํ ๊ฒฐ๊ณผ์ธ result์ ๋ด๊ธด ๋ฐ์ดํฐ์ด๋ค.

[Node.js] 7. CRUD-Read, Delete ๊ธฐ๋ฅ ์ถ๊ฐ

๋ฐ์ดํฐ ์์ฒญ์ body-parser ํ์
์ฐ์ ํ๋ก ํธ์๋์์ ๋ฌธ์ํ๊ธฐ ๋ถ๋ถ์ ๋ค์ ์ฝ๋๋ก ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํฐ ์์ฒญ์ ํ
์คํธํ๊ณ ์ ํ๋ค.
contact.ejs
Frontend ์ปค๋ฐ ์ดํ โ master ์ฒดํฌ์์ โ ํ์ฌ๊น์ง ๋ณ๋์ฌํญ master๋ก ๋ณํฉ (git merge Frontend)
๋๋ GUI๋ก Merge
[Node.js] 6. Bodyparser์ฌ์ฉ ๋ฐ MySQL2, dotenv ๋ฏธ๋ค์จ์ด๋ก DB์ฐ๊ฒฐํ๊ธฐ(CRUD-Create ๊ธฐ๋ฅ)

express์์ ์ ์ ํ์ผ ๊ฒฝ๋ก ์ง์
์น ํ์ด์ง์์ ์ ์ ํ์ผ๋ค์ ๋ถ๋ฌ์์ ๋ํ๋ด์ผ ํ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ด๋ฐ ๊ฒฝ์ฐ ์๋์ฒ๋ผ index.ejs์์ img src ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋๋ฐ express์์๋ ๋จ์ํ ๋ถ๋ฌ์์ง์ง ์๋๋ค.
Express์์๋ ์ ์ ํ์ผ์ ์ ๊ณตํ๊ธฐ ์ํด express.static ๋ฏธ๋ค์จ์ด๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
express.static ์ฌ์ฉํ๊ธฐ
[Node.js] 5. express์์ ์ ์ (static) ํ์ผ ๊ฒฝ๋ก ์ง์

HTML ํ์ค ๋ ์ด์์
์ฌ๋ฌ ํํ์ด์ง๋ค์ ์ธ๊ด์ ์ดํด๋ณด๋ฉด ๋น์ทํ ๋ ์ด์์์ ๋ณด์ฌ์ค๋ค. ์ด๋ฐ ๋ชจ์ต๋ค์ด ์น ํ์ค์ ๋ฐ๋ฅด๊ธฐ ์ํจ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
์ด๋ฅผ ํตํด ์ฌ์ฉ์๋ค์๊ฒ ์ต์ํ ๊ฒฝํ์ ์ ๊ณตํ๋ฉด์ ์ ๊ทผ์ฑ์ ๋์ผ ์ ์๋ ๋ฐฉ๋ฒ๋ก ์์ ์์ํ๊ธฐ๋ ํ๋ค. ๊ฐ๋ฐ์๊ฐ UX/UI ๊ด์ ์ ๊ฐ๋ฐ์ ๊ณ ๋ คํด์ผ ํ๋ ์ด์ ์ด๋ค. ๋ํ ์ฌํ์ฉ์ฑ, ์ ์ง๋ณด์์ฑ์ ํ์คํ, ๊ท์น ๋ค์์ ๊ด๋ฆฌ๋๊ธฐ ์ฝ๋ค.
์น ํ์ค
[Node.js] 4. ์นํ์ค๊ณผ ๊ฐ๋จ ๋ ์ด์์ ๊ตฌ์กฐํ

View Template Engine์ด๋?
์น ํ์ด์ง๋ฅผ ๊ตฌ์ฑํ๋ ์ฃผ๋ ๋งํฌ์
์ธ์ด(Markup Language)๋ HTML์ด๋ฉฐ, ์ด๋ ์ ์ ์ธ ์ธ์ด. ๋ฐ๋ผ์, Javascript์ ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ ๋์ ์ฐ์ฐ์ HTML๋ก ํํํ๋ ค๋ฉด ์ง์ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ ๋ถํธํจ์ด ์๋ค.
โข
ํ
ํ๋ฆฟ ์์ง(Temlplate Engine)์ ์์์ ์ธ๊ธํ ๋ถํธํ ์ํฉ์ ํด์์ํค๊ธฐ ์ํ ๋๊ตฌ
โข
ํ
ํ๋ฆฟ ํ๋ก์ธ์๋ฅผ ์ด์ฉํ์ฌ ์น ํ์ด์ง๋ฅผ ๋์ ์ผ๋ก ๊ตฌํํ ์ ์๋ ์์คํ
โข
Node.js์ ๋ํ์ ์ธ ํ
ํ๋ฆฟ ์์ง์ผ๋ก๋ Pug(Jade), EJS, Handlebars ๋ฑ์ด ์์
โข
ํ
ํ๋ฆฟ ์์ง์ ์น ํ
ํ๋ฆฟ๋ค๊ณผ ์น ์ปจํ
์ธ ์ ๋ณด๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ค๊ณ๋ ์ํํธ์จ์ด
[Node.js] 3. ๋ทฐ ํ
ํ๋ฆฟ ์์ง๋น๊ต์ EJS ์ฌ์ฉ

Express ์ฒซ ์์
npm ๊ณต์ ํํ์ด์ง๋ฅผ ํตํด ๋ค์ํ Node.js ํจํค์ง๋ค์ ๊ฒ์ํ ์ ์๋ค. ์ด์ค Express๋ผ๋ ์น ํ๋ ์์ํฌ ํจํค์ง๋ฅผ ์ค์นํ์๋ค.
๋ผ์ฐํธ ํจ์์ ๊ตฌ์กฐ
๋ผ์ฐํ
์ URI(๋๋ ๊ฒฝ๋ก) ๋ฐ ํน์ ํ HTTP ์์ฒญ ๋ฉ์๋(GET, POST ๋ฑ)์ธ ํน์ ์๋ํฌ์ธํธ์ ๋ํ ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ ํ๋ฆฌ์ผ์ด์
์ด ์๋ตํ๋ ๋ฐฉ๋ฒ์ ๊ฒฐ์ ํ๋ค.
[Node.js] 2. Express์ HTTP ๋ผ์ฐํ
ํจ์ ๊ธฐ์ด

Node.js๋?
Node.js๋ Chrome V8 JavaScript ์์ง์ผ๋ก ๋น๋๋ JavaScript ๋ฐํ์์
๋๋ค.
-Node.js๋ ๊ณต์ ํํ์ด์ง-
Node.js๋ ๋น๋๊ธฐ ์ด๋ฒคํธ ๊ธฐ๋ฐย JavaScript ๋ฐํ์์ด๋ค.
- MDN
โข
JavaScript๋ HTML์ ๋์ (Dynamic)ํ๊ฒ ๋ฐ๊ฟ์ฃผ๋ ๊ธฐ๋ฅ์ ํ๊ฒ ํ๋ ์คํฌ๋ฆฝํธ์ด๋ค.
โข
2008๋
์ ๊ตฌ๊ธ์ด V8 ์์ง์ ์ฌ์ฉํ์ฌ ํฌ๋กฌ์ ์ถ์ํ๋๋ฐ, V8 ์์ง์ ์์ฒญ ๋นจ๋๊ณ , ์คํ ์์ค๋ก ์ฝ๋๋ ๊ณต๊ฐ๋์. ๊ทธ ๊ธฐ๋ฅ์ ์ข ๋ ๋ํด์ V8 ์์ง ๊ธฐ๋ฐ์ ๋
ธ๋ ํ๋ก์ ํธ๋ฅผ ์์ํ๊ณ ,ย Node.js(V8)์ด ๋ฑ์ฅํ๋ค.
โข
์น ์๋ฒ์ ๊ฐ์ด ํ์ฅ์ฑ ์๋ ๋คํธ์ํฌ ํ๋ก๊ทธ๋จ ์ ์์ ์ํด ๊ณ ์๋์๋ค.
[Node.js] 1. ๊ธฐ๋ณธ ํ๊ฒฝ๊ตฌ์ถ ๋ฐ Express ํ๋ ์์ํฌ ์ค์น

