๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ํšŒ๊ณ 

[KPT] : Node.js 9์ฃผ์ฐจ

by ๊ถŒ์Šพํ–„ 2023. 7. 22.

์ด๋ฒˆ ์ฃผ ํ•œ ์ผ

Node.js ํŽซ์‹œํ„ฐ ํ”„๋กœ์ ํŠธ / Back-office-team-project

Keep

1. main์€ ์ตœ์ข… ์™„์„ฑ๋œ ๊ธฐ๋Šฅ์„ ํ•ฉ์ณ์ฃผ๊ณ  ๊ฐœ๋ฐœ์€ main ์•„๋ž˜์— develop์ด๋ผ๋Š” ๋ธŒ๋žœ์น˜๋ฅผ ์ƒˆ๋กœ ํŒŒ์„œ,
๊ฑฐ๊ธฐ์—์„œ ๊ฐ์ž์˜ ๊ธฐ๋Šฅ๋“ค์„ ๋งก์„ ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค์–ด ์ž‘์—…ํ•œ ์ .

2. ๋ณธ์ธ ๋ธŒ๋žœ์น˜์— ์ž‘์—… ๊ฒฐ๊ณผ๋ฌผ์„ push ํ•˜๊ณ  ํ’€๋ฆฌํ€˜๋ฅผ ์ƒ์„ฑํ•ด ๋‘” ๋‹ค์Œ, merge๋ฅผ ํ•˜๊ณ ์ž ํ•  ๋•Œ๋Š”, ํ’€๋ฆฌํ€˜ ์ƒ์„ฑ ์ˆœ์„œ๋Œ€๋กœ, ํŒ€์›๋“ค๊ณผ ๊ฐ™์ด ๋ด๊ฐ€๋ฉฐ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์‹œ๊ฐ„์†์‹ค, ์ฝ”๋“œ์†์‹ค์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ .

3. ์ด๋ฒˆ ๊ณ„๊ธฐ๋ฅผ ํ†ตํ•ด ํ•ญ์ƒ git์œผ๋กœ ํ˜‘์—…์„ ์ง„ํ–‰ํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด, gitignore ์ดˆ๊ธฐ ์„ธํŒ…์— config ํด๋” ๋˜๋Š” .envํŒŒ์ผ ๋“ฑ์„ ์ž˜ ์„ธํŒ…ํ•ด๋‘๊ณ  ํ˜‘์—…์— ๋“ค์–ด๊ฐ€์•ผ ํ•œ๋‹ค๋Š” ์ .

4. ๋ชจ๋ฅด๋Š” ํ˜น์€ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋‹ค ๋ง‰ํžˆ๋Š” ๋ถ€๋ถ„์—์„œ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ํŒ€์›๋“ค๊ณผ ๊ฐ™์ด ํ™”๋ฉด๊ณต์œ ๋ฅผ ํ†ตํ•ด ์ง‘๋‹จ์ง€์„ฑ์˜ ํž˜์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด ๋‚˜๊ฐ€๋Š” ์ ๋„ ์ด๋ฒˆ ๊ฒฝํ—˜์—์„œ ๊ต‰์žฅํžˆ ์ธ์ƒ๊นŠ์—ˆ๋‹ค.

5. ์—ญํ•  ๋ถ„๋ฐฐ๋ฅผ ๊ฐ์ž๊ฐ€ ๋ถ„๋Ÿ‰์— ๋งž๊ฒŒ๋” ์ž˜ ๋ฐฐ๋ถ„ํ•˜๊ณ , ํ•˜๋ฃจ๋งˆ๋‹ค ์ง€๊ธˆ์ฒ˜๋Ÿผ ๊ฐ์ž์˜ ์™„์„ฑ๋„๋ฅผ ์ฒดํฌํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ง€๋ฉด ์„œ๋กœ ์ž๊ทน๋„ ๋˜๊ณ , ํ˜‘์—…๊ฐ„์˜ ์˜์‚ฌ์†Œํ†ต์— ์žˆ์–ด์„œ ๊ต‰์žฅํžˆ ์–ป๋Š” ๋ถ€๋ถ„์ด ๋งŽ์€๊ฒƒ ๊ฐ™์œผ๋‹ˆ ์ด ๋ถ€๋ถ„๋„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ๊ฒ ๋‹ค.

Poblem

1. git์—์„œ config ์˜ DB์ •๋ณด๋ฅผ ๊ฐ€๋ฆฌ๊ธฐ ์œ„ํ•ด .gitignore๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ, ์ด๋ฏธ ํ•œ ๋ฒˆ github์— config ํด๋”๊ฐ€ ์˜ฌ๋ผ๊ฐ”๋˜ ์ ์ด ์žˆ์—ˆ๋‹ค.
๊ทธ ํ›„๋กœ ๊ฐ์ž ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋‹ค๊ฐ€, ๋‚˜๋Š” ์ž‘์—…์„ ๋งˆ์น˜๊ณ  ์ €๋ฒˆ์— ๊ฒฝํ—˜ํ–ˆ๋˜ ๊ทธ๋Œ€๋กœ ์›๊ฒฉ ๋ ˆํผ์ง€ํ† ๋ฆฌ์˜ cach๋งŒ ์‚ญ์ œ๋ฅผ ํ•˜๊ธฐ์œ„ํ•ด ๋ช…๋ น์–ด๋ฅผ ์ณค๋Š”๋ฐ, ๊ฐ‘์ž๊ธฐ ๋‚ด ๋กœ์ปฌ ์ž‘์—… ํŒŒ์ผ์˜ config.json ํŒŒ์ผ๋„ ๋‚ ๋ผ๊ฐ€๊ฒŒ ๋˜์—ˆ๋‹ค.

2. ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์—์„œ ์ด๋ฉ”์ผ ์ธ์ฆ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์–ด, ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์‹œ๋„๋ฅผ ํ•ด๋ณด์•˜์ง€๋งŒ, ๋๋‚ด ์‹คํ˜„์‹œ์ผœ๋‚ด์ง€ ๋ชปํ–ˆ๋‹ค.

3. DOM์œผ๋กœ ํ•ด๋‹น HTMLํƒœ๊ทธ๋ฅผ ๊ฐ€์ ธ์™€ ๊ทธ ํƒœ๊ทธ์— addEventListner๋ฅผ ์ ์šฉ์‹œ์ผœ์„œ 'ํšŒ์›ํƒˆํ‡ด'๋ผ๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•˜๋Š”๋ฐ,
๋ฐ์ดํ„ฐ๋Š” ๋ฐฑ์ด๋ž‘ ์—ฐ๊ฒฐ์ด ๋˜์„œ ์ž˜ ํ๋ฅด๋Š”๊ฑธ ํ™•์ธํ–ˆ์œผ๋‚˜, ํ™”๋ฉด์— ํ‘œ์ถœ๋˜๋Š” ๊ฐ’์€ ์„œ๋ฒ„์˜ ์ฝ”๋“œ๊ฐ€ ์•ˆ๋„˜์–ด์˜ค๊ณ , ํ•˜์ง€๋งŒ DB๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ํƒˆํ‡ดํ•˜๊ณ ์ž ํ•˜๋Š” User์˜ ๊ณ„์ •์ด ์‚ญ์ œ๋œ๊ฑธ๋กœ ๋ณด์•„, ์ตœ์ข… ์ฝ”๋“œ๊นŒ์ง€๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ „๋‹ฌ์ด ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์ธ๋ฐ.. ์„œ๋ฒ„์—์„œ ์ •์ƒ์ ์œผ๋กœ ํ‘œ์ถœํ•˜๊ณ ์ž ํ•˜๋Š” status์™€ message๊ฐ’์ด ์™œ ์•ˆ๋„˜์–ด์˜ค๋Š”๊ฑด์ง€๋ฅผ ์ฐธ ์˜ค๋žœ์‹œ๊ฐ„ ํ•ด๋งธ๋‹ค.

4. ํ”„๋ก ํŠธ์™€ ๋ฐฑ์„ ์—ฐ๊ฒฐํ•จ์— ์žˆ์–ด์„œ ์ง€๋‚œ ๊ณผ์ œ์—์„œ๋Š” ejs๋ฅผ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, ์ด๋ฒˆ์—” ejs๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ์ง„ํ–‰์„ ํ•˜๊ณ ์ž ํ–ˆ๊ธฐ์—, ์–ด๋–ป๊ฒŒ ํ”„๋ก ํŠธ๋ฅผ ๊ธ์–ด์™€ ๋„์›Œ์ค˜์•ผ ํ• ์ง€ ๊ณ ๋ฏผ์ด ๋งŽ์ด๋˜์—ˆ๋‹ค.

Try

1. ๋‚ด๊ฐ€ ์นœ ์ฝ”๋“œ๋Š” git rm --cached config/config.json์ด๋‹ค. ์ €๋ฒˆ์—๋„ ๋™์ผํ•œ ์ฝ”๋“œ๋กœ ๋‚˜์˜ ์›๊ฒฉ๋ ˆํผ์ง€ํ† ๋ฆฌ ์บ์‰ฌ๋ฅผ ์‚ญ์ œํ•œ์ ์ด ์žˆ์—ˆ๋‹ค. ๊ทผ๋ฐ ์ด๋ฒˆ์—” ์ด ๋ช…๋ น์–ด๋ฅผ ํƒ€์ดํ•‘ํ•˜๋‹ˆ config.jsonํŒŒ์ผ์ด ๋กœ์ปฌ์—์„œ๋„ ๋‚ ๋ผ๊ฐ”๋‹ค....
๋‚ด๊ฐ€ git ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ–ˆ๋˜ ๋‚ด์—ญ์„ ๋ณด์•„๋„ ํŠน์ด์ ์„ ๊ตณ์ด ์ฐพ์ž๋ฉด ์ € ์œ„์˜ ์ฝ”๋“œ๋ฅผ ์ณค์„ ๋•Œ์ธ๋ฐ... ์ €๋ฒˆ์— ์ด๋ฏธ ์˜ฌ๋ ค๋‘” config๋ฅผ ์ € ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์บ์‰ฌ๋ฅผ ์‚ญ์ œํ–ˆ์—ˆ๊ณ , ์‹ค์ œ๋กœ ๋กœ์ปฌ์—์„œ๋Š” ์‚ฌ๋ผ์ง€์ง€ ์•Š์€์ฑ„ .gitignore๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ ์šฉ๋˜์–ด์žˆ๋Š”๊ฑธ ํ™•์ธํ•˜๊ณ  ์žˆ๋‹ค. ๊ทผ๋ฐ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์‚ฌ๋ผ์ ธ์„œ ๋งŽ์ด ๋‚œ๊ฐํ–ˆ์—ˆ๋‹ค. ์ด ๋ถ€๋ถ„์„ ํ•ด๊ฒฐํ•œ๊ฒƒ์€ ๊ฐ™์€ ์กฐ ํŒ€์žฅ๋‹˜์˜ ๋„์›€์œผ๋กœ git history์—์„œ config๋ฅผ commitํ•œ ๋‚ด์—ญ์„ ์ „๋ถ€ ์‚ญ์ œํ–ˆ๊ณ , ์‚ญ์ œํ›„์˜ ์ปค๋ฐ‹๊ธฐ๋ก์„ ๋‹ค์‹œ ์ปค๋ฐ‹ํ–ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•ด์„œ config ๋ฟ๋งŒ ์•„๋‹Œ .env ํŒŒ์ผ๋„ ์ •์ƒ์ ์œผ๋กœ ignore ์‹œํ‚ฌ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

2. ์–ด๋–ค ์ด๋ฉ”์ผ์ด๋“  ์ƒ๊ด€์—†์—ˆ์œผ๋‚˜, ๋‚ด๊ฐ€ ๊ฐ€์žฅ ๊ทธ๋ž˜๋„ ๋ณดํŽธ์ ์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” naver์„œ๋ฒ„๋ฅผ ํ†ตํ•ด์„œ ์ธ์ฆ ๋ฉ”์ผ์„ ๋ฐœ์†กํ•˜๊ณ ์ž ํ–ˆ๋‹ค.
๋ฐœ์ƒํ•œ ๋ฌธ์ œ์ ์€ ์šฐ์„  SMTP์„œ๋ฒ„ ๋ฌธ์ œ ๊ทธ๋ฆฌ๊ณ  port๋ฅผ ์–ด๋–ค port๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€ ๋ชฐ๋ž๋‹ค๋Š” ์ ์ด๋‹ค. ์ด ๋ถ€๋ถ„์€ naver ์„ค์ •์—์„œ ํ•ด๋‹น SMTP์„œ๋ฒ„๋ฅผ ์—ด๊ณ  port๋Š” ์ œ์‹œ๋œ ๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์œผ๋‚˜, ๊ทธ ์ด์ƒ์˜ ์ง„์ „์ด ์—†์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด ๋ณธ ์‚ฌ๋žŒ์„ ์ฐพ์•„๊ฐ€์„œ ์–ด๋–ค์‹์œผ๋กœ ํ•ด๊ฒฐํ–ˆ๋Š”์ง€ ์„ค๋ช…์„ ์š”์ฒญํ–ˆ๊ณ , ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ์‚ผ์•„ ๋‚˜์˜ ์ฝ”๋“œ์™€ ๋น„๊ตํ•ด๋ณด์•˜๋‹ค. ์ด ๋ถ€๋ถ„์„ ํ†ตํ•ด์„œ ์ด๋ฉ”์ผ ์ธ์ฆ ๋กœ์ง์„ ์ถ”๊ฐ€ํ•  ์˜ˆ์ •์ด๋‹ค.

3. DOM์œผ๋กœ ๊ฐ€์ ธ์˜จ HTML ํƒœ๊ทธ๊ฐ€ formํƒœ๊ทธ์˜€๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™์œผ๋กœ ๋ฆฌ๋กœ๋“œ๋˜๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์—ˆ๋‹ค. ๊ทธ ๋ถ€๋ถ„์—์„œ e.preventDefault()๋ฅผ ํ†ตํ•ด์„œ ์ž๋™ ๊ธฐ๋Šฅ์„ ํ•ด์ œํ•˜์˜€๋‹ค. ์œ„์˜ ๋ฉ”์„œ๋“œ๋Š” ๊ธฐ๋Šฅ์„ ๋ช…์‹œ์ ์œผ๋กœ ์ œ์‹œํ•˜์ง€ ์•Š๋Š” ํ•œ ๊ธฐ์กด์˜ ๊ธฐ๋Šฅ๋“ค์€ ์ „๋ถ€ ์ž๋™์„ ํ•ด์ œํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
์œ„์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ ์šฉํ•˜๊ณ  ๋‚˜์„œ๋Š” ์ •์ƒ์ ์œผ๋กœ return๊ฐ’์ด ์ƒํƒœ๊ฐ’์œผ๋กœ ์žกํžˆ๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ  ์„ค์ •ํ•œ ๋ฉ”์‹œ์ง€ ๊ฐ’๋“ค์ด ์ •์ƒ์ ์œผ๋กœ ์ถœ๋ ฅ๋˜์—ˆ๋‹ค.

4. ejs์—์„œ๋Š” res.render๋ฅผ ํ†ตํ•ด์„œ ์„ค์ •ํ•œ htmlํŒŒ์ผ์„ ๋ณด์—ฌ์คฌ๋Š”๋ฐ ์ด๋ฒˆ์—๋Š” sendFile๋ฅผ ํ†ตํ•ด์„œ ํ”„๋ก ํŠธ์˜ html์„ ๊ธ์–ด์™€์„œ ๋ณด์—ฌ์ฃผ์—ˆ๋‹ค. path ํŒจํ‚ค์ง€์— join๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์„ค์ •ํ•œ ๊ฒฝ๋กœ์˜ ํŒŒ์ผ์„ ๊ฐ€์ ธ์™”๊ณ , res.sendFile ์œ„์˜ join ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋„์›Œ์ฃผ์–ด์„œ ์ •์ƒ์ ์œผ๋กœ ํ”„๋ก ํŠธ์™€ ๋ฐฑ์„ ์—ฐ๊ฒฐ์‹œ์ผฐ๋‹ค.

 

#KPT #ํšŒ๊ณ  #1์กฐ #์—ฐ์–ด #๋ฐฑ์˜คํ”ผ์Šค #ํŽซ์‹œํ„ฐ #ํŒ€ํ”„๋กœ์ ํŠธ