Search

Jigsee

๊ธฐ์ˆ ์Šคํƒ
Java
SpringBoot
JPA
SpringSecurity
React.JS
Docker
TypeScript
Jenkins
Redis
MongoDB
MysqlDB
Gerrit
Kubernetes
Fcm
Jira
Swagger
Prometheus
Grafana
Gradle
Notion
Gitlab
MatterMost
HTML
CSS3
JavaScript
Node.js
Next.js
Zustand
Axios
Flutter
๊ธฐ๊ฐ„
2024.04 ~ 2024.05
1 more property

ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ๊ธฐ๊ฐ„

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 ํ™˜๊ฒฝ์—์„œ ์‹œ์Šคํ…œ ์•ˆ์ •์„ฑ๊ณผ ์™„์„ฑ๋„๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ•œ์ง€๋ฅผ ์ฒด๊ฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
๊ณ ๊ฐ์‚ฌ์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ช…ํ™•ํžˆ ํŒŒ์•…ํ•˜๊ณ , ๊ณ ๊ฐ์ด ๊ณ ๋ คํ•˜์ง€ ๋ชปํ•œ ๋ถ€๋ถ„๊นŒ์ง€ ์„ธ์‹ฌํ•˜๊ฒŒ ์งˆ๋ฌธํ•˜๊ณ  ๋ฐ˜์˜ํ•˜๋Š” ๊ณผ์ •์ด ํ”„๋กœ์ ํŠธ ํ’ˆ์งˆ์— ์ง๊ฒฐ๋œ๋‹ค๋Š” ์ ์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค.
์•ž์œผ๋กœ๋„ ๊ณ ๊ฐ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ, ์•ˆ์ •์„ฑ ๋ฐ ์„ฑ๋Šฅ์„ ๊ณ ๋ คํ•œ ๊ฐœ๋ฐœ์„ ์ง€์†ํ•˜๊ณ , ์ธํ”„๋ผ, ๋ณด์•ˆ, ์ตœ์‹  ๊ธฐ์ˆ  ํŠธ๋ Œ๋“œ๊นŒ์ง€ ์Šต๋“ํ•˜์—ฌ ์„ฑ์žฅํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.