์ ๋ชฉ์ด ๊ฑฐ์ฐฝ ํ ๊ฒ ๊ฐ๊ธฐ๋ ํ์ง๋ง, ๊ตฌ์ธ์ ํ๊ธฐ์ํด ์ด๋ ฅ์๋ฅผ ๋ณด๊ฑฐ๋ ๋ฉด์ ์ ๋ณผ๋ ์ด๋ฐ ๊ตฌ์ง์๋ผ๋ฉด “์ ๋ง ๋ฝ๊ณ ์ถ๋ค” ํ๋ ๋ง์๊ฐ์ง์ผ๋ก ์ ์ด ๋ด ๋๋ค. ํ์ฌ์ ๊ท๋ชจ์ ๊ด๊ณ์์ด ์ข์ ํ์ฌ๋ฅผ ๊ตฌ์ง์๊ฐ ์ ํ ํ ์ ์๋ ์ข์ “๋ฏธ๋ผ”๊ฐ ๋ ์๋ ์์ต๋๋ค.
์ ๊ฐ ์์ผ๋ก ์ธ๊ธํ๋ ๋ชจ๋ ๋ด์ฉ๋ค์ด ์ ๋ต์ ์๋์ง๋ง, ๊ตฌ์ง ํ๋์ ์ํ ํฌํธํด๋ฆฌ์ค๋ฅผ ๋ง๋๋๋ฐ ์์ด์ ์กฐ๊ธ์ด๋๋ง ๋์์ด ๋์์ผ๋ฉด ํฉ๋๋ค. ์ทจ์ง์ ์ฒ์ ์ค๋นํ๋ ๋ถ๋ค์ ๊ธฐ์ค์ผ๋ก ์ด๋ป๊ฒ ์ค๋นํ๋ฉด ์ข์์ง์ ๋ํ ๊ธฐ์ค์ผ๋ก ์ ์ด ๋ณด์์ต๋๋ค.
๋ฌด์์ ๋ง๋ค ๊ฒ์ธ๊ฐ. ๊ฒ์ํ์ ์ข์ ์์์ด ๋ ์ ์์ต๋๋ค.
๊ผญ ๊ฒ์ํ ์ด์ด์ผ ํ ์ด์ ๋ ์์ง๋ง, ๊ตฌ์ธ์ ํ๋์ชฝ์ด๋ ๊ตฌ์ง์ ํ๋ ์ ์ฅ์์ ์๋ก ์ดํดํ๊ธฐ ํธํ ๊ธฐ๋ฅ์ผ ์ ์์ต๋๋ค. ์ฒ์ ์์์ ๋ก๊ทธ์ธ์ ํ์ง ์๋ ๊ณต๊ฐ๋ ๊ฒ์ํ์ ๋ง๋ค์ด ๋ณด๋ฉด ๋ฉ๋๋ค.
์ฌ์ค ๊ฒฝ๋ ฅ์ง์ด ์๋ ์ด์ ์ฒ์ ์ฌํ์ํ์ ์์ํ๋๋ฐ ์์ด์ ๋ญ๊ฐ ํ๋ คํ๊ฑฐ๋ ์๋ก์ด ๊ธฐ์ ์ ์ผ๋ค๋ ๊ฒ๋ณด๋ค๋ ์ด๋ ์ ๋์ ๊ธฐ๋ณธ๊ธฐ๋ฅผ ๊ฐ์ถ์๋์ง, ์ด๋ ์ ๋ ์์ฑ๋๋ฅผ ๊ฐ์ง๊ณ ์๋์ง ์ดํด๋ด ๋๋ค. ๊ทธ ํฉ์ผ์ ์์๋ ๋ณต์กํ ์๊ตฌ์ฌํญ์ ์ค๋ช ํด์ผ ํ๋ ์๋ก์ด ํ๋ก์ ํธ ๋ณด๋ค๋ ๊ฒ์ํ์ด ์ฝ๋๋ฅผ ๊ฒํ ํ๋ ์ฌ๋์ ์ ์ฅ์ผ๋ก ์ ๊ทผ์ด ์ข ๋ ์ฌ์ธ ์ ์์ต๋๋ค. ์ค์ ๋ก ์ด๋ ฅ์๋ฅผ ๋ณด๊ณ , ๋ค๋ฅธ ์ฌ๋์ ์ฝ๋๋ฅผ ์ดํด๋ณด๋ ์๊ฐ์ ์ ๋ง ๊ธธ์ด๋ด์ผ 10๋ถ ์ด์ ๊ฐ์ง์ง ์์ต๋๋ค.
์ด๋ค ๊ฒ์ํ์ ๋ง๋ค์ง ์๊ตฌ์ฌํญ์ ์กฐ๊ธ ์์ธํ๊ฒ ์ ์ต๋๋ค.
๋ณธ์ธ์ด ์ด๋ ์ ๋์ ๊ฒ์ํ์ ๋ง๋ค ์ ์์์ง ๋ณธ์ธ์ ๋ฅ๋ ฅ์ ๋ฐ๋ผ ๊ฐ๊ดํ ์์ผ๋ณด๊ณ , ์ค์ฒ ๊ฐ๋ฅํ ๋ฒ์์ ๋ฐ๋ผ์ ์๊ตฌ์ฌํญ์ ๋์ดํด ๋ด ๋๋ค. ์ฒ์๋ถํฐ ๊ฑฐ์ฐฝํ๊ฒ ๋ง๋ค์ด์ผ ํ ์ด์ ๋ ์์ต๋๋ค. ์ต๋ํ ๋จ์ํ ๊ฒ์ํ์ ๋ง๋๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
์ฒ์ ๋ผ๋๋ฅผ ์ก์๋ณด๊ณ ํ๋์ฉ ์ถ๊ฐ/๋ณํ ์์ผ ๋๊ฐ๋ณด๋ฉด ๋ฉ๋๋ค. ํ๋ฒ์ ์๋ฒฝํ๊ฒ ๋ง๋ค ํ์๋ ์์ต๋๋ค.
์ด๋ค ๊ธฐ์ ์ ์ฌ์ฉํ ์ง Researchํ๊ณ ์ ํํฉ๋๋ค.
๊ฒ์ํ์ ๋ง๋ค๊ธฐ ์ํด์๋ ์๋ ์ ๋์ ๊ธฐ์ ์ ํ์ด ํ์ํด ๋ณด์ ๋๋ค.
- RDBMS - Free database ์ค์์ ์ ์ฉํ๊ณ ์ถ์ ๊ฑธ ์ ํํ๋ฉด ๋ฉ๋๋ค.
- Backend language - ๋ณธ์ธ์ด ๊ฐ์ฅ ์์ ์์ดํ๋ ์ธ์ด ์ค์ ์ ํํ๋ฉด ๋ฉ๋๋ค.
- Frontend language - React, Angular, Vue ์ค์์ ์์ ์๋ ๊ฒ์ ์ ํํฉ๋๋ค.
์ฒ์ ์์ํ๋ ์ํฉ์์๋ ์ ์ธ๊ฐ์ง ์ ๋๋ง์ ๊ณ ๋ฏผํ๋ ๊ฒ์ผ๋ก ํ๊ฒ ์ต๋๋ค.
Github๊ณ์ ์ ๋ง๋ค๊ณ , ๋ชจ๋ ๋ฌธ์๋ Repository์์ ํฌํจ๋๋ฉด ์ข์ต๋๋ค.
Github (https://github.com/)์ ๊ฐ์ ๊ฒ์ํ ํ๋ก์ ํธ๋ฅผ ์ํ Repository๋ฅผ ๋ง๋ญ๋๋ค. ๋ฌธ์๋ ์ฒ์ README.md์ ๋ง๋ค ๊ฒ์ํ์ ๋ํ ๊ฐ๋ต์ ์ธ ์ค๋ช ์ ์ฑ์ ์ค๋๋ค. ์ฐจ๊ทผ ์ฐจ๊ทผ Frontend, Backend, DB scheme ์์ธํ ์ค๊ณ์ฌํญ์ README.md์ ์ฑ์ฐ๋ฉด ๋ฉ๋๋ค.
์ข์ ์คํ์์ค๋ฅผ ๊ณ ๋ฅด๋ ๋น ๋ฅธ ๋ฐฉ๋ฒ
๊ตฌ๊ธ๋ง์ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ๊ฒ์ด๊ณ , github์์ ๋ง์ ์ฝ๋๋ค์ ์ดํด ๋ณผ ์ ์์ ๊ฒ์ ๋๋ค. ์์ ๊ฐ ๋ ์๋ ์๊ณ , ํ ํ๋ฆฟ ์ฝ๋๊ฐ ๋ ์๋ ์์ต๋๋ค. ์ ๊ฐ ๋น ๋ฅด๊ฒ ํ๋จํ๋ ์ข์ ์คํ์์ค์ ๊ธฐ์ค์ ์ผ๋ง๋ ๋ง์ Contributors๊ฐ repository์ ์ฐธ์ฌํ๊ณ ์๋๋ ์ ๋๋ค. ์ง๋จ ์ง์ฑ์ด๋ผ๋ ์ ์ ํ์ ๋ง์ ์ฐธ์ฌ๋ ์ข์ ์ฝ๋๊ฐ ๋์ฌ ํ๋ฅ ์ด ๋์ต๋๋ค.
์ฒซ ์ค๊ณ๋ฅผ ์์ ํฉ๋๋ค.
์ด์ ์ด๋ค ๊ธฐ์ ์ ์ธ์ง ์ ํ๊ณ , Github repository๋ ๋ง๋ค์์ต๋๋ค. ์์์ด ๋ฐ์ด๋ ์ค๊ณ๋ฅผ ์์ํด ๋ณด๋๋ก ํฉ๋๋ค.
๊ฐ์ธ์ ์ผ๋ก Backend๋ REST API๋ก ๋ง๋๋ ๊ฑธ ์ถ์ฒํฉ๋๋ค. ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ ์๊ธด ํ์ง๋ง, ๋์ค์ ํ์ฅ์ ํ๊ฑฐ๋ ๋ณํ๋ฅผ ์ฃผ๊ธฐ ํธํ๋ฏ๋ก ์ผ๋จ ์์์ REST๋ก ํ๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค.
์ค๊ณ๋ฅผ ์ํด์๋ 3๊ฐ์ง ์ฌํญ์ ์ง์ค์ ์ผ๋ก ๊ณต๋ถํด์ผ ํฉ๋๋ค.
1. REST API์ Best practice
REST API ์์น์ ๋ํด์ ์ต์ 3~4 ์ผ ์ ๋์ ์๊ฐ์ ํฌ์ํด์ ๋ง์ ๋ฌธ์๋ค์ ๋ณด๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค. github์ ์๋ ์คํ์์ค๋ฅผ ๋ณด๋ ๊ฒ๋ ๋ฐฉ๋ฒ์ด๊ณ , ์ ํ๋ธ๋ ์ฌ๋ฌ ๋ฌธ์๋ค์ ์์ธํ ์ดํด๋ณด๋ ๊ฒ์ด ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ ๋ช ํ ITํ์ฌ์์ OpenAPI Spec ๋ฌธ์๋ฅผ ๋ณด๋ฉด์ ํํธ๋ฅผ ์ป๋ ๊ฒ๋ ํฐ ๋์์ด ๋ฉ๋๋ค.
๊ทธ๋์ ๊ฒฐ๊ณผ๋ฌผ์ ์ ์ด๋ ์ด๋ค endpoints๋ค์ด ํ์ํ์ง README.md์ ๋ฌธ์๋ก ์์ฑํด ์ค๋๋ค.
2. Frontend์ Best practice
Frontend๋ HTML, CSS, Javascript๋ง ์๋ ๊ฒ์ ์๋๋๋ค. ๊ทธ ์ด์์ผ๋ก Typescript๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ฅ์ ์ธ์ง, ์ด๋ค ํจํด์ ์ฌ์ฉํด์ผ ํ๋์ง Best practice๋ฅผ ์ดํด๋ณด๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์๋ฅผ ๋ค์ด React๋ฅผ ์ ํํ๋ค๋ฉด typescript์ redux pattern์ ์ฌ์ฉํ๊ณ , ํจํด์ ๋ํ ์ดํด๋ฅผ ๋ช์ผ ์ ๋ ์ถฉ๋ถํ ๊ณต๋ถํ ์๊ฐ์ด ํ์ํฉ๋๋ค. ๋ฌผ๋ก ๋ฌธ์๋ฅผ README.md์ ์์ฑํฉ๋๋ค.
3. DB ์คํค๋ง ์ค๊ณ
์ฌ์ค ๊ฒ์ํ ์คํค๋ง ์ค๊ณ๋ ๊ฒ์์ ํตํด์ ๋ง์ ์ ๋ณด๋ฅผ ์ป์ ์ ์์ต๋๋ค. ํ์ง๋ง ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทํ์ ํจ๊ป ์ค๊ณ์ ๋ํ ์์ ์ ์ฝ์ผ๋ฉด์ ์คํค๋ง๋ฅผ ๋ง๋ค์ด ๋ด ๋๋ค. ๋ฌธ์๋ฅผ ๋ง๋ค์ด ๋๊ณ , ๋์ค์ ์ฌ์ฉ์ ์ํด์ ์คํค๋ง ์์ฑ ์คํฌ๋ฆฝํธ๋ ๋ง๋ค์ด ๋์ต๋๋ค.
Backend ๊ฐ๋ฐํ๊ธฐ
์์ ๋จ๊ณ๊ฐ ์๋ฃ๋๊ณ ๋๋ฉด ๊ณต๋ถํ๋ ๋ฐฉ์๋๋ก ์ต๋ํ ํจํด์ ๋ง๊ฒ ๊ฐ๋ฐ์ ํฉ๋๋ค.
DB๋ stored procedure๋ฅผ ๋ง๋ค์ด์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค.
Backend ๊ฐ๋ฐ์ ์์ด์ ์ค์ํ ์ฌํญ์ ์๋์ ๊ฐ์ต๋๋ค.
- Route๋ ๋์ฌ๊ฐ ์๋ ๋ช ์ฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ง๊ธ์ ๋จ๊ธด๋ค๋ผ๊ณ ๋ดค์ ๋, POST {domain}/v1/comments
- Controller-Service-Repository with dependency injection ํจํด์ ์ฐ๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค.
- Unit tests๋ฅผ ๋ง๋ค ์ ์๋ ์ฝ๋๋ ๋์์ธ์ด ์๋ชป๋ ๊ฒ์ ๋๋ค.
- KISS, DRY, YAGNI, SOLID ์์น ์ ๋๋ ๊ฒ์ํด์ ์ต๋ํ ์ ๋ ์ ํด์ ์ดํด๋ณด๊ณ ๊ฐ๋ฐ์ ์์ํด ๋ด ๋๋ค. ์ฒ์์ ์ธ๋ฏ ์ดํด๊ฐ ์ ๊ฐ์ง๋ ์์ง๋ง, ์ฌ๋ฌ๋ฒ ์ฝ๊ณ ์ต๋ํ ์ง์ผ๋ณด๋๋ก ๋ ธ๋ ฅํ๋ ๊ฒ์ ๋์์ด ๋ฉ๋๋ค.
- Design pattern ๊ด๋ จ ์์ ์ ์ฐธ๊ณ ํ๋ ๊ฒ์ ์ข์ง๋ง, ๊ผญ ํ์ํ๋ค๋ ์๊ฐ์ด ๋ค๋ ์ฌ์ฉํ๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค.
- Dependency injection framework์ ์ฌ์ฉํ๋ ๊ฑธ ์ถ์ฒํฉ๋๋ค. Decoupling๊ณผ ๋์ค์ Unit tests๋ฅผ ๋ง๋๋๋ฐ ์์ด์ ํฐ ๋์์ ์ค๋๋ค.
- Unit tests๋ฅผ ์ํด์ Mocking framework๋ฅผ ๊ฐ์ด ์ฌ์ฉํฉ๋๋ค.
- DB๋ Stored procedure๋ฅผ ๋ง๋ค๊ณ , ์ฝ๋๋ด์์ stored procedure๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์์ฒญํ๋ ์ฟผ๋ฆฌ๋ ํผํฉ๋๋ค.
- ๋ณด์์ ์ด์ ๋ก SQL Injection๊ณผ ๊ฐ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ป๊ฒ ๊ตฌํํด์ผ ํ๋์ง ์ฐพ์๋ณด๊ณ ๊ผญ ์งํค๋ ๊ฒ์ ๋๋ค.
Unit tests
Unit tests๋ TDD๊ฐ ์๋๋๋ค. TDD๋ ์ ํ์ฌํญ์ด์ง๋ง, Unit tests๋ ๊ฐ๋ฐ์์ ๋งค์ฐ ์ค์ํ ๊ณผ์ ์ค์ ํ๋ ์ ๋๋ค. ๊ฐ์ธ์ ์ผ๋ก๋ ์๋ฌด๋ฆฌ ๊ฐ์กฐํด๋ ์ง๋์น์ง ์์ง๋ง, ์ง๊ธ ์ด ๊ธ์์ ๋ชจ๋ ์ฅ์ ์ ๋์ดํ๊ธฐ์๋ ํ๊ณ๊ฐ ์์ต๋๋ค.
์ ์ด๋ ๋๊ถ ์ด์์ TDD๋ ์ ๋ํ ์คํธ ๊ด๋ จ ์์ ์ ์ฝ์ด ๋ณด๋ ๊ฒ์ ๋งค์ฐ ์ถ์ฒํฉ๋๋ค. ํ๋ ํ์คํ๊ฒ ๋งํ ์ ์๋ ๊ฒ์ Unit test๋ฅผ ๋ง๋ค ์ ์๋ ์ฝ๋๋ ๋์ ๋์์ธ ์ ๋๋ค. ๊ทธ๋์ ์ ์ ๊ฒฝ์ฐ๋ ๊ตฌ์ง์์ ์ฝ๋๋ฅผ ์ดํด๋ณผ ๋ ์ ๋ํ ์คํธ๊ฐ ๊ฑฐ์ ์๋ฒฝํ๊ฒ ์์ฑ๋์ด ์์ผ๋ฉด ๋ง์ ํ๋ฌ์ค ์ ์๋ฅผ ์ค๋๋ค.
์ด๊ฑด ์ผ์ข ์ ์์ ํ ์ฝ๋๋ฅผ ๋ง๋ค๊ฒ ๋ค๋ ์ผ์ข ์ ๋ง์๊ฐ์ง ๊ฐ์ต๋๋ค. ๋์๊ฐ๊ธฐ๋ง ํ๋ ๊ธฐ๋ฅ์ ๋ง๋ค๊ธฐ ์ํด ๋ ธ๋ ฅํ๋ ์ฌ๋์ธ๊ฐ, ์๋๋ฉด ๋ฏธ๋๋ฅผ ์ํด ์กฐ๊ธ ๋๋์ง๋ง ์์ ํ ์ฝ๋๋ฅผ ๋ง๋ค๊ธฐ ์ํด ๋ ธ๋ ฅํ๋ ์ฌ๋์ธ๊ฐ์ ์ฐจ์ด์ธ๋ฐ ์ด๊ฑด ์ฝ๋๋ฅผ ๋ณด๋ ์ฌ๋์์๋ ํฐ ์ฐจ์ด๋ก ๋๊ปด์ง๋๋ค. ์์ง์ ๋ง์ ์ฌ๋๋ค์ด ์ด ์ค์ฒ์ ์ ํ์ง ์๊ณ ์์ต๋๋ค. ์ด ํฌ์ธํธ๊ฐ ์ข์ ํ์ฌ์ ์ข์ ์กฐ๊ฑด์ผ๋ก ์ทจ์งํ ์ ์๋ ์ฒซ๋ฒ์งธ ์๊ฑด์ด๋ผ๊ณ ๊ฐํ ์ด์ผ๊ธฐ ํ ์ ์์ต๋๋ค. ์ ๊ฐ ๋ค๋๋ ํ์ฌ์์๋ ์กธ์ ์๋ค์ ๋ฉด์ ์ ๋ง์ด ๋ณด์ง๋ง, ์ ๋ํ ์คํธ ๋งํผ์ ๋น๋ฝ ์ฌ๋ถ์ ์์ด์ ์์ฃผ ํฐ ์์๊ฐ ๋ฉ๋๋ค. ์ ๋ ์๊ฒ ๋ณด์ง ๋ง๊ณ , ์ต๋ํ Code coverage๊ฐ 100ํ๋ก ๋ ๋ ๊น์ง ๋ ธ๋ ฅํด ๋ณด๋ฉด ๋ณธ์ธ์ ์ค๋ ฅ ํฅ์๊ณผ ์ทจ์ง์ ํฐ ๋์์ด ๋ฉ๋๋ค.
Frontend์ ๊ฐ๋ฐ๊ณผ Unit tests
Frontend ๊ฐ๋ฐ์กฐ์ฐจ ์ ํด์ง ํจํด์ ๋ง๊ฒ ์ ํํ๊ฒ ๊ฐ๋ฐํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. React๋ฅผ ์๋ฅผ ๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
Action, Reducer, Container, View, Comopnent๋ฅผ ์ ํํ ์์น์ผ๋ก ๋ง๋ค์๋๋ ์ ๋๋ค. ๊ธฐ๋ฅ์ด ๋์๊ฐ๋ ๊ฒ๊ณผ ๋น์ทํ๊ฒ ๊ด๋ฆฌ ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ๋ง๋ค์๋์ง๋ ์ค์ํฉ๋๋ค.
๋ฌผ๋ก Frontend์ ๊ฒฝ์ฐ๋ Unit tests๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ์คํ ์์ค ์์ ์ Unit tests๊ฐ ํฌํจ๋์ด ์๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์๊ฐ์ ์ข ๊ฑธ๋ฆฌ์ง๋ง, Interaction tests ( View, Component ) ๊น์ง ๋ง๋ค์ด ์ฃผ๋ฉด ํฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
๋์์ธ์ ์ต๋ํ ์ฌํํ๊ฒ! ๊ทธ๋ฆฌ๊ณ ๋ฐฐํฌํด ๋ด ์๋ค.
๋ง๋ ๊ฒ์ํ์ ๋ฐฐํฌํด์ ๋ค๋ฅธ ์ฌ๋๋ค์ด ๊ฒ์ํ์ ๋ณผ ์ ์๊ฒ ํด ์ฃผ๋ฉด ์ข์ต๋๋ค. ํ์ง๋ง ์ง์ํ ํฌ์ง์ ์ด ์น ๋์์ด๋๊ฐ ์๋ ์ด์ ๋์์ธ์ด ํ๋ คํ ํ์๋ ์์ต๋๋ค.
๊ฐ๋ฐ์ด ์๋ฃ ๋์์ผ๋ฉด ๋ฌธ์๋ฅผ ๋ค์ ๋ณด๊ฐ ํฉ๋๋ค.
๋ณดํต ๊ฐ๋ฐ์๋ถ๋ค์ ๋ฌธ์ ๋ง๋ค๊ธฐ ์ซ์ดํฉ๋๋ค. ๊ฐ๋ฐ ๋ฑ ์๋ฃํ๊ณ , ๊ธฐ๋ฅ ์ ์๋ ํ๋ ์ ํธ๊ณ ๋ค์์ผ๋ก ๋์ด๊ฐ๋๋ค. ํ์ง๋ง ์ฒซ ์ธ์์ ๋ณด์ฌ์ฃผ๋ ์ ์ฅ์์ README.md์์ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ด ์ ์์ฑ๋ ๋ฌธ์๋ผ๋ฉด ๋ง์ ํ๋ฌ์ค ์ ์๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค. ์์์ ์ธ๊ธํ ๊ฒ์ ํ ๋๋ก ์ ๋ผ๋ฉด ์๋์ ๊ฐ์ ๋ฌธ์๋ฅผ ์์ฑํ ๊ฒ์ ๋๋ค.
- ๊ฒ์ํ ๊ธฐ๋ฅ ์ค๋ช
- Key summary
-
- ํฌํธํด๋ฆฌ์ค์์ ๊ฐ์กฐํ๊ณ ์ถ์ ๋ด์ฉ๋ค์ ์ ์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ ๋ํ ์คํธ Code coverage๊ฐ 100%๋ผ๋ฉด ์ ์ด๋ ๋ฉ๋๋ค.
- Folder structure ์๊ฐ
- Backend architecture
-
- Routes/Endpoints ์๊ฐ
- Controller, Service, Repository, Store procedure ๊ด๊ณ๋
- DB ์คํค๋ง
- Frontend architecture
-
- React๋ผ๋ฉด Redux pattern์ ์ญํ ์๊ฐ
- ์ค์น ๋ฐฉ๋ฒ
- ์คํ ๋ฐฉ๋ฒ
- ํฅํ ์ถ๊ฐ ํ ๊ธฐ๋ฅ๋ค
์ฌ์ค ์์์ ๋งํ ์ ๋ ๋ผ๋, ์ ํด์ง ํจํด๊ณผ ๋ฒ๊ทธ ์์ด ๋ง๋ค๋ ค๊ณ ํ ์์ฑ๋ ๊ทธ๋ฆฌ๊ณ ์ ๋ ํ ์คํธ ๋ฐ ๋ฌธ์๊น์ง ์์ฑ๋๋ค๋ฉด ๋ฝ์ ์ํฅ์ด ์์ต๋๋ค. ์ด ํฌํธํด๋ฆฌ์ค๋ ์ด๋ ฅ์์ ํฌํจ์์ผ์, ๋์ค์ ์ด๋ ฅ์๋ฅผ ๊ฒํ ํด ๋ณด๋ ์ฌ๋๋ค์ด github repository์ ๊ฐ์ ๋ ๊ตฌ์ง์์ ์ค๋ ฅ๊ณผ ์คํ์ผ์ ํ์ ํ๋๋ฐ ๋ง์ ์ฐธ๊ณ ๊ฐ ๋ ๊ฒ์ ๋๋ค. ๋จ์ ์ฝ๋๋ฅผ ์ฐธ์กฐ๋ ํ๋, ์์ ์ ๊ฒ์ผ๋ก ๋ น์ฌ๋ณด๋ ค๊ณ ํด์ผ ํ๋ฉฐ, ๋ณธ์ธ์ด ์ง์ ๋ง๋ค๊ณ ์ดํดํ ๊ฒ์ด ์๋ ์ด์ ๋ฉด์ ์ ๋ณผ ๋ ์ด๋ฏธ ํ๊ฐ๋ฆ์ด ๋ฉ๋๋ค.
๊ทธ๋ฐ๋ฐ ์๋์ ์ ๊ฐ ์ ์ผ๋ ค๋ ๋ด์ฉ์ ์ถ๊ฐ์ ์ผ๋ก ๋ ํ์ ๊ฒฝ์ฐ ํ๋ฌ์ค ์ ์๊ฐ ๊ฐํด์ง๋ ๊ฒ์ ๋๋ค. ์ ๋ ํํธ๋ง ๋๋ฆฌ๋ ๊ฒ์ผ ๋ฟ ์ฐพ์๋ณด๊ณ ๊ณต๋ถํ๋ ๊ฒ์ ๋ณธ์ธ์ด ์ง์ ํ์๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ง๋ค์ด์ง ๊ฒ์ํ์ ํตํด์ ๋ณธ์ธ์ ์์ญ์ ํ์ฅ์์ผ ๋๊ฐ๋ ๊ฒ์ ๋๋ค.
- ๋ก๊ทธ์ธ/ํ์ ๊ฐ์ ๊ธฐ๋ฅ ์ถ๊ฐ
- Authentication/Authorization ์ถ๊ฐ๋ฅผ ์ํด JWT ( https://jwt.io/ )์ ๊ฐ์ Token์ REST API์ ์ถ๊ฐ ํ๋ ๊ฒ์ ๋๋ค. ์๊ฐ๋ณด๋ค ํฐ ๋ฒ์์ ์์ ์ ๋๋ค. ๋ณด์์ ๊ด๋ จ ์ง์์ ๋ง์ด ์๊ตฌํ์ง๋ง ๊ฐ๋ฐ์ ์์ฑํ๊ณ ๋๋ฉด ์ป๋ ๊ฒ๋ ๋ง๊ณ , ํฐ ํ๋ฌ์ค ์ ์๊ฐ ์์ ๊ฒ์ ๋๋ค.
- HTTPS๋ฅผ ์ํ SSL ์ธ์ฆ์
- REST API์ Swagger ์ ํ๊ธฐ
- REST API์ ๋ฌธ์๋ฅผ ์ํด์๋ ์์ง๋ง, ๋ค์ํ ์ธ์ด์ client๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
- Docker ์์ frontend์ backend๋ฅผ ๋ชจ๋ ํฌํจ์์ผ ๋ณด๋ฉด ์ข์ต๋๋ค.
- BDD ๊ธฐ๋ฐ์ผ๋ก Selenium tests ์์ฑ
- Android/iOS, react native, flutter์ ๊ฐ์ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ ๊ฐ๋ฐSwagger๋ฅผ ์์ฉํด์ ์๋์ผ๋ก ๋ง๋ค์ด์ง REST client๋ฅผ ์ฌ์ฉํด ๋ด ๋๋ค.
- ์ด๋ฏธ REST API๋ฅผ ํตํด์ ๊ฐ๋ฐ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ๋ฅผ ๊ฐ๋ฐํด ๋ณด๋ฉด ์ข์ต๋๋ค. ๋ฌผ๋ก ์ด ํด๋ผ์ด์ธํธ์์๋ ์ ๋ํ ์คํธ๋ ๊ฐ์ด ํฌํจ๋์ด ์์ด์ผ ํฉ๋๋ค.
- ์์ฑ์๊ฐ ์์ฑํ ๊ฒ์๊ธ์ ๋๊ตฐ๊ฐ ๋ง๊ธ์ ๋ฌ๋ฉด Push notification์ด ๋ฐ์ก๋๋ ๊ธฐ๋ฅ ๊ฐ๋ฐ ์ฑ์ ๊ฐ๋ฐํ๋ค๋ฉด Push notification์ ๋ฐ์์ง ์๋ฐ์์ง ์ ํํ ์ ์๊ฒ ํด์ผํฉ๋๋ค.
- Firebase๋ฅผ ์ด์ฉํ๋ฉด ๋ฉ๋๋ค.
- ๋ง์ ์ฌ์ฉ์์ ๊ฒ์๊ธ ์ ์ฆ๊ฐ๋ก ์ธํ ์์คํ Scaling์ ์ด๋ป๊ฒ ํ ์ง ๋์์ธ
- ์ ๋ง ๋ง์ ์ฌ์ฉ์๋ค์ด ๋์ด๋, ๋ง๊ธ Push notification์ ์์ฃผ ๋ง์ด ๋ฐ์กํด์ผ ํ ๊ฒฝ์ฐ ์ด๋ป๊ฒ ํ ์ง ๋์์ธ
์ ์๊ฒฌ์ผ๋ก๋ ์ฒ์๋ถํฐ ์์ฃผ ๊ฑฐ์ฐฝํ ๊ฒ์ ๊ณ ๋ฏผํด์ผ ํ ํ์๋ ์์ต๋๋ค. ๊ด์ฐฎ์ ํ์ฌ์ ๊ฒฝ์ฐ ์น์ด์ด์ผ ํ๋, ์ฑ์ด์ด์ผ ํ๋๋ ์์ฆ์๋ ํฌ๊ฒ ์๋ฏธ๊ฐ ์์ต๋๋ค. ์ ์ ๋ ผ์ ์ ํ์ฌ ์ ์ฅ์์ ์ ๋๋ก ๋ ๊ฐ๋ฐ์๋ฅผ ๋ฝ๋ ํ๋ก์ธ์ค ๋ฐ ๋ง์ธ๋๋ฅผ ๊ฐ์ถ์๋ค๊ณ ํ๋ฉด, ์ ์ ์ ๋ฝ๋๋ฐ ์์ด์ Frontend์ Backend์ ํฌ์ง์ ๋ ๊ทธ๋ ๊ฒ ์ค์ํ์ง ์์ต๋๋ค. ์ผ๋ง๋ ํ๋ก์ ํธ๋ฅผ ๋ง๋๋๋ฐ ๊ณ ๋ฏผํ์๋๊ฐ, ๊ทธ ์์ฑ๋๋ ๊ธฐ๋ฅ๊ณผ ์๊ด์์ด ์ผ๋ง๋ ํํํ๊ฐ. ํ์ค์ ์ฝ๋๋ฅผ ์ง๋๋ผ๋ ์ด ๋ถ๋ถ์ ์ ํํ๊ฒ ์ดํดํ๊ณ ์คํํด ์ฎ๊ฒผ๋๋ ์ ๋๋ค.