๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋ชฉ๋กexpress.js (10)

JUINTINATION

Express.js๋ฅผ ์‚ฌ์šฉํ•œ ์ŠคํผํŠธ ํ”„๋กœ์ ํŠธ

์งง์€ ์‹œ๊ฐ„๋™์•ˆ ๋งŽ์€ ๋‚ด์šฉ์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ณต๋ถ€ํ•ด์•ผ ํ•˜๋Š๋ผ ํž˜๋“ค์—ˆ์ง€๋งŒ ๋„ˆ๋ฌด๋‚˜๋„ ์žฌ๋ฐŒ์—ˆ๋˜ 3์ฃผ๋™์•ˆ์˜ ์ŠคํผํŠธ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋งˆ๋ฌด๋ฆฌ๋˜์—ˆ๋‹ค. ์—ํŠธ๋ฆฌ์—์„œ ์—ฐ์ˆ˜์—ฐ๊ตฌ์›์œผ๋กœ ๊ทผ๋ฌดํ•˜๋ฉด์„œ ํ‡ด๊ทผ ์ดํ›„์— ์‹œ๊ฐ„์„ ๋‚ด์„œ ํ–ˆ๋˜ ํ”„๋กœ์ ํŠธ๋ผ ์•„์‰ฌ์šด ๋ถ€๋ถ„์ด ๋งŽ์•˜์ง€๋งŒ ๊ทธ๋ž˜๋„ ์ง€๊ธˆ๊นŒ์ง€ ์™„์„ฑํ•œ ํ”„๋กœ์ ํŠธ์˜ ๋‚ด์šฉ์„ ์ ์–ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.๋ฐฑ์—”๋“œํŒ€ ์ž์œจ ์ฃผ์ œ ์ŠคํผํŠธ ํ”„๋กœ์ ํŠธ (~02/04)์šฐ๋ฆฌ์—๊ฒŒ ์ฃผ์–ด์กŒ๋˜ ์ŠคํผํŠธ ํ”„๋กœ์ ํŠธ์˜ ์กฐ๊ฑด์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. 1. MySQL + Prisma ORM + 3๊ฐœ ํ…Œ์ด๋ธ” ์ด์ƒ(1:N, M:N, ์ตœ์†Œ ํ•˜๋‚˜) + ERD 2. ์ธ์ฆ (JWT Token + Passport.js) 3. 3 Layer Architecture (Controller + Service + Repository) 4. Joi Validation -> Middleware๋กœ..

StudyNote 2024. 2. 8. 20:14
๊ฐ„๋‹จํ•œ Express ํ”„๋กœ์ ํŠธ Dockerizing ํ•ด๋ณด๊ธฐ

์ง€๊ธˆ๊นŒ์ง€์˜ ์ŠคํผํŠธ ํ”„๋กœ์ ํŠธ ์ง„ํ–‰์ƒํ™ฉ์„ ์–˜๊ธฐํ•ด๋ณด์ž๋ฉด.. ์•ฝ 2์ฃผ๊ฐ€ ๋„˜๋Š” ์‹œ๊ฐ„๋™์•ˆ ์—ฌ๋Ÿฌ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•„์˜ค๋ฉฐ ๋ธ”๋กœ๊ทธ์˜ ํ•„์ˆ˜์ ์ธ ๊ธฐ๋Šฅ์€ ๋‹ค ๊ตฌํ˜„ํ–ˆ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค. ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ, ๊ฒŒ์‹œ๊ธ€ ๋ฐ ์นดํ…Œ๊ณ ๋ฆฌ, ํƒœ๊ทธ, ๋Œ“๊ธ€ ๊ธฐ๋Šฅ ๋“ฑ Notion์— ์ •๋ฆฌํ•œ ๋‚ด์šฉ์„ ๋ด๋„ ๋˜๊ณ  Github์˜ commit message๋ฅผ ์ฝ์–ด๋„ ๋Œ€์ถฉ ์–ด๋–ค ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๊ธฐ๋Šฅ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ์š”๊ตฌ์‚ฌํ•ญ๋“ค์„ ํ•˜๋‚˜ ๋‘˜์”ฉ ํ•ด๊ฒฐํ•ด๊ฐ€๋ฉด์„œ ๋‚ด๊ฐ€ ๊ธ‰์†๋„๋กœ ์„ฑ์žฅ์ค‘์ด๊ตฌ๋‚˜๋ฅผ ๋Š๋ผ๋Š” ์ค‘์ธ๋ฐ ๊ฑฐ์˜ ๋ง‰๋ฐ”์ง€์— ๋‹ค๋‹ค๋ฅธ ์ง€๊ธˆ, ๋˜๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ๋‹ค. ๋‹ค๋ฆ„์•„๋‹Œ ๋„์ปค๋ผ์ด์ง•์ด๋‹ค. ๋„์ปค(Docker) ๊ฐ€๋ณ๊ฒŒ ์ž…๋ฌธํ•ด๋ณด๊ธฐ - 1๋ถ€ํ„ฐ 3๊นŒ์ง€ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ๊ณผ ๋ง‰๋ง‰ํ–ˆ๋˜ ๋‚˜์—๊ฒŒ ๊ธธ์žก์ด๊ฐ€ ๋˜์–ด์ค€ ์–ด๋Š ๋ธ”๋กœ๊ทธ์˜ ๋‚ด์šฉ์„ ์ฐธ๊ณ ํ•˜์—ฌ ์ด์ œ Express ํ”„๋กœ์ ํŠธ๋ฅผ ๋„์ปค๋ผ์ด์ง•ํ•ด..

StudyNote 2024. 2. 1. 23:52
Express.js์™€ nodemon

nodemon์ด๋ž€?nodemon์€ ๋””๋ ‰ํ† ๋ฆฌ์˜ ํŒŒ์ผ ๋ณ€๊ฒฝ์ด ์ด๋ฃจ์–ด์กŒ์„ ๋•Œ ๋…ธ๋“œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž๋™์œผ๋กœ ์žฌ์‹œ์ž‘ํ•ด์ฃผ๋Š” ๋ชจ๋“ˆ๋กœ ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด ๊ฐœ๋ฐœ ์‹œ ์†Œ์Šค ์ฝ”๋“œ ๋‚ด์šฉ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ์„œ๋ฒ„๋ฅผ ์ข…๋ฃŒํ•˜์˜€๋‹ค๊ฐ€ ์žฌ์‹œ์ž‘ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์šด ์ž‘์—… ์—†์ด ์ž๋™์œผ๋กœ ๋ณ€๊ฒฝ๋œ ์†Œ์Šค ํŒŒ์ผ๋กœ ์ ์šฉ๋˜๊ฒŒ ํ•ด์ค€๋‹ค.์ผ๋‹จ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•œ ๋’ค์— $ npm install nodemon ์ปค๋งจ๋“œ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ nodemon ๋ชจ๋“ˆ์„ ์„ค์น˜ํ•œ๋‹ค.์ด ๋ชจ๋“ˆ์€ ํ”„๋กœ์ ํŠธ์—์„œ ๋”ฐ๋กœ requireํ•  ํ•„์š”์—†์ด package.json ์˜ "scripts"์— ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ์˜ˆ์‹œ๋กœ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์ฝ์–ด๋ณด์ž.app.jsconst express = require('express');const http = require('http');const path = require('path');co..

StudyNote 2024. 1. 23. 22:53
Express.js์™€ passport-local์„ ์‚ฌ์šฉํ•œ ๋กœ๊ทธ์ธ ํ…Œ์ŠคํŠธ

passport๋ž€? ์ด์ „ Express.js์˜ morgan๊ณผ cookie-parser, express-session ๊ธ€์—์„œ ์ฟ ํ‚ค์™€ ์„ธ์…˜์„ ์ด์šฉํ•ด ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋‹ค๋ค˜๋‹ค. passport๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์ฟ ํ‚ค์™€ ์„ธ์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ Node.js์—์„œ ์ธ์ฆ(Authenicate)์„ ์‰ฝ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๋ฏธ๋“ค์›จ์–ด์ด๋‹ค. ํ•ด์™ธ๋กœ ๋‚˜๊ฐˆ ๋•Œ ์‹ ์› ํ™•์ธ์„ ์œ„ํ•œ ์—ฌ๊ถŒ(passport)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š”์ง€ ์‹ฌ์‚ฌํ•˜๋Š” ์—ญํ• ์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค. strategy passport๋Š” ์–ด๋–ค ๊ฒƒ์„ ์ด์šฉํ•ด ์–ด๋–ป๊ฒŒ ์ธ์ฆ์„ ๊ตฌํ˜„ํ•  ๊ฒƒ์ธ๊ฐ€์— ๋Œ€ํ•œ ์ „๋žต์ธ strategy๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์˜ค๋Š˜์„ ๊ธฐ์ค€์œผ๋กœ 539๊ฐ€์ง€ strategy๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์— ๋‚˜์™€ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 'passport-..

StudyNote 2024. 1. 21. 21:38
Express.js์˜ morgan๊ณผ cookie-parser, express-session

morgan morgan์€ Logger API๋กœ request์™€ response๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ํฌ๋งคํŒ…ํ•ด์ฃผ์–ด ํ˜ธ์ถœ๋œ router๊ฐ€ ์–ด๋–ค ์ƒํƒœ์ด๊ณ  ์–ด๋–ค ๊ฒฐ๊ณผ ๊ฐ’์ธ์ง€ ์ฝ˜์†”์— ๋กœ๊ทธ๋ฅผ ์ฐ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ์ฐํžŒ ๋กœ๊ทธ๋ฅผ ์ฝ˜์†”๋กœ๋งŒ ํ™•์ธํ•ด๋„ ๋˜์ง€๋งŒ json ํ˜•ํƒœ๋กœ dump ํŒŒ์ผ์— ๊ธฐ๋กํ•ด์ฃผ๋Š” winston์ด๋ผ๋Š” ๋ชจ๋“ˆ๋„ ์žˆ๋‹ค. const logger = require('morgan') ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ morgan ๋ชจ๋“ˆ์„ ๋ถˆ๋Ÿฌ์™€์„œ const app = express() ์ผ ๋•Œ app.use(logger('์˜ต์…˜')); ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. morgan์— ๋“ค์–ด๊ฐ€๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์ธ ๊ฐ ์˜ต์…˜๋งˆ๋‹ค ๋ณด์—ฌ์ฃผ๋Š” ์ •๋ณด๊ฐ€ ๋‹ค๋ฅด๋ฉฐ ์—ฌ๋Ÿฌ ์˜ต์…˜์„ ๋„ฃ์–ด์ค„ ์ˆ˜๋„ ์žˆ๋‹ค. ์ฃผ๋กœ ๊ฐœ๋ฐœ ์‹œ์—๋Š” dev ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์š”์ฒญ ๋ฉ”์„œ๋“œ, url, ์ƒํƒœ, ์‘๋‹ต์‹œ..

StudyNote 2024. 1. 21. 18:12
Express.js๊ณผ MVC ํŒจํ„ด, Controller & Service & Repository

MVC ํŒจํ„ด์ด๋ž€?MVC ํŒจํ„ด์€ ๋ชจ๋ธ-๋ทฐ-์ปจํŠธ๋กค๋Ÿฌ(model–view–controller) 3๊ฐ€์ง€๋กœ ๋ถ„๋ฆฌ๋œ ํ˜•ํƒœ์˜ 3 Layer Architecture๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋””์ž์ธํŒจํ„ด์ด๋‹ค. ๊ฐ๊ฐ์˜ ๊ตฌ์„ฑ์š”์†Œ๋“ค ์‚ฌ์ด์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ด€๊ณ„๊ฐ€ ์žˆ๋‹ค. ๋ชจ๋ธ-๋ทฐ-์ปจํŠธ๋กค๋Ÿฌ - ์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „. ๋ชจ๋ธ, ๋ทฐ, ์ปจํŠธ๋กค๋Ÿฌ์˜ ๊ด€๊ณ„๋ฅผ ๋ฌ˜์‚ฌํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋‹ค์ด์–ด๊ทธ๋žจ. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ผ๋ฐ˜์ ์ธ MVC ๊ตฌ์„ฑ์š”์†Œ ๋‹ค์ด์–ด๊ทธ๋žจ ๋ชจ๋ธ-๋ทฐ-์ปจํŠธ๋กค๋Ÿฌ(model–view–controller, MVC)ko.wikipedia.org๋ชจ๋ธ(Model)์‚ฌ์šฉ์ž์—๊ฒŒ ๋…ธ์ถœ๋˜์ง€ ์•Š๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฌด์—‡์„ ํ•  ๊ฒƒ์ธ์ง€ ์ •์˜ํ•˜๋Š” ๋ถ€๋ถ„์œผ๋กœ DB์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ํ†ตํ•œ ์—ฐ์‚ฐ์ฒ˜๋ฆฌ๊ฐ€ ์ฃผ๋œ ๋ชฉ์ ์ด๋‹ค.์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด DB์—์„œ ์‚ฌ์šฉ์ž๊ฐ€..

StudyNote 2024. 1. 20. 23:01