๐ข JIRA์ Ticket ์์คํ ๊ณผ Github์ Commit ๋ก๊ทธ ์์คํ ์ ํฉ์น ์ ๋ฌด ๊ด๋ฆฌ ์์คํ
- Task : ํ๋์ Task์์ ํ๋ณ ์นดํ ๊ณ ๋ฆฌ(๋ง์ผํ ํ, FEํ, BEํ, UI/UXํ) ์์ฑ์ด ๊ฐ๋ฅํ๊ณ , ๊ฐ ์นดํ ๊ณ ๋ฆฌ์ ๊ด๋ฆฌ์๊ฐ Task๋ฅผ ์ดํํ๊ธฐ ์ํ Ticket์ ์์ฑํฉ๋๋ค.
- Ticket ์์คํ : ํ์์ ์ํ๋ ํฐ์ผ์ ๊ฐ์ ธ๊ฐ ์ด๋ฅผ ์ดํํฉ๋๋ค. ๊ด๋ฆฌ์์ Ticket ๋ฆฌ๋ทฐ๊ฐ ๋๋ ๊ฒฝ์ฐ, ๊ฐ์ธ์ ํฐ์ผ๋ก๊ทธ์ ๋ฐ์๋ฉ๋๋ค.
- Ticket ์ ์ ์์คํ : ์ค์๋, ๋์ด๋ ๋ฑ์ ๋ฐ๋ผ ์ ์๊ฐ ๋งค๊ฒจ์ ธ์๊ณ ์ฌ์ฉ ๋๋ ํฐ์ผ๋ก๊ทธ์ ๋ฐ์๋ฉ๋๋ค.
์ ๋ฌด ์ํ์ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ์ฑ๊ณผ๋ฅผ ์ธก์ ํ ์ ์์ต๋๋ค.
๐ฑ๏ธ๋ธ๊น ์๋น์ค ์ด์ฉํ๊ธฐ
๐ฑ๏ธ๋ธ๊น ๋ ธ์
๐ป๊ฐ๋ฐ ๊ธฐ๊ฐ: 2023๋ 3์ 10์ผ ~ 2023๋ 4์ 20์ผ
๐ฉโ๐ผ์ด์ ๊ธฐ๊ฐ: 2023๋ 4์ 17์ผ ~ 2023๋ 4์ 29์ผ
React
๋์ ์ฌ์
1. State ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ๋ฐ์์ฑ ์ ์ง. 2. ํจ์ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ ์ปดํฌ๋ํธ ์ฌ์ฌ์ฉ์ฑ ์ฆ๋.
- ํ์ฌ ํ๋ก์ ํธ ์ํ๋ง ๋ณด๋ฉด recoil์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ง์ผ๋, ์ต์ข ์ ์ผ๋ก ๋ง๋ค๊ณ ์ ํ๋ ํ๋ก๋ํธ๋ B2B SaaS์ด๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ตญ ํ๋ก๋ํธ์ ๊ท๋ชจ๋ ๊ต์ฅํ ์ปค์ง ์์ ์ ๋๋ค. ๋ฐ๋ผ์, ์ด๋ฐ์ ์์ฑํด์ผ ํ ์ฝ๋๊ฐ ์ข ์๊ฒ ์ง๋ง, ๋์ค์ ์ค์ผ์ผ์ ์ ๋ํ ์ ๋์ฑ์ ๊ณ ๋ คํด๋ณธ๋ค๋ฉด redux๋ก ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ณ๋ค๊ณ ํ๋จํ์ต๋๋ค.
Redux
๋์ ์ฌ์
ํด๋ผ์ด์ธํธ์ state ๊ด๋ฆฌ ๋ฐ Provider pattern์ ์ด์ฉํ ์ปดํฌ๋ํธ ๊ฐ ๋ถํ์ํ ์์กด์ฑ์ ์ ๊ฑฐํ๊ณ ์ฌ์ฌ์ฉ์ฑ ํ๋ณด.
redux, recoil, zustand ๋ฑ
Typescript
๋์ ์ฌ์
1. type์ ํตํ ์์ ์ฑ ํ๋ณด.
2. ๋ฏธ์ฒ ์ก์๋ด์ง ๋ชปํ ์๋ฌ ๋๋ฒ๊น .
3. ์๋์์ฑ ๊ธฐ๋ฅ.
styled-components
๋์ ์ฌ์
1. ์ธ๋ถ ํ๊ฒฝ๋ณํ์ ๋ฐ๋ฅธ ์ ๋์ ๋์ฒ๊ฐ ๊ฐ๋ฅ.
2. ํจ์ ์ปดํฌ๋ํธ์ ์ฌ๋ฌ props๋ฅผ ์ ๋ฌํ๋๋ผ๋ ๋ณต์กํ optional rendering์ ์ ์ดํ ์ ์์.
3. ์ ์ญ์ ์ผ๋ก ์คํ์ผ๋ง์ ๋ํ ์ฑ ์์ ๋ด๋นํ๊ณ ์ฑ ์์ ๋ถ์ฌ.
TailwindCSS
๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ฉ๋ CSS ํ๋ฆฌ์ ์ด ์์ด ๊ฐํธํ๋ค๋ ์ฅ์ ์ด ์์ง๋ง, props๋ฅผ ํตํด optionalํ๊ฒ CSS๋ฅผ ์ ์ฉํ ๊ฒฝ์ฐ, ๊ฐ๋ ์ฑ์ด ํฌ๊ฒ ๋จ์ด์ง๋ค๋ ๋ฌธ์ ์ ์ด ์์ต๋๋ค. ๋ํ, ์ด๊ฒ๊ณผ ๋๋ถ์ด ์ ์ญ์ ์ธ style ์ ์ฉ์๋ ์ด๋ ค์์ด ์์ต๋๋ค. ๊ฒฐ๊ตญ, ์ธ๋ถํ๊ฒฝ์ ๋ณํ์ ์ ๋์ ์ผ๋ก ๋์ฒํ๋ฉฐ, ๋ณต์กํ๊ณ ์์ธํ CSS๋ฅผ ์ ์ฉํ๊ณ ์ styled-components๋ฅผ ์ฑํํ์์ต๋๋ค.
react-hook-form
๋์ ์ฌ์
1. ๊ฐํธํ ์ปค์คํ validation ๋ฐ errorMessage ๋ ๋๋ง.
2. ์๋์ ์ผ๋ก ์งง์์ง๋ ์ฝ๋ ๊ธธ์ด์ ๋์์ง๋ ํจ์ ์ปดํฌ๋ํธ์ ๊ฐ๋ ์ฑ ํ๋ณด.
Prettier + ESLint (CodeConvention)
๋์ ์ฌ์
1. ํ์๊ด๋ฆฌํด์ ์ด์ฉํ๋ฉฐ, ํ์๊ณผ ์ฝ๋๋ฅผ ๋๊ธฐํํ๋ ๊ณผ์ ์์ conflict๋ฅผ ์ต์ํํ๊ณ ์ ํจ์ ๋๋ค.
2. conflict์ ๋ฌธ์ ๋ฅผ ๋ ๋, ํ์ธ๊ณผ ํ์ ์ ํ๋ ์ํฉ์์ , codeConvention์ ํต์ผํด์ผํฉ๋๋ค. ํด๋น ์ฝ๋์ ์ ์ง๋ณด์์ ํ์ฅ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด, ์ต์ํ์ โ๊ฐ๋ ์ฑโ๊ณผ ๊ท์น์ด ์ ์ ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋์๊ฐ, ๋ ๋์ ๋ณ์๋ช ์ ๊ณ ๋ฏผํ๊ณ , ๊พธ์คํ ํด๋ฆฐ์ฝ๋์ ๋ฆฌํฉํฐ๋ง์ ์งํํ๋ ๊ฒ์ ์ต๊ดํ ํด์ผํฉ๋๋ค. ๋ด๊ฐ ์์ฑํ๋ ์ฝ๋๋ ๋ถ์ฑ๊ฐ ์๋ ๊ธฐ์ ์ด ๋์ด์ผํฉ๋๋ค.
husky (CommitConvention)
๋์ ์ฌ์
- ์ปค๋ฐ ๋ก๊ทธ๋ง ๋ณด๋๋ผ๋, ์ด๋ค ์์ ์ ํ๋์ง ์ ์ ์์ด์ผ ํฉ๋๋ค. ํนํ, ํ์ธ๊ณผ์ ํ์ ์์ commit convention์ ์งํค๊ณ , ์ค์ commit ๋ด์ญ๊ณผ commit ๋ฉ์์ง๋ฅผ ์ผ์นํด์ผ ํจ์ ์ธ์ํด์ผํฉ๋๋ค.
Vercel (Deploy)
๋์ ์ฌ์
- ์๋ ๊ณํ์๋ AWS S3๋ก ๋ฐฐํฌ ํ, github action์ ์ด์ฉํด CI/CD๋ฅผ ๊ตฌ์ถํ๊ณ ์ ํ์์ต๋๋ค. ๋ค๋ง, ์ฌ๋ฌ๊ฐ์ง ๋ฌธ์ ์ ์ด ๋ฐ์ํ์ฌ, ์์ฒด์ ์ผ๋ก CI/CD ๋ฐ deploy๋ฅผ ์ ๊ณตํ๋ Vercel์ ์ฑํํ์์ต๋๋ค. ์ถํ, ์์ ํ๊ฒฝ์ผ๋ก migration ์์ ์ ๋๋ค.
JEST + rtl
๋์ ์ฌ์
- PR์ ๋ ๋ฆฌ๊ธฐ ์ , ๋ณธ์ธ์ด ์์ฑํ ์ฝ๋์ sideEffect๋ฅผ ์ ์ ์๋ ๋๊ตฌ์ ๋๋ค. ์์ ๊ฐ์ ์ด์ ๋ก, testCode๋ฅผ ๋ง์ด ์์ฑํ์ง๋ ๋ชปํ์ง๋ง, ์ถํ ์ปดํฌ๋ํธ ๋จ์์ ํ ์คํธ์ฝ๋๋ฅผ ์ ๋ถ ์์ฑํ ์์ ์ ๋๋ค.
- ์ธ์ ์ statefulํ ์ธ์ฆ ๋ฐฉ์์ผ๋ก ์๋ฒ์ ์ธ์ ์ ๋ณด๋ฅผ ์ ์ฅํ์ฌ ์ธ์ฆ์ ์ ์งํ๊ธฐ ๋๋ฌธ์ ์๋ฒ์ ํ์ฅ์ฑ์ ๋ฎ์ถ๊ณ , ์๋ฒ์ ์ ์ฅ๋ ์ธ์ ์ ๋ณด๊ฐ ๋ง์์ง๋ฉด ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ ๋ถํ๊ฐ ์ปค์ง๊ณ ์๋ฒ์ ์์ ์ฑ์๋ ์ํฅ์ ์ค ์ ์์ต๋๋ค.
- ํ๋ก์ ํธ์ ํน์ฑ์ ๋ค์์ ์ฌ์ฉ์๊ฐ ๋์์ ์ ์ํ๋ ๊ฒฝ์ฐ ์๋ฒ์ ๋ถํ๊ฐ ํฌ๊ฒ ์ฆ๊ฐํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๋๊ท๋ชจ ์ฌ์ฉ์๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ ๊ฒฝ์ฐ์๋ ๋ถ์ฐ ์บ์๋ ๋ค๋ฅธ ๊ธฐ์ ์ ์ด์ฉํ๋ ๊ฒ์ด ๋์ฑ ํจ๊ณผ์ ์ด๋ผ๊ณ ์๊ฐํด์ redis๋ฅผ ์ ํํ์ต๋๋ค
JWT + Redis ํ ํฐ ๋ฐฉ์
๋์ ์ฌ์
- ํ ํ์์ ๋ค์ค ํด๋ผ์ด์ธํธ๋ฅผ ์ด์ฉํ ๋์์ ์ ์ ์ด๋ฅผ ํ๊ธฐ ์ํด์ ์ธ์ ์ ๋์ ํ ๊ฒ์ธ๊ฐ, ๋ง ๊ฒ์ธ๊ฐ์ ๋ํด ํ์๋ฅผ ํด์ผ ํ์ต๋๋ค.
์ธ์ / REDIS
- Spring Data JPA๋ ๊ฐ์ฒด-๊ด๊ณ ๋งคํ(Object-Relational Mapping) ๊ธฐ์ ์ ์ ๊ณตํ์ฌ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ์ฒด๋ฅผ ๋งคํํ์ฌ ๊ฐ๋ฐ์ ์ฉ์ดํ๊ฒ ํด์ฃผ๋ ํ๋ ์์ํฌ์ ๋๋ค. ํ์ง๋ง, JPA๋ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋ ์ฑ๋ฅ ์ด์๊ฐ ์์ ์ ์์ต๋๋ค.
- B2B SaaS ์๋น์ค์์ ์ ์ ์ ์ด๋ฅผ ์ํด Redis๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์, Refresh Token๊ณผ ๊ฐ์ด ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ์์ ํ๊ฒ ์ ์ฅํ๊ณ , ๋น ๋ฅธ ์๋๋ก ๋์ฉ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํจ์ ๋๋ค. Redis๋ฅผ ์ด์ฉํ๋ฉด, Refresh Token์ ์์ ํ๊ฒ ์ ์ฅํ๊ณ , ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ผ๋ฉฐ, ์ฑ๋ฅ์ด ๋ฐ์ด๋๋ฏ๋ก ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
- ๋ํ Redis๋ ๋์ ์ฑ๋ฅ, ๋ถ์ฐ ์์คํ , ์บ์ ๋ฑ์ ์ด์ ์ ์ ๊ณตํด ํ์ฅ๊ฐ๋ฅ์ฑ๋ ๋ฐ์ด๋ฌ๊ณ , ๋ฐ์ดํฐ ์์ ์ฑ๊ณผ ์๋น์ค ์ฑ๋ฅ ํฅ์์ ํจ๊ณผ์ ์ด๊ธฐ์ ์ ํํ์ต๋๋ค.
Redis
๋์ ์ฌ์
- ์ ์ ์ ์ด๋ฅผ ์ํด REFRESH TOKEN ๊ด๋ฆฌ ํ์
SPRING DATA JPA / REDIS
- ์ด๋ฏธ์ง์ ์ด๋๋ถ๋ถ ๋๋ฌธ์ docker container๋ฅผ ํ์ฉํด Elastic Clound๋ฅผ ์ ์ฉ์ํค๋ ค๊ณ ํ์ผ๋, ํ์ ์ ์ธ ๋น์ฉ๊ณผ ์ฃผ ๋ชฉ์ ์ธ ์ ๋ฌดํ๊ณผ ํฐ์ผ ํ์ด์ง์๋ ๊ธฐ๋ณธ์ ์ธ CI/CD๋ฅผ ํ์ฉํ๋ ๊ฒ์ด ๋ ๋ง๋ค๊ณ ํ๋จํ์ฌ ๊ฒฐ์ ํ์ต๋๋ค.
- jenkins, Travis๋ ์์ฃผ ๊บผ์ง๋ค๋ ์ด์๋ก ์์ ์ ์ธ ์๋ฒ ๊ตฌ์ถ์ ์ํด CI๋ก๋ github action์ ์ ํํ์ต๋๋ค.
- codeDeploy๋ฐฐํฌ ํ ์ ๋ฐ์ดํธ๋ฅผ ์งํํ ๋๋ง๋ค ์๋ฒ๊ฐ ๋ด๋ ค๊ฐ๋ ๋ถ๋ถ์ ๊ณ ๋ฏผํ๋ค, ๊ฐ๋์ฑ๊ณผ ์ ๊ทผ์ฑ์ด ์ข์ Nginx๋ฅผ ์ ํํ๊ฒ ๋์์ต๋๋ค.
- ๋ก๋๋ฐธ๋ฐ์ฑ์ ๋ธ๋ฃจ ๊ทธ๋ฆฐ์ ์ด์ฉํ์ฌ ์๋ฒ๋ฅผ ์ฌ๋ฌ๊ฐ ๋์์ ์คํ ์ค์ผ์ผ๋ง์ ์ฌ์ฉํ๋ ค๊ณ ํ์ผ๋, ๋น์ฉ์ ์ธ ๋ฌธ์ ๋ก ์ผ๋ฐ์ ์ ํํ์์ต๋๋ค.
NGINX
๋์ ์ฌ์
- CI/CD ๋ฌด์ค๋จ ๋ฐฐํฌ
- ๊ธฐ์ ๊ฐ๋ฐ๊ณผ ์ค ์๋น์ค ์ด์ฉ์๋ค์ด ์ ๋ฐ์ดํธ๋ฅผ ํ ๋๋ง๋ค ์๋ฒ๊ฐ ๋์ด์ง์ง ์๊ณ ์ ์ฉํ๊ธฐ ์ํด ํ์
github action, docker, jenkins, Travis s3, codeDeploy, Redis, Nginx, Apache, Load Balancing
- ์๋ฅผ ๋ค์ด Mapping framework์๋ ์ ํฌ๊ฐ ์ฌ์ฉํ Mapstruct์ธ์๋ ์๋ฐ ์๋ ๋ณํ, ModelMapper, Orika, Dozer๋ฑ๊ณผ ๊ฐ์ ๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ํธํ์ฑ์ด๋ ๋ฆฌํ๋ ์ ๊ฐ์ ๊ธฐ์ ์ ์ธ ๋ถ๋ถ์ ์ ์ธํ๊ณ ๋, ์ง์์ด ์ค๋๋๊ฑฐ๋ ์ค๋จ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ๋ ํผ๋ฐ์ค๊ฐ ๋ถ์กฑํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฅ์ ์ด ๋ง์๋ ์ฌ์ฉํ์ง ์๋๋ก ํ๊ธฐ๋ก ํ์ต๋๋ค.
MapStruct
๋์ ์ฌ์
- ๋ฏธ๋์งํฅ์ ์ฌ๊ณ
- ํ๋ก์ ํธ์ ํ์ฌ๋ง ๋ณด๊ณ ๋ฌ๋ฆฌ์ง ์๊ธฐ ์ํด ์ง์์ด ์ค๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฒฝ์ฐ ์ฐ์ง ์๊ธฐ๋ก ํ์์ต๋๋ค.
๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ์์์ github action์ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํจ์ ๋ฐ๋ผ, ์ธ์คํด์ค์ VM์ต์ ์ ์ฃผ์ด์ ๊ฐ๋ํด์ผํ๋ jasypt๋ฐฉ์ ๋์ ์ ๊นํ๋ธ ์ก์ ์์ ํ๋กํผํฐ๋ฅผ ๊ด๋ฆฌํ๊ธฐ๋ก ํ์์ต๋๋ค.
Git hub Action
๋์ ์ฌ์
- properties ๊ด๋ฆฌ
- ์ด๋ป๊ฒ ํด์ผ properties๋ฅผ ๋น๋กฏํ ๋ฐฑ์๋ ๋ณด์ ์ด์์ ๋ ๋ฏผ๊ฐํ๊ฒ ๋์ฒํ ์ ์์๊น ์๊ฐํ์์ต๋๋ค.
GITHUB ACTION / jasypt
| ํฌ์ง์ | ์ด๋ฆ | ๊นํ๋ธ ์ฃผ์ |
|---|---|---|
| FE | ๊น๋ํ | https://github.com/pengooseDev |
| FE | ๋ฐ์งํ | https://github.com/Taffymark1 |
| BE | ์กฐ์์ค | https://github.com/choincnp |
| BE | ๋ฐํ์ | https://github.com/aihtnyc-h |
| BE | ๋ฐ์ฑ๋ฏผ | https://github.com/seongminnnn |