์Šฌ๊ธฐ๋กœ์šด ์˜์‚ฌ์ƒํ™œ ์‹ฌ๋ฆฌํ…Œ์ŠคํŠธ ๊ฐœ๋ฐœ ํ›„๊ธฐ

2021. 10. 23. 14:39ใ†๐Ÿ“๊ธฐ๋ก

์ธ์ƒ ๋“œ๋ผ๋งˆ ์Šฌ๊ธฐ๋กœ์šด ์˜์‚ฌ์ƒํ™œ์„ ๋•์งˆํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ์Šฌ์˜์ƒ ์บ๋ฆญํ„ฐ๋ฅผ ์†Œ์žฌ๋กœ ์ง์ ‘ ์‹ฌ๋ฆฌํ…Œ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋ณด๊ณ ์ž ์ ˆ์นœ 2๋ช…๊ณผ ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ๋Š๋‚€ ์†ŒํšŒ์™€ ๊ฐœ๋ฐœ์ž๋กœ์„œ ๋ฐฐ์šด์ , (์ฃผ๋กœ) ์•„์‰ฌ์› ๋˜ ์ ์„ ํ’€์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์šฐ์„  ๊ฒฐ๊ณผ๋ฌผ

https://www.mbti-hospital-playlist.site/

-> ๋„๋ฉ”์ธ ๋ณ€๊ฒฝ : https://friendly-shannon-fbae91.netlify.app/

 

์Šฌ๊ธฐ๋กœ์šด ์˜์‚ฌ์ƒํ™œ ์‹ฌ๋ฆฌํ…Œ์ŠคํŠธ

๋‚˜์™€ ๋‹ฎ์€ ์Šฌ์˜๋ฅผ ์ฐพ์•„๋ณด์ž

www.mbti-hospital-playlist.site

 

ํ”„๋กœ์ ํŠธ ํŒŒํŠธ ํšŒ๊ณ 

์•ผ์‹ฌ์ฐฌ ์‹œ์ž‘

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

์œ„ํƒœ๋กœ์šด ๊ณผ์ •

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

์šฉ๋‘์‚ฌ๋ฏธ ๊ฒฐ๋ง

๊ฒฐ๊ตญ์—” ์˜ˆ์ƒ๋ณด๋‹ค ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ ค ์™„์„ฑํ–ˆ๊ณ , ๊ฒฐ๊ณผ๋งŒํผ ๊ณผ์ •์ด ๋’ท๋ฐ›์ณ์ฃผ์ง€ ๋ชปํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋‚ด๋†“๊ฒŒ ๋์Šต๋‹ˆ๋‹ค.
1์ธ ๊ฐœ๋ฐœ์ด ์ด๋ ‡๊ฒŒ ๊ณ ๋…ํ•˜๋‹ค๋Š” ๊ฑธ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ์ด์ „๊นŒ์ง„ ๋™์•„๋ฆฌ์—์„œ ํ•จ๊ป˜ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์— ์ต์ˆ™ํ–ˆ๋Š”๋ฐ, ํ˜ผ์ž ๊ฐœ๋ฐœํ•˜๊ฒŒ ๋˜๋‹ˆ ๋ชจ๋“  ์ž‘์—…์ด ์˜ค๋กฏ์ด ์ €์—๊ฒŒ๋งŒ ๋‹ฌ๋ ค์žˆ๋”๊ตฐ์š”.

์šฐ์—ฌ๊ณก์ ˆ ๋์— ์™„์„ฑ

์šฐ์—ฌ๊ณก์ ˆ ๋์— ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…๊ณผ ๊ฒ€์ˆ˜๋ฅผ ๋งˆ์น˜๋ฉฐ ์ตœ์ข…์ ์œผ๋กœ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.


๊ฐœ๋ฐœ ํŒŒํŠธ ํšŒ๊ณ 

๊ฐœ๋ฐœ์Šคํƒ
Front-end | Typescript, React, Recoil
Back-end | Typescript, Nestjs
DB | postgreSql
Deploy | Netlify(front), Heroku(back, db)
Design | Adobe Xd

๋ ˆํฌ์ง€ํ† ๋ฆฌ ์„ธํŒ… (๋ฐฐํฌ ์„ธํŒ…)

๊ธฐ์กด์—๋Š” ํ•˜๋‚˜์˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— front ์™€ back ํ”„๋กœ์ ํŠธ๋ฅผ ๋ชจ๋‘ ๋ชฐ์•„๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‹ค ๋ฐฐํฌ ๋ฌธ์ œ์— ๋งž๋‹ฅ๋œจ๋ ธ๋Š”๋ฐ, front ๋Š” netlify, back ์€ heroku ๋ฐฐํฌ๋ฅผ ํ•  ์˜ˆ์ •์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ณ„ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌํ•˜์—ฌ ๋‘๊ฐœ์˜ ์„œ๋กœ๋‹ค๋ฅธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด ๊ฐ๊ฐ ์„œ๋ฒ„๋ฅผ ๋ฐฐํฌํ–ˆ์Šต๋‹ˆ๋‹ค. Back end ๋ฐฐํฌ์—์„œ ๋งŽ์ด ํž˜๋“ค์—ˆ๊ณ  db ์—ญ์‹œ heroku ์— ํ•จ๊ป˜ ๋ฐฐํฌํ•˜๋ฉฐ ์ด๋Ÿฐ์ €๋Ÿฐ ํŠธ๋Ÿฌ๋ธ”์„ ๋งŽ์ด ๋งŒ๋‚ฌ์Šต๋‹ˆ๋‹ค. ๋„์ €ํžˆ ์ดํ•ดํ•  ์ˆ˜ ์—†๋Š” ์—๋Ÿฌ๊ฐ€ ๊ณ„์† ์ƒ๊ธฐ๋ฉด์„œ ์ด ํ”„๋กœ์ ํŠธ๋Š” ์–ด๋””๋กœ ๊ฐ€๋Š”๊ฑด๊ฐ€ ์•„์ฐ”ํ•˜๊ธฐ๋„ ํ–ˆ์ง€๋งŒ, ๋‹คํ–‰ํžˆ 97%์˜ ๊ตฌ๊ธ€๋ง๊ณผ 2%์˜ ๋ˆ๊ธฐ ๊ทธ๋ฆฌ๊ณ 1%์˜ ์šด์ด ๋‹ฟ์•„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

AWS ๋ฅผ ์‹œ๋„ํ•˜์ง€ ์•Š์€ ์ ์ด ์•„์‰ฌ์› ๋Š”๋ฐ, ์‚ฌ์‹ค ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ๊ฐ€ ์ž‘๋‹ค๋ณด๋‹ˆ ๊ตณ์ด AWS ๊นŒ์ง€ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์žˆ์„๊นŒ ํ•˜๋Š” ๋งˆ์Œ์ด ๋” ์ปธ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  AWS ์™€ ์•„์ง ์นœ์ˆ™ํ•˜์ง€ ์•Š์€ ์ , ์•„์ง CI/CD ๊ฐ™์€ ๊ฐœ๋…์— ๋ฏธ์ˆ™ํ•œ ์  ๋•Œ๋ฌธ์— ์‹œ๋„ํ•˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ๋„ ์ธ์ •ํ•ฉ๋‹ˆ๋‹ค.

Front-end

React ์™€ react-hook, ์ƒํƒœ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” recoil ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.
Recoil ์€ ํ™•์‹คํžˆ ํŽธ๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ๊ฐ€ ์ „ํ˜€ ํ•„์š” ์—†์—ˆ์„ ๋ฟ๋”๋Ÿฌ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” atom ์„ ๊ตฌ๋…ํ•˜๋Š” ํ˜•ํƒœ๋กœ, ์›ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ ์–ด๋””์—์„œ๋“  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. atom-family ์™€ selector-family ๋“ฑ ๋”์šฑ ๋‹ค์–‘ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ๋“ค์ด ๋งŽ์•˜์œผ๋‚˜ ์˜ค๋ฒ„ ์—”์ง€๋‹ˆ์–ด๋ง์ด ๋  ๊ฒƒ ๊ฐ™์•„ atom ์„ ์ฃผ๋กœ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. (์‚ฌ์‹ค ์•„์ง recoil ์„ ๋œ ์ตํ˜€์„œ)

๋ Œ๋”๋ง ์ตœ์ ํ™” (feat.lighthouse)

์ธํ”„๋Ÿฐ์—์„œ ํ”„๋ก ํŠธ์—”๋“œ ์ตœ์ ํ™” ์ˆ˜์—…์„ ํ•˜๋‚˜ ์ˆ˜๊ฐ•ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐ์šด ๋‚ด์šฉ์„ ์ ์šฉํ•˜๊ณ ์ž ์ตœ์ ํ™”๋ฅผ ์‹œ๋„ํ–ˆ๊ณ , lazy-loading ๊ณผ ํฐํŠธ, ์ด๋ฏธ์ง€๋ฅผ preload ํ•˜์—ฌ ๋ Œ๋”๋ง ์†๋„๋ฅผ ๋” ๋†’์ผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. (์ตœ์ ํ™” ์ „ํ›„๋กœ ์‚ฌ์ง„์„ ์บก์ณํ•ด๋‘์—ˆ์–ด์•ผ ํ•˜๋Š”๋ฐ ์ด๋Ÿฐ ์ ์ด ์ค€๋น„๋˜์ง€ ์•Š์€๊ฒŒ ์•„์‰ฝ์Šต๋‹ˆ๋‹ค.)
๋‹ค๋งŒ ๊ฐ•์˜์—์„œ ๋ฐฐ์šด๋‚ด์šฉ์ด ๋ชจ๋‘ ๊ณง์ด ๊ณง๋Œ€๋กœ ์ ์šฉ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์Šคํƒ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋ฅผ ์ข€ ๋” ๋งŽ์ด ์ฐธ์กฐํ•œ๊ฑด ๊ธฐ๋ถ„ ํƒ“์ด๊ฒ ์ฃ . ๊ทธ๋Ÿผ์—๋„ ๊ฐ•์˜๋ฅผ ๋“ค์—ˆ์œผ๋‹ˆ ์–ด๋–ค ๋ถ€๋ถ„์„ ์ตœ์ ํ™” ํ•ด์•ผ๊ฒ ๋‹ค๋Š” ๊ฐœ๋…๊ณผ ๊ธฐ์ค€์„ ์žก์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

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

๋งŒ์กฑ์Šค๋Ÿฐ ๋ฐ์Šคํฌํ†ฑ ์„ฑ๋Šฅ ์ ์ˆ˜์™€ ๊ทธ๋ ‡์ง€ ๋ชปํ•œ ๋ชจ๋ฐ”์ผ..

 

์• ์ฆ์˜ CSS

์‚ฌ์‹ค ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๊ฐ€ ์˜ค๋ž˜ ๊ฑธ๋ ธ๋˜ ์ด์œ ๋Š” CSS๋ฅผ 0๋ถ€ํ„ฐ 100๊นŒ์ง€ ๋‹ค๋ค„์•ผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ํšŒ์‚ฌ์—์„œ๋Š” ํผ๋ธ”๋ฆฌ์…”ํŒ€์ด html/css ์ž‘์—…์„ ๋‹ด๋‹นํ•ด์ฃผ์‹  ๋•๋ถ„์— ๋ณ„๋„์˜ ์ž‘์—…์„ ํ•  ํ•„์š”๊ฐ€ ์—†์—ˆ์ง€๋งŒ, ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ์ด๋‹ค ๋ณด๋‹ˆ ์ง์ ‘ css ์— ์†๋Œ€์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋•๋ถ„์— ๋ฐฐ์šด์ ๋„ ๋งŽ์•˜์Šต๋‹ˆ๋‹ค. ๋ง‰์—ฐํ•˜๊ธฐ๋งŒํ–ˆ๋˜ ๋ฐ˜์‘ํ˜• ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ๋ฅผ ์ง์ ‘ ์†๋ณผ ์ˆ˜ ์žˆ์—ˆ๊ณ , ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•˜์ง„ ์•Š์•˜์ง€๋งŒ css-in-js ๊ฐœ๋…์ธ styled-components ๋„ ์•Œ์•„๊ฐˆ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ์—๋„ ์•ž์œผ๋กœ ์™ธ์ฃผ ์ž‘์—…์ด๋‚˜, 1์ธ ๊ฐœ๋ฐœ์„ ๊ณ„์† ํ•˜๊ณ  ์‹ถ์€ ์š•์‹ฌ์ด ์ƒ๊ฒผ๊ณ , ์ข€ ๋” ์ฒด๊ณ„์ ์œผ๋กœ html/css ๋ฅผ ๋ฐฐ์šฐ๊ณ  ์‹ถ์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์™œ์ธ์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ์ „์— ์œ ํŠœ๋ฒ„ ๊น€๋ฒ„๊ทธ๋‹˜์ด ๋‹ค๋ฅธ ๊ตฌ๋…์ž๋ถ„์—๊ฒŒ ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ํ•ด์ฃผ๋Š”๋ฐ, 'div ๋ฐญ์ด๋„ค์š”!' ๋ผ๊ณ  ํ”ผ๋“œ๋ฐฑ ํ•˜์‹  ๋ถ€๋ถ„์ด ๊ณ„์† ์ƒ๊ฐ๋‚ฌ์Šต๋‹ˆ๋‹ค. ๊น€๋ฒ„๊ทธ๋‹˜์˜ ์˜ค๋Š˜์˜์ง‘ ํด๋ก ์ฝ”๋”ฉ ์ˆ˜์—…์„ ๋“ฃ๊ณ ์‹ถ์–ด์„œ ๊ทธ๋žฌ์„๊นŒ์š” ใ…Ž..? ๋“ค์–ด๋ณด์‹  ๋ถ„ ์žˆ๋‹ค๋ฉด ์˜๊ฒฌ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ

์˜ค๋Š˜ ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ค์‹œ ์ ๊ฒ€ํ•ด๋ณด๋Š”๋ฐ, //@ts-ignore ๋ฅผ 13๋ฒˆ์ด๋‚˜ ์‚ฌ์šฉํ•œ ํ”์ ์ด ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌ๋ ค๋ฉด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์™œ ์‚ฌ์šฉํ•œ ๊ฑด์ง€ ์‹ถ๋”๊ตฐ์š”,, ํ™•์žฅ์ž๋Š” ๋ชจ๋‘ .tsx ๋ฅผ ์ผ์ง€๋งŒ ์ •์ž‘ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ œ๋Œ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ํŒŒ๋ผ๋ฏธํ„ฐ๋‚˜ props ์˜ ํƒ€์ž…์€ ์ž˜ ์ง€์ •ํ–ˆ์ง€๋งŒ, ๋”ฑ ๊ทธ์ •๋„๋กœ๋ฐ–์— ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•œ ๊ฒƒ ๊ฐ™์•„ ์•„์‰ฝ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿผ์—๋„ ๋‹ค์Œ ํ”„๋กœ์ ํŠธ์—์„œ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ƒ ๋ฌป๋Š”๋‹ค๋ฉด '๋ฌด.์ .๊ถŒ'์ž…๋‹ˆ๋‹ค. ์–„ํŒํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธด ํ–ˆ์ง€๋งŒ, ๋’ท๋‹จ์˜ nestjs ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ๋ช…์‹œ๋ผ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์ด ์ฃผ๋Š” ์•ˆ์ •๊ฐ์€ ์ด๋ฃจ ๋งํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฌด์—‡๋ณด๋‹ค ์œ ์ง€๋ณด์ˆ˜(ํ•  ํ•„์š”๋Š” ์—†๋Š” ํ”„๋กœ์ ํŠธ์ง€๋งŒ) ๋ฅผ ํ•  ๋•Œ ๊ฐ„ํ˜น ๋‚ด๊ฐ€ ์ง  ์ฝ”๋“œ๊ฐ€ ์–ด๋–ค ์˜๋ฏธ์ธ์ง€ ์˜ค๋ฝ๊ฐ€๋ฝ ํ•  ๋•Œ๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด๋Ÿด๋•Œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด๋ผ๋„ ๋ช…์‹œ๋ผ ์žˆ๋‹ค๋ฉด ์ฝ”๋“œ์˜ ์˜๋ฏธ๋ฅผ ์ดํ•ดํ•˜๋Š”๋ฐ ํ•œ์ธต ์ˆ˜์›”ํ•œ ๊ฑธ ์•Œ๊ธฐ์—, ์ผ๋ง์˜ ์—ฌ์ง€ ์—†์ด ์ €๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‹ค์‹œ ์‚ฌ์šฉํ•  ๊ฒƒ ์ž…๋‹ˆ๋‹ค (์ด์ œ ๋” ์ œ๋Œ€๋กœ ๋œ ๊ฐœ๋…์„ ๊ณ๋“ค์ธ).

13๋ฒˆ์˜ @ts-ignore..

 

Back-end

ํšŒ์‚ฌ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์Šคํƒ์ด Nestjs ์ธ ์ ๊ณผ, ์‹ค์ œ๋กœ ์ž‘์€ ํ”„๋กœ์ ํŠธ์—์„œ ๋น ๋ฅด๊ฒŒ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ nestjs ๋ฅผ ๋ฐฑ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์–ธ์–ด๋Š” ๋‹น์—ฐํžˆ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋กœ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

ํšŒ์‚ฌ์—์„œ๋Š” DB ํ…Œ์ด๋ธ”์„ nestjs์˜ ์—”ํ‹ฐํ‹ฐ๋กœ ๋งคํ•‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
ํ™”์‚ดํ‘œ๋กœ ํ‘œํ˜„ํ•˜์ž๋ฉด (DB Table => table.entity.ts in Nestjs) ์ž…๋‹ˆ๋‹ค. ์ด์œ ๋Š” ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ ๊ฐฏ์ˆ˜๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ 30๊ฐœ๋ฅผ ๋„˜์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋ฅผ ์ผ์ผ์ด ์ฝ”๋“œํ™” ํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค๋Š” ํ…Œ์ด๋ธ”์„ ๋งคํ•‘ํ•˜์—ฌ ์—”ํ‹ฐํ‹ฐํ™” ํ•˜๋Š” ๊ณผ์ •์ด ๋‚ซ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. orm ์€ typeorm์„ ์‚ฌ์šฉ์ค‘์ด์—ˆ๊ธฐ์— typeorm-model-generator ๋กœ ํ…Œ์ด๋ธ” ์—”ํ‹ฐํ‹ฐ๋ฅผ nestjs ๋กœ ๋งคํ•‘ํ–ˆ๋Š”๋ฐ, ๋ณธ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋‹ค๋ค„์•ผํ•  ์ปฌ๋Ÿผ์ด 5๊ฐœ๋ฐ–์— ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ง์ ‘ ํƒ€์ดํ•‘ํ•˜์—ฌ DB์— ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ๋„์ถœ ๊ณผ์ •

์•„๋ž˜์˜ ๋กœ์ง ์ค‘ 1~3๋ฒˆ์€ ์›๋ž˜ ๋ฐฑ์—”๋“œ์—์„œ ๋‹ด๋‹นํ•˜์˜€์ง€๋งŒ, ๊ฒฐ๊ตญ ํ”„๋ก ํŠธ๋กœ ๋กœ์ง์„ ๋นผ๋ƒˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ์ ˆ์ฐจ๋ฅผ ๋ณด๋ฉด์„œ ์ด์œ ์„ ์„ค๋ช…๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

1) ์‹ฌ๋ฆฌํ…Œ์ŠคํŠธ์—์„œ 12๊ฐœ์˜ ๋ฌธํ•ญ์€ ๊ฐ๊ฐ mbti ์˜ ์„ฑํ–ฅ์„ ํŒ๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ์งˆ๋ฌธ์œผ๋กœ ๊ตฌ์„ฑ๋ผ์žˆ๋‹ค.
ex. 1๋ฒˆ ๋ฌธ์ œ์˜ ๋ณด๊ธฐ : e ์œ ํ˜•์˜ ๋‹ต๋ณ€, i ์œ ํ˜•์˜ ๋‹ต๋ณ€. 2๋ฒˆ ๋ฌธ์ œ์˜ ๋ณด๊ธฐ: n ์œ ํ˜•์˜ ๋‹ต๋ณ€, s ์œ ํ˜•์˜ ๋‹ต๋ณ€ ...

2) 12๊ฐœ์˜ ๊ฒฐ๊ณผ๋ฅผ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ ์ข…ํ•ฉํ•˜์—ฌ, ์–ด๋–ค ์œ ํ˜•์— ๋” ๊ฐ€๊นŒ์šด์ง€(N vs S, E vs I ...) ์ฐพ์•„๋‚ธ๋‹ค.

3) ๊ฒฐ๊ณผ๋กœ ๋‚˜์˜จ ์œ ํ˜•(ex ENFP)์— ๋”ฐ๋ผ ํŒŒ๋ผ๋ฏธํ„ฐ id ๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด switch ~ case ๋ฌธ์„ ์‚ฌ์šฉํ–ˆ๋‹ค.

4) switch ~ case ๋ฅผ ๊ฑฐ์ณ ๋„์ถœํ•œ id ๋ฅผ ๋ฐฑ์—”๋“œ API ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜๊ธฐ๋ฉฐ GET ํ˜ธ์ถœํ•œ๋‹ค.

-------------------------------- ์œ„ ๊นŒ์ง€ Front ๋‹จ ์ž‘์—… --------------------------------


5) ํ”„๋ก ํŠธ์—์„œ ๋„˜์–ด์˜จ id ๊ฐ’์„ ๋งค๊ฐœ๋กœ typeorm ์—์„œ findOne() ๋ฉ”์„œ๋“œ๋กœ DB ์กฐํšŒํ•œ๋‹ค.

6) ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋Œ€ํ•œ ์กฐํšŒ๊ฐ’์„ ๋‹ค์‹œ front๋กœ Response ํ•œ๋‹ค.

์ฒ˜์Œ์—๋Š” 12๊ฐœ์˜ ๊ฒฐ๊ณผ ๊ฐ์ฒด ์ž์ฒด๋ฅผ ๋ฐฑ์—”๋“œ๋กœ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค.
๋ฐฑ์—”๋“œ์—์„œ ๋ฐ›๊ฒŒ๋˜๋Š” ๊ฒƒ์€ ๋‹น์—ฐํžˆ 12๊ฐœ์˜ ๋‹ต๋ณ€์œผ๋กœ ๊ตฌ์„ฑ๋œ ๋ฐฐ์—ด์ด์—ˆ๊ณ , ์ด ๋ฐฐ์—ด์„ ๊ณ„์‚ฐํ•˜์—ฌ ์‚ฌ์šฉ์ž์— ๋งž๋Š” ์„ฑํ–ฅ์„ ๋„์ถœํ•˜๋Š” ๋กœ์ง์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋ญ”๊ฐ€ ๊น”๋”ํ•˜์ง€ ์•Š๋‹ค๋Š” ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ์—์„œ DB ๋ฅผ ์กฐํšŒํ•  ๋•Œ๋Š” ๊ฒฐ๊ณผ์— ๋งž๋Š” id ๊ฐ’(1~11 ์— ํ•ด๋‹น) ๋งŒ ์žˆ์œผ๋ฉด ์ถฉ๋ถ„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰ ํ”„๋ก ํŠธ ๋‹จ์—์„œ 12๊ฐœ์˜ ์›์†Œ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐฐ์—ด์„ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•˜์—ฌ, ๊ฒฐ๊ณผ ์ธ๋ฌผ์˜ id ๊ฐ’๋งŒ ๋ฐฑ์—”๋“œ์— ๋ณด๋‚ด๋ฉด ๋˜์ง€ ์•Š์„๊นŒ ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ ์ฝ”๋“œ๋กœ ๋ณด๋ฉด,
1. ํ”„๋ก ํŠธ์˜ ์š”์ฒญ์„ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋ฐ›๋Š”๋‹ค. ์ด๋•Œ id ๊ฐ’์€ ๊ฒฐ๊ณผ ์ธ๋ฌผ์ด ๊ฐ–๋Š” ๊ณ ์œ ํ•œ id ๊ฐ’์œผ๋กœ ๊ฒฐ๊ณผ ํ…Œ์ด๋ธ”์„ ์กฐํšŒํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

// hospital.controller.ts

@Controller('/result')
export class HospitalController {

  constructor(private readonly hospitalService: HospitalService) {}

  @Get(":id")
  @UsePipes(ParseIntPipe)
  getResult(@Param("id") id) {
    return this.hospitalService.getResult(id);
  }
}

2. ์ปจํŠธ๋กค๋Ÿฌ๋Š” service layer ๋ฅผ ํ˜ธ์ถœํ•ด id ๊ฐ’์„ resultId ๋ž€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„˜๊น๋‹ˆ๋‹ค.

// hospital.service.ts

@Injectable()
export class HospitalService {
  constructor(
    @InjectRepository(HospitalEntity)
    private hospitalRepository: Repository<HospitalEntity>
  ) {
  }

  async getResult(resultId) {

    const resultData = await this.hospitalRepository.findOne(resultId);

    if (resultData) {
      return {
        "resultCode": 200,
        "resultData": resultData,
        "resultMsg": "success"
      };
    } else {
      throw new NotFoundException("not found");
    }
  }
}

resultId ๋Š” ๊ณง๋ฐ”๋กœ typeorm ์˜ findOne() ๋ฉ”์„œ๋“œ์˜ ์ธ์ž๊ฐ€ ๋˜์–ด, ํ…Œ์ด๋ธ”์—์„œ ์กฐํšŒํ•  ๊ฐ’์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰ ํ•˜๋‚˜์˜ ๊ฐ’ (id) ๋งŒ ๋ฐฑ์—”๋“œ๋กœ ๋„˜๊ธฐ๋Š๋ƒ, 12๊ฐœ์˜ ์›์†Œ๋กœ ์ด๋ฃจ์–ด์ง„ ๊ฐ์ฒด๋ฅผ ๋„˜๊ธฐ๋ƒ์˜ ์ฐจ์ด์˜€์Šต๋‹ˆ๋‹ค.
์ฒ˜์Œ์—๋Š” ํ›„์ž๋ฅผ ์„ ํƒํ•ด ๋กœ์ง์„ ์งฐ์ง€๋งŒ, ๋‹ค์‹œ ์ƒ๊ฐํ–ˆ์„ ๋• ์ „์ž๊ฐ€ ํ›จ์”ฌ ๊น”๋”ํ•˜๊ณ  ์ง๊ด€์ ์ด๋ž€ ์ƒ๊ฐํ•˜์—ฌ ์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ๋กœ ๋ฆฌํŒฉํ† ๋ง ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋งˆ์น˜๋ฉฐ

๋‹ค ์“ฐ๊ณ  ๋‚˜๋‹ˆ ๋งํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ํšŒ๊ณ ํ•˜๋Š” ๋Š๋‚Œ์ด๋„ค์š”. ๋ฌด์–ธ๊ฐˆ ๊ณ„์† ๋ฐ˜์„ฑํ•˜๊ณ , ๊ณ ์น˜๋ คํ•˜๊ณ ,, ๐Ÿฅฒ
์ƒ๊ฐํ•ด๋ณด๋ฉด ์ œ๊ฐ€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋ฐฐ์šด ์ดํ›„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€, ์ œ ์†๊ธธ์ด ๋‹ฟ์ง€ ์•Š์€ ๊ณณ์ด ์—†๋Š” ์ฝ”๋“œ๋ฅผ ๊ฐœ๋ฐœํ•œ ํ”„๋กœ์ ํŠธ์˜€์Šต๋‹ˆ๋‹ค. ๋ฌด์—‡๋ณด๋‹ค ์ค‘๊ฐ„์— ํฌ๊ธฐํ•˜์ง€ ์•Š๊ณ  ์–ด๋–ป๊ฒŒ๋“  ๋งˆ๋ฌด๋ฆฌํ–ˆ๋‹ค๋Š” ์ ์—์„œ๋Š” ๋งŒ์กฑ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ๊ฐœ๋ฐœ์ž๋‹ต๊ฒŒ, ์ข‹์€ ์ฝ”๋“œ์™€ ๋กœ์ง, ์„ค๊ณ„์ ์ธ ๋ถ€๋ถ„์—์„œ๋Š” ๋นˆํ‹ˆ ํˆฌ์„ฑ์ด๋ผ๋Š” ๊ฒƒ๋„ ์—ฌ์‹คํžˆ ๋Š๋‚€ ํ”„๋กœ์ ํŠธ์˜€์Šต๋‹ˆ๋‹ค. ์Šค์... ํŠธ๋ž˜ํ”ฝ๋„ ์ž˜ ์•ˆ๋‚˜์™€์„œ ์•„์‰ฝ์ง€๋งŒ.. ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ ์–ด์ฉŒ๊ฒ ์Šต๋‹ˆ๊นŒ ๋”›๊ณ  ์ผ์–ด๋‚˜์•ผ๊ฒ ์ฃ ? 1๋…„๋’ค์— ์ด ํฌ์ŠคํŒ…์„ ๋‹ค์‹œ๋ดค์„ ๋•, ํ’‰ ๋‚˜ ์™„์ „ ์ดˆ์งœ์˜€๋„ค ใ…‹ใ…‹ใ…‹ ์ด๋Ÿด์ˆ˜ ์žˆ๊ธธ ๋ฐ”๋ผ๊ฒ ์Šต๋‹ˆ๋‹ค :) ๊ธด๊ธ€ ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋งˆ๋ฌด๋ฆฌ๋Š” 99์ฆˆ :)) ์‹œ์ฆŒ3 ์กด๋ฒ„



์Šค์Šค๋กœ ์ƒ๊ฐํ•ด๋ด์•ผ ํ•  ์ 
1. ์™œ typeorm ์„ ์‚ฌ์šฉํ–ˆ๋Š”์ง€. prisma ๊ฐ™์€ ๋‹ค๋ฅธ orm ์€ ์™œ ๊ณ ๋ คํ•˜์ง€ ์•Š์•˜๋Š”์ง€.
2. DTO, DAO ๊ฐœ๋…์„ ์ถฉ๋ถ„ํžˆ ์ˆ™์ง€ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋ คํ–ˆ๋Š”์ง€ (์•„๋‹ˆ์š”..)
3. ์• ์ดˆ์— DB ๋ฅผ ๋ถ™์ด ํ•„์š”๊ฐ€ ์žˆ์—ˆ๋Š”์ง€, front ๋‹จ์—์„œ ๊ฒฐ๊ณผ๋ฅผ ์ค€๋น„ํ•ด๋‘๊ณ  ๋ Œ๋”๋งํ•˜๋ฉด ๋˜๋Š”๊ฑด ์•„๋‹ˆ์—ˆ๋Š”์ง€.

๋ณด์™„ํ•ด์•ผ ํ•  ์ 
1. API ํ˜ธ์ถœ ๋ฌธ์„œํ™”
2. nestjs ์—์„œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ ์‹œ๋„ํ•ด๋ณผ ๊ฒƒ
3. @ts-ignore ๋ฅผ ์ ์ง„์ ์œผ๋กœ ์ œ๊ฑฐํ•ด๋ณด์ž.
4. ๊นƒํ—™ ์ฝ”๋“œ ๊ณต๊ฐœ ใ