- ๋น๊ทผ๋ง์ผ ๊ธฐ๋ฅ์ ํด๋ก ์ฝ๋ฉํ ์ํ๋ง์ผ client์ ๋๋ค.
- ๋จ์ ๊ฒ์ํ ๊ธฐ๋ฅ ์ธ์ ์์ฝ, ๊ฑฐ๋, ์ฑํ ๋ฑ์ ๋ถ๊ฐ ๊ธฐ๋ฅ์ด ๋ํด์ง ์๋น์ค๋ฅผ ๊ตฌํํด๋ณด๋ฉด์ ๊ตฌ์ฑ์๋ค์ ๊ฐ๋ฐ ์ค๋ ฅ ์ฑ์ฅ์ ์ด๋ฃจ๊ณ ์ ํ๊ณ , ์๋น์ค ๊ธฐํ์ ์ธํ์ ์ค์ด๊ธฐ ์ํด ๊ธฐ์กด์ ์๋ ์๋น์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํด๋ก ์ฝ๋ฉ์ ํ์์ต๋๋ค.
๊น์์ง(lerrybe) | ๋ฐฑ๋ฏผํ(roddywhite) | ์ ์ฐฝ๋ฏผ(fluentmin) |
---|---|---|
- ํ๋ก์ ํธ๋ฅผ ์์ํ๊ธฐ ์ ์๋์ ๊ฐ์ ์ปจ๋ฒค์ ์ ์ ํจ์ผ๋ก์จ ์ฝ๋ ๊ด๋ฆฌ์ ํจ์จ์ฑ์ ๋์์ต๋๋ค.
- ํ์ ๊ฐ ์ฝ๋ ์คํ์ผ์ ๋ง์ถ๊ณ ๊ฐ๋ ์ฑ์ ๋์ฌ ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ์ํ ํ๊ฒ ํ๊ธฐ ์ํด eslint์ Prettier๋ฅผ ์ฌ์ฉํ์์ต๋๋ค.
- husky๋ฅผ ํตํด, ์ปค๋ฐ ์ ์ฝ๋ ํฌ๋งทํ ์ ์๋ํํจ์ผ๋ก์จ ๊ฐ๋ฐ ํจ์จ์ ๋์ด๊ณ ์ ํ์์ต๋๋ค.
- Github Action ์ ์ด์ฉํ์ฌ main ๋ธ๋์น์ PR ์ฌ๋ฆด๋๋ง๋ค ์๋์ผ๋ก ์คํ์ผ ๊ฒ์ฌ๋ฅผ ํ๋๋ก ์ค์ ํ์์ต๋๋ค.
- ์๋์ ๊ฐ์ ์ปค๋ฐ ์ปจ๋ฒค์ ์ ํตํด ์๋ก์ ์์ ๋ฌผ์ด ์ด๋ค ์ ํ์ ๊ฒ์ธ์ง ํ์ ํ๊ธฐ ์ฝ๋๋ก ํ์์ต๋๋ค.
- Github-flow๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
- ํฌ์ง ์์ ์ฌ์ด์ฆ์ ํ ์ดํ๋ก์ ํธ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋จํ Branching ์ ๋ต์ธ Github-flow๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
- ๊ฐ์์ ์์ ๋ฌผ์ feature ๋ธ๋์น๋ฅผ ๋ง๋ค์ด ๊ด๋ฆฌํ์ผ๋ฉฐ, ์์ฑํ ์์ ๋ฌผ์ main ๋ธ๋์น์ Squash Merge ์ ๋ต์ ์ฌ์ฉํด ํฉ์ณค์ต๋๋ค.
- ์๋์ ๊ฐ์ ๊ทผ๊ฑฐ๋ก Merge ์ ๋ต์ Squash Merge ์ ๋ต์ ํํ์ต๋๋ค.
- ๊ฐ์ ์์ ํ ๊ฒฐ๊ณผ๋ฌผ์ ์์ฑ๋ณธ์ด main ๋ธ๋์น์ ๊ด์ฌ์ฌ์๋ ์
- PR์ ๋ ๋ฆฌ๋ ๋จ์๋ฅผ ์๊ฒ ํ์๊ณ ๋ฏธ๋ฆฌ ํ์ํ ์
- ๊ฐ์ ์์ ๋ฌผ์ ํ์คํ ๋ฆฌ๋ main ๋ธ๋์น์ ๋จ๊ธฐ๊ธฐ๋ณด๋ค๋ ๋ก์ปฌ์ ๋จ๊ฒจ ๊ด๋ฆฌํ๋ ๊ฒ์ด ํธํ๊ฒ ๋ค๊ณ ํ๋จํ ์
https://www.youtube.com/watch?v=MHO3Fofvu3A
- Typescript
- ์ปดํ์ผ ๋จ๊ณ์์ ํ์ ์ ๋ณด์ ๊ด๋ จ๋ ์ค๋ฅ๋ฅผ ํฌ์ฐฉํ ์ ์์ด, ๊ฐ๋ฐ ๊ฒฝํ์ ์ข์ ๊ฒ์ด๋ผ ์๊ฐํ์ต๋๋ค.
- styled-component
- no className bugs & ์ฝ๋์ className ์์ด ๊น๋ํด๋ณด์ ๋๋ค.
- ํน์ ์ปดํฌ๋ํธ์ ์ฐ๊ฒฐ๋์ด ์์ด ์ ์ง๋ณด์๊ฐ ์ฝ๋ค๊ณ ๋๊ผ์ต๋๋ค.
- redux / redux toolkit
- ๊ฐ์ฅ ๋๋ฆฌ ์ฐ์ด๊ณ ์ ๋ณด๊ฐ ๋ง๋ค๊ณ ์๊ฐํ์ต๋๋ค.
- redux์ ๋นํด ๋ณด์ผ๋ฌ ํ๋ ์ดํธ ์ฝ๋๊ฐ ์ ๊ณ , redux-toolkit์๋ ๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ๋ด์ฅ๋์ด ์์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์กด์ฑ์ ์ค์ผ ์ ์์ ๊ฒ์ด๋ผ ์๊ฐํ์ต๋๋ค.
1. ๋ฐฑ์๋์ ํ๋ก ํธ์๋์ ๋ณ๋ ฌ์ ๊ฐ๋ฐ ์ํฉ์์์ ํด๊ฒฐ๋ฐฉ์ - msw๋ก ๊ฐ๋ฐ ์ธํ๋ผ ํ์ถฉ
- msw๋?
- MSW(Mock Service Worker)๋ ๋ชจ์ ์๋น์ค ์์ปค๋ฅผ ์ฌ์ฉํด ๋คํธ์ํฌ ํธ์ถ์ ๊ฐ๋ก์ฑ๋ API mocking ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
- msw๋ ํ๋ก ํธ์๋๊ฐ ์ค์ api ์์ฒญ์ ๋ณด๋ด๋ฉด, ๋คํธ์ํฌ ๋จ์์ ํด๋น ์์ฒญ์ ๊ฐ๋ก์ฑ ๋ฐฑ์๋ api์ธ ์ฒ ์ด๋ฏธ ๋ง๋ค์ด์ง ๊ฐ์ง ๋ฐ์ดํฐ(mock data)๋ฅผ ์๋ต์ผ๋ก ๋ณด๋ด์ค๋๋ค.
- ์ฌ์ฉ ๊ณ๊ธฐ
- ๋ฐฑ์๋์ api๊ฐ ์์ฑ๋์ง ์์ ๋ถ๋ถ์ ํ๋ก ํธ์๋์์ ์ฝ๋๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํด๋๊ธฐ๊ฐ ์ด๋ ค์ด๋ฐ, ๋ช ์ธ๊ฐ ์ ํด์ ธ ์์ด๋ ๋๋ฏธ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ ์ ๊ฑฐํ๋ ์ผ์ด ๊ฐ์ ์ผ์ ์ค๋ณตํด์ ํ๋ ๊ฒ์ฒ๋ผ ๋๊ปด์ก์ต๋๋ค. ๋ํ ๋ฐ์ดํฐ๊ฐ ๋์ฐฉํ์ง ์์์ ๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ํ ๋ก๋ฉ ์ฒ๋ฆฌ๋ฅผ ํ๊ณ ํ๋๋ฐ, ๋๋ฏธ ๋ฐ์ดํฐ๊ฐ ์์ค์ฝ๋ ๋ด๋ถ์ ์์ผ๋ฉด ์๋ต์ด ์์ง ๋์ฐฉํ์ง ์์์ ๋ ์งํ๋์ด์ผ ํ๋ ๋ก์ง์ด ์ ๋๋ก ์คํ๋๊ณ ์๋์ง ์๊ธฐ ์ด๋ ต์ต๋๋ค. ๋ฐ๋ผ์ ๋ฐฑ์๋ api ๊ฐ๋ฐ๊ณผ ํ๋ก ํธ UI ๊ฐ๋ฐ์ ๋ณ๋ ฌ์ ์ผ๋ก ์งํํ๊ธฐ ์ํด ์์๋ก ๊ฐ์ง ์๋ต์ ๋ด๋ ค์ฃผ๋ ๋ชจ์ ์๋น์ค์์ปค๋ฅผ ๋์ ํ๊ฒ ๋์์ต๋๋ค.
- ์ฌ์ฉ ํ๊ธฐ
- ์ฌ์ค ๊ฐ์ฌํ๊ฒ๋ ์ฐ๋ฆฌ ํ์ ๋ฐฑ์๋ ๊ฐ๋ฐ ์๋๊ฐ ๋นจ๋ผ์ ์ฌ์ฉํ ์ผ์ด ๊ทธ๋ ๊ฒ ๋ง์ง๋ ์์๋ ๊ฒ ๊ฐ์ต๋๋ค. ํ์ง๋ง ์ด๊ธฐ API๊ฐ ์์ฑ๋์ง ์๊ณ ๋ช ์ธ๊ฐ ๊ณ์ ๋ฐ๋ ๋๋ msw ๋๋ถ์ ์์ ์ ์ผ๋ก ํด๋ผ์ด์ธํธ ์ฌ์ด๋๋ฅผ ๊ฐ๋ฐํ ์ ์์๋ค๊ณ ๋๋ผ๋๋ฐ์, ํนํ๋ ๋ณ๋ ฌ์ ์ผ๋ก UI ์์ ์ด๋ API ์ฐ๊ฒฐ ํจ์๋ฅผ ์์ฑํด์ผํ ๋ ๋งค์ฐ ์ ์ฉํ๊ณ ๋๋ถ์ ๊ธธ์ง ์์ ํ๋ก์ ํธ ๊ธฐ๊ฐ์ ๋ง์ถฐ ์์ ์ ๋ง๋ฌด๋ฆฌํ ์ ์๊ฒ ๋ ๊ฒ ๊ฐ์ต๋๋ค.
- ํ์ฌ ํ ํฐ ๊ด๋ฆฌ ๋ฐฉ๋ฒ (accessToken + refreshToken)
- ๋ก๊ทธ์ธ์ ํ๋ฉด accessToken๊ณผ refreshToken์ ๋ฐ๊ธ๋ฐ๊ณ , ๋ ๋ค ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ ์ฅํฉ๋๋ค. (p2; ๊ฐ์ ํด์ผํ ์ ์ ๋๋ค.) ์ด๋, expiryTime(ํ ์๊ฐ์ผ๋ก๋ถํฐ 60๋ถ ๋ค)๋ ํจ๊ป ์ ์ฅํฉ๋๋ค. accessToken์ ๋ง๋ฃ ์๊ฐ์ 60๋ถ, refreshToken์ 2์ฃผ์ ๋๋ค.
- ๋ง์ฝ refreshToken์ด ์๋ค๋ฉด ๋ง๋ฃ 1๋ถ ์ (59๋ถ ๊ฒฝ๊ณผ)์
/auth/refresh
๋ก ํ ํฐ ๋ฆฌํ๋ ์ ์์ฒญ์ ํตํด accessToken์ ์ฌ๋ฐ๊ธ ๋ฐ์ ๋ก๊ทธ์ธ์ ์ฐ์ฅํฉ๋๋ค. (๋ง๋ฃ 1๋ถ์ ๊ฐ์ง๋ setTimeout ์ด์ฉ, ๊ธฐ์ค์ ๋ก๊ทธ์ธํ ๋ ๋ฐ์๋ expiryTime ์ ๋๋ค.) - ์ด ๋, refreshToken๋ ์ฌ๋ฐ๊ธ ๋ฐ์ ์๋ก ์ ์ฅํ๋ฉฐ expiryTime๋ 1์๊ฐ ๋ค๋ก ๊ฐ์ ๋ฐ๊ฟ์ค๋๋ค.
- ํน์๋ accessToken์ด ๋ง๋ฃ๋ ์ํ์์ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๋ ๊ฒฝ์ฐ (๊ธ ์์ฑ ์ค์ ์ก์ธ์ค ํ ํฐ์ด ๋ง๋ฃ๋ ๊ฒ๊ณผ ๊ฐ์ ์ํฉ)
axios interceptor
๋ก ์์ฒญ์ ๊ฐ๋ก์ฑ ํ ํฐ ๊ฐฑ์ ํ ์ฌ์๋, 401 ์๋ฌ ์๋ต์ ์ ์ ์๊ฒ ์ฃผ์ง ์๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ ๋์ด๋ ค๊ณ ํ์ต๋๋ค. - ํด๋ผ์ด์ธํธ์ ์๋ฒฝํ ์์ ํ ๊ณต๊ฐ์ ์๋ค๊ณ ์๊ฐํ์ง๋ง, ์ง๊ธ์ฒ๋ผ ์คํ ๋ฆฌ์ง ๊ฐ์ ๊ณต๊ฐ์ (?) ๊ณต๊ฐ์ ํ ํฐ ๋ ๊ฐ๊ฐ ์๋ ๊ฒ์ ์ํํ๋ค๊ณ ์๊ฐํ์ต๋๋ค. ํ์ฌ๋ refreshToken๊ฐ ๊ฐ์ทจ๋์์ ๋๊ฐ ๋ ํฐ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํด, refresh ์์ฒญ์์ accessToken๊ณผ ๋๋ถ์ด refreshToken๊น์ง ๊ฐฑ์ ํด์ค๋๋ค. ์์ง ์์ ํ์ง๋ ๋ชปํ์ง๋ง ์ถํ์ ์ฟ ํค์ ํ ํฐ๋ค์ ์ ์ฅํ๊ณ & http only๋ฅผ ๊ฑธ์ด๋ js๊ฐ ์ฟ ํค ์ ๊ทผ ๋ชปํ๊ฒ ํ๋ ค๊ณ ํ๋๋ฐ, ๊ทธ๋ ๋ค๋ฉด ๋ก๊ทธ์ธ ์ ๋ฌด๋ ์ด๋ป๊ฒ ํ๋ณํด์ผํ ์ง ๊ณ ๋ฏผ ์ค์ ์์ต๋๋ค. ๐
- ๋ฐฐํฌ ํ QA๋ฅผ ํ๋ ๋์ค ๊ฐ์๊ธฐ ์ฌํ๋ฆฌ ๋ธ๋ผ์ฐ์ ์์ ํ์ด์ง๊ฐ ๋ณด์ด์ง ์์๋ ๊ฒฝ์ฐ๊ฐ ์์์ต๋๋ค. ์ ๊ทํํ์ ์ค lookbehind ๋ฌธ๋ฒ์ด ์ฌํ๋ฆฌ ๋ธ๋ผ์ฐ์ ์์๋ ์ง์ํ์ง ์๋ ๋ฌธ๋ฒ์ด์๊ธฐ ๋๋ฌธ์ main.js๋ฅผ ๋ง๋ค์ด๋ด์ง ๋ชปํด ๋น ํ๋ฉด๋ง ๋ณด์๋ ๊ฒ์ด์๋๋ฐ์,
- ์ฝ๋ ์์ ์์ผ๋ก๋ ์์ ๋ถ๋ถ์ด์์ง๋ง ๋๋ฒ๊น ์ ํ๋ฉด์ ์ฌ๋ฌ๊ฐ์ง ๋ธ๋ผ์ฐ์ ์ ๋์ํ ์ ์๋๋ก ํ ์คํธํ๋ฉฐ ๊ฐ๋ฐํ๋ ๊ฒ์ ์ค์ํ๋ค๋ ์๊ฐ์ด ๋ค์๋ค์..! ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๋ ํ๊ฒฝ์ด๋๋งํผ ๋ค์ํ ์ข ๋ฅ์ ๋ํด, ๋ชจ๋ ์ฐจ์ด์ ์์ฑ์ ์ธ์ฐ์ง ๋ชปํ๋๋ผ๋ ๋ฌธ์ ๋ฅผ ์ธ์งํ ์ ์๋ ์์ธ + ์ฌ์ ์ ๋ฌธ์ ๊ฐ ์๊ธฐ์ง ์๊ฒ ๋๋นํ๋ฉฐ ๊ฐ๋ฐํด์ผ๊ฒ ๋ค๊ณ ๋๊ผ์ต๋๋ค.
-
๋จผ์ ํ์ฌ์ ์์ ๋ก๊ทธ์ธ ํ๋ก์ฐ๋ฅผ ์ ๋ฆฌํ๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
ํ์ฌ ์์ ๋ก๊ทธ์ธ ํ๋ก์ฐ ์ ๋ฆฌ
- ์นด์นด์ค ๋ก๊ทธ์ธ
- ์ ์ ๊ฐ ๋ก๊ทธ์ธ ์๋
- ํ๋ก ํธ์์ ์ ์ ๋ฅผ redirect ํ์ด์ง (/login/kakao)๋ก ์ด๋์ํด
- redirectํ์ด์ง url์๋ ์นด์นด์ค๋ก๋ถํฐ ๋ฐ์ ์ธ๊ฐ ์ฝ๋๊ฐ ์ฟผ๋ฆฌ๋ก ๋ด๊ฒจ์์. ์ด๋ฅผ ๋ฐฑ์๋์ ์ ๋ฌ
- ๋ฐฑ์๋์์๋ ์ ๋ฌ๋ฐ์ ์ธ๊ฐ์ฝ๋๋ฅผ ์นด์นด์ค์ ๋ณด๋ด๊ณ ํ ํฐ(์นด์นด์ค)์ ๋ฐ์์ด
- ๋ฐ์์จ ์นด์นด์ค ํ ํฐ๋ก ์ํ๋ง์ผ ์์ฒด ํ ํฐ ์์ฑ
- ํ๋ก ํธ์์ ์์ฒด ํ ํฐ์ ๋ฐ์์ ๋ณด๊ด + ๋ก๊ทธ์ธ ์ฒ๋ฆฌ
- ๊ตฌ๊ธ ๋ก๊ทธ์ธ
- ๊ธฐ๋ณธ์ ์ธ ํํ๋ ์นด์นด์ค ๋ก๊ทธ์ธ๊ณผ ๊ฐ๊ณ , ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌํํ ์ ์์์ง๋ง react-google-login ์ฌ์ฉ
- ์ ์ ๊ฐ ๋ก๊ทธ์ธ ์๋ํ๋ฉด ๊ตฌ๊ธ ๊ณ์ ๋ก๊ทธ์ธ ํ๋ฉด์ผ๋ก ์ด๋
- ๊ตฌ๊ธ ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ๋ฉด ์๋ต์ผ๋ก ์ ์ ์ ์ด๋ฉ์ผ ๋ฑ ๊ตฌ๊ธ์์ ์ ๊ณตํ๋ ์ ์ ์ ๋ณด๋ฅผ ๋ฐ์์ด
- ๋ฐฑ์๋์ ์ด๋ฉ์ผ ์ ๋ฌํ์ฌ ๊ฐ์ ํ ์ ์ด ์๋ ์ ์ ๋ผ๋ฉด accessToken, refreshToken์ ๋ฐ์ ๋ก๊ทธ์ธ ์ฒ๋ฆฌ, ์ ๊ท ์ ์ ๋ผ๋ฉด /signup ํ์ด์ง๋ก ์ด๋
-
์ฃผ์ ์ด์
- ์์ ๋ก๊ทธ์ธ ์ ์ ์ ์ผ๋ฐ ๋ก๊ทธ์ธ ์ ์ ์ ํ์๊ฐ์ ํ๋ก์ธ์ค๋ฅผ ํต์ผํ ์ ์๋๊ฐ?
- ์ผ๋ฐ ์ ์ ๋ ์ด๋ฉ์ผ ์ธ์ฆ๊ณผ ๋น๋ฐ๋ฒํธ ์ ๋ ฅ์ด ํ์ํ ๋ฐ๋ฉด, ์์ ์ ์ ๋ ํ์ ์๋ค. ๋๋จธ์ง ํ๋ก์ธ์ค๋ ๋์ผ
-
ํด๊ฒฐ๋ฐฉ๋ฒ
- ์์ ์ ์ ์ ๊ฒฝ์ฐ ์ด๋ฉ์ผ, ๋น๋ฐ๋ฒํธ input ๋ฐ์ค๋ฅผ ์ด๋ฏธ ์ ๋ ฅ๋ ๊ฒ์ผ๋ก, read only๋ก ์ฒ๋ฆฌํฉ๋๋ค. (๋น๋ฐ๋ฒํธ๋ ๋์๋ก ์ง์ )
- ์์ ๋ก๊ทธ์ธ ์ ์ ์ ๊ฒฝ์ฐ ๋ฑ๋ก๋ ์ ์ ์ ๋ณด๊ฐ ์์ ๊ฒฝ์ฐ ํ์๊ฐ์ ํ์ด์ง๋ก navigate ์์ผ์ฃผ๋ฉด์ useNavigate์ state ์ ๋ฌ ๊ธฐ๋ฅ์ผ๋ก ์ด๋ฉ์ผ ์ฃผ์, ์์ ๋ก๊ทธ์ธ ์ ์ ๋ผ๋ ์ ๋ณด๋ฅผ ์ ๋ฌํด์ค๋๋ค. ํ์๊ฐ์ ํ์ด์ง์์๋ useLocation์ ์ด์ฉํด ๊ฐ์ ๋ฐ์ ์ด๋ฉ์ผ์ ๋ฏธ๋ฆฌ ์ ๋ ฅํด์ค๋๋ค.
5. ์์ ๋ก๊ทธ์ธ์์ ํ๋ก ํธ์๋ / ๋ฐฑ์๋์ ์ญํ ๋ถ๋ด์ด ์ ๋งคํ๋ ๋ถ๋ถ ์ด๋ป๊ฒ ์ ๋ฆฌํ๋์ง
- ํ์๊ฐ์ ์ ๊ตฌํํ๋ ์ ์ฅ์์ ์ฒ์์๋ ๋ค๋ฅธ ์์ ๊ณผ์ ์ฐ๊ฒฐ์ด ์ด๋ฉ์ผ ์ธ์ฆ ๋ฟ์ด๋ผ ์๊ฐํ๊ณ ๋ฐ๋ก ์ธ์ฆ ํ์ด์ง๋ฅผ ๋ง๋ค์์ต๋๋ค. ํ์ง๋ง ์์ ๋์ค์ ์์ ๋ก๊ทธ์ธ์ ๊ฒฝ์ฐ์๋ ๋๋ค์๊ณผ ์์น ์ ๋ณด๋ฅผ ์ป๊ธฐ ์ํด ํ์๊ฐ์ ํ๋ฉด์ผ๋ก ๋ค์ด์์ผ ํ๋ค๋ ์ฌ์ค์ ์๊ฒ ๋์๊ณ , ์์ ๋ก๊ทธ์ธ์ ๋งก์๋ ๋ฏผํ๋๊ณผ ํจ๊ป ํ๋ก์ฐ๋ฅผ ์ ๋ฆฌํ์๋๋ฐ์, ๊ทธ ๊ณผ์ ์์ ๊ธฐ์กด์ ์ด๋ฉ์ผ ์ธ์ฆ ๋ฐฉ์์ ๋ณ๋์ ํ์ด์ง๋ก ๊ตฌ์ฑํ๋ ๋์ ํ์๊ฐ์ ์ด๋ผ๋ ํ๋์ ํ์ด์ง์์ ํด๊ฒฐํ๋ฉด ๋์ฑ ์ข๊ฒ ๋ค๋ ์๊ฒฌ์ด ๋์๊ณ , ์ด๋ฅผ ๋ฐฑ์๋์์ ํด๋น ๋ถ๋ถ์ ๋งก์ ์คํ๋๊ป ์ ๋ฌ๋๋ ธ์ต๋๋ค.
- ํ๋ก ํธ์๋ ์ ์ฅ์์๋ ๋น์ทํ ์์ฒญ์ ๋ณด๋ด๊ณ ์๋ต์ ๋ฐ์ผ๋ ๊ฐ๋จํ ์์ ์ด๋ผ ์๊ฐํ์ง๋ง, ์๊ณ ๋ณด๋ ํด๋น ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด์๋ DB์ ํ์ ์ ๋ณด๋ฅผ ๋ฑ๋กํ ํ ์ด๋ฉ์ผ ์ธ์ฆ์ ๋ค๋ฃจ๋ ๊ธฐ์กด์ ๋ก์ง์ ๋ง์ด ์์ ํด์ผ ํ์ต๋๋ค. ๋ณด๋ค ์์ธํ ๋ด์ฉ์ ๋ํด์๋ ์ด ๊ฒ์๋ฌผ์ ์ ์ค๋ช ๋์ด ์์ต๋๋ค. ๊ตฌํ์ ์์ํ๊ธฐ ์ ์ ๋จ๊ณ์์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ช ํํ๊ฒ ์ ์ํ๊ณ ๊ฐ๋ฐํ๋ ์ธ์๋ค ๊ฐ์ ์ด์ ๋ํ ํฉ์๊ฐ ์ด๋ฃจ์ด์ง์ง ์์ผ๋ฉด ์์ ์ ๋ ๋ฒ(ํน์ ๊ทธ ์ด์) ํ ์ ์์์ ๋ชธ์ ์ฒดํํ์๊ณ , ์ดํ์ ์ ๊ธฐ ํ์์์ ๊ตฌํ๋ฟ๋ง ์๋๋ผ ์ ์ฒด์ ์ธ ํ๋ก์ฐ์ ๋ํ ๊ตฌ์ฑ์๋ค ๊ฐ์์ ์๊ฐ์ ๊ณต์ ํ๊ณ ์ ๋ ธ๋ ฅํ๋ฉฐ ๋ณด๋ค ์ํํ ์์ ์ ์ํํ ์ ์์์ต๋๋ค!
- ํ์ด์ง๋ณ๋ก ์ญํ ์ ๋ถ๋ดํ๊ณ ํด๋น ํ์ด์ง ๋ด์์ ์ฌ์ฉ๋๋ ์ปดํฌ๋ํธ์ ๋ํด ์์ ํจ์ผ๋ก์จ ๊ฒน์นจ๊ณผ conflict๋ฅผ ์ค์ด๊ณ ์ ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ ๊ฒ ์์ ํ๋ค๋ณด๋ ๊ธฐ๋ฅ ํน์ ์คํ์ผ์ ๋ํ ํต์ผ์ฑ์ด ๋ถ์กฑํ์ฌ ๋ง์ง๋ง ์ฃผ์ ๋ค๋ฌ๋ ์์ ์ (์ฃผ๋ก ์์ง๋๊ณผ ๋ฏผํ๋์ด) ํ์ต๋๋ค. ์์ง๋ ๋ฏผํ๋ ์ ๋ง ๊ฐ์ฌํฉ๋๋ค..ใ ใ
- ์ค๊ฐ์ค๊ฐ ์์ ํ๋ฉฐ ์๋ก ๊ณต์ ํ๋ฉด ์ข๊ฒ ๋ค๋ ์ปดํฌ๋ํธ๋ค(ex. ๋ฒํผ, ๋ชจ๋ฌ ๋ฑ)์ ์ด๋ฅผ ์ํ ๋๋ ํ ๋ฆฌ์ ์ฌ๋ ค๋๊ณ pr ํน์ ์ฌ๋์ด๋ ์นดํก ๋ฑ์ ํตํด ์๋ ค์ฃผ๋ฉฐ conflict๋ฅผ ์ค์ผ ์ ์์์ต๋๋ค.
- ํด๋ก ํ๋ ์๋น์ค ๋์์ด ๋น๊ทผ๋ง์ผ์ด๋ค๋ณด๋ ๋น์ โ๊ทผ์ฒโ์ ์๋ ๊ฒ์๋ฌผ๋ค๊ณผ ์ด์๋ค์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ์ด์ฉ์์ ์์น ์ ๋ณด๋ฅผ ์์งํ ํ์๊ฐ ์๊ฒผ์ต๋๋ค. ์ฒ์์๋ โ์๋ฐ์คํฌ๋ฆฝํธ์ ์๋ geolocation ์ ์ฌ์ฉํ๋ฉด ๋๊ฒ ๊ฑฐ๋..โ ์๊ฐํ๋๋ฐ,
- ํ์๊ฐ์ ํน์ ํ๋กํ์์ ์์น๋ฅผ ์์ ํ๋ ์ ์ ์ ํ์ฌ ์์น๋ฅผ ๋ฐ์์ค๋ ๊ทธ ์์น๊ฐ ์ ์ ๊ฐ ์ค์ ์ํํ๋ ์์น์ ๋ค๋ฅผ ์ ์๊ฒ ๋ค๋ ๋ฌธ์ ๊ฐ ์๊ฒผ์ด์. ๊ทธ๋์ ๊ธฐ์กด์ ๋ค๋ฅธ ์๋น์ค๋ค์ ์ฌ์ฉํ๋ ๊ฒฝํ์ ๋์ง์ด๋ณด๋ฉฐ ํด๋น ์๋น์ค์ ๋์ ์์น ์ ๋ณด๋ฅผ ์ด๋ป๊ฒ ์ ๋ฌํ๋์ง ๋ ์ฌ๋ ค๋ณด๊ณ , ์ด์ ๊ด๋ จ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํน์ ๋ฆฌ์กํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ ์ฐพ์๋ณด์๋๋ฐ์, ๋คํํ daum postcode์์ ์ฌ์ฉ์์ ์ฃผ์๋ฅผ ์ ๋ ฅํ๋ฉด ์ด์ ๊ด๋ จ๋ ์์น ์ ๋ณด๋ฅผ ๋ฐํํด์ฃผ๋ api๋ฅผ ์ฐพ์, ์ด๋ฅผ ์ด์ฉํ์ฌ ํ์๊ฐ์ ๋ถ๋ถ์์ ์ ์ ์ ์์น๋ฅผ string ํํ๋ก ๋ฐ์์์ต๋๋ค. ์ฌ๊ธฐ๊น์ง ์ ๋์๊ฒ ๊ฑฐ๋ ์ถ์๋๋ฐ..22
- ๋ฐฑ์๋์์ ์์น ์ ๋ณด๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ ๋๋ค ๋ฒ์๋ฅผ ์กฐ์ ํ๊ธฐ ์ํด์ string ํํ์ ์์น ์ธ์๋ ์ขํ ์ ๋ณด๊ฐ ํ์ํ์ต๋๋ค. ๊ทธ๋์ ์์์ ์ฌ์ฉํ api์ธ์ ์์ง๋์ ๋ง์(๊ฑฐ์ ์ ๋ถ) ๋์์ ๋ฐ์ ์นด์นด์ค maps api ๋ฅผ ํตํด string์ผ๋ก ๋ฐ์์จ ์์น ์ ๋ณด์ ์ขํ๋ฅผ ๊ตฌํด์ฃผ์์ต๋๋ค.
- api ๋ ๊ฐ๋ฅผ ์ด์ด์ ์ฌ์ฉํด๋ณด๋ ๊ฒฝํ์ด ์ฒ์์ด์๋๋ฐ, ๊ทธ ๊ณผ์ ์์ ํผ๋์ด ์๊ธฐ์ง ์๋๋ก input๊ณผ output์ ํ์ ์ ๋ช ํํ๊ฒ ์ ์ํ๊ณ ์์น ์ ๋ณด๊ฐ ์ฒ๋ฆฌ๋๋ ํ๋ก์ฐ๋ฅผ ๊ณ ๋ฏผํ๋ ๊ณผ์ ์ด ๊ฝค ์ฌ๋ฐ์์ต๋๋ค. ๋น๋ก ์ขํ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ง ์๋ ์ฃผ์์ ๊ฐ์ด ์์ง ํด๊ฒฐํ์ง ๋ชปํ ๋ฌธ์ ๋ค๋ ์์ง๋ง, ๊ทธ๋๋ ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ ์ ์ ์ ์ ์ฅ๊ณผ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ๊ธฐํ ๋ฐ ๊ฐ๋ฐ์์ ์ ์ฅ์ ์ค๊ฐ๋ฉฐ ํ์ํ api๋ฅผ ์ฐพ์๋ณด๊ณ ์ ์ฉํ๋ ๊ฒ์ ์ข์ ๊ฒฝํ์ด ๋ ๊ฒ ๊ฐ์์.
-
๊ธฐ๋ณธ์ ์ธ ํ๋ก์ฐ
- ์๋น์ค(main) ๋ธ๋์น / ๊ฐ๋ฐ ๋ธ๋์น์ ๋ฐฐํฌ ์ฌ์ดํธ์์ ์์ ์ ์ธ ๋๊ธฐํ, ์ฆ์ merge ๋ฑ์ผ๋ก ๋ณต์กํ ์ํฉ์ผ ๋ ๋ถํ์ํ ์ค์๋ฅผ ์ค์ด๊ธฐ ์ํ์ฌ github actions๋ฅผ ์ด์ฉํด ๋ฐฐํฌ๋ฅผ ์๋ํ.
- ๋ฐฐํฌ์ ํ์ํ AWS key ๋ฑ์ github secrets์ ๋ณด๊ดํ๊ณ , workflowํ์ผ์์ ์ด๋ฅผ ํธ์ถํด ์ฌ์ฉ
- main ๋ธ๋์น์ pr์ด closed(merge) ๋์ ๋
main.yml
workflow ํ์ผ์ด ๋์๋๋๋ก ํจ - dev ๋ธ๋์น์ ๋๊ธฐํ๋ dev ์ฌ์ดํธ๋ ๋ง๋ค์๋๋ฐ์, dev ๋ธ๋์น์ pr์ด closed(merge)๋์์ ๋๋
dev.yml
์ด ๋์ - Cloudfront์ ๊ฒฝ์ฐ, ๋ฐฐํฌํ๊ณ 24์๊ฐ ๋์์ ์บ์๊ฐ ์ ์ง๋์ด 24์๊ฐ ๋ด์ ์ฌ ๋ฐฐํฌ๋ฅผ ํ๊ฒ ๋๋ฉด ๋๊ธฐํ๊ฐ ๋์ง ์๋๋ฐ, ์ด ๊ฒฝ์ฐ์ ์บ์๋ฅผ ์ง์ฐ๋ invalidation ์์ ๋ aws ์ฝ์์์ ํ์ง ์๊ณ workflow ์คํฌ๋ฆฝํธ์ ํฌํจ์์ผ ์๋ํ
-
๊ฒช์๋ ๋ฌธ์
- ๋งค๋ด์ผ๋๋ก workflow ํ์ผ์ ์ธํ ํ๊ณ , ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ค๋ฅธ ๋ ํฌ์์๋ ๋ฐฐํฌ ์๋ํ์ ์ฑ๊ณตํ๋๋ฐ๋ ๋ถ๊ตฌํ๊ณ ์ค์ workflow๊ฐ ๋์ํ์ ๋ aws ์ธ์ฆ๊ณผ์ ์์ ์๋ฌ๊ฐ ๋ฉ๋๋ค.
- ์ฌ์ค ํ๋ก์ ํธ๋ฅผ ์์ํ๊ณ ํ๋์์ ๋ณธ ๋ ํฌ๋ฅผ ํฌํฌํ ๊ฐ์ธ ๋ ํฌ์์ ์์ ์ ํ ๋ค ๋ณธ ๋ ํฌ๋ก pr์ ์ฌ๋ ธ๋๋ฐ, ์ด๊ฒ์ด ์์ธ
- ์ด ๋ ๋์๊ฐ๋ workflow ํ์ผ์ origin ๋ ํฌ์ ๊ฒ์ด ์๋๋ผ forked ๋ ํฌ ์์ ์ด๊ธฐ ๋๋ฌธ. (์ฒ์์ origin ๋ ํฌ์ workflowํ์ผ์ด ์คํ๋๋ค๊ณ ์ฐฉ๊ฐ)
- forked ๋ ํฌ๋ origin ๋ ํฌ์ secrets์ ์ ๊ทผํ ์ ์๋ ๊ถํ์ด ์๊ธฐ ๋๋ฌธ์ ์๋ฌ๊ฐ ๋ฉ๋๋ค.
-
ํด๊ฒฐ๋ฐฉ๋ฒ
- ์ดํ์๋ origin ๋ ํฌ์ ๋ธ๋์น๋ฅผ ์์ฑํด ์์ ํ๊ณ , ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์์ต๋๋ค.
- ๋ชจ๋ฐ์ผ ๋ทฐ / pc ๋ทฐ (breakpoint: 712px)
- ์ปดํฌ๋ํธ ๊ตฌ์กฐ๋ฅผ ์งค ๋ ๋ชจ๋ฐ์ผ ๋ทฐ๋ฅผ ์ผ๋์ ๋๊ณ ์์ ํ๋ค๋ฉด ์๊ฐ๋งํผ ๋ณต์กํ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
- ํ์ง๋ง ๋ํ ์ผ, ๋ง๊ฐ ์์ ์ ์์๋๋ ๋ ธ๋ ฅ์ด ๋ ๋ฐฐ ์ด์์ผ๋ก ๋ ์ ์์ด์..(!)
- ๊ตฌ์กฐ๊ฐ ๋์ ๋๊ฒ ๋ค๋ฅธ ๋ชจ๋ฐ์ผ๋ทฐ / ์น๋ทฐ๋ผ๋ฉด ๊ฐ๊ฐ ์์๋ค์ ๋ํ ๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ ์ข์ง๋ง ์์ DesktopWrapper * MobileWrapper๋ฅผ ๋ฌ์ ๋ถ๋ฆฌํ ์๋ ์์ง ์์๊น์?
-
์์ง: ๋ฒ์จ ํ ๋ฌ์ด ์ง๋๋ค๋ ๋ฏฟ์ ์ ์์ด์ ๋์ฌ.. ์ฌ์ค ์๋น์ค ํ๋๋ฅผ ํต์ผ๋ก ๊ตฌํํด๋ณธ๋ค๋ ๊ฒ ์ฌ์๋ณด์ด์ง ์์์ด์, ์ฒ์์๋ ์ ๋ง ๋ง์ด ๊ฑฑ์ ํ๋๋ฐ ํ์ ์ ์ง์ง ๋๋ผ์ด ๊ฒ์ธ ๊ฒ ๊ฐ์์..! ํผ์์๋ ์ ๋ ๋ชปํด๋ผ ์ ์ด์๋๋ฐ ๋จธ๋ฆฌ ๋ง๋๊ณ ๊ฐ์ด ๊ณ ๋ฏผํ๋ค๋ณด๋๊น ํ๋ํ๋ ๋ง๋ค์ด์ง๋๋ผ๊ณ ์. ์ฌ์ค ์์ง๋ ๋ถ์กฑํ๊ฒ ๋ง์ง๋ง ์ฝ๊ฒ ์ป์ง๋ชปํ ์ ๋ง ๊ฐ์ง ๊ฒฝํ ๋ง์ด ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ผ๋จ '์ด.. ํด๋ณผ๊ฒ์'ํ๋๋ ์ผ๋ง ์์ง๋์ ๋ค ํด๋ฒ๋ฆฌ๋ ๋๋ฑ์ข ๋ฏผํ๋.. ์ด์ธ์ ์ธ ์ค์ผ์ค์๋ ์ ๊ฑธ ํด๋ธ๋ค๊ณ ..?์ถ์ ํค๋ฅด๋ฏธ์จ๋ ์ฐฝ๋ฏผ๋.. ์ฐ๋ฆฌ ์๋น์ค๋ฅผ 180๋ ๋ฌ๋ผ์ง๊ฒ ํด์ค ์ต๊ณ ๋คํ๋, ๊ทธ๋ฆฌ๊ณ ํญ๋ฐ์ ์ธ ๊ฐ๋ฐ์๋๋ก API ๊ฑฑ์ ์ ํ ๋ฒ๋ ํ์ง ์๊ฒ ํด์ฃผ์ 3ํ ๋ฐฑ์๋ ๋ถ๋ค ์ ๋ง ๋๋ฌด ๊ฐ์ฌํฉ๋๋ค! ์ด๋ฒ ํ์ ์์ ์ข์ ์๋์ง ๋ฐ์์ ๋๋ฌด ํ๋ณตํฉ๋๋ค. ์์ผ๋ก๋ ํ์ดํ !!!
-
๋ฏผํ: ์ฌ์ค ์ ํฌ๊ฐ ์ด๊ฒ์ ๊ฒ ๊ตฌํํด์ผ ํ ํ์ด์ง, ๊ธฐ๋ฅ๋ค์ด ๋ง์์ ๋ค ๊ผผ๊ผผํ๊ฒ ์ ๊ฒฝ์ฐ๋ ๊ฒ์ด ์ฝ์ง ์์๊ฑฐ๋ผ๊ณ ์๊ฐํ๋๋ฐ ์ ๋ง ์ค์ ์๋น์ค ์คํํ๋ ๊ฒ์ฒ๋ผ ๋นํ ์๋ ๊ฒฐ๊ณผ๋ฌผ์ ๋ด๋ ค๊ณ ๋ค๋ค ์ด์ ์ฌ๋ฆฌ๋ ๋ชจ์ต์ด ๋๋ฌด ๋ฉ์์๊ณ โ๋ญ ํด๋ ๋ ์ฌ๋๋คโ์ด๋ผ๊ณ ์๊ฐํ๋ค์.. ์์ง๋.. ๋ผ๋๋ฅผ ๋๋ฌด ์ ์ก์์ฃผ์ ์ ํธํ๊ฒ ์ฝ๋ ์งฐ๋ค์.. ์ฐฝ๋ฏผ๋.. ๋ชธ์ด ๋ ๊ฐ์ธ ๊ฒ์ฒ๋ผ ์ด์์ฃผ์ ์ ๊ฐ์ฌํด์.. ๋ฐฑ์๋ ๋ถ๋ค๊ป๋ ๋๋ฌด ๊ฐ์ฌํ๊ฒ ์ ๋ง ๋น ๋ฅด๊ฒ ๋นํ์์ด ์์ ํด์ฃผ์ ์ ์์ ํ๊ธฐ ๋๋ฌด ์์ํ์ต๋๋ค.. ๋คํ๋๋ ํฉ๋ฅ ์ ๊ณผ ํ ํ๋ฆฌํฐ๊ฐ ํ ์ฐจ์ด๋๋๊ฑธ ๋ณด๊ณ ์๋นํ ์กด์ฌ๊ฐ์ ๋๊ผ์ต๋๋ค.. ๋๋ฌด ๋ง์ด ๋ฐฐ์ฐ๊ณ ์ข์ ์๋์ง๋ฅผ ์ป์ด์ ๊ธฐ๋ถ์ด ์ข์ต๋๋คโฆ!!!
-
์ฐฝ๋ฏผ: ๐โโ๏ธ๋จผ์ ํ์๋ถ๋ค๊ป ์ ํ ๋ฒ ํ๊ณ ์์ํ๊ฒ ์ต๋๋ค๐โโ๏ธ ์ธํดํ๋ฉฐ ํ ์ดํ์ ์ ํ๋ค๋ณด๋ ํ์๋ถ๋ค, ํนํ FE ์์ง๋๊ณผ ๋ฏผํ๋์ผ๋ก๋ถํฐ ์ ๋ง ๋ง์ ๋์ ๋ฐ์์ต๋๋ค.. ๊ฐ์ฌํฉ๋๋คใ ใ ใ ๋ฐฑ์๋ ๋ถ๋ค ๋ฐ ๋์์ด๋ ๋คํ๋๊ป๋ ์์ฒญ ๋ง์ ๋์ ๋ฐ์์ด์,, ํ์๊ฐ์ ํ์ด์ง ๋์์ธ ๋นํฌ์ ํํฐ ์ฌ์ง์ ์ฒจ๋ถํ๊ณ ์ถ์๋ฐ ๋ถ๋๋ฌ์์ ๋ชป ํ๊ฒ ์ต๋๋คใ ใ ใ ๊ทธ๋์์ ํผ์ ์ฝ๋ฉ์ ํด์๋ค๋ณด๋ ๊ฐ๋ฐ ๊ณผ์ ์์ ๋ค๋ฅธ ์ฌ๋๋ค๊ณผ์ ํ์ ์ ๊ฒฝํํด๋ณธ ๊ฒ์ด ์ฒ์์ด์๋๋ฐ, ํ์ ์ ์๊ธฐ๋ฅ์ ๋ชธ์ ์ฒดํํ ์ ์์์ต๋๋ค. ํ์ ์ ํ๋ ๋์ค ํจ๊ป ์ผํ๋ ๊ฑด ์ปดํจํฐ ํ๋ฉด ๋๋จธ์ ์ฌ๋๋ค์ด๋ผ๋ ๊ฑธ ๋๋ผ๋ ์๊ฐ์ด ๊ฝค ๋ง์๊ณ , ์นญ์ฐฌ์ ์ฌ๋ฌ๋ฒ ํ๋๋ฐ๋ ๋ถ์กฑํ ๋งํผ ๋๋จํ ํ์๋ถ๋ค ๋ง๋์ ์ ๋ง ๊ฐ์ฌํ๊ฒ ์๊ฐํฉ๋๋ค..! ํ์ ๋๋๊ณ ๋๋ฉด ์กฐ๊ธ ํ์ ํ ๊ฒ ๊ฐ๋ค์..