ํ๋ก์ ํธ ์งํ ๊ธฐ๊ฐ
2024.04.08 ~ 2024.05.20 (6์ฃผ)
์ด ์ธ์
6๋ช
(BE 3๋ช
/ FE 3๋ช
)
ํ๋ก์ ํธ ์๊ฐ
โข
์ผ์ฑ์ฒญ๋
SW์์นด๋ฐ๋ฏธ ์ฐ์ํ์ผ๋ก ์ ๋ฐ๋์ด ์งํํ ํ๋ก์ ํธ, ์ผ์ฑ SDI ๊ธฐ์
์ฐ๊ณ ํ๋ก์ ํธ
โข
ํ์ฅ์์ ์ฌ์ฉ๋๋ ์ค๋น ๋ถํ 'JIG'์ ๊ด๋ฆฌ ์ฒด๊ณ ๊ฐ์
โป JIG๋?
์ค๋น์์ ์ค๋น ์์ฒด๋ฅผ ๊ณ ์ ํ๊ฑฐ๋ ๋ถํ์ ๊ณ ์ ํ๋ ๋ถํ, ์ฌ๋์ ์๋งํ ํฌ๊ธฐ๋ถํฐ ๋ณผํธ๋งํผ ์์ ํฌ๊ธฐ๊น์ง ๋ค์ํ ์ข
๋ฅ๊ฐ ์๋ค.
โข
์๊ธฐ ๊ด๋ฆฌ ๋ฐฉ์์ ๋ฌธ์ ์ (์๋ชป๋ ํฌ์
, ์ ๊ฒ ๋๋ฝ, ์ด๋ ฅ ๊ด๋ฆฌ ๋ถ์ฌ) ํด์ ํ์
"์๊ธฐ๋ก ๊ด๋ฆฌํ๋ค ๋ณด๋ ์ง๊ทธ ์ด๋ ฅ ๊ด๋ฆฌ๊ฐ ์ด๋ ต๊ณ , ์ค์๋ก ์๋ชป๋ ์ง๊ทธ๊ฐ ํฌ์
๋๋ ์ผ์ด ์๊ฒจ์."
"์ง๊ทธ์ ํ์ง๊ณผ ์์ฐ ์์จ ๊ฐ์ ์ฐ๊ด์ฑ์ ๋ถ์ํ๊ณ ์ถ์ด์."
๐ธ ์ฃผ์ ๊ธฐ์
Backend
โข
Spring Boot, Spring Data JPA
โข
AWS EC2, Docker, Jenkins, MongoDB, Redis, MySQL
โข
Git, GitLab, Notion, Gerrit, Jira, MatterMost
Frontend
โข
TypeScript, Next.js, Zustand, Axios, Flutter
๐ธ ๊ธฐ์ ์ ์ ์ด์
MSA / Kubernetes
ํด๋น ํ๋ก์ ํธ๋ ์์ฐ ๊ณผ์ ๋ฐ ์์จ๊ณผ ์ฐ๊ด๋ ์๋น์ค๋ก์ ๋ฌด์๋ณด๋ค ์์ ์ฑ์ด ์ค์ํฉ๋๋ค. Kubernetes์ ์ง์์ ์ธ ๋ชจ๋ํฐ๋ง๊ณผ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ ์๋ ์ฌ์์ ํน์ ๊ต์ฒด, ๋ก๋ ๋ฐธ๋ฐ์ฑ, ๋ฌด์ค๋จ ๋ฐฐํฌ ๋ฑ์ ํน์ง๊ณผ MSA์ ๋
๋ฆฝ์ ์ธ ํน์ฑ๋ค์ ๊ณ ๋ คํ์ฌ ์ ์ ํ์์ต๋๋ค.
FeignClient
Netflix์์ RestTemplate๋ณด๋ค ํจ์จ์ ์ธ ํต์ ์ ์ํด ์ ์ธ์ ์ ๊ทผ ๋ฐฉ์์ ํ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ํด๋ผ์ด์ธํธ๋ฅผ ์ฝ๊ฒ ๊ตฌ์ถํ๊ณ ์ ์ง ๊ด๋ฆฌํ ์ ์์ด ์ ์ ํ์์ต๋๋ค.
๐ธ ๋ด๋น ์ญํ
โข
API ๋ช
์ธ์ ์์ฑ ๋ฐ ERD ์ค๊ณ
โข
JWT๋ฅผ ํ์ฉํ ๋ก๊ทธ์ธ ๋ฐ ์ธ์ฆ/์ธ๊ฐ ๊ธฐ๋ฅ ๊ตฌํ
โข
Redis, MySQL, MongoDB ๊ด๋ฆฌ ๋ฐ ํ์ฉ
โข
FeignClient๋ฅผ ํ์ฉํ MSA ํต์ ๊ตฌํ
โข
MockMvc๋ฅผ ํ์ฉํ ํตํฉ ํ
์คํธ ์ฝ๋ ์์ฑ
โข
EC2 ์๋ฒ ๋ฐ Docker, Jenkins๋ฅผ ํตํ ์๋ ๋ฐฐํฌ ๊ตฌ์ถ
โข
Jig ์ํ ์กฐํ ๋ฐ ๊ทธ๋ํ API ๊ฐ๋ฐ
โข
MTBF ๊ธฐ๋ฐ Jig ์ ๊ฒ ์ฃผ๊ธฐ ๋ฐ ์๋ช
์์ธก API ๊ฐ๋ฐ
โข
API ํ
์คํธ ๋ฐ ํ๋ก ํธ ์๊ตฌ์ฌํญ ๋ฐ์
โข
CORS ์๋ฌ ๋์
๐ธ ERD
๐ธ ์์คํ ์ํคํ ์ณ
๐ธ ํธ๋ฌ๋ธ์ํ ๋ฐ ๊ณ ๋ฏผ
๋ฌธ์ 1: Response Body๊ฐ Null๋ก ์ค๋ ๋ฌธ์
โข
๋ฌธ์ ์ํฉ
: FeignClient๋ฅผ ํตํด ์ธ๋ถ API๋ฅผ ํธ์ถํ ๋, 404 ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด Response Body๊ฐ ์ ์ง๋๋ ๋ฐ๋ฉด, 401 ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด Body๊ฐ null๋ก ๋์ด์ ์ดํ ๋ก์ง์ด ์ ์์ ์ผ๋ก ๋์ํ์ง ์๋ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค.
โข
์์ธ ๋ถ์
: 401 ์ธ์ฆ ์คํจ ์, Spring Security๋ ์ผ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ธ์ฆ ํ๋ฆ์ ์ ์ดํ๋ ๊ณผ์ ์์ ๋ณด์์ ์ด์ ๋ก ์๋ต Body๋ฅผ ์ ๊ฑฐํ๊ฑฐ๋ ๋ฌด์ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ด Body๊ฐ null๋ก ์ฒ๋ฆฌ๋ ๊ฒ์ผ๋ก ์ถ์ ๋ฉ๋๋ค.
โข
ํด๊ฒฐ ๊ณผ์
: ์๋ฌ ๋ฐ์ ์ ๋ฐํํ๋ ์ํ ์ฝ๋๋ฅผ 401์์ 404๋ก ๋ณ๊ฒฝํ์ฌ, ์๋ฌ ์ํฉ์์๋ Response Body๋ฅผ ํตํด ๊ตฌ์ฒด์ ์ธ ์๋ฌ ์์ธ์ ํ์ธํ ์ ์๋๋ก ์กฐ์นํ์ต๋๋ค.
๐ธ ํ๋ก์ ํธ ๋ฆฌ๋ทฐ
์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ํตํด Docker์ Jenkins๋ฅผ ํ์ฉํ CI/CD ๊ตฌ์ถ์ ๊ฒฝํํ๊ณ , ๋ฐฑ์๋ ์๋ฒ์ ๋ฐฐํฌ ๊ณผ์ ์ ์ค์ตํ ์ ์์์ต๋๋ค.
๋ํ AccessToken ๊ฒ์ฆ๊ณผ Error Response๋ฅผ ์ปค์คํฐ๋ง์ด์งํ๋ฉฐ Spring MVC์ Request Life Cycle ๊ฐ๋
์ ๊น์ด ์ดํดํ ์ ์์์ต๋๋ค.
MSA ์ํคํ
์ฒ์ Kubernetes๋ฅผ ์ ์ฉํ๋ฉด์ ๋คํธ์ํฌ ๋จ์์์ ์ด์ ์ฑ๋ฅ, ํจ์จ์ฑ, ๋ณด์์ฑ ๋ฑ์ ๊ณ ๋ คํด์ผ ํจ์ ๋ฐฐ์ ๊ณ , ๋จ์ ๊ธฐ๋ฅ ๊ตฌํ์ ๋์ด ์์คํ
์ ์ฒด๋ฅผ ์ค๊ณํ๊ณ ์ต์ ํํ๋ ์์ผ๋ฅผ ๊ธฐ๋ฅผ ์ ์์์ต๋๋ค.
์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ํตํด B2B ํ๊ฒฝ์์ ์์คํ
์์ ์ฑ๊ณผ ์์ฑ๋๊ฐ ์ผ๋ง๋ ์ค์ํ์ง๋ฅผ ์ฒด๊ฐํ ์ ์์์ต๋๋ค.
๊ณ ๊ฐ์ฌ์ ์๊ตฌ์ฌํญ์ ๋ช
ํํ ํ์
ํ๊ณ , ๊ณ ๊ฐ์ด ๊ณ ๋ คํ์ง ๋ชปํ ๋ถ๋ถ๊น์ง ์ธ์ฌํ๊ฒ ์ง๋ฌธํ๊ณ ๋ฐ์ํ๋ ๊ณผ์ ์ด ํ๋ก์ ํธ ํ์ง์ ์ง๊ฒฐ๋๋ค๋ ์ ์ ๋ฐฐ์ ์ต๋๋ค.
์์ผ๋ก๋ ๊ณ ๊ฐ ์ค์ฌ์ ๊ฐ๋ฐ, ์์ ์ฑ ๋ฐ ์ฑ๋ฅ์ ๊ณ ๋ คํ ๊ฐ๋ฐ์ ์ง์ํ๊ณ , ์ธํ๋ผ, ๋ณด์, ์ต์ ๊ธฐ์ ํธ๋ ๋๊น์ง ์ต๋ํ์ฌ ์ฑ์ฅํ๋ ๊ฐ๋ฐ์๊ฐ ๋๊ณ ์ถ์ต๋๋ค.