- 2024 ์นด์นด์ค ํ ํฌ ์บ ํผ์ค 2๊ธฐ ์ถฉ๋จ๋ 18์กฐ ๋ด๊ฐ๋จน์์ฟ ํค ํ์ ํ๋ก์ ํธ์ ๋๋ค.
- ๊ฐ๋ฐ ๊ธฐ๊ฐ : 2024๋ 9์ 2์ผ ~ 2024๋ 11์ 15์ผ
๊ฐ๋ณํ | ๊น์ง์ | ์ด์ฉ์ง | ์์ธ๋น | ๊น๋ฏผ์ง | ๋ฐฐ๋ฏผ์ | ์ดํ | ์ด์๊ฒฝ |
---|---|---|---|---|---|---|---|
@kang-kibong | @KimJi-An | @tteokbokki-master | @YIMSEBIN | @alsswl | @minsu-cnu | @LeeTaek2T | @pkyung |
Front-end | Front-end | Front-end | Front-end | Back-end | Back-end | Back-end | Back-end |
ํ๋ก ํธ์๋ 4์ธ, ๋ฐฑ์๋ 4์ธ์ผ๋ก ์ด๋ฃจ์ด์ง 8์ธ ํ ๋ด๊ฐ๋จน์์ฟ ํค ์ ๋๋ค.
๐ง Hire Higher
Hire higher๋ ์ธ๊ตญ์ธ ๊ทผ๋ก์์ ๊ณ ์ฉ์ฃผ ๊ฐ์ ์์ ํ ์ฑ์ฉ ๊ณ์ฝ์ ์ง์ํ๋ ์๋น์ค์ ๋๋ค.
- ํ๊ฒ ์ฌ์ฉ์ : ์ธ๊ตญ์ธ ๋ ธ๋์๋ฅผ ๊ตฌ์ธํ๋ '๊ณ ์ฉ์ฃผ' / ํ๊ตญ์์ ์ผ์ ํ๊ธฐ ์ํ๋ '์ธ๊ตญ์ธ ๋ ธ๋์'
- ๋ค๊ตญ์ด ํ์ค ๊ทผ๋ก๊ณ์ฝ์, ์๋ช ์์คํ , ๋น์ ๋ฑ๋ก ๋ฐ ๊ฒ์ฆ ์์คํ ์ ํตํ ์์ธก์ ์ ๋ขฐ์ฑ ํ๋ณด๊ฐ Hire Higher์ ์ฃผ ๋ชฉ์ ์ ๋๋ค.
ํ๊ตญ์์ ์ผํ๋ ์ธ๊ตญ์ธ ๋ ธ๋์๋, ๊ทผ๋ก์ ์ ๊ณผ์ ์์ ๋ถ๋ฆฌํจ์ ๋๋ผ๊ธฐ ์ฝ์ต๋๋ค.
์ธ์ด ๋ฐ ๋ฌธํ์ ์ธ ์ธก๋ฉด์์ ์์ฌ์ํต์ด ์ด๋ ค์ธ ์ ์๊ณ , ๊ทธ๋ ์ง ์๋ค ํ๋๋ผ๋ ํ๊ตญ์ ๊ทผ๋ก ๋ฒ๊ท๋ฅผ ์ธ์งํ๋ ๊ฒ์๋ ์ด๋ ค์์ด ์์ต๋๋ค.
ํ๊ตญ์์ ์ธ๊ตญ์ธ ๋ ธ๋์๋ฅผ ๊ณ ์ฉํ๋ ค๋ ์ฌ์ ์ฃผ๋ ์ธ๊ตญ์ธ ๋ ธ๋์๋ฅผ ์ฝ๊ฒ ๊ณ ์ฉํ ์ ์์ต๋๋ค.
์ธ๊ตญ์ธ์ ๊ณ ์ฉํ๊ธฐ ์ํด์๋ ํ๊ตญ์ธ์ ์ ๋ถ์ ๊ฒ์ฆํ ๋์ ๋ค๋ฅธ ๊ณผ์ ์ ๊ฑฐ์ณ์ผํ๊ณ , ๋๋ฌธ์ ํด์ธ ๋ ธ๋ ๊ทผ๋ก์์๊ฒ ์ ๋ขฐ์ฑ์ ๋๋ผ๊ธฐ๊ฐ ๋น๊ต์ ์ด๋ ต์ต๋๋ค.
์ด๋ฌํ ํ์ธํฌ์ธํธ๋ฅผ ๋ถ์ํ์ฌ, ์ธ๊ตญ์ธ ๊ทผ๋ก์์ ํ๊ตญ ๊ณ ์ฉ์ฃผ ์ฌ์ด์ ์ ๋ขฐ๋ฅผ ๊ตฌ์ถํ ์ ์๋ ๊ตฌ์ธ๊ตฌ์ง ๋ฐ ๊ทผ๋ก๊ณ์ฝ์ ์์ฑ ์๋น์ค๋ฅผ ๊ธฐํํ์์ต๋๋ค.
- ๋ฐฐํฌ๋งํฌ(FE): https://hire-higher.netlify.app/
- ๋ฐฐํฌ๋งํฌ(BE): https://api.hirehigher.site/
- ์คํ ๋ฆฌ๋ถ ๋ฐฐํฌ๋งํฌ : https://66e528a32564a3669b75354b-qfpivukyah.chromatic.com/
โจ ์ต์ข ๊ธฐํ์ | ๐ API ๋ฌธ์ | ๐ ์ฝ๋ ์ปจ๋ฒค์ | โ ์ปค๋ฐ ์ปจ๋ฒค์ | ๐ข ์ด์ ์คํ์ด์ค |
---|
๐ ๋ ธ์ ํ ์คํ์ด์ค | ๐ช ์นดํ ์บ ์คํ์ด์ค | ๐จ ํผ๊ทธ๋ง |
---|
์ฌ์ฉ์๋ ๋ฉ์ธํ์ด์ง์์ ๊ตฌ์ธ๊ธ ๋ชฉ๋ก์ ํ์ธํ ์ ์์ต๋๋ค.
- ๋ฏธ๊ฐ์ ์ฌ์ฉ์ ๋ฐ ๊ทผ๋ก์๋ ์ผ์ชฝ ์ฌ์ง, ๊ณ ์ฉ์ฃผ๋ ์ค๋ฅธ์ชฝ ์ฌ์ง๊ณผ ๊ฐ์ ๋ฉ์ธํ์ด์ง๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
- ๊ณ ์ฉ์ฃผ๋ก ๋ก๊ทธ์ธํ ๊ฒฝ์ฐ ๋ฐฐ๋๋ฅผ ํตํด ๊ณต๊ณ ๊ธ ๋ฑ๋ก ํ์ด์ง๋ก ์ด๋ํ ์ ์์ต๋๋ค.
- ๊ณต๊ณ ๊ธ ๋ชฉ๋ก ์ฐ์ธก ์๋จ์ ์ ๋ ฌ ๊ธฐ๋ฅ์ ํตํด '์ต์ ์ / ๊ธ์ฌ ๋ง์ ์'์ผ๋ก ๊ณต๊ณ ๊ธ์ ์ ๋ ฌํ ์ ์์ต๋๋ค.
์ฌ์ฉ์๋ ํค๋์ ์์นํ ๋ฒ์ญ ์ต์ ์ ์ด์ฉํ์ฌ ํ๊ตญ์ด ๋๋ ๋ฒ ํธ๋จ์ด๋ก ํ์ด์ง๋ฅผ ๋ฒ์ญํ ์ ์์ต๋๋ค.
์ฌ์ฉ์๋ ๋ณธ์ธ์ Google ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ ๋ฐ ๊ฐ์ ์ ์งํํ ์ ์์ต๋๋ค.
- ์๋น์ค์ ์ฒ์ ๊ฐ์ ํ ๊ฒฝ์ฐ ๊ณ ์ฉ์ฃผ ํน์ ๊ทผ๋ก์ ์ญํ ์ ์ ํํจ์ผ๋ก์จ ๊ฐ์ ์ ์ฐจ๋ฅผ ์งํํฉ๋๋ค.
- ์ถํ ๋ง์ดํ์ด์ง ์ด๋ ์ ์ญํ ์ ๋ง๋ ๋ง์ดํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
- ๊ธฐ์กด์ ๊ฐ์ ํ ์ฌ์ฉ์๋ ์๋์ผ๋ก ๋ก๊ทธ์ธ์ด ์๋ฃ๋๋ฉฐ ๋ฉ์ธํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
์ฌ์ฉ์๋ ๊ณ ์ฉ์ฃผ๋ค์ด ๋ฑ๋กํ ๊ตฌ์ธ๊ธ์ ์์ธ ๋ด์ฉ์ ํ์ธํ ์ ์์ต๋๋ค.
- ๊ทผ๋ก์๋ '์ง์ํ๊ธฐ'๋ฒํผ์ ํด๋ฆญํ์ฌ ํด๋น ๊ณต๊ณ ๊ธ์ ๋ํ ์ง์์ ์์ฑ ํ์ด์ง๋ก ์ด๋ํ ์ ์์ต๋๋ค.
๊ณ ์ฉ์ฃผ๋ ๋ณธ์ธ์ด ์ด์ํ๋ ํ์ฌ๋ฅผ ๋ฑ๋กํ ์ ์์ต๋๋ค.
- ํ์ฌ ์ด๋ฏธ์ง ํ์ผ ์ ๋ ฅ์ ์ ํ์ด๋ฉฐ, ๊ทธ ์ธ ์ ๋ณด๋ฅผ ์ ๋ ฅํ์ง ์๊ณ ์ ์ถ ์ ์๋ฌ๋ฉ์ธ์ง๋ฅผ ๋ณด์ ๋๋ค.
- ์ ์ถ ๋ฒํผ ํด๋ฆญ ์ '์ ๋ง ์ ์ถํ์๊ฒ ์ต๋๊น?' ํ์ ์ ์ ์ถ ๋ฒํผ์ ํ๋ฒ ๋ ํด๋ฆญํด์ผ ์ ์ถ์ด ์๋ฃ๋ฉ๋๋ค.
ํ์ฌ ๋ฑ๋ก ์ดํ, ๊ณ ์ฉ์ฃผ๋ ๋ณธ์ธ์ด ๋ฑ๋กํ ํ์ฌ์ ๋ํ ๊ตฌ์ธ๊ธ์ ์์ฑํ ์ ์์ต๋๋ค.
- ์ ๋ณด๋ฅผ ์ ๋ ฅํ์ง ์๊ณ ์ ์ถ ์ ์๋ฌ๋ฉ์ธ์ง๋ฅผ ๋ณด์ ๋๋ค.
- ์ ์ถ ๋ฒํผ ํด๋ฆญ ์ '์ ๋ง ์ ์ถํ์๊ฒ ์ต๋๊น?' ํ์ ์ ์ ์ถ ๋ฒํผ์ ํ๋ฒ ๋ ํด๋ฆญํด์ผ ์ ์ถ์ด ์๋ฃ๋ฉ๋๋ค.
- ๋ฑ๋กํ ๊ตฌ์ธ๊ธ์ ํํ์ด์ง ๋ฉ์ธ ํ๋ฉด์์ ํ์ธํ ์ ์์ต๋๋ค.
๊ณ ์ฉ์ฃผ๋ ๋ง์ดํ์ด์ง์์ ์์ ์ ํ์ฌ ์ ๋ณด, ๊ตฌ์ธ๊ธ ์ ๋ณด, ์ง์์ ๋ชฉ๋ก์ ํ์ธํ ์ ์์ต๋๋ค.
- ๋ง์ดํ์ด์ง์์ ํน์ ํ์ฌ๋ฅผ ํด๋ฆญํ๋ฉด, ํด๋น ํ์ฌ์ ๋ํ ๊ตฌ์ธ๊ธ ๋ชฉ๋ก ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
- ๊ตฌ์ธ๊ธ ๋ชฉ๋ก ์ค ํน์ ๊ตฌ์ธ๊ธ์ ํด๋ฆญํ๋ฉด, ํด๋น ๊ตฌ์ธ๊ธ์ ๋ํ ์ง์์ ๋ชฉ๋ก ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
๊ณ ์ฉ์ฃผ ๋ง์ดํ์ด์ง | ์ง์์ ๋ชฉ๋ก ํ์ธ |
- ์ง์์ ๋ชฉ๋ก ํ์ด์ง์์ ๊ฐ ์ง์์์ ๋ํ ์ง์์๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
- ๊ณ ์ฉ์ฃผ๊ฐ ์ฑ์ฉ์ ์ํ๋ ์ง์์์ ๋ํด '๊ณ์ฝํ๊ธฐ'๋ฒํผ์ ํด๋ฆญํ์ฌ ํด๋น ์ง์์์์ ๊ทผ๋ก๊ณ์ฝ์๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์ ์ฒด ํ๋ฉด | ์ด๋ ฅ์ ๋ฐ ์ง์์ ํ์ธ ํ์ธ |
- ๊ณ ์ฉ์ฃผ๊ฐ '๊ณ์ฝํ๊ธฐ' ๋ฒํผ์ ํด๋ฆญํ ํ ๊ทผ๋ก๊ณ์ฝ์ ์์ฑ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
- ๊ณ ์ฉ์ฃผ๋ ๊ณ์ฝ์ ์์ฑ ์ ์ฃผ์์ฌํญ ๋ชจ๋ฌ์ ํตํด ์ง์์์ ์ธ๊ตญ์ธ ๋ฑ๋ก๋ฒํธ์ ๋น์ ๋ฐ๊ธ์ผ์๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
- ์ฃผ์์ฌํญ ๋ชจ๋ฌ์์๋ Hi Korea ํ์ดํผ๋งํฌ๋ฅผ ์ ๊ณตํ๋ฉฐ, ํด๋น ์ฌ์ดํธ์์ ์ ์ ๋ณด๋ฅผ ํ ๋๋ก ๊ทผ๋ก์์ ์ธ๊ตญ์ธ ๋ฑ๋ก๋ฒํธ ๋ฐ ๋น์ ๋ฐ๊ธ์ผ์ ์ ๋ณด๋ฅผ ๊ฒ์ฆํ ์ ์์ต๋๋ค.
- ๊ณ ์ฉ์ฃผ๊ฐ ๊ทผ๋ก๊ณ์ฝ์๋ฅผ ์์ฑํ๊ณ ์๋ช ํ๊ธฐ ๋ฒํผ์ ํด๋ฆญํ์ฌ ์ ์ ์ ์ถ์ด ์๋ฃ๋๋ฉด, ๊ทผ๋ก์๋ ๋ณธ์ธ์ ๋ง์ดํ์ด์ง์์ ํด๋น ๊ทผ๋ก๊ณ์ฝ์๋ฅผ ํ์ธํ๊ณ ์๋ช ํ ์ ์์ต๋๋ค.
- 3.3 ๋จ๊ณ์ ๊ฐ์ด ๊ทผ๋ก์๊ฐ ๊ณ์ฝ์์ ์๋ช ์ ์๋ฃํ๋ฉด ์ฑ์ฉ์ด ์๋ฃ๋ฉ๋๋ค.
๊ณ ์ฉ์ฃผ ์ฃผ์์ฌํญ | ๊ทผ๋ก๊ณ์ฝ์ ์์ฑ |
๊ทผ๋ก์๋ ๋ง์ดํ์ด์ง์์ ์ด๋ ฅ์ / ์๋ช / ์ธ๊ตญ์ธ ๋ฒํธ ๋ฐ ๋น์๋ฐ๊ธ์ผ์ ๋ฑ๋ก ํ์ด์ง๋ก ์ด๋ํ ์ ์์ต๋๋ค.
- ๊ทผ๋ก์๊ฐ ๊ณต๊ณ ์ง์์ ํ๊ธฐ ์ํด์๋ ํ์์ ์ผ๋ก ์ 3๊ฐ์ง ์ ๋ณด ๋ฑ๋ก์ ๋ง์ณ์ผํฉ๋๋ค.
- ๋ฑ๋ก์ ํ์ง ์์ ๊ฒฝ์ฐ ๋ง์ดํ์ด์ง์ ์ด๋ ฅ์ / ์๋ช / ์ธ๊ตญ์ธ ๋ฒํธ ๋ฐ ๋น์๋ฐ๊ธ์ผ์ ๋ฒํผ์ด ํ์ฑํ ๋๋ฉฐ, ๋ฑ๋กํ ๊ฒฝ์ฐ ์์ด์ฝ์ด ์ฒดํฌํ์๋ก ๋ณ๊ฒฝ๋๋ฉฐ ๋ฒํผ์ด ๋นํ์ฑํ๋ฉ๋๋ค.
์ด๋ ฅ์ ๋ฑ๋ก | ์ฌ์ธ ๋ฑ๋ก | ์ธ๊ตญ์ธ ๋ฒํธ ๋ฐ ๋น์๋ฐ๊ธ ์ผ์ ๋ฑ๋ก |
๊ทผ๋ก์๋ ํน์ ๊ณต๊ณ ๊ธ์ ๋ํด ์ง์์๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
- ๊ทผ๋ก์๊ฐ ๊ณต๊ณ ๊ธ์ '์ง์ํ๊ธฐ' ๋ฒํผ์ ํด๋ฆญํ๋ฉด ๋จผ์ ์ฑ์ฉ ์ ๋ฐ์ ๋ํ ์๋ด๋ฌธ๊ตฌ, ํนํ ๊ทผ๋ก๊ณ์ฝ์์ ๋ํ ์ฃผ์์ฌํญ์ ๋ด์ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
- ๊ทผ๋ก์๊ฐ '์ง์์ ์์ฑํ๊ธฐ' ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์ง์์ ์์ฑ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
์ง์ ํ๋ก์ธ์ค | ์ง์์ ์์ฑ |
๊ทผ๋ก์๋ ๋ง์ดํ์ด์ง์์ ์์ ์ด ์ง์ํ ๊ณต๊ณ ์ ๋ํ ํํฉ์ ํ์ธํ ์ ์์ต๋๋ค.
- ๊ทผ๋ก์๊ฐ ์ง์ํ ์ดํ, ํํฉ์ ๋ํ๋ด๋ ๋ฒํผ์ ์ด 3๋จ๊ณ๋ฅผ ๊ฑฐ์ณ ๋ณํํฉ๋๋ค. [์ง์์ ๊ฒํ ์ค] -> ๊ณ ์ฉ์ฃผ๊ฐ ๊ทผ๋ก๊ณ์ฝ์๋ฅผ ์์ฑํจ -> [๊ทผ๋ก๊ณ์ฝ์ ์๋ช ํ๊ธฐ] -> [๊ทผ๋ก๊ณ์ฝ์ ๋ค์ด๋ก๋]
- ๋ง์ฝ ๊ณ ์ฉ์ฃผ๊ฐ ์ฑ์ฉ์ ํ์ง ์๊ณ ๊ตฌ์ธ๊ธ์ ๋ง๊ฐํ๋ค๋ฉด [์ฑ์ฉ ๋ง๊ฐ] ๋ฒํผ์ด ๋ ๋๋ง๋ฉ๋๋ค.
๊ณ ์ฉ์ฃผ๊ฐ '๊ณ์ฝํ๊ธฐ' ๋ฒํผ์ ํด๋ฆญํ์ฌ ๊ทผ๋ก๊ณ์ฝ์ ์์ฑ์ ์๋ฃํ๋ค๋ฉด, ๊ทผ๋ก์๋ ํด๋น ๊ทผ๋ก๊ณ์ฝ์๋ฅผ ํ์ธํ๊ณ ์๋ช ํ ์ ์์ต๋๋ค.
- ๊ทผ๋ก์๊ฐ ์๋ช ํ ์ ์ถํ๋ฉด ์ฑ์ฉ ๊ณผ์ ์ด ๋ง๋ฌด๋ฆฌ๋ฉ๋๋ค.
- ์ดํ ๋ง์ดํ์ด์ง์์ ๊ทผ๋ก๊ณ์ฝ์ ๋ค์ด๋ก๋ ๋ฒํผ์ ํตํด ๋ค๊ตญ์ด ๊ทผ๋ก๊ณ์ฝ์๋ฅผ ๋ค์ด๋ฐ์ ์ ์์ต๋๋ค.
๊ณ์ฝ์ |
๊ฐ ํ์ ๋ณ ๊ตฌํ์ ๋ด๋นํ ๊ธฐ๋ฅ์ ๋์ดํฉ๋๋ค.
๊ธฐ๋ฅ | ์์ธ ๋ด์ฉ | ๊ตฌํ๋ฐฉ๋ฒ |
---|---|---|
๊ตฌ์ธ๊ธ ์ ์ฅ | ๊ณ ์ฉ์ฃผ๊ฐ ๊ตฌ์ธ๊ธ์ ์ ์ฅํ๋ฉด, ๊ตฌ์ธ๊ธ ๋ด์ ์ ๋ณด๋ค์ ai๋ฅผ ํตํด์ ์์ฝํ ํ, ์ด ๋ด์ฉ๊ณผ ๊ตฌ์ธ๊ธ์ ์ ๋ชฉ์ ๋ฒ ํธ๋จ์ด๋ก ๋ฒ์ญํ์ฌ ํ ์ด๋ธ์ ์ ์ฅ | RestTemplate๋ฅผ ์ฌ์ฉํ์ฌ openAi์ ํด๋น ๋ด์ฉ์ ์์ฒญํ๊ณ , ์๋ต์ผ๋ก ์ค๋ ๊ฐ์์ ์ํ๋ ์ ๋ณด๋ฅผ ์ถ์ถํ์ฌ ์ ์ฅํ์์ต๋๋ค. |
๋ชจ๋ ๊ตฌ์ธ๊ธ ๋ฐํ | ๊ตฌ์ธ์ค์ธ ๋ชจ๋ ๊ตฌ์ธ๊ธ์ ๋ฐํ | ๊ตฌ์ธ๊ธ ๋ด์ ๊ตฌ์ธ ์ฌ๋ถ ํ๋๋ฅผ ์ด์ฉํ์ฌ ํํฐ๋ง์ ํ ํ, DTO๋ฅผ ํ์ฉํ์ฌ ๋ฉ์ธํ์ด์ง์ ํ์๋๋ ๋ฐ์ดํฐ๋ก ๊ฐ๊ณตํด์ ๋ณด๋ ๋๋ค. |
๊ตฌ์ธ๊ธ ์์ธ ์ ๋ณด ๋ฐํ | RequestParam์ ๋ค์ด์๋ id์ ํด๋นํ๋ ๊ตฌ์ธ๊ธ์ ์์ธ์ ๋ณด๋ฅผ ๋ฐํ | ์์ฒญ๋ฐ์ id์ ํด๋นํ๋ ๊ตฌ์ธ๋ค์ ์กฐํํ์ฌ, ํด๋น ์ ๋ณด๋ฅผ ๋ฐํํฉ๋๋ค. |
ํ์ฌ๋ณ ๊ตฌ์ธ๊ธ ์กฐํ | RequestParam์ ๋ค์ด์๋ id์ ํด๋นํ๋ ํ์ฌ๊ฐ ์์ฑํ ๊ตฌ์ธ๊ธ์ ๋ฐํ | ๊ตฌ์ธ๊ธ๊ณผ ํ์ฌ๋ 1๋๋ค ๊ด๊ณ์ ์๊ธฐ ๋๋ฌธ์ ๋จผ์ ํ์ฌ ๊ฐ์ฒด๋ฅผ ์ฐพ์ ํ findByCompany ๋ฉ์๋๋ฅผ ํตํด์ ํ์ฌ ๋ณ ๊ตฌ์ธ๊ธ์ ์กฐํํฉ๋๋ค. |
์ต๊ทผ ๋ฑ๋ก๋ ๊ตฌ์ธ๊ธ ์์๋๋ก ์ ๋ ฌ | ๋ชจ๋ ๊ตฌ์ธ๊ธ์ ์ต๊ทผ ๋ฑ๋ก๋ ์์๋๋ก ๋ฐํ | JPA์ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ findAllByHiringTrueOrderByUploadDateDesc ๋ฉ์๋๋ก ํด๋น ๊ธฐ๋ฅ์ ๊ตฌํํ์ต๋๋ค. HiringTrue๋ ๊ตฌ์ธ์ค์ธ ๊ตฌ์ธ๊ธ์ ํํฐ๋งํ๊ธฐ ์ํด, OrderByUploadDateDesc๋ ์ต๊ทผ ๋ฑ๋ก๋ ์์๋๋ก ๋ฐํํ๊ฒ ํ๊ธฐ ์ํด์ ์ฌ์ฉ๋ฉ๋๋ค. |
๊ธ์ฌ๊ฐ ๋์ ์์๋๋ก ์ ๋ ฌ | ๋ชจ๋ ๊ตฌ์ธ๊ธ์ ๊ธ์ฌ๊ฐ ๋์ ์์๋๋ก ์ ๋ ฌํ์ฌ ๋ฐํ | JPA์ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ findAllByHiringTrueOrderByUploadSalaryDesc ๋ฉ์๋๋ก ํด๋น ๊ธฐ๋ฅ์ ๊ตฌํํ์ต๋๋ค. HiringTrue๋ ๊ตฌ์ธ์ค์ธ ๊ตฌ์ธ๊ธ์ ํํฐ๋งํ๊ธฐ ์ํด, OrderByUploadSalaryDesc๋ ๊ธ์ฌ๊ฐ ๋์ ์์๋๋ก ๋ฐํํ๊ฒ ํ๊ธฐ ์ํด์ ์ฌ์ฉ๋ฉ๋๋ค. |
๊ตฌ์ธ์ข ๋ฃ | ๊ตฌ์ธ ์ข ๋ฃ api๊ฐ ํธ์ถ๋๋ฉด, ํด๋น ๊ตฌ์ธ๊ธ์ ์ํ๋ฅผ ๊ตฌ์ธ ๋ง๊ฐ์ผ๋ก ๋ณ๊ฒฝ | ํด๋น api๋ก ๋ค์ด์จ id์ ํด๋นํ๋ ๊ตฌ์ธ๊ธ์ hiring ํ๋๋ฅผ false๋ก ๋ฐ๊พธ์ด, ๊ตฌ์ธ๊ธ์ ๋ชจ๋ ๋ฐํํ ๋ ํํฐ๋ง ๋๋๋ก ํฉ๋๋ค. |
์ด๋ ฅ์ ์ ์ฅ | ์ฌ์ฉ์๊ฐ ์ด๋ ฅ์๋ฅผ ์ ๋ ฅํ๋ฉด ์ด๋ฅผ ์ ์ฅ | ์ด๋ ฅ์์ ํด๋นํ๋ ๋ฐ์ดํฐ๊ฐ ์์ฒญ๋๋ฉด ์ด๋ฅผ ์ด๋ ฅ์ Entity๋ก ๋ง๋ค์ด ์ ์ฅํฉ๋๋ค. |
์ฌ์ฉ์์ ์ด๋ ฅ์ ๋ฐํ | ํน์ ์ฌ์ฉ์์ ์ด๋ ฅ์ ์์ธ์ ๋ณด๋ฅผ ๋ฐํ | ํด๋น ์ฌ์ฉ์๋ก ์ด๋ ฅ์๋ฅผ ์กฐํํ์ฌ ์ด๋ฅผ ๋ฐํํฉ๋๋ค. |
๊ณ ์ฉ์ฃผ๊ฐ ์ด๋ ฅ์ ์ด๋ | ๊ณ ์ฉ์ฃผ๊ฐ ์ง์์์ ์ด๋ ฅ์๋ฅผ ์ด๋ํ๋ค. ์ด ๋ ํด๋น ์ง์์์ ์ง์์ ๋ด์ ์ง์๋๊ธฐ๋ ํจ๊ป ๋ฐํ | ์ด๋ ฅ์์ ๋ํ id์ ์ง์์ ๋ํ id๋ฅผ ๋ฐ๊ณ , ๊ฐ ํ๋์์ ํ์ํ ๋ถ๋ถ์ ์ถ์ถํ์ฌ ๋ฐํํฉ๋๋ค. |
ํน์ ์ ์ ์ ์ด๋ ฅ์ ์กด์ฌ ์ฌ๋ถ ๋ฐํ | ์ฌ์ฉ์์ ์ด๋ ฅ์๊ฐ ์ด๋ฏธ ์กด์ฌํ๋ฉด ์๋ฌ๋ฐํ | ํด๋น ์ ์ ์ ์ด๋ ฅ์์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ ํ ํ ์กด์ฌํ๋ฉด ResumeAlreadyExistException์ ๋ฐํํฉ๋๋ค. |
๊ธฐ๋ฅ | ๊ตฌํ ๋ฐฉ๋ฒ | ์ค๋ช |
---|---|---|
ํ ํฐ ๊ฒ์ฆ Interceptor | ์์ฒญ ํค๋์ ์๋ ์ก์ธ์ค ํ ํฐ์ ์ ํจ์ฑ์ ๊ฒ์ฆํ๋ ์ธํฐ์ ํฐ ๊ตฌํ | ์์ฒญ ํค๋์ ๋ด๊ฒจ์ ธ ์ค๋ ์ก์ธ์ค ํ ํฐ์ ๋ํด, ๋ง๋ฃ ์ฌ๋ถ์ ์ ์ ์ ๋ณด ์กด์ฌ ์ฌ๋ถ, JWT ํ์ ๊ฒ์ฆ ๋ฑ์ ์ํํ๊ณ , ์ ํจํ ์ Argument Resolver๋ก ์ ์ ID๋ฅผ ๋๊ฒจ์ค๋๋ค. |
์ ์ ID DTO ๋งคํ Argument Resolver | ์ก์ธ์ค ํ ํฐ ํ์ฑ ํ ์ป์ ์ ์ ID๋ฅผ ์ปจํธ๋กค๋ฌ ๋งค๊ฐ๋ณ์ DTO์ ๋งคํํ๋ Argument Resolver ๊ตฌํ | ์ธํฐ์ ํฐ์์ ๋์ด์จ ์ ์ ID๋ฅผ DTO ๊ฐ์ฒด๋ก ๋งคํํ์ฌ ์ปจํธ๋กค๋ฌ์๊ฒ ์ ๊ณตํ๋ Argument Resolver๋ฅผ ๊ตฌํํ์์ต๋๋ค. |
๊ตฌ๊ธ OAuth ๋ก๊ทธ์ธ | ๊ตฌ๊ธ OAuth ๊ธฐ๋ฐ ๋ก๊ทธ์ธ ๋ฐ ์๋น์ค ์์ฒด ํ์๊ฐ์ ์ฒ๋ฆฌ ๊ธฐ๋ฅ ๊ตฌํ | ๊ตฌ๊ธ OAuth ๊ธฐ๋ฐ ๋ก๊ทธ์ธ์ ์ํํ๊ณ , ์ ๊ท ์ฌ์ฉ์์ธ ๊ฒฝ์ฐ ๊ตฌ๊ธ ๊ณ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ ์ ์ ์ํฐํฐ๋ก ์์ํํ์ฌ ํ์๊ฐ์ ์ฒ๋ฆฌ๋ฅผ ํ๊ณ , ์ ์ ์ ๋ํ ์ ๋ณด๋ฅผ ์๋ตํ๋ API๋ฅผ ๊ตฌํํ์์ต๋๋ค. |
์ฌ์ฉ์ ์ ํ ๋ฑ๋ก API | ํน์ ์ฌ์ฉ์์ ๊ณ ์ฉ์ฃผ or ๊ทผ๋ก์ ์ ํ ๋ฑ๋ก API ํ | ํน์ ์ฌ์ฉ์์ ์ ํ์ ์์ฒญ๋ฐ์(๊ณ ์ฉ์ฃผ or ๊ทผ๋ก์) ์ ํ์ผ๋ก ์ ๋ฐ์ดํธํ๋ API๋ฅผ ๊ตฌํํ์์ต๋๋ค. |
์ฌ๋ผ์ด๋ API | ๋ฉ์ธ ํ์ด์ง ์ฌ๋ผ์ด๋ ๋ฐฐ๋ ์ด๋ฏธ์ง API ๊ตฌํ | ๋ฉ์ธ ํ์ด์ง์ ์ฌ๋ผ์ด๋ ๋ฐฐ๋ ์์ญ์ ์ฌ์ฉํ ์ด๋ฏธ์ง๋ฅผ ์๋ตํ๋ API๋ฅผ ๊ตฌํํ์์ต๋๋ค. ํด๋น ์ด๋ฏธ์ง ๋ฆฌ์์ค๋ GCS์์ ๊ด๋ฆฌํ์์ต๋๋ค. |
CORS ์ค์ | ๋ฐฐํฌ ํ๊ฒฝ์์ ํ๋ก ํธ์๋์์ CORS ๊ด๋ จ ์ค์ | ํ๋ก ํธ๋จ ์น ๋ธ๋ผ์ฐ์ ์์ ์ค๋ preflight ์์ฒญ์ ๋ํด์๋ ์ธํฐ์ ํฐ๋ฅผ ํจ์ฑํ๋๋ก ์ค์ ํ์๊ณ , ํ์ฉ ๋ฉ์๋์ ํ์ฉ ํค๋์ ๋ฒ์๋ฅผ ์ต์ํ์ผ๋ก ์ถ์ํ์ฌ ์ค์ ํ์์ต๋๋ค. |
GCP ๋ฐฐํฌ | Nginx ์น ์๋ฒ, API ์๋ฒ, MySQL DB ๋ฐฐํฌ | GCP๋ฅผ ํ์ฉํ์ฌ ๋ฐฐํฌํ์์ต๋๋ค. ์๋ฒ API VM์ Jar ํ์ผ์ ๋ฐฐํฌํ์๊ณ , ์๋จ์ Nginx๋ฅผ Docker container๋ก ๋์์ ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ํ ๋ฆฌ๋ฒ์ค ํ๋ก์ฑ์ ์ํํ์์ต๋๋ค. DB๋ ์๋ฒ ์ธ์คํด์ค์์ ๋ถ๋ฆฌ ์ด์์ ์ํด GCP Cloud SQL์ ํ์ฉํ์ฌ MySQL DB ์ธ์คํด์ค๋ฅผ ๋์ ์ต๋๋ค. ๊ทธ ์ธ VPC ๋ฐฉํ๋ฒฝ๊ณผ ๋คํธ์ํฌ ์ค์ ๋ฑ์ ์ ์ ํ ์ค์ ํ๊ณ , API ์๋ฒ VM์ ๋ํ SSH ์ ์์ฉ ํค๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด ํ์์๊ฒ ๊ณต์ ํ์์ต๋๋ค. |
CI/CD | ํ๋กํผํฐ, SSH ํค ์ฃผ์ ๋ฐ SCP๋ก Jar ํ์ผ VM์ ์ ์ก | ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ github์ ์ฌ๋ฆฌ์ง ์๊ณ action secret์ ๋ฑ๋กํ์ฌ CI/CD ๊ณผ์ ์ ์ฃผ์ ํ์๊ณ , Jar ํ์ผ ๋น๋ ํ SCP๋ก GCP VM์ ์ ์กํ์์ต๋๋ค. |
๊ธฐ๋ฅ | ์์ธ ๋ด์ฉ | ์ค๋ช |
---|---|---|
๊ณ ์ฉ์ฃผ ๊ทผ๋ก๊ณ์ฝ์ ์์ฑ | ๊ณ ์ฉ์ฃผ๊ฐ ๊ทผ๋ก๊ณ์ฝ์ ์์ฑ ๋ฒํผ์ ๋๋ ์ ๋ ๋์๋๋ ๊ธฐ๋ฅ์ ๋๋ค. | request body์ ๋ด์ฉ์ด ๊ทผ๋ก๊ณ์ฝ์์ ์์ฑ๋ ๋ฟ ์๋๋ผ ๊ณ ์ฉ์ฃผ ์๋ช ์ด ํจ๊ป ์์ฑ๋์ด gcs์ ์ ์ฅ๋ฉ๋๋ค.์ด๋ฏธ ๋ง๋ค์ด์ง ๊ทผ๋ก๊ณ์ฝ์์ ๋ํด์๋ ๋์ํ์ง ์์ต๋๋ค. |
๊ทผ๋ก์ ๊ทผ๋ก๊ณ์ฝ์ ์์ฑ | ๊ทผ๋ก์๊ฐ ๊ทผ๋ก๊ณ์ฝ์ ์๋ช ๋ฒํผ์ ๋๋ ์ ๋ ๋์๋๋ ๊ธฐ๋ฅ์ ๋๋ค. | ๊ณ ์ฉ์ฃผ๊ฐ ์์ฑํ ๊ทผ๋ก๊ณ์ฝ์๋ฅผ ๊ฐ์ ธ์์ ๊ทผ๋ก์ ์๋ช ์ ๋ฃ์ ๊ทผ๋ก๊ณ์ฝ์๋ฅผ gcs์ pdf ํ์ผ๊ณผ image ํ์ผ์ด ์ ์ฅ๋ฉ๋๋ค. |
๊ทผ๋ก๊ณ์ฝ์ ๋ค์ด๋ก๋ | ๊ทผ๋ก๊ณ์ฝ์ url์ ๋ฐํํ๋ ๊ธฐ๋ฅ์ ๋๋ค. | ์ด๋ฏธ์ง๋ฅผ ๋ฐํํ๋ api์ pdf๋ฅผ ๋ฐํํ๋ api๊ฐ ์์ผ๋ฉฐ response๋ url๊ณผ urlV๋ก url์ ๊ฒฝ์ฐ ํ๊ตญ์ดํ ๊ทผ๋ก๊ณ์ฝ์ urlV๋ ๋ฒ ํธ๋จ์ดํ ๊ทผ๋ก๊ณ์ฝ์์ ๋๋ค. |
๊ทผ๋ก๊ณ์ฝ์ ์กฐํ | ์ง์ id๋ก ๊ทผ๋ก๊ณ์ฝ์ ๋ด์ฉ์ ์กฐํํ ์ ์์ต๋๋ค. | query param์ ์๋ applyId๋ฅผ ํตํด ๊ทผ๋ก๊ณ์ฝ์ ๊ฐ์ฒด๋ฅผ ์กฐํํ์ฌ ๋ด์ฉ์ ๋ฐํํฉ๋๋ค. |
๊ธฐ๋ฅ | ๊ตฌํ ๋ฐฉ๋ฒ | ์ค๋ช |
---|---|---|
๊ทผ๋ก์ ์ธ๊ตญ์ธ ๋ฒํธ, ๋น์ ๋ฑ๋ก | DB์ ์ธ๊ตญ์ธ ๋ฒํธ ๋ฐ ๋น์ ์ ๋ณด ์ ์ฅ | ๊ทผ๋ก์๊ฐ ์ธ๊ตญ์ธ ๋ฒํธ์ ๋น์ ์ ๋ณด๋ฅผ ์ ๋ ฅํ๋ฉด DB์ ์ ์ฅ๋ฉ๋๋ค. |
๊ทผ๋ก์ ์ธ๊ตญ์ธ ๋ฒํธ, ๋น์ ํ์ธ | DB์์ ์ธ๊ตญ์ธ ๋ฒํธ ๋ฐ ๋น์ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ | ๊ณ ์ฉ์ฃผ๊ฐ ๊ทผ๋ก์์ ์ธ๊ตญ์ธ ๋ฒํธ ๋ฐ ๋น์ ์ ๋ณด๋ฅผ ํ์ธํฉ๋๋ค. |
์ฌ์ธ ๋ฑ๋ก | Goole Cloud Storage์ ์ฌ์ธ ์ด๋ฏธ์ง ์ ์ฅ ๋ฐ DB์ ์ฌ์ธ ์ด๋ฏธ์ง URL ์ ์ฅ | ๊ณ ์ฉ์ฃผ์ ๊ทผ๋ก์๊ฐ ์์ ์ ์ฌ์ธ์ ๋ฑ๋กํฉ๋๋ค. |
์ฌ์ธ ๊ฐ์ ธ์ค๊ธฐ | ์ฌ์ธ ์ด๋ฏธ์ง URL ๊ฐ์ ธ์ค๊ธฐ | ๊ณ ์ฉ์ฃผ์ ๊ทผ๋ก์๊ฐ ์์ ์ ์ฌ์ธ ์ด๋ฏธ์ง URL์ ๊ฐ์ ธ์ต๋๋ค. |
ํ์ฌ ๋ฑ๋ก | DB์ ๊ณ ์ฉ์ฃผ์ ํ์ฌ ์ ๋ณด ์ ์ฅ | ๊ณ ์ฉ์ฃผ๊ฐ ์์ ์ ํ์ฌ ์ ๋ณด๋ฅผ ์ ๋ ฅํฉ๋๋ค. |
ํ์ฌ ์ ๋ณด ํ์ธ | DB์์ ๊ณ ์ฉ์ฃผ์ ํ์ฌ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ | ๊ณ ์ฉ์ฃผ ์์ ์ ํ์ฌ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ต๋๋ค. |
์ง์์ ๋ฑ๋ก | ๊ทผ๋ก์์ ์ง์์ ์ ์ฅ ๋ฐ ์ง์ ์ํ ์ ์ฅ. | ๊ทผ๋ก์๊ฐ ์ง์์๋ฅผ ์์ฑํ์ฌ ํน์ ๊ตฌ์ธ๊ธ์ ์ง์์๋ฅผ ๋ฑ๋กํฉ๋๋ค. |
์ง์์ ์กฐํ | DB์์ ์ง์์ ์ ๋ณด ๋ฐํ | ๊ณ ์ฉ์ฃผ๊ฐ ์ง์์์ ์ง์์๋ฅผ ํ์ธํฉ๋๋ค. |
(๊ณ ์ฉ์ฃผ ์ ์ฅ)๊ตฌ์ธ๊ธ์ ์ง์ํ ์ง์์ ํ์ธ | ์ฐ๊ด๊ด๊ณ์ ๊ตฌ์ธ๊ธ id๋ฅผ ํตํด ํ์ํ ์ ๋ณด๋ค ๋ฐํ | ๊ณ ์ฉ์ฃผ๊ฐ ์์ ์ ๊ตฌ์ธ๊ธ์ ์ง์ํ ์ง์์ ๋ชฉ๋ก์ ํ์ธํ๊ณ , ์ง์์ ํ์ธ ๋ฐ ๊ณ์ฝ๊ณผ ๊ฐ์ ๋ค์ ํ๋์ ํ ์ ์๋๋ก ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค. |
(๊ทผ๋ก์ ์ ์ฅ)์์ ์ด ์ง์ํ ๊ตฌ์ธ๊ธ ํ์ธ | ์ฐ๊ด๊ด๊ณ๋ฅผ ์ด์ฉํ์ฌ ํ์ํ ์ ๋ณด๋ค ๋ฐํ | ์ง์์๊ฐ ์ด๋ค ๊ตฌ์ธ๊ธ์ ์ง์ํ๋์ง ํ์ธํ ์ ์๋๋ก ํ์ํ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค. |
๋น์, ์ธ๊ตญ์ธ๋ฒํธ, ์ฌ์ธ ๋ฑ๋ก ์ฌ๋ถ ํ์ธ | DB์ ์ ๊ทผํ์ฌ ๋น์, ์ธ๊ตญ์ธ๋ฒํธ, ์ฌ์ธ์ด ๋ฑ๋ก๋์๋์ง ํ์ธ ํ booleanํ์ ์ผ๋ก ๋ฐํ | ๊ทผ๋ก์๊ฐ ๋น์, ์ธ๊ตญ์ธ ๋ฒํธ, ์ฌ์ธ์ ๋ชจ๋ ๋ฑ๋กํ ํ์ ๊ตฌ์ธ๊ธ์ ์ง์์๋ฅผ ๋ฑ๋กํ ์ ์๋๋ก 3๊ฐ์ง ๋ฑ๋ก ์ฌ๋ถ๋ฅผ ์๋ ค์ค๋๋ค. |
๊ธฐ๋ฅ | ๊ตฌํ ๋ฐฉ๋ฒ | ์ค๋ช |
---|---|---|
๊ณตํต ์ปดํฌ๋ํธ ๊ตฌํ | Headless UI ํจํด ์ ์ฉ ๋ฐ ์คํ์ผ ๊ฐ์ด๋ ์ค์ | ํ๋ก์ ํธ ์ ๋ฐ์์ ์ฌ์ฉ๋๋ ๋ฒํผ, ์นด๋, ์ ๋ ฅ ํ๋ ๋ฑ์ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ์ค๊ณํ๊ณ Headless UI ์ ๊ทผ ๋ฐฉ์์ ํตํด ์ ์ฐํ๊ฒ ๊ตฌ์ฑํ์ต๋๋ค. |
๋ก๊ทธ์ธ ํ์ด์ง ๊ตฌํ | ๊ตฌ๊ธ OAuth๋ฅผ ํตํ ์์ ๋ก๊ทธ์ธ | ๊ตฌ๊ธ OAuth ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ณ , ์ฌ์ฉ์ ์ธ์ฆ ๋ก์ง์ ๋ชจ๋ํํ์ฌ ์ฌ์ฌ์ฉ์ฑ์ ๋์์ต๋๋ค. |
๊ณ ์ฉ์ธ/ํผ๊ณ ์ฉ์ธ ํ์ด์ง ๊ตฌํ | ๊ณตํต ์ปดํฌ๋ํธ์ ์ํ ๊ด๋ฆฌ | ๊ณ ์ฉ์ธ๊ณผ ํผ๊ณ ์ฉ์ธ์๊ฒ ๋ง๋ ์ฝํ ์ธ ๋ฅผ ๋ ๋๋งํ๋, ๊ณตํต๋ UI ๊ตฌ์กฐ์ ์ํ ๊ด๋ฆฌ ๋ฐฉ์์ผ๋ก ๊ตฌํํด ์ ์ง๋ณด์์ฑ์ ๋์์ต๋๋ค. |
๋ฉ์ธ ํ์ด์ง ๊ตฌํ | ์ญํ ๋ณ ์ฝํ ์ธ ์กฐ๊ฑด๋ถ ๋ ๋๋ง | ๊ทผ๋ก์์ ์ฌ์ ์ฃผ๊ฐ ๋์ผํ ๋ฉ์ธ ํ์ด์ง๋ฅผ ์ฌ์ฉํ๋ฉด์ ์ญํ ์ ๋ง๋ ๋ฐ์ดํฐ์ ๊ธฐ๋ฅ์ ์กฐ๊ฑด๋ถ๋ก ๋ ธ์ถํ๋๋ก ์ค์ ํ์ต๋๋ค. |
Select ์ปดํฌ๋ํธ ๊ตฌํ | ๋ค์ค ์ ํ ์ต์ ์ ๊ณต, Headless UI ํจํด ์ ์ฉ | ๋ค์ํ ์ ํ ์ต์ ์ ์ ๊ณตํ๋ Select ์ปดํฌ๋ํธ๋ฅผ Headless UI๋ก ๊ตฌํํด UX์ ์ ๊ทผ์ฑ์ ๋์์ต๋๋ค. |
Modal ์ปดํฌ๋ํธ ๋ฆฌํฉํ ๋ง | ์ํ์ ์คํ์ผ ์ ์ด ๋ฐฉ์ ๋ฆฌํฉํ ๋ง | ๋ค์ํ ์ํฉ์์ ์ฌ์ฉํ ์ ์๋๋ก Modal ์ปดํฌ๋ํธ๋ฅผ ๋ฆฌํฉํ ๋งํ์ฌ ์ํ์ ์คํ์ผ ์ ์ด์ ์ ์ฐ์ฑ์ ๊ฐํํ์ต๋๋ค. |
๋ฉ์ธํ์ด์ง API ์ฐ๋ | ์ญํ ๊ธฐ๋ฐ ๋ฐ์ดํฐ ์กฐ๊ฑด๋ถ ๋ ๋๋ง | ๋ฉ์ธ ํ์ด์ง์ ์ฝํ ์ธ ๋ฅผ API์ ์ฐ๋ํด ๊ฐ ์ฌ์ฉ์ ์ญํ ์ ๋ง๋ ๋ฐ์ดํฐ๋ฅผ ๋์ ์ผ๋ก ๋ ๋๋งํ์ต๋๋ค. |
๊ตฌ๊ธ OAuth ๋ก๊ทธ์ธ ๊ตฌํ | ๊ตฌ๊ธ OAuth์ ์ปค์คํ ํ ์ผ๋ก ์ธ์ฆ ๋ก์ง ๋ชจ๋ํ | ๊ตฌ๊ธ OAuth ์ธ์ฆ์ ์ ์ฉํ๊ณ , useGoogleOAuth ์ปค์คํ
ํ
์ผ๋ก ์ธ์ฆ ์ํ์ ์๋ฌ ์ฒ๋ฆฌ๋ฅผ ๊ด๋ฆฌํด ์ฌ์ฌ์ฉ์ฑ์ ๋์์ต๋๋ค. |
๊ฐ์ ์ ์ ๋ณด ์ ํ API ์ฐ๋ | ์ฌ์ฉ์ ์ ํ ์ ๋ณด ์๋ฒ ์ ๋ฌ ๋ฐ ๊ฒ์ฆ | ์ฌ์ฉ์๊ฐ ์ ํํ ๊ฐ์ ์ ๋ณด๋ฅผ ์๋ฒ์ ์์ ์ ์ผ๋ก ์ ๋ฌํ๊ณ , ์ ํจ์ฑ ๊ฒ์ฆ์ ํตํด ์ค๋ฅ ์์ด ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ์ต๋๋ค. |
Pagination ์ปดํฌ๋ํธ ์ถ๊ฐ ๋ฐ Google OAuth ํ ๋ฆฌํฉํ ๋ง | ํ์ด์ง๋ค์ด์ ์ปดํฌ๋ํธ ์ถ๊ฐ ๋ฐ ์ธ์ฆ ํ ๊ฐ์ | ํ์ด์ง ์ ํ์ ์ํด Pagination ์ปดํฌ๋ํธ๋ฅผ ์ถ๊ฐํ๊ณ , Google OAuth ํ
์ ์ํ ๋ฐ ์๋ฌ ์ฒ๋ฆฌ๋ฅผ ๊ฐํํ์ต๋๋ค. |
๋ฉ์ธํ์ด์ง, ๋ก๊ทธ์ธ, ํ์๊ฐ์ ํ ์คํธ์ฝ๋ ๊ตฌํ | Vitest์ React Testing Library๋ฅผ ํ์ฉํ ํ ์คํธ ๊ตฌํ | SignInButton , ConditionalRenderer ์ปดํฌ๋ํธ์ useRecruitmentData ํ
์ ๋ํด ์ฃผ์ ๋์๊ณผ ๋ ๋๋ง ๊ฒฐ๊ณผ๋ฅผ ๊ฒ์ฆํ๋ ํ
์คํธ๋ฅผ ์ถ๊ฐํ์ฌ ๊ธฐ๋ฅ์ด ์์ ์ ์ผ๋ก ์๋ํจ์ ํ์ธํ์ต๋๋ค. |
๊ธฐ๋ฅ | ์ค๋ช | ๊ตฌํ ๋ฐฉ๋ฒ |
---|---|---|
๊ณตํต ์ปดํฌ๋ํธ(Header) ๊ตฌํ | ๋ก๊ทธ์ธํ์ง ์์ ์ฌ์ฉ์์๊ฒ๋ ๋ก๊ทธ์ธ ๋ฒํผ์, ๋ก๊ทธ์ธํ ์ฌ์ฉ์์๊ฒ๋ ํ๋กํ ์ด๋ฏธ์ง์ ๋ก๊ทธ์์ ๋ฒํผ์ ๋์ ์ผ๋ก ํ์ํฉ๋๋ค. | ์ฌ์ฉ์ ์ธ์ฆ ์ํ์ ๋ฐ๋ผ ๋ด์ฉ์ ๋์ ์ผ๋ก ๋ณ๊ฒฝํฉ๋๋ค. |
๊ณตํต ์ปดํฌ๋ํธ(Table) ๊ตฌํ | ๊ณ ์ ๋ ์คํ์ผ๊ณผ ํจ๊ป ์ ์ฐํ ํ ์ด๋ธ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํฉ๋๋ค. | Table, Th, Td ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ํ์ด์ง์์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ํ ์ด๋ธ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํฉ๋๋ค. |
์ธ๊ตญ์ธ ๋ฑ๋ก ๋ฒํธ ๋ฐ ๋น์ ๋ฐ๊ธ ์ผ์ ๋ฑ๋ก ํ์ด์ง ๊ตฌํ | ๊ทผ๋ก์๊ฐ ์ธ๊ตญ์ธ ๋ฑ๋ก ๋ฒํธ ๋ฐ ๋น์ ๋ฐ๊ธ ์ผ์๋ฅผ ์ ๋ ฅํ ์ ์๋ ํผ์ ์ ๊ณตํฉ๋๋ค. | ํผ ์ ๋ ฅ๊ณผ ์ ํจ์ฑ ๊ฒ์ฆ์ ํตํด ์ฌ์ฉ์ ์ ๋ ฅ์ ์ฒ๋ฆฌํ์ฌ ์ฌ๋ฐ๋ฅธ ๋ฐ์ดํฐ๊ฐ ๋ฑ๋ก๋๋๋ก ํฉ๋๋ค. |
๊ณ ์ฉ์ฃผ ๋ง์ดํ์ด์ง ๊ตฌํ | ๋ก๊ทธ์ธํ ๊ณ ์ฉ์ฃผ์ ์ ๋ณด๋ฅผ ํ์ํ๊ณ , ๋ฑ๋กํ ํ์ฌ ๋ชฉ๋ก์ ํ์ํฉ๋๋ค. | ๊ณ ์ฉ์ฃผ์ ์ด๋ฆ๊ณผ ํ์ฌ ๋ฑ๋ก, ์ฌ์ธ ๋ฑ๋ก ๋ฒํผ์ ๋ ๋๋ง ํ๊ณ ๋ฑ๋กํ ํ์ฌ์ ์ ๋ณด๋ฅผ ๋ชฉ๋ก์ผ๋ก ๋ณด์ฌ์ค๋๋ค. |
๋ด ํ์ฌ ํ์ด์ง ๊ตฌํ | ํ์ฌ ์ ๋ณด ๋ฐ ํด๋น ํ์ฌ์ ๊ตฌ์ธ ๊ณต๊ณ ๊ธ ๋ชฉ๋ก์ ํ์ํฉ๋๋ค. ์ง์์ ๋ณด๋ฌ๊ฐ๊ธฐ ๋ฒํผ์ ๋๋ฌ ์ง์์ ๋ชฉ๋ก ํ์ด์ง๋ก ์ด๋ํ ์ ์์ผ๋ฉฐ, ๋ง๊ฐํ๊ธฐ ๋ฒํผ์ ๋๋ฌ ํด๋น ๊ณต๊ณ ๋ฅผ ๋ง๊ฐํฉ๋๋ค. | ์ ํํ ํ์ฌ์ ์ฑ์ฉ๊ณต๊ณ ๋ฅผ ๋ฑ๋กํ ์ ์๋๋ก ์ฑ์ฉ ๊ณต๊ณ ๋ฒํผ์ ๋ ๋๋งํ๊ณ , ํด๋น ํ์ฌ์ ๊ณต๊ณ ๊ธ์ ๋ชฉ๋ก์ผ๋ก ํ์ํฉ๋๋ค. |
์ง์์ ๋ชฉ๋ก ํ์ด์ง ๋ฐ ๊ณ์ฝํ๊ธฐ ํ์ ์ฐฝ ๊ตฌํ | ๊ณต๊ณ ๊ธ์ ์ ๋ณด ๋ฐ ํด๋น ๊ณต๊ณ ๊ธ์ ์ง์์ ๋ชฉ๋ก์ ํ์ํฉ๋๋ค. ๋ชฉ๋ก์์ ์ง์์ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ํด๋น ์ง์์์ ์ง์์๋ฅผ ์ด๋ํ ์ ์๊ณ , ๊ณ์ฝํ๊ธฐ ๋ฒํผ์ ๋๋ฅด๋ฉด ์ฃผ์ ์ฌํญ๊ณผ ํด๋น ์ง์์์ ์ ๋ณด๋ฅผ ์ด๋ํ ํ ํด๋น ์ง์์์ ๊ณ์ฝ์๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. | ์ ํํ ๊ณต๊ณ ๊ธ์ ์ ๋ณด์ ํด๋น ๊ณต๊ณ ๊ธ์ ์์ธ ๋ด์ฉ์ ๋ณผ ์ ์๋๋ก ์์ธํ ๋ณด๋ฌ๊ฐ๊ธฐ ๋ฒํผ์ ๋ ๋๋งํ๋ฉฐ, ๊ณต๊ณ ๊ธ์ ๋ํ ์ง์์ ๋ชฉ๋ก์ ํ์ํฉ๋๋ค. Modal ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ์ฝํ๊ธฐ ๋ฒํผ ํด๋ฆญ ์ ๊ณ ์ฉ์ฃผ์๊ฒ ์ฃผ์ ์ฌํญ์ ์๋ฆฌ๋ ํ์ ์ฐฝ์ ๊ตฌํํ์ต๋๋ค. |
์น์ | ์์ธ ๋ด์ฉ | ์ค๋ช |
---|---|---|
๊ณตํต ์ปดํฌ๋ํธ(Footer) ๊ตฌํ | Layout์ ํฌํจ๋๋ ๊ณตํต Footer ์ปดํฌ๋ํธ์ ๋๋ค. | ํํ์ด์ง ํ๋จ์ ๋ ๋๋ง๋๋ ๊ณตํต Footer ์ปดํฌ๋ํธ์ ๋๋ค. ์ฌ์ดํธ ์ด์ ์ ๋ณด์ ๋ํ ๋ด์ฉ์ด ๊ธฐ์ฌ๋์ด ์์ต๋๋ค. |
๊ตฌ์ธ๊ธ ์์ธ ํ๋ฉด ํ์ด์ง ๊ตฌํ | ๊ตฌ์ธ๊ธ์ ๋ํ ์์ธ ์ ๋ณด๊ฐ ๋ ๋๋ง๋ฉ๋๋ค. | ๊ทผ๋ก์๋ ๊ตฌ์ธ๊ธ ์์ธ ํ๋ฉด์ ํตํด ์ง์ํ ์ ์์ต๋๋คuseGetRequiredFieldCheck ์ ํตํด ๊ทผ๋ก์์ ํ์๊ฐ(์ฌ์ธ, ์ด๋ ฅ์, ๋น์ ๋ฐ ์ธ๊ตญ์ธ ๋ฒํธ)๋ฑ๋ก ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. |
์ง์ ํ๋ก์ธ์ค ํ์ด์ง ๊ตฌํ | ์ง์์ ์๋ด ๋ฉํธ๋ฅผ ๋ ๋๋งํฉ๋๋ค. | ๊ทผ๋ก์๊ฐ ์ง์์ ์์ฑ ์ ํ์ธํ ์ ์๋ ์๋ด ๋ฉํธ๋ค์ด ๋ ๋๋ง ๋์ด์์ต๋๋ค. |
์ง์์ ์์ฑ ํ์ด์ง ๊ตฌํ | ๊ทผ๋ก์๊ฐ ๊ตฌ์ธ๊ธ์ ํตํด ์ง์์๋ฅผ ์์ฑํฉ๋๋ค. | react-hook-form ์ ํตํด ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์งํํ์ต๋๋ค. ์ด๋ฆ, ์ฃผ์, ๋ฒํธ, ์ง์ ๋๊ธฐ๋ฅผ ํ์๋ก ์
๋ ฅํด์ผ ํ๋ฉฐ, ๋ฒํธ์ ๊ฒฝ์ฐ 010-0000-0000 ํ์์ ๋ง๊ฒ ์
๋ ฅํด์ผ ํฉ๋๋ค. |
์ด๋ ฅ์ ๋ฑ๋ก ํ์ด์ง ๊ตฌํ | ๊ทผ๋ก์๊ฐ ์ด๋ ฅ์๋ฅผ ๋ฑ๋กํฉ๋๋ค. | react-hook-form ์ ํตํด ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์งํํ์ต๋๋ค. ์ด๋ฆ, ์ฃผ์, ๋ฒํธ, ๊ฒฝ๋ ฅ, ํ๊ตญ์ด ์ค๋ ฅ, ์๊ฐ๋ฅผ ํ์๋ก ์
๋ ฅํด์ผ ํ๋ฉฐ, ๋ฒํธ์ ๊ฒฝ์ฐ 010-0000-0000 ํ์์ ๋ง๊ฒ ์
๋ ฅํด์ผ ํฉ๋๋ค. |
์ฌ์ธ ๋ฑ๋ก ํ์ด์ง ๊ตฌํ | ๊ทผ๋ก์ ๋ฐ ๊ณ ์ฉ์ฃผ์ ์ฌ์ธ์ ๋ฑ๋กํฉ๋๋ค๋ค. | react-signature-canvas ๋ฅผ ํตํด ์๋ช
์ ๋ฐ๊ณ ์ฌ์ง์ผ๋ก ์ ์ฅํฉ๋๋ค. |
๊ธฐ๋ฅ | ๊ตฌํ ๋ฐฉ๋ฒ | ์ค๋ช |
---|---|---|
๊ตฌ์ธ๊ธ ๋ฑ๋ก | ๊ตฌ์ธ๊ธ ์ ๋ณด๋ฅผ ์ ๋ ฅ๋ฐ๊ณ ์ ํจ์ฑ ๊ฒ์ฌ ๋ฐ ์๋ฒ๋ก ๋ฐ์ดํฐ ์ ๋ฌ | ๊ตฌ์ธ๊ธ ์ ๋ณด๋ฅผ ์ ๋ ฅ๋ฐ์ state๋ก ๊ด๋ฆฌํ๊ณ , submit ์ ์๋ฒ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํฉ๋๋ค. ๋ฏธ์ ๋ ฅ๋ ๋ฐ์ดํฐ์ ์๋ฌ๋ฉ์ธ์ง๋ฅผ ํ๋ฉด์ ๋ ๋๋งํฉ๋๋ค. |
ํ์ฌ ๋ฑ๋ก | ํ์ฌ ์ ๋ณด๋ฅผ ์ ๋ ฅ๋ฐ๊ณ ์ ํจ์ฑ ๊ฒ์ฌ ๋ฐ ์๋ฒ๋ก ๋ฐ์ดํฐ ์ ๋ฌ | ํ์ฌ ์ ๋ณด๋ฅผ ์ ๋ ฅ๋ฐ์ state๋ก ๊ด๋ฆฌํ๊ณ , submit ์ JSON์ ๋ฌธ์์ด๋ก ๋ณํํ ๊ฐ๊ณผ, ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ formData์ ์ฝ์ ํ์ฌ ์ ๋ฌํฉ๋๋ค. ํ์ฌ ์ด๋ฏธ์ง๋ ๋ฏธ์ ๋ ฅ์ด ๊ฐ๋ฅํ๋ฉฐ, ์ด ๊ฒฝ์ฐ formData์ ์ด๋ฏธ์ง๋ฅผ ์ฝ์ ํ์ง ์๊ณ ์ ๋ฌํฉ๋๋ค. |
๊ทผ๋ก์ ๋ง์ดํ์ด์ง ์ด๋ | ๊ทผ๋ก์์ ํ๋กํ๊ณผ ์ด๋ ฅ์/์๋ช /๋น์ ๋ฑ๋ก ๋ฒํผ, ๊ทผ๋ก์๊ฐ ์ง์ํ ๊ณต๊ณ ๋ด์ญ ๋ ๋๋ง | ๊ทผ๋ก์๊ฐ ๋ณธ์ธ์ ์ด๋ ฅ์/์๋ช /๋น์ ๋ฑ๋ก ํ์ด์ง๋ก ์ด๋ํ ์ ์๊ฒ ํ๊ณ , ๋ฑ๋ก ์ ๋ฒํผ์ ๋นํ์ฑํํฉ๋๋ค. ๊ทผ๋ก์๊ฐ ์ง์ํ ๊ณต๊ณ ๋ด์ญ์ ๋ฆฌ์คํธ๋ก ๋ณด์ฌ์ฃผ๊ณ , ์ง์ ์ํ type์ ๋ช ์ธํ์ฌ ๊ฐ type์ ํด๋นํ๋ ๋ฒํผ์ ๋ณด์ฌ์ค๋๋ค |
๊ทผ๋ก๊ณ์ฝ์ ์์ฑ | ๊ณ ์ฉ์ฃผ๊ฐ ๊ทผ๋ก๊ณ์ฝ์๋ฅผ ์์ฑํ๊ณ , ์๋ช ํ์ฌ ์๋ฒ๋ก ๋ฐ์ดํฐ ์ ๋ฌ | ๊ทผ๋ก๊ณ์ฝ์ ์ ๋ณด๋ฅผ ์ ๋ ฅ๋ฐ์ state๋ก ๊ด๋ฆฌํ๊ณ , submit ์ ์๋ฒ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํฉ๋๋ค. ์ด๋ ์๋ช ํ๊ธฐ ๋ฒํผ์ ํด๋ฆญํด์ผ submit์ด ๊ฐ๋ฅํ๋๋ก ์๋ฌ๋ฉ์ธ์ง๋ฅผ ํ๋ฉด์ ๋ ๋๋งํฉ๋๋ค. |
๊ทผ๋ก๊ณ์ฝ์ ์ด๋ ๋ฐ ์๋ช | ๊ณ ์ฉ์ฃผ๊ฐ ์์ฑํ ๊ทผ๋ก๊ณ์ฝ์ ์ ๋ณด๋ฅผ ๊ทผ๋ก์๊ฐ ์ด๋ ๋ฐ ์๋ช ์ ์๋ฒ๋ก ๋ฐ์ดํฐ ์ ๋ฌ | ๊ทผ๋ก๊ณ์ฝ์ ์ ๋ณด๋ฅผ ํ๋ฉด์ ๋ ๋๋งํฉ๋๋ค. ๊ทผ๋ก์๊ฐ ์๋ช ํ๊ธฐ ๋ฒํผ์ ํด๋ฆญํ๊ณ submit ์ ์๋ฒ๋ก ์๋ช ํ์์ ์ ๋ฌํฉ๋๋ค. ์๋ช ํ์ง ์๊ณ submit ์ ์๋ฌ๋ฉ์ธ์ง๋ฅผ ํ๋ฉด์ ๋ ๋๋งํฉ๋๋ค. |
๊ทผ๋ก๊ณ์ฝ์ ๋ค์ด๋ก๋ | ๊ณ ์ฉ์ฃผ ๋ฐ ๊ทผ๋ก์์ ๊ณ์ฝ์ ์๋ช ํ ๋ง์ดํ์ด์ง์์ ๊ทผ๋ก๊ณ์ฝ์ pdf ๋ค์ด๋ก๋. | ๋ง์ดํ์ด์ง์์ ๊ทผ๋ก๊ณ์ฝ์ ๋ค์ด๋ก๋ ๋ฒํผ์ ํด๋ฆญํ๋ฉด, ์๋ฒ๋ก๋ถํฐ pdf URL์ ์ ๋ฌ๋ฐ์ต๋๋ค. ๋ณด์ด์ง ์๋ ๋ค์ด๋ก๋ ๋งํฌ๋ฅผ ์์ฑ ํ ์คํํ์ฌ ๋ก์ปฌPC์ ๋ค์ด๋ก๋ ํ ์ญ์ ํฉ๋๋ค. |
๊ณตํต์ปดํฌ๋ํธ Card | ๊ณตํต์ปดํฌ๋ํธ Card์ style ์ง์ | Card ํํ์ style์ ์์ฑํ๊ณ , children์ Props๋ก ๋ฐ์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ณ ์ ํ์์ต๋๋ค. |
๊ณตํต์ปดํฌ๋ํธ Button | Button์ design์ ํน์ (default, outlined, textbutton, deactive)ํ์ฌ ๊ฐ๋ฐ | default, outlined, textbutton, deactive ํํ์ Button์ ๋ง๋ค์ด design Props๋ก ์ ๋ฌ๋ฐ๊ณ , ๊ฐ design์ ํด๋นํ๋ ์คํ์ผ๊ณผ ์ ๋๋ฉ์ด์ ์ ์ ์ฉํ์์ต๋๋ค. |
ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ๊ฐ์ ๊น๊ฒ ๊ณ ๋ฏผํ๊ณ ํด๊ฒฐํ๋ ค ๋ ธ๋ ฅํ๋ ์ ์ ๋ํ ํ๊ณ ์ ๋๋ค.
-
Mapping ๋ฐฉ์
- ๊ณ ๋ฏผ:
Entity์์ DTO๋ก ๋ณํํ ๋, ์ฒ์์๋ ์ง์ Mapper ๋ฉ์๋๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ ๋ฐฉ์์ ํํ์ต๋๋ค. ํ์ง๋ง ์ด ๋ฐฉ์์ ์๊ฐ์ด ์ง๋๋ฉด์ ์ฝ๋๊ฐ ์ง์ ๋ถํด ๋ณด์๊ณ , ํ๋๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ํด๋น ๋ฉ์๋๋ฅผ ์ผ์ผ์ด ์์ ํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์์์ต๋๋ค. - ํด๊ฒฐ์ฑ
:
์ด๋ฅผ ๊ฐ์ ํ๊ณ ์ MapStruct๋ฅผ ๋์ ํ๋๋ฐ, ์ฒ์์๋ ํ์ต์ ์๊ฐ์ด ๊ฝค ๊ฑธ๋ ธ์ง๋ง, ์ผ๋จ ์ตํ๊ณ ๋๋ ์ฝ๋๊ฐ ํจ์ฌ ๊น๋ํด์ก๊ณ ์ ์ง๋ณด์๋ ํจ์ฌ ์ฉ์ดํด์ก์ต๋๋ค. MapStruct ๋๋ถ์ ๋งคํ ์์ ์ด ์๋ํ๋์ด ๋ณํ ๋ก์ง์ ์ผ๊ด๋๊ฒ ์ ์งํ ์ ์์๊ณ , ํ๋ ๋ณ๊ฒฝ ์์๋ ์ฝ๊ฒ ๋์ํ ์ ์์์ต๋๋ค. ์ด ๊ฒฝํ์ ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ ํฅ์์ ํฐ ๋์์ด ๋์์ต๋๋ค
- ๊ณ ๋ฏผ:
-
ํจํค์ง
- ๊ณ ๋ฏผ:
AI๋ฅผ ํ์ฉํ ๋ฒ์ญ ๊ธฐ๋ฅ์ด ๊ตฌ์ธ๊ธ์ ์ฌ์ฉ๋๊ธฐ๋ ํ์ง๋ง, ๋ค๋ฅธ ๋๋ฉ์ธ์์๋ ๋ฒ์ญ ๊ธฐ๋ฅ์ด ํ์ํ ์ ์๋ค๋ ์ ์์ ์ธ๋ถ API๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒ์ญํ๋ ๋ฉ์๋๋ฅผ ์ด๋ ํจํค์ง์ ๋ฃ์ด์ผ ํ ์ง ๊ณ ๋ฏผ์ด ์์์ต๋๋ค. - ํด๊ฒฐ์ฑ
:
๋ฉํ ๋์ ์กฐ์ธ์ ๋ฐ์, ๋ฒ์ญ ๋ก์ง์ ํน์ ๋๋ฉ์ธ์ ์ข ์์ํค์ง ์๊ณ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ธฐ ์ํด infrastructure ํจํค์ง๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด ๊ทธ ์์ AI์ ํต์ ํ๋ ๋ฐ ํ์ํ DTO์ ํด๋์ค๋ค์ ๋ฐฐ์นํ์ต๋๋ค. ์ด๋ก์จ ์ฝ๋ ๊ตฌ์กฐ๊ฐ ๋ ๋ช ํํด์ก๊ณ , ๋ฒ์ญ ๊ธฐ๋ฅ์ด ๋ค๋ฅธ ๋๋ฉ์ธ์์ ํ์ํ ๋๋ ์์ฝ๊ฒ ํ์ฅํ ์ ์๋ ๊ธฐ๋ฐ์ ๋ง๋ จํ ์ ์์์ต๋๋ค.
- ๊ณ ๋ฏผ:
-
ํ ์ด๋ธ ๋ถ๋ฆฌ
- ๊ณ ๋ฏผ: ๊ณ ์ฉ์ฃผ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๊ตฌ์ธ๊ธ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ผ๋ฉด ์ด๋ฅผ ์์ฝํ๊ณ ํ๊ตญ์ด์ ๋ฒ ํธ๋จ์ด๋ก ๋ฒ์ญํ ๋ด์ฉ์ ๊ฐ๊ฐ ์ ์ฅํด์ผ ํ์ต๋๋ค. ์ฒ์์๋ ์์ฝ๋ ๊ตฌ์ธ ๋ด์ฉ๊ณผ ๋ฒ์ญ๋ ํ๋๋ฅผ ๊ธฐ์กด ๊ตฌ์ธ๊ธ ํ ์ด๋ธ์ ํจ๊ป ์ ์ฅํ ์ง ๊ณ ๋ คํ์ง๋ง, ๋ชจ๋ ์ ๋ณด๋ฅผ ํ๋์ ํ ์ด๋ธ์ ๋ด์ผ๋ฉด ๋ฐ์ดํฐ์ ๋ฐ๋๊ฐ ๋๋ฌด ๋์์ ธ ํ ์ด๋ธ์ด ๋น๋ํด์ง ์ฐ๋ ค๊ฐ ์์์ต๋๋ค.
- ํด๊ฒฐ์ฑ : ๋ฐ์ดํฐ์ ํจ์จ์ ์ธ ๊ด๋ฆฌ์ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํด vertical partitioning ๋ฐฉ์์ ์ ์ฉํ์ต๋๋ค. ์ฃผ์ ๊ตฌ์ธ๊ธ ์ ๋ณด์ ์์ฝ ๋ฐ ๋ฒ์ญ๋ ๋ด์ฉ์ ๋ณ๋์ ํ ์ด๋ธ๋ก ๋๋์ด ๊ด๋ฆฌํจ์ผ๋ก์จ, ๊ฐ ํ ์ด๋ธ์ ์ญํ ์ด ๋ช ํํด์ก๊ณ ์ฑ๋ฅ ๋ํ ๊ฐ์ ํ ์ ์์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ์ ํ์ฅ์ฑ๊ณผ ๊ด๋ฆฌ ํธ์์ฑ๋ ํ๋ณดํ ์ ์์์ต๋๋ค.
-
git flow ๊ณ ๋ฏผ
- ๊ณ ๋ฏผ:
์ฒ์์ ์๊ฒฉ ๋ ํฌ๋ฅผ ํฌํฌ ๋ ์ ํ์๋ค๊ณผ ์์ ํ๋ค๊ฐ, git flow์ ๋ํ ์ต์ ํ ํ์์ฑ์ ๋๊ปด์ ์ด์ ๋ํ ๋ฉํ ๋ง์ ๋ฐ์๊ณ , ๊ทธ ๊ณผ์ ์์ ํฌํฌ ๋ ํฌ๊ฐ ๋ถํ์ํ๋ค๋ ์กฐ์ธ์ ๋ค์์ต๋๋ค. - ํด๊ฒฐ์ฑ
:
์ด๋ฅผ ๋ฐ์ํ์ฌ ํฌํฌ ๋ ํฌ๋ ์ญ์ ํ ๋ค ์๊ฒฉ ๋ ํฌ์ main โ develop โ Weekly โ feature ๋ธ๋์น ์ ๋ต์ ๊ตฌ์ฑํ์์ต๋๋ค. ํ์๋ค ๊ฐ์ ์๊ฒฉ ๋ ํฌ์ ๋ด๋น feature ๋ธ๋์น์ push ํ Weekly ๋ธ๋์น์ PR์ ๋ ๋ฆฌ๊ณ , ํ ํฌ๋ฆฌ๋์ธ ์ ๊ฐ ๊ฒํ ํ ๋จธ์งํ๋ ์์ผ๋ก ์ด์ํ์์ต๋๋ค.
- ๊ณ ๋ฏผ:
-
CAA ๋ ์ฝ๋
- ๊ณ ๋ฏผ:
๋ฐฐํฌ ๊ณผ์ ์์ certbot์ ํตํด nginx์ ์๋ SSL ์ธ์ฆ์ ์ฒ๋ฆฌ๋ฅผ ์ํํ๋ ค๊ณ ํ๋๋ฐ, ๊ทธ ๊ณผ์ ์์ ๊ณ์ ์คํจํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์์ต๋๋ค. - ํด๊ฒฐ์ฑ
:
์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์๋ํด๋ด๋ ํด๊ฒฐ์ฑ ์ ์ฐพ๊ธฐ๊ฐ ์ด๋ ค์ ๋๋ฐ, ์๋ฌ ๋ก๊ทธ์์ CAA ๋ ์ฝ๋์ ๊ดํ ๋ด์ฉ์ด ๋ณด์ฌ์ ์ด์ ๋ํด ๋ ์ฐพ์๋ณด์๊ณ , ๊ทธ ๊ฒฐ๊ณผ ํด๋น ๋ ์ฝ๋์ ์ญํ ์ ์ธ์ฆ ๊ธฐ๊ด์ด ์ ํฌ ์๋น์ค์ ๋๋ฉ์ธ์ ๋ํ ์ธ์ฆ์๋ฅผ ๋ฐ๊ธํ ์ ์๊ฒ ํ์ฉํด์ฃผ๋ ๊ฒ์์ ์๊ฒ ๋์์ต๋๋ค. ์ดํ์ GCP DNS ์ค์ ์์ CAA ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ์ฌ letsencrypt์ ๋ํด ํ์ฉํด์ฃผ์๊ณ , ์ ์์ ์ผ๋ก HTTPS๋ฅผ ์ ์ฉํ ์ ์์์ต๋๋ค.
- ๊ณ ๋ฏผ:
-
CI/CD
-
๊ณ ๋ฏผ:
๋ณด์์ ์ํด VPC ๋ฐฉํ๋ฒฝ ์ค์ ์์ SSH ํ์ฉ ๋ฒ์๋ฅผ ์ ์ญ์์ ํ์๋ค IP๋ก ์ถ์ํ๊ณ ๋๋, CI/CD ๊ณผ์ ์์ github actions ์๋ฒ๊ฐ SCP๋ฅผ ํตํด API ์๋ฒ VM์ผ๋ก Jar ๋ฐฐํฌ ํ์ผ์ ์ ์กํ ๋, SSH ์ ๊ทผ์ ํ ์ ์๋ ์ํฉ์ด ๋ฐ์ํ์์ต๋๋ค. -
ํด๊ฒฐ์ฑ :
github actions ์๋ฒ์ IP๋ฅผ SSH ํ์ฉ ๊ท์น์ ์ถ๊ฐํด์ค์ผํ๋๋ฐ, ํด๋น IP๊ฐ ์ ๋์ ์ด๋ผ๋ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. ์ด์ ๋ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด 3๊ฐ์ง ๋ฐฉ๋ฒ์ ์ถ๋ ค๋ด์์ต๋๋ค.-
๊นํ์์ ์ ๋ฃ๋ก ์ ๊ณตํ๋ ๊ณ ์ IP ํ์ฉ
-
SSH ํฐ๋๋ง
-
github actions์์ GCP์ ์ ๊ทผํด์ ์ง์ SSH ๊ท์น์ ์ ๋ IP ์ถ๊ฐํ๊ณ , SCP ์ํ ํ ๊ท์น์์ ํด๋น IP ์ ๊ฑฐํ๋๋ก yml ์ฝ๋ ๊ตฌ์ฑํ๊ธฐ
๋น์ฉ๊ณผ ๋์ด๋ ์ธก๋ฉด์ ๊ณ ๋ คํ์ ๋ ๊ฐ์ฅ ํฉ๋ฆฌ์ ์ธ 3๋ฒ ๋ฐฉ๋ฒ์ ์ฑํํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์์ต๋๋ค. ๊ด๋ จ yml ์ฝ๋๋ GPT๋ฅผ ์ฐธ๊ณ ํ์๋๋ฐ, ๋ฆฌ๋ ์ค ๋ช ๋ น์ด ๋ฌธ๋ฒ๊ณผ ์ ๊ทํํ์ ๋ถ๋ถ์์ ๋ฐ๋ณต์ ์ผ๋ก ์ด์ํ ๋ต์ ์ ์ํด์ ์ ๋ฅผ ๋ง์ด ๋จน์์ต๋๋ค.
GPT๊ฐ ์ ์ํ ๋ต์์ sed ๋ช ๋ น์ด์ ์ ๊ทํํ์ ๊ตฌ์ฑ์ ๋ํ ์ดํด๋๋ฅผ ๋์ด๊ธฐ ์ํด ์ถ๊ฐ์ ์ธ ์ง์ ์๋ต์ ์งํํ์๊ณ , ์ดํ ํด๊ฒฐํ ์ ์์์ต๋๋ค.
-
-
- ์์ฒญ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
- ๊ณ ๋ฏผ:
JSON๊ณผ ์ด๋ฏธ์ง ํ์ผ์ ์๋ก ๋ค๋ฅธ Content-Type์ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ์๋ฒ์์ ๋์ผํ ์์ฒญ์์ ์ด ๋ ๊ฐ์ง๋ฅผ ์ฒ๋ฆฌํ ๋ฐฉ๋ฒ์ ์ฐพ๊ธฐ ์ด๋ ค์ ์ต๋๋ค. - ํด๊ฒฐ์ฑ
:
์๋ก ๋ค๋ฅธ Content-Type์ ์ฒ๋ฆฌํ๊ธฐ ์ํด consumes = MediaType.MULTIPART_FORM_DATA_VALUE๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ๋ฐ์์ต๋๋ค. JSON ํ์ผ์ ๋ฌธ์์ด๋ก ๋ฐ๋, Object Mapper๋ฅผ ์ด์ฉํด ๊ฐ์ฒด๋ก ๋ณํํ์๊ณ ์ด๋ฏธ์ง ํ์ผ์ MultipartFileํํ๋ก ๋ฐ์ ์ฒ๋ฆฌํ์ต๋๋ค.
- ๊ณ ๋ฏผ:
-
Service ํ์ผ ๊ด๋ฆฌ
- ๊ณ ๋ฏผ: ๊ทผ๋ก๊ณ์ฝ์ ๋๋ฉ์ธ์๋ file์ ์ฒ๋ฆฌํ๋ ์๋น์ค์ pdf๋ฅผ ์ฒ๋ฆฌํ๋ ์๋น์ค์, db๋ฅผ ์ฒ๋ฆฌํ๋ ์๋น์ค๊ฐ ์กด์ฌํ๊ณ ์ด๋ฅผ ์ด๋ป๊ฒ ๊ด๋ฆฌํด์ผ ํ ์ง์ ๋ํ ๊ณ ๋ฏผ์ ํ์ต๋๋ค.
- ํด๊ฒฐ์ฑ
: ์ฒ์์๋ contract ํจํค์ง ๋ด์ service์ ๋ชจ์ ๊ด๋ฆฌํ์์ผ๋ ๋ฉํ ๋์ ์กฐ์ธ์ ๋ฐ์ common ํจํค์ง์ file service์ pdf service๋ฅผ ๋ชจ์๋๊ณ contract service์์ ์์ ์๋น์ค๋ค์ ๋ถ๋ฌ์์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ผ๋ก ํด๊ฒฐํ์ต๋๋ค.
- ๊ณ ๋ฏผ: ๊ทผ๋ก๊ณ์ฝ์ ๋๋ฉ์ธ์๋ file์ ์ฒ๋ฆฌํ๋ ์๋น์ค์ pdf๋ฅผ ์ฒ๋ฆฌํ๋ ์๋น์ค์, db๋ฅผ ์ฒ๋ฆฌํ๋ ์๋น์ค๊ฐ ์กด์ฌํ๊ณ ์ด๋ฅผ ์ด๋ป๊ฒ ๊ด๋ฆฌํด์ผ ํ ์ง์ ๋ํ ๊ณ ๋ฏผ์ ํ์ต๋๋ค.
-
OneToOne ๋งคํ ์ ์ฒ๋ฆฌํด์ผ ํ๋ ๊ฒ
- ๊ณ ๋ฏผ: ์ง์๊ณผ ๊ทผ๋ก ๊ณ์ฝ์๋ฅผ 1๋1 ๋งคํํ ์ํฉ์์ ์ง์์ ๋ํ ๊ทผ๋ก๊ณ์ฝ์ ์์ฑ ๋ฒํผ์ ํ๋ก ํธ ์ธก์์ ๋ ๋ฒ ๋๋ฅผ ๊ฐ๋ฅ์ฑ์ ๋ํด ๊ณ ๋ฏผ์ ํ์ต๋๋ค.
- ํด๊ฒฐ์ฑ : ๊ทผ๋ก๊ณ์ฝ์ api์์๋ ์ง์ ๊ฐ์ฒด์ ๊ทผ๋ก๊ณ์ฝ์๊ฐ ์กด์ฌํ์ง ์์ ๋๋ง ์ฒ๋ฆฌํ๋๋ก ๊ตฌํํ์์ผ๋ ์ด๋ฏธ ์ง์์์ ๋ํ ๊ทผ๋ก๊ณ์ฝ์๋ฅผ ์์ฑํ ๊ทผ๋ก์์ ๋ํด์ ๊ณ ์ฉ์ฃผ์๊ฒ ๋ณด์ฌ์ง์ง ์์ ๊ฒฝ์ฐ ๋ ์์ ํ๊ฒ ์ฒ๋ฆฌํ ์ ์์ ๊ฒ ๊ฐ์์ ์ง์ api๋ฅผ ๋ด๋นํ ๋ถ๊ป ์์ฒญํ์ฌ ์์ ํ์ต๋๋ค.
- ๊ณ ๋ฏผ: ์ง์๊ณผ ๊ทผ๋ก ๊ณ์ฝ์๋ฅผ 1๋1 ๋งคํํ ์ํฉ์์ ์ง์์ ๋ํ ๊ทผ๋ก๊ณ์ฝ์ ์์ฑ ๋ฒํผ์ ํ๋ก ํธ ์ธก์์ ๋ ๋ฒ ๋๋ฅผ ๊ฐ๋ฅ์ฑ์ ๋ํด ๊ณ ๋ฏผ์ ํ์ต๋๋ค.
-
๊ณตํต ์ปดํฌ๋ํธ ๋ฐ ์คํ์ผ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ฐ์ฑ ํ๋ณด
- ๊ณ ๋ฏผ:
๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ปดํฌ๋ํธ์ ์คํ์ผ์ ํจ์ธ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ์ํด ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค๊ธฐ ์ ์ฐํ ์ค๊ณ๊ฐ ํ์ํ์ผ๋ฉฐ, ๋์์ธ์ ์ผ๊ด์ฑ์ ์ ์งํด์ผ ํ์ต๋๋ค. ํนํ, ๋ค์ํ ์ํฉ์์ ํ์ฉ๋ ์ ์๋ Select์ Modal ์ปดํฌ๋ํธ๋ฅผ ํด๋ฆฐํ๊ฒ ์ค๊ณํ๋ ๊ฒ์ด ํฐ ๋์ ์ด์์ต๋๋ค. - ํด๊ฒฐ์ฑ
:
๊ธฐ๋ฅ๊ณผ ์คํ์ผ ์ธก๋ฉด์์ ๋ถ๋ฆฌํ๊ธฐ ์ํดHeadless UI
์ ๊ทผ ๋ฐฉ์์ ๋์ ํ์ต๋๋ค. ์ด๋ฅผ ํตํดSelect
,Modal
์ปดํฌ๋ํธ๋ ๋ก์ง๊ณผ ์ํ ๊ด๋ฆฌ์ ์ง์คํ๊ณ , ์คํ์ผ์ ์ธ๋ถ์์ ์ฃผ์ ํ์ฌ ์ปค์คํฐ๋ง์ด์งํ ์ ์๋๋ก ์ค๊ณํ์ต๋๋ค.
์คํ์ผ ๊ฐ์ด๋ ๋ฐ ๊ณตํต ์คํ์ผ ์ค์ :
ํ๋ก์ ํธ ์ด๊ธฐ์ ํ์๋ค๊ณผ ํจ๊ป ์คํ์ผ ๊ฐ์ด๋๋ฅผ ์๋ฆฝํ์ฌ ํฐํธ, ์์, ๋ฒํผ ํฌ๊ธฐ ๋ฑ ๊ณตํต ์์์ ๋ํ ๊ท์น์ ์ ํ์ต๋๋ค.
๋ฐ์ํ ๋์์ธ ๊ตฌํ์ ์ํresponseStyle
ํจ์ ๊ฐ๋ฐ:
responseStyle
ํจ์๋ฅผ ๊ตฌํํ์ฌ ๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋ค ๋ช ์์ ์ผ๋ก ์์ฑํ๊ณ , ๋ฐ๋ณต๋๋ ๋ฐ์ํ ๋์์ธ์ ์ ์ํ์ฌ ์ผ๊ด์ฑ ์๊ฒ ๊ด๋ฆฌํ ์ ์๋๋ก ํ์ต๋๋ค.
- ๊ณ ๋ฏผ:
-
Google OAuth ๊ตฌํ
- ๊ณ ๋ฏผ:
Google OAuth๋ฅผ ํตํ ์์ ๋ก๊ทธ์ธ ์ธ์ฆ ํ๋ฆ์ ์ดํดํ๊ณ , ์ ์ง๋ณด์ํ๊ธฐ ์ฝ๊ฒ ๋ชจ๋ํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๊ณ ๋ฏผํ์ต๋๋ค. - ํด๊ฒฐ์ฑ
:
- ์ปค์คํ ํuseGoogleOAuth
๋ชจ๋ํ:
์ธ์ฆ ๋ก์ง์useGoogleOAuth
์ปค์คํ ํ ์ผ๋ก ๋ถ๋ฆฌํ์ฌ ๋ชจ๋ํํ์ฌ ์ธ์ฆ ๊ณผ์ ์์ ํ์ํ ์ํ ๊ด๋ฆฌ์ ํจ์๋ค์ ํฌํจํ๋ฉฐ, ๋ก๊ทธ์ธ ๋ฒํผ ํด๋ฆญ๋ถํฐ ํ ํฐ ๋ฐ๊ธ, ์ฌ์ฉ์ ์ ๋ณด ์ ์ฅ๊น์ง์ ๊ณผ์ ์ ์บก์ํํ์ต๋๋ค.
- ๊ณ ๋ฏผ:
-
์ฌ์ฉ์ ์ธ์ฆ ์ํ์ ๋ฐ๋ฅธ ๋์ UI ๋ณ๊ฒฝ
- ๊ณ ๋ฏผ: ํค๋ ์ปดํฌ๋ํธ์์๋ ์ฌ์ฉ์์ ๋ก๊ทธ์ธ ์ํ์ ๋ฐ๋ผ ๋ก๊ทธ์ธํ์ง ์์ ์ฌ์ฉ์์๊ฒ๋ ๋ก๊ทธ์ธ ๋ฒํผ์, ๋ก๊ทธ์ธํ ์ฌ์ฉ์์๊ฒ๋ ํ๋กํ ์ด๋ฏธ์ง์ ๋ก๊ทธ์์ ๋ฒํผ์ ํ์ํด์ผ ํ์ต๋๋ค. ์ด์ ๋ฐ๋ผ ์ฌ์ฉ์ ์ธ์ฆ ์ํ๋ฅผ ์ด๋ป๊ฒ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ง์ ๋ํด ๊ณ ๋ฏผํ์ต๋๋ค.
- ํด๊ฒฐ์ฑ
: UserProvider๋ฅผ ๊ตฌํํ์ฌ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ์ํ๋ก ๊ด๋ฆฌํ๊ณ , ๋ก์ปฌ ์คํ ๋ฆฌ์ง์์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ ์ํ๋ฅผ ์ด๊ธฐํํ๋๋ก ํ์ต๋๋ค. ๋ํ ์คํ ๋ฆฌ์ง์ ๋ณ๊ฒฝ์ด ์์ ๋๋ง๋ค ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์
๋ฐ์ดํธ ํ๋๋ก ์ค์ ํ์ต๋๋ค. ํค๋ ์ปดํฌ๋ํธ์์๋ useUser ํ
์ ํตํด UserContext์ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ณ , ์ด ๋ฐ์ดํฐ์ ๋ฐ๋ผ ์กฐ๊ฑด๋ถ ๋ ๋๋ง์ ์ํํ๋๋ก ํ์ฌ ์ฌ์ฉ์ ์ธ์ฆ ์ํ์ ๋ฐ๋ผ UI๊ฐ ๋์ ์ผ๋ก ๋ฐ์ํ๋๋ก ํ์ต๋๋ค.
- ๊ณ ๋ฏผ: ํค๋ ์ปดํฌ๋ํธ์์๋ ์ฌ์ฉ์์ ๋ก๊ทธ์ธ ์ํ์ ๋ฐ๋ผ ๋ก๊ทธ์ธํ์ง ์์ ์ฌ์ฉ์์๊ฒ๋ ๋ก๊ทธ์ธ ๋ฒํผ์, ๋ก๊ทธ์ธํ ์ฌ์ฉ์์๊ฒ๋ ํ๋กํ ์ด๋ฏธ์ง์ ๋ก๊ทธ์์ ๋ฒํผ์ ํ์ํด์ผ ํ์ต๋๋ค. ์ด์ ๋ฐ๋ผ ์ฌ์ฉ์ ์ธ์ฆ ์ํ๋ฅผ ์ด๋ป๊ฒ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ง์ ๋ํด ๊ณ ๋ฏผํ์ต๋๋ค.
-
์ฌ์ฌ์ฉํ์ง ์๋ ์ปดํฌ๋ํธ์ ๋ถ๋ฆฌ
- ๊ณ ๋ฏผ: ๊ณ ์ฉ์ฃผ์๊ฒ ๊ณ์ฝ ์ ์ฃผ์ ์ฌํญ์ ์๋ฆฌ๋ ํ์
์ฐฝ์ ๊ตฌํํ๋ฉด์, ๊ฐ๋
์ฑ์ ํฅ์ ์ํค๊ธฐ ์ํด ํ
์คํธ ๋ถ๋ถ์ ๋ณ๋์ ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌํ์ต๋๋ค. ํ์ง๋ง ์ด๋ ๊ฒ ๋ถ๋ฆฌํ ์ปดํฌ๋ํธ๊ฐ ๋ค๋ฅธ ๊ณณ์์ ์ฌ์ฌ์ฉ๋์ง ์์ ๋ถ๋ฆฌํ ๊ฒ์ ๋ํ ๊ณ ๋ฏผ์ด ์์์ต๋๋ค.
- ํด๊ฒฐ์ฑ : ์ปดํฌ๋ํธ์ ๋ถ๋ฆฌ๊ฐ ์ฌ์ฌ์ฉ์ฑ๋ง์ ๊ธฐ์ค์ผ๋ก ํ๋จ๋์ด์ผ ํ๋ ๊ฒ์ ์๋๋ฉฐ, ์ปดํฌ๋ํธ๋ฅผ ๊ด์ฌ์ฌ ๋จ์๋ก ๋ถ๋ฆฌํ๋ฉด ๋ ๋๋ง ์ต์ ํ๋ ์์ฐ์ค๋ฝ๊ฒ ์ด๋ค์ง ์ ์๋ค๋ ์กฐ์ธ์ ๋ฐ์์ต๋๋ค. ์ด๋ฅผ ํตํด, ๋ถ๋ฆฌํ ์ปดํฌ๋ํธ๊ฐ ํ์ฌ ํ๋ก์ ํธ์์ ์ฌ์ฌ์ฉ๋์ง ์๋๋ผ๋ ์ฝ๋์ ์ง์ ํฅ์ ์ํฌ ์ ์์์ ์๊ฒ ๋์์ต๋๋ค.
- ๊ณ ๋ฏผ: ๊ณ ์ฉ์ฃผ์๊ฒ ๊ณ์ฝ ์ ์ฃผ์ ์ฌํญ์ ์๋ฆฌ๋ ํ์
์ฐฝ์ ๊ตฌํํ๋ฉด์, ๊ฐ๋
์ฑ์ ํฅ์ ์ํค๊ธฐ ์ํด ํ
์คํธ ๋ถ๋ถ์ ๋ณ๋์ ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌํ์ต๋๋ค. ํ์ง๋ง ์ด๋ ๊ฒ ๋ถ๋ฆฌํ ์ปดํฌ๋ํธ๊ฐ ๋ค๋ฅธ ๊ณณ์์ ์ฌ์ฌ์ฉ๋์ง ์์ ๋ถ๋ฆฌํ ๊ฒ์ ๋ํ ๊ณ ๋ฏผ์ด ์์์ต๋๋ค.
-
ํจ์จ์ ์ด๋ฉฐ ํ๋ ฅ์ ์ธ ์ฐธ์ฌ์๊ฐ ๋๋ ๋ฒ
- ๊ณ ๋ฏผ ๋ฐ ์ด๋ ค์: ๋ง์ ํ๋ฉด์ ์๊ฐํ๋ ์ต๊ด ๋๋ฌธ์, ๋ํ๊ฐ ์ฃผ์ ๋ฅผ ๋๋ฃจ๋ญ์ ํ ๋ฐฉํฅ์ผ๋ก ํ๋ฌ๊ฐ๊ฒ ํ ๋๊ฐ ๋ง์์ต๋๋ค. ์ด๋ป๊ฒ ํ๋ฉด ์ ์ค์ค๋ก๊ฐ ์ปค๋ฎค๋์ผ์ด์
๋น์ฉ์ ์ค์๊ณผ ๋์์ ํ๋ ฅ์ ์ธ ์ฐธ์ฌ์๊ฐ ๋ ์ ์์์ง์ ๋ํ ๊ณ ๋ฏผ์ด ๋ง์์ต๋๋ค.
- ๊ฒฐ๊ณผ:ํ์๋ค์ ํ๋ฒ์ ์ง์คํด์ ๋ฃ๊ณ ์ด๋ฅผ ๋ฐ๋ผ ํ๊ฑฐ๋ ์ผ๋ถ ์ ์ฉํ๋ ๋ฐฉ์์ ์๋ํ์ต๋๋ค. ํ์คํ ํผ์๋ง์ ๋ฐฉ์์ผ๋ก ๋ํํ ๋๋ณด๋ค ํจ์ฌ ๋ ํจ์จ์ ์ธ ์ํต์ด ๊ฐ๋ฅํ์ต๋๋ค. ๋ฌผ๋ก ๋ํ์ ์ ๋์ ์ธ ์ ๋ต์ ์๊ธฐ์ ์ด ๋ฐฉ๋ฒ์ด ์๋ฒฝํ ํด๋ต์ ์๋์ง๋ง, ์์ผ๋ก์ ํ์ ์์ ๋ํ๋ฅผ ์ด๋ป๊ฒ ์งํํด์ผ ํ ์ง์ ๋ํ ์ ์ฉํ ์งํ๋ฅผ ์ป์ ์ ์์์ต๋๋ค.
- ๊ณ ๋ฏผ ๋ฐ ์ด๋ ค์: ๋ง์ ํ๋ฉด์ ์๊ฐํ๋ ์ต๊ด ๋๋ฌธ์, ๋ํ๊ฐ ์ฃผ์ ๋ฅผ ๋๋ฃจ๋ญ์ ํ ๋ฐฉํฅ์ผ๋ก ํ๋ฌ๊ฐ๊ฒ ํ ๋๊ฐ ๋ง์์ต๋๋ค. ์ด๋ป๊ฒ ํ๋ฉด ์ ์ค์ค๋ก๊ฐ ์ปค๋ฎค๋์ผ์ด์
๋น์ฉ์ ์ค์๊ณผ ๋์์ ํ๋ ฅ์ ์ธ ์ฐธ์ฌ์๊ฐ ๋ ์ ์์์ง์ ๋ํ ๊ณ ๋ฏผ์ด ๋ง์์ต๋๋ค.
-
Input ๋ ๋๋ง
- ๊ณ ๋ฏผ:
๋ง์ Input์ด ์กด์ฌํ๋ ๊ตฌ์ธ๊ธ ๋ฑ๋ก ํ์ด์ง๋ฅผ ๊ตฌํํ์์ต๋๋ค. ์ด๋ ๋ชจ๋ input์ useState๋ก ํ๊บผ๋ฒ์ ๊ด๋ฆฌํ๊ฒ ๋๋ฉด, ์ฝ๋๊ฐ ๊น๋ํด์ง๊ณ ๊ฐ๋ ์ฑ์ด ๋์์ง๋ค๋ ์ฅ์ ์ด ์์ง๋ง, ํ๋์ input๋ง ์์ ํด๋ ์ ์ฒด ํ์ด์ง๊ฐ ๋ ๋๋ง๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. - ํด๊ฒฐ์ฑ
:
ํ์ฌ๋ ์ ๋ฐฉ์์ ์ฌ์ฉํ๊ณ ์์ง๋ง, ์ถํ ๊ณ ๋ํ ์์ ์์ useRef๋ฅผ ์ฌ์ฉํ์ฌ Input ์ํ๊ด๋ฆฌ๋ฅผ ์ต์ ํํ๊ณ ์ ํฉ๋๋ค.
- ๊ณ ๋ฏผ:
-
์ปดํฌ๋ํธ ์ข ๋ฅ์ ๋ฐ๋ฅธ ์ฌ์ฉ ๊ท์น
- ๊ณ ๋ฏผ:
ํ์์ ๊ฐ๋ฐํ ๊ณตํต ์ปดํฌ๋ํธ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ธ์ ์ฌ์ฉํ๋ ์ปดํฌ๋ํธ, ๊ฐ์ธ์ด ์ฌ์ฉํ๊ธฐ ์ํด ๋ง๋ ์ปดํฌ๋ํธ ๋ฑ ์ฌ๋ฌ ์ข ๋ฅ๊ฐ ์กด์ฌํ๋๋ฐ, ์ด๋ฅผ ํผ์ฉํ๊ฒ ๋๋ฉด ํ์ ์ด ์ด๋ ค์์ง๋๋ค. - ํด๊ฒฐ์ฑ
:
ํน์ ์ปดํฌ๋ํธ ๋ด์์๋ง ์ฌ์ฉ๋๋ ์์ ์ปดํฌ๋ํธ์ ๊ฒฝ์ฐ, ๋ค๋ฅธ ํ์ผ๋ก ๋ถ๋ฆฌ๋์ด์์ผ๋ฉด ๋ ํท๊ฐ๋ฆด ์ ์๋ค๋ ๋ฉํ ๋์ ์กฐ์ธ์ ์ฐธ๊ณ ํ์ฌ, style ๊ด๋ จ ์ปดํฌ๋ํธ๋ ๊ฐ์ ํ์ผ์ ํ๋จ์ ์์ฑํ๊ณ , ๋๋จธ์ง๋ ํ์ผ์ ๋ถ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ํํด ์งํํ์์ต๋๋ค. ์ด๋ฌํ ๊ท์น์ ์ธ์งํ๊ณ ๊ฐ๋ฐํ๋ ๋์ฑ ๋น ๋ฅด๊ฒ ์ฝ๋๋ฅผ ํ์ ํ ์ ์์์ต๋๋ค.
- ๊ณ ๋ฏผ: