์ฌ๊ธฐ๋ก์ด ์์ฌ์ํ ์ฌ๋ฆฌํ ์คํธ ๊ฐ๋ฐ ํ๊ธฐ
์ธ์ ๋๋ผ๋ง ์ฌ๊ธฐ๋ก์ด ์์ฌ์ํ์ ๋์งํ๊ณ ์ถ์์ต๋๋ค. ์ฌ์์ ์บ๋ฆญํฐ๋ฅผ ์์ฌ๋ก ์ง์ ์ฌ๋ฆฌํ
์คํธ๋ฅผ ๋ง๋ค์ด๋ณด๊ณ ์ ์ ์น 2๋ช
๊ณผ ์ฌ์ด๋ ํ๋ก์ ํธ๋ฅผ ์งํํ์ต๋๋ค. ์ด ๊ณผ์ ์์ ๋๋ ์ํ์ ๊ฐ๋ฐ์๋ก์ ๋ฐฐ์ด์ , (์ฃผ๋ก) ์์ฌ์ ๋ ์ ์ ํ์ด๋ณด๊ฒ ์ต๋๋ค.
์ฐ์ ๊ฒฐ๊ณผ๋ฌผ
https://www.mbti-hospital-playlist.site/
-> ๋๋ฉ์ธ ๋ณ๊ฒฝ : https://friendly-shannon-fbae91.netlify.app/
ํ๋ก์ ํธ ํํธ ํ๊ณ
์ผ์ฌ์ฐฌ ์์
๋ง์ผํฐ ์น๊ตฌ ๋๋ถ์ ๋
ธ์
์ ์ ๊ทน ํ์ฉํ๋ฉฐ ํ์๋ฅผ ์งํํ ์ ์์๊ณ , ์นธ๋ฐ์ ์ ์ ๋ฆฌํด์ฃผ์ด ๋ ํผ๋ฐ์ค์ ํ์ ๋ด์ฉ์ ๊ธฐ๋กํ ์ ์์์ต๋๋ค.
์ด๋๊น์ง๋ง ํด๋ ์ฌ์์์ด ๋ฐฉ์์ค์ด๋ ์์ ์ด๋ผ ์ข
์ ์ ๊น์ง ํ๋ก์ ํธ๋ฅผ ๋ง๋ฌด๋ฆฌํ ์ ์์๊ฑฐ๋ผ ์๊ฐํ์ต๋๋ค.
์ํ๋ก์ด ๊ณผ์
ํ์ ์ธ๋ช
๋ชจ๋ ์ค๋ ์น๊ตฌ์์ง๋ง ๊ฐ์ ์ฌ๋ ์ถ๊ณผ ์ง์ญ(๋ถ์ฐ/์์ธ/๊นํด)์ด ๋ฌ๋์ต๋๋ค. ์๊ตญ์ ๋์งธ ์น๋๋ผ๋ ์๋ก ๋๋ฌด ๋ฉ๋ฆฌ ๋จ์ด์ ธ์์ด ๋๋ฉด ํ์๋ ํ๋ค์์ต๋๋ค.
ํ๋ก์ ํธ ์งํ ์ด๋ฐ์๋ ์๋ก ์ผ์ฐ์ผ์ฐํ๋ฉฐ ์ ๊ธฐ์ ์ผ๋ก ํ์๋ฅผ ๊ฐ์ก์ง๋ง ํ๋ฐ์ผ๋ก ๊ฐ ์๋ก ๋ค๋ค ์ง์ค๋ ฅ์ด ํ๋ ค์ง๋ ๊ฒ์ ๋๊ผ์ต๋๋ค. ๊ธฐ์ด์ฝ ์ ์ ์ ์ผ๋ก ์ค๋จ๋๊ธฐ๋ ํ์ต๋๋ค(์ ๋ ๊ทธ๋ ๊ฒ ๋๊ผ์ต๋๋ค ใ
) ์ค๋ ์ฌ์ฉํด๋ณด๊ณ , ๊ฒ๋ํ์ด๋ ์ฌ์ฉํ๋ฉฐ ์๋ก์ ๊ฑฐ๋ฆฌ๊ฐ์ ์ขํ๋ดค์ง๋ง ์ฝ์ง ์์์ต๋๋ค.
๊น๋๊ณ ๋งํ๋ฉด,, ํ๋ก์ ํธ์ ์์ด๋์ด๋ฅผ ๋ด๋์ ์ ๊ฐ ์ฑ
์์ง๊ณ ์ด๋๋ฅผ ๋ฉ์ผํ์ง๋ง, ์๋ ์นํ ์น๊ตฌ๋ค์ด๋ค ๋ณด๋ ๊ฐ์์ ๋ฐ์ ์ฌ์ ์ ์ดํดํ๋ค ๋ณด๋ ์งํ์ด ๋๋ ์ ๋ฐ์ ์์์ต๋๋ค.
์ฒด๊ณ์ ์ผ๋ก ํ์ ๋ ์ง๋ฅผ ์ก๊ณ ํ์์์ ์ด๋ค ๋ด์ฉ์ ํฝ์คํด์ผ ํ๋์ง, ๋ค์ ํ์ ๊น์ง ๋ฌด์์ ์ค๋นํด์ผํ๋์ง ๋ฑ ์ฃผ๋์ ์ธ ๋ชจ์ต์ ๋ณด์ฌ์ผํ์ง๋ง ๊ทธ๋ฌ์ง ๋ชปํ์ต๋๋ค. ๋ฌด์๋ณด๋ค 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 ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ ๋ฐ์ดํฐ ํ์
์ด ๋ช
์๋ผ ์๋ค๋ ์ฌ์ค์ด ์ฃผ๋ ์์ ๊ฐ์ ์ด๋ฃจ ๋งํ ์ ์์์ต๋๋ค. ๋ฌด์๋ณด๋ค ์ ์ง๋ณด์(ํ ํ์๋ ์๋ ํ๋ก์ ํธ์ง๋ง) ๋ฅผ ํ ๋ ๊ฐํน ๋ด๊ฐ ์ง ์ฝ๋๊ฐ ์ด๋ค ์๋ฏธ์ธ์ง ์ค๋ฝ๊ฐ๋ฝ ํ ๋๊ฐ ์๋๋ฐ, ์ด๋ด๋ ๋ฐ์ดํฐ ํ์
์ด๋ผ๋ ๋ช
์๋ผ ์๋ค๋ฉด ์ฝ๋์ ์๋ฏธ๋ฅผ ์ดํดํ๋๋ฐ ํ์ธต ์์ํ ๊ฑธ ์๊ธฐ์, ์ผ๋ง์ ์ฌ์ง ์์ด ์ ๋ ํ์
์คํฌ๋ฆฝํธ๋ฅผ ๋ค์ ์ฌ์ฉํ ๊ฒ ์
๋๋ค (์ด์ ๋ ์ ๋๋ก ๋ ๊ฐ๋
์ ๊ณ๋ค์ธ).
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๋
๋ค์ ์ด ํฌ์คํ
์ ๋ค์๋ดค์ ๋, ํ ๋ ์์ ์ด์ง์๋ค ใ
ใ
ใ
์ด๋ด์ ์๊ธธ ๋ฐ๋ผ๊ฒ ์ต๋๋ค :) ๊ธด๊ธ ์ฝ์ด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค.
์ค์ค๋ก ์๊ฐํด๋ด์ผ ํ ์
1. ์ typeorm ์ ์ฌ์ฉํ๋์ง. prisma ๊ฐ์ ๋ค๋ฅธ orm ์ ์ ๊ณ ๋ คํ์ง ์์๋์ง.
2. DTO, DAO ๊ฐ๋
์ ์ถฉ๋ถํ ์์งํ๊ณ ์ฌ์ฉํ๋ คํ๋์ง (์๋์..)
3. ์ ์ด์ DB ๋ฅผ ๋ถ์ด ํ์๊ฐ ์์๋์ง, front ๋จ์์ ๊ฒฐ๊ณผ๋ฅผ ์ค๋นํด๋๊ณ ๋ ๋๋งํ๋ฉด ๋๋๊ฑด ์๋์๋์ง.
๋ณด์ํด์ผ ํ ์
1. API ํธ์ถ ๋ฌธ์ํ
2. nestjs ์์ ํ
์คํธ ์ฝ๋ ์์ฑ ์๋ํด๋ณผ ๊ฒ
3. @ts-ignore ๋ฅผ ์ ์ง์ ์ผ๋ก ์ ๊ฑฐํด๋ณด์.
4. ๊นํ ์ฝ๋ ๊ณต๊ฐ ใ