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

๋ชฉ๋กExpress (10)

JUINTINATION

AWS ์—˜๋ผ์Šคํ‹ฑ๋นˆ์Šคํ†ก์œผ๋กœ React ํ”„๋กœ์ ํŠธ ๋ฐฐํฌํ•˜๊ธฐ

๋ฒŒ์จ ๋‹ค์Œ์ฃผ๋กœ ๋‹ค๊ฐ€์˜จ ํ•™์ˆ ์ œ๋ฅผ ์ค€๋น„ํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฐฐํฌํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ์šฐ๋ฆฌ ํŒ€์€ ์ตœ์ข… ๋ฐœํ‘œ PPT์˜ ์‹ค์ œ ์‹คํ–‰ ํ™”๋ฉด ํŽ˜์ด์ง€์— ๋ฐฐํฌํ•œ ์„œ๋น„์Šค๋ฅผ ์ง์ ‘ ์ฒดํ—˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ QR ์ฝ”๋“œ๋ฅผ ๋„์›Œ๋‘˜ ์˜ˆ์ •์ธ๋ฐ, AWS ๊ณผ๊ธˆ์ด ๋ฌด์„œ์›Œ ์ตœ๋Œ€ํ•œ ๋‚˜์ค‘์— ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ์ตœ์ข… ๋ฐœํ‘œ ์ž๋ฃŒ ์ œ์ถœ์€ 11์›” 5์ผ(ํ™”)๊นŒ์ง€๊ณ , ์ด์ „์— ๋ชจ๋“  ์„œ๋ฒ„ ๋ฐฐํฌ๋ฅผ ์„ฑ๊ณตํ–ˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธˆ๋ฐฉ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์ „๋‚ ๊นŒ์ง€ ๋ฏธ๋ค„์™”๋Š”๋ฐ..๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ ๋ฐฐํฌ ์‹คํŒจ๋ถ„๋ช… ์ง€๋‚œ ํ•ด์ปคํ†ค์— ์ฐธ๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฐฐํฌํ•  ๋• ๊ทธ๋ƒฅ ๋ชจ๋“  ํŒŒ์ผ์„ ์••์ถ•ํ•˜๊ณ  ์—…๋กœ๋“œ๋งŒ ํ•˜๋ฉด ๋์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋”ฐ๋กœ ๊ธ€๋„ ์ž‘์„ฑํ•˜์ง€ ์•Š์•˜๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ฐ์ข… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์ด ์ถ”๊ฐ€๋๊ธฐ ๋•Œ๋ฌธ์ด์—ˆ์„๊นŒ? ์•„๋ฌดํŠผ ์„ค์ •์„ ๊ณ„์† ๋ฐ”๊ฟ”๊ฐ€๋ฉฐ ๋ฐฐํฌ๋ฅผ ์‹œ๋„ํ•ด๋ดค์ง€๋งŒ Degraded๊ฐ€ ๋œจ๊ณ , ์–ด์ฉŒ๋‹ค๊ฐ€ Ok๊ฐ€ ๋– ๋„..

Amazon Web Services 2024. 11. 5. 20:48
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