- ์ฝ์ํธ ์์ฝ ์๋น์ค ๊ตฌํํ๊ธฐ
- ๋๊ธฐ์ด ์์คํ ์ ๊ตฌ์ถํ๊ณ , ์์ฝ ์๋น์ค๋ ์์ ๊ฐ๋ฅํ ์ ์ ๋ง ์ํํ ์ ์๋๋ก ํด์ผํฉ๋๋ค.
- ์ฌ์ฉ์๋ ์ข์์์ฝ ์์ ๋ฏธ๋ฆฌ ์ถฉ์ ํ ์์ก์ ์ด์ฉํฉ๋๋ค.
- ์ข์ ์์ฝ ์์ฒญ์์, ๊ฒฐ์ ๊ฐ ์ด๋ฃจ์ด์ง์ง ์๋๋ผ๋ ์ผ์ ์๊ฐ๋์ ๋ค๋ฅธ ์ ์ ๊ฐ ํด๋น ์ข์์ ์ ๊ทผํ ์ ์๋๋ก ํฉ๋๋ค.
ํ์ฌ๋ ๋ชจ๋๋ฆฌ์์ผ๋ก ๊ตฌ์ฑ๋์ด application layer์์ ๋ชจ๋ ๋น์ฆ๋์ค ๋ก์ง ๋ฐ ํธ๋์ญ์ ์ ์ฒ๋ฆฌํ๊ณ ์์ต๋๋ค. ํ์ฌ ์ํ์์๋ ํฐ ๋ฌธ์ ๋ ์์ผ๋, ์๋น์ค ๊ท๋ชจ์ ๋ฐ๋ผ ํ์ฅ์ด ํ์ํด์ง๊ฑฐ๋ ํธ๋ํฝ์ด ๋ฐ์ํ ๊ฒฝ์ฐ, ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ ์๋น์ค๊ฐ ์ผ๋ถ ์กด์ฌํฉ๋๋ค.
ํธ๋์ญ์
๋ถ์์ด ํ์ํ ์๋น์ค
์๋ ๋์ดํ ๋ ์๋น์ค๋ ์ฌ๋ฌ api๋ก ์ด๋ฃจ์ด์ ธ ์๊ฑฐ๋, ๋จ์ผ DB ํธ๋์ญ์
๊ณผ๋ ๋ฌด๊ดํ๋ฉด์ ๋๊ธฐ์๊ฐ์ด ๊ธด ๋น์ฆ๋์ค ๋ก์ง์ด ํฌํจ๋์ด ์์ต๋๋ค.
- ์ข์ ์์ฝ ๋ฐ ํ์ ์๋น์ค
- ํฌ์ธํธ ์ถฉ์ ์๋น์ค
์ข์ ์์ฝ ๋ฐ ํ์ ์๋น์ค
- ์ด ๋ ์๋น์ค๋ DB์ ๋ถํ๋ฅผ ๋ง๊ธฐ์ํด ๋๊ธฐ์ด ์์คํ ์ด ์ ์ฉ๋์ด ์์ต๋๋ค. ์ฆ, ์์ฝ ์์ฑ/ํ์ ์ธ๋ก, ๋๊ธฐ์ด ํ ํฐ ์์ฑ ๋ฐ ์์ ํ์ธ์ ์ํํ๋ api๋ฅผ ๋ณ๋๋ก ์ํํด์ผํฉ๋๋ค.
- ์ข์ ์์ฝ ๋ฐ ํ์ ์๋น์ค์ ๋์ ํ๋ก์ธ์ค๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ํ ํฐ ์์ฑ -> ํ ํฐ ์์ ํ์ธ -> ์์ฝ ์์ฑ or ์์ฝ ํ์
- ํ ํฐ ์์ฑ๊ณผ ํ ํฐ ์์ ํ์ธ์ ๋๋ฉ์ธ ์ธก๋ฉด์์๋ ์์ฝ ์์ฑ ๋ฐ ํ์ ๊ณผ๋ ๋ฌด๊ดํ ๋น์ฆ๋์ค ๋ก์ง์ด๋ฉฐ, ๋ณ๋์ ํธ๋์ญ์ ์ผ๋ก ๋์ํ๊ณ ์์ต๋๋ค.
- ์ข์ ์์ฝ ๋ฐ ํ์ ์ ๊ณตํต์ผ๋ก ๋ฐ์ดํฐ ๊ฒ์ฆ ๋ฐ ์์ฑ์ ๊ณผ์ ์ ๊ฑฐ์นฉ๋๋ค.
- ๋ ๊ฐ์ง ํ๋ก์ธ์ค๋ ๋์ผํ ๋๋ฉ์ธ ๋ก์ง์ ์ํํ๊ณ ์์ผ๋, ๋ฐ์ดํฐ ์์ฑ์ ๊ฒฝ์ฐ, ๋น๊ต์ ํธ๋์ญ์ ๋๊ธฐ์๊ฐ์ ๋๋ฆฌ๋ ์์๊ฐ ๋ ์ ์์ต๋๋ค.
- ๋ฐ๋ผ์, ์ข์ ์์ฝ ๋ฐ ํ์ ์๋น์ค์ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ ๊ฒ์ฆ๊ณผ ์์ฑ์ ํ๋์ ํธ๋์ญ์ ์ผ๋ก ๋ฌถ์ด์ ์ฒ๋ฆฌํ๋, ๋ฐ์ดํฐ ์์ฑ์ ๊ฒฝ์ฐ ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌํ์ฌ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋๋ก ์ฒ๋ฆฌํ์ฌ ์ฌ์ฉ์ ์๋ต์๊ฐ์ ์ค์ฌ๋ณด๊ฒ ์ต๋๋ค.
ํฌ์ธํธ ์ถฉ์ ์๋น์ค
- ํฌ์ธํธ ์ถฉ์ ์๋น์ค์ ๋์ ํ๋ก์ธ์ค๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ฌ์ฉ์ ๊ฒ์ฆ -> ํฌ์ธํธ ๊ฒ์ฆ -> PG๊ฒฐ์ ์น์ธ -> ํฌ์ธํธ ์ถฉ์ -> ํฌ์ธํธ ์ด๋ ฅ ์์ฑ
- ํฌ์ธํธ ์ถฉ์ api์ ๊ฒฝ์ฐ, PG ๊ฒฐ์ ์น์ธ๊ณผ ๊ฐ์ DB ํธ๋์ญ์ ๊ณผ๋ ๋ฌด๊ดํ์ง๋ง, ์๋ต์๊ฐ์ด ๊ธด ๋น์ฆ๋์ค ๋ก์ง์ด ํฌํจ๋์ด ์์ต๋๋ค.
- PG ๊ฒฐ์ ์น์ธ DB ํธ๋์ญ์ ๊ณผ ๋ฌด๊ดํ์ง๋ง, ํฌ์ธํธ ์ถฉ์ ์๋น์ค์๋ ๊ผญ ํ์ํ ๊ธฐ๋ฅ์ด๋ฏ๋ก ํด๋น ๋น์ฆ๋์ค ๋ก์ง์ ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌํ์ฌ, ์ฌ์ฉ์ ์๋ต์๊ฐ์ ๊ฐ์ ํด๋ณด๊ฒ ์ต๋๋ค.
๊ฒํ ํด์ผํ ๋ถ๋ถ
- ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌํ๋ฉด ๊ธฐ์กด์ TransactionManager์ ํธ๋์ญ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฏ๋ก, ์ด์ ๋ํ ์ ์ ํ ๋ณด์ ํธ๋์ญ์ ์ด ํ์ํฉ๋๋ค.
- ๋๋ถ๋ถ์ ๋น์ฆ๋์ค ๋ก์ง์ด JPA์ ์์์ฑ ์ปจํ
์คํธ๋ฅผ ํ์ฉํ๊ณ ์๋๋ฐ, ํธ๋์ญ์
๋ถ๋ฆฌ ๋ฐ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ก ์ธํด ๊ธฐ์กด ์์์ฑ ์ปจํ
์คํธ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ๋ฐ๋ผ์, ์์ ํน์ ์ธ๋ถ ํธ๋์ญ์ ์ผ๋ก ๋ถ๋ฆฌํ ๊ฒฝ์ฐ, ๊ธฐ์กด์ ์์์ฑ ์ปจํ ์คํธ์ ๊ด๋ฆฌ๋ฅผ ๋ฐ๋ ์ํฐํฐ์ ์ฐ๊ด ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ๋ก๋ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- (๋๋ถ๋ถ ๋ฐ์ดํฐ ๊ฒ์ฆ์ ํ๋ ๊ณผ์ ์์ ํ์ํ ๋ฐ์ดํฐ๋ ๋ฏธ๋ฆฌ ๋ก๋ฉํ๊ฒ ๋ฉ๋๋ค.)
-
- ํธ๋์ญ์ ๋ฒ์๋ฅผ ์ค์ด๋, ๊ธฐ์กด์ ๋ฝ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ์ง ์๋๋ก ์ฃผ์ ํด์ผํฉ๋๋ค.
- ๋๊ธฐ์ด์ ํ ํฐ์ ๋ฐ๊ธ๋ฐ์ ์์๋๋ก ์ฒ๋ฆฌ๋๋ ์์คํ ์ ๋๋ค.
- ํ ํฐ ๋ฐ๊ธ ์์ฒญ์ด ๋ค์ด์ค๋ฉด, ํด๋น ํ ํฐ์ ๋๊ธฐ์ด์ ์ถ๊ฐ๋ฉ๋๋ค.
- ๋๊ธฐ์ด์์ ํ ํฐ์ ํ์ธํ ์ ์๋ API๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ๋๊ธฐ์ด์ด ์กด์ฌํ๋ ์ด์ ๋ ํธ๋ํฝ์ด ๋ชฐ๋ ธ์๋ ๋จ์ผ ์คํจ์ง์ ์ด ๋ ์ ์๋ DB์ ๋ถํ๋ฅผ ์ค์ด๊ธฐ ์ํจ์ ๋๋ค.
'์์ฝ ์์ฒญ'์ ์๋ก ๋ค๊ฒ ์ต๋๋ค.
- ํด๋ผ์ด์ธํธ์์ '์์ฝํ๊ธฐ' ๋ฒํผ์ ํด๋ฆญ
- ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก 'ํ ํฐ๋ฐ๊ธ api' ํธ์ถ
- ์๋ฒ์์ ํ ํฐ์ ๋ฐ๊ธ๋ฐ๊ณ , ํด๋น ํ ํฐ์ ๋๊ธฐ์ด์ ์ถ๊ฐ
- ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก '๋๊ธฐ์ด ํ์ธ api' ํธ์ถ
- ์๋ฒ์ ๋๊ธฐ์ด์ ๊ณต๊ฐ์ ๋๊ธฐ๋ฉด 429 Too Many Requests ์๋ฌ๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌ
- ๋๊ธฐ์ด์ด ๊ฝ์ฐจ์ง ์์๋ค๋ฉด, ๋๊ธฐ์ด์์ ํ ํฐ์ ํ์ธํ๊ณ , ํ ํฐ์ด ๋๊ธฐ์ด์ ์๋์ง ํ์ธ
- ์๊ฑฐ๋ ์ฌ์ฉ์๊ฐ ์์ ํ ํ ํฐ๊ณผ ๋ค๋ฅธ ์ ๋ณด๋ผ๋ฉด ์ค๋ฅ ๋ฉ์์ง๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌ
- ํ ํฐ์ด ๋๊ธฐ์ด์ ์๋ค๋ฉด, ํด๋น ํ ํฐ์ด ์ ์ผ ์์ ์กด์ฌํ๋์ง ํ์ธ
- ์ ์ผ ์์ ์กด์ฌํ๋ค๋ฉด, ํ ํฐ์ ๋๊ธฐ์ด์์ ์ ๊ฑฐํ๊ณ , ์์ฝ์ ์งํ
- ๊ทธ๊ฒ ์๋๋ผ๋ฉด ์ฝ๊ฐ์ ๋๊ธฐํ ์ ์ฃผ๊ณ ํ ํฐ ํ์ธํ๊ธฐ api๋ฅผ ์ฌ์๋
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง์ ์ ์ ํ ์ธ๋ฑ์ค๋ฅผ ๊ตฌ์ฑํ๋ฉด, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์บ ๋ฒ์๋ฅผ ์ต์ํํ์ฌ ๋น ๋ฅธ ์กฐํ ์ฑ๋ฅ์ ๊ธฐ๋ํ ์ ์์ต๋๋ค.
- ์ ์ ํ ์ธ๋ฑ์ค๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด์ , ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์นด๋๋๋ฆฌํฐ์ ๋ฐ์ดํฐ ๋ถํฌ๋์ ํน์ฑ์ ํ์ ํด์ผ ํฉ๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์นด๋๋๋ฆฌํฐ๋ ํด๋น ์ปฌ๋ผ์ ์ค๋ณต๋์ง ์๋ ๊ฐ์ ๊ฐ์๋ฅผ ์๋ฏธํฉ๋๋ค. ์นด๋๋๋ฆฌํฐ๊ฐ ๋์์๋ก, ๋ฐ์ดํฐ์ ์ค๋ณต์์น๊ฐ ๋ฎ์ต๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ ๋ถํฌ๋๋ ํด๋น ์ปฌ๋ผ์ ๋ฐ์ดํฐ๊ฐ ์ผ๋ง๋ ๊ท ๋ฑํ๊ฒ ๋ถํฌ๋์ด ์๋์ง๋ฅผ ์๋ฏธํฉ๋๋ค.
- ๋ฐ์ดํฐ ๋ถํฌ๋๋ฅผ ๋ํ๋ด๋ ๊ณต์์ ๋๋ต
1/๊ณ ์ ๋ฐ์ดํฐ ๊ฐ์ * 100
์ ๋๋ค. - ๊ทธ๋์ ์ผ๋ฐ์ ์ผ๋ก "๋ถํฌ๋๊ฐ ์ข๋ค"๋ผ๋ ํํ์ ์นด๋๋๋ฆฌํฐ๊ฐ ๋์ ๊ฒฝ์ฐ๋ฅผ ์๋ฏธํฉ๋๋ค.
- ๋ฐ์ดํฐ ๋ถํฌ๋๋ฅผ ๋ํ๋ด๋ ๊ณต์์ ๋๋ต
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์นด๋๋๋ฆฌํฐ์ ๋ฐ์ดํฐ ๋ถํฌ๋๋ฅผ ํ์ ํ์ฌ, ์ ์ ํ ์ธ๋ฑ์ค๋ฅผ ๊ตฌ์ฑํด๋ณด๊ฒ ์ต๋๋ค.
ํ ์ด๋ธ ๋ณ๋ก, ์ปฌ๋ผ์ ์นด๋๋๋ฆฌํฐ ๋ด๋ฆผ์ฐจ์์ผ๋ก ๋์ดํ๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
-- `users` ํ
์ด๋ธ
`id`, `point_id`
-- `points` ํ
์ด๋ธ
`id`, `create_time`, `update_time`, `balance`
-- `tokens` ํ
์ด๋ธ
`id`, `user_id`, `issued_time`, `status`
-- `concerts` ํ
์ด๋ธ
`id`, `date`
-- `seats` ํ
์ด๋ธ
`id`, `concert_id`, `number`, `price`, `status`
-- `reservations` ํ
์ด๋ธ
`id`, `user_id`, `concert_id`, `status`, `reservation_time`, `expiration_time`
-- `payments` ํ
์ด๋ธ
`id`, `user_id`, `point_id`, `payment_time`, `amount`
-- `point_histories` ํ
์ด๋ธ
`id`, `user_id`, `point_id`, `create_time`, `transaction_type`, `amount`
-- `reservations_seats` ํ
์ด๋ธ
`id`, `reservation_id`, `seat_id`
์ธ๋ฑ์ค ์ปฌ๋ผ ์ง์ 1์์: ${๋๋ฉ์ธ๋ช
}_id
${๋๋ฉ์ธ๋ช }_id
๋ ๊ฐ ํ ์ด๋ธ์ fk ์ฒ๋ผ ํ์ฉ๋๋ ์ปฌ๋ผ์ ๋๋ค.- ๊ฒฝ์ฐ์ ๋ฐ๋ผ์, ์นด๋๋๋ฆฌํฐ ์์ฒด๋ ๋ ์ง๊ณ์ด ์ปฌ๋ผ(
data
,create_time
๋ฑ)๋ณด๋ค๋ ๋ฎ์ ์ ์์ต๋๋ค. - ๊ทธ๋ฌ๋, ํด๋น ์ปฌ๋ผ์ ๋ค๋ฅธ ํ ์ด๋ธ๊ณผ์ ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ ์ปฌ๋ผ์ผ๋ก, ์กฐ๊ฑด๊ตฌ๋ฌธ์์ ๋ ์ง๊ณ์ด ์ปฌ๋ผ๋ณด๋ค๋ ๋ ๋ง์ด ํ์ฉํฉ๋๋ค.
์ธ๋ฑ์ค ์ปฌ๋ผ ์ง์ 2์์: ๋ ์ง๊ณ์ด ์ปฌ๋ผ
- ํด๋น ์ปฌ๋ผ์
date
,create_time
,update_time
๋ฑ์ ๋ ์ง๊ณ์ด ์ปฌ๋ผ์ ๋๋ค. - ์นด๋๋๋ฆฌํฐ๋ ๋ฎ์ ์ ์์ง๋ง, ๋ฐ์ดํฐ ๋ถํฌ๋๊ฐ ์ข์ ์ปฌ๋ผ์ ๋๋ค.
- ๋ฐ๋ผ์, ํด๋น ์ปฌ๋ผ ์ญ์ ์ธ๋ฑ์ค๋ฅผ ์ง์ ํ๋ฉด ๋ฐ์ดํฐ ์กฐํ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
- ๊ทธ๋ฌ๋, ํ ์ด๋ธ์ ์ธ๋ฑ์ค๋ฅผ ๋๋ฌด ๋ง์ด ์ง์ ํ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ ์ฝ์ ๋ฐ ๊ฐฑ์ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ต๋๋ค.
- ๋๊ธฐ์ด ํ ํฐ์ ๊ฒฝ์ฐ, ๊ฐ์ฅ ์ต๊ทผ ์๊ฐ์ ๋ฐ๊ธ๋ ํ ํฐ์ ์กฐํํ๋ ์ฟผ๋ฆฌ๊ฐ ๋ง์ด ๋ฐ์ํ๋ฏ๋ก,
issued_time
์ปฌ๋ผ์ ์ธ๋ฑ์ค๋ฅผ ์ง์ ํ๋ฉด ์กฐํ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
์ธ๋ฑ์ค ์ปฌ๋ผ ์ง์ 3์์: ์ํ๊ณ์ด ์ปฌ๋ผ
- ํด๋น ์ปฌ๋ผ์
status
์ ๊ฐ์ด ์ํ๋ฅผ ๋ํ๋ด๋ ์ปฌ๋ผ์ ๋๋ค. - ๋์ฒด๋ก ์นด๋๋๋ฆฌํฐ๊ฐ ์ ์ผ ๋ฎ์ต๋๋ค.
- ์ธ๋ฑ์ค๋ฅผ ์ ์ฉํ๋ฉด ์ข์์๋ ์์ง๋ง, ๊ฐ ๋๋ฉ์ธ์ id ๋ณ๋ก ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ณ , ์ ๋์ ์ธ ๋ฐ์ดํฐ ๊ฐฏ์๊ฐ ์ ์ ํธ์
๋๋ค.
- ์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ์ ์กฐํ ์ฑ๋ฅ์ ๋์ด๋ ๋์ , ์ถ๊ฐ, ๊ฐฑ์ ์ฑ๋ฅ์ ์ ํ์ํฌ ์ ์์ต๋๋ค.
- ๋ฐ์ดํฐ์ ๊ฐฏ์๊ฐ ์ ์ ๊ฒฝ์ฐ, ์ธ๋ฑ์ค๋ฅผ ์ง์ ํด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์บ ๋ฒ์๋ฅผ ์ค์ด๋ ํจ๊ณผ๊ฐ ๋ฏธ๋ฏธํ ์ ์์ต๋๋ค.
์์ฝ
id
์ ๊ฒฝ์ฐ, pk๋ก์ ํด๋ฌ์คํฐ๋ ์ธ๋ฑ์ค๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฏ๋ก, ๋ณ๋๋ก ์ธ๋ฑ์ค๋ฅผ ์ง์ ํ ํ์๊ฐ ์์ต๋๋ค.${๋๋ฉ์ธ๋ช }_id
์ปฌ๋ผ์ ๊ฐ ํ ์ด๋ธ์ fk์ฒ๋ผ ํ์ฉ๋๋ ์ปฌ๋ผ์ด๋ฏ๋ก, ์ธ๋ฑ์ค๋ฅผ ์ง์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.- ๋ ์ง๊ณ์ด ์ปฌ๋ผ์ ๋ฐ์ดํฐ ๋ถํฌ๋๊ฐ ์ข์ผ๋ฏ๋ก, ์ธ๋ฑ์ค๋ฅผ ์ง์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- ํ์ง๋ง, ์ธ๋ฑ์ค๋ฅผ ์ง์ ํ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ ์ฝ์ ๋ฐ ๊ฐฑ์ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ผ๋ฏ๋ก, ์ ์ ํ ์ํฉ์์ ์ธ๋ฑ์ค๋ฅผ ์ง์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- ์ด๋ฒ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ, ์ฝ์ํธ, ํ ํฐ๊ณผ ๊ฐ์ด ๋ ์ง๊ณ์ด ์ปฌ๋ผ์ ์กฐ๊ฑด๊ตฌ๋ฌธ์ผ๋ก ํ์ฉํ๋ ํ ์ด๋ธ์๋ง ์ธ๋ฑ์ค๋ฅผ ์ง์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- ์ํ๊ณ์ด ์ปฌ๋ผ์ ํน์ฑ์ ๊ฐฑ์ ๋น๋์๊ฐ ๋์ผ๋ฏ๋ก, ๋ฐ๋ก ์ธ๋ฑ์ค๋ฅผ ์ ์ฉํ๋ ๊ฒ๋ณด๋ค๋ ์์ฐ ํ์ ๋ฐ์ดํฐ์ ์ ๋์ ์ธ ๊ฐฏ์๋ฃฐ ๋ณด๊ณ ๊ฒฐ์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ฃผ์์ฌํญ
- ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ ์กฐํ๋ฅผ ํ ๊ฒฝ์ฐ, ์ฌ์ฉํ๋ ์ฐ์ฐ์์ ๋ฐ๋ผ ์ธ๋ฑ์ค ์ ์ฉ์ด ์๋ ์ ์์ต๋๋ค. ๋ฐ๋ผ์, ์ฟผ๋ฆฌ๋ฅผ ์ ์ฉํ๊ธฐ์ ์ ํด๋น ์ฟผ๋ฆฌ๋ฅผ ๋ถ์์ ์ ํํด์ผํฉ๋๋ค.
- ๋ง์ฝ ํ
์ด๋ธ ํ๋์ ์ฌ๋ฌ ์ปฌ๋ผ์ด ์ธ๋ฑ์ค๋ก ์ง์ ๋์ด ์๋ค๋ฉด, ์นด๋๋๋ฆฌํฐ๊ฐ ๋์ ์์ผ๋ก ๋ฐฐ์นํด์ผํฉ๋๋ค.
- reservation ํ
์ด๋ธ์ ์๋ก๋ค์๋ฉด,
user_id
,concert_id
์์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
- reservation ํ
์ด๋ธ์ ์๋ก๋ค์๋ฉด,
- ๋น์ฆ๋์ค ๋ก์ง ์ํ ์ค ๋จ๊ฑด ์ฟผ๋ฆฌ ์ฌ๋ฌ๊ฐ๋ก ์์กดํ๋ ๋ฃจํธ ๋๋ฉ์ธ ์ํฐํฐ์ ์กฐํํ๋ ์ฟผ๋ฆฌ๋ join์ ํ์ฉํ์ฌ ์ฌ์ฉํ๋ ์ฟผ๋ฆฌ์ ํ์๋ฅผ ์ค์์ต๋๋ค.
- ์ฐ๊ด๊ด๊ณ์ ์ํ ๋๋ฉ์ธ์ ์๋ณ์(fk)๋ ์ธ๋ฑ์ค๋ก ๊ตฌ์ฑํ์์ต๋๋ค.
- ๋๋ฉ์ธ ์ํฐํฐ ๊ตฌ์ฑ์, ์ฐ๊ด๊ด๊ณ๋ก ์ง์ ๋ jpa ์ํฐํฐ๋ฅผ ์ง์ฐ๊ณ ํด๋น ์ํฐํฐ์ ์๋ณ์๋ก ๋์ฒดํ์ฌ ํน์ ์ํฐํฐ ์กฐํ์, ๋ค๋ฅธ ์ํฐํฐ๋ฅผ ์ถ๊ฐ๋ก ์กฐํํ๋ ํ์์ ๋ฐฉ์งํ์์ต๋๋ค.
erDiagram
users {
bigint id PK "์ ์ ID"
bigint point_id "ํฌ์ธํธ ID"
}
points {
bigint id PK "ํฌ์ธํธ ID"
decimal balance "์์ก"
datetime create_time "์์ฑ ์๊ฐ"
datetime update_time "์
๋ฐ์ดํธ ์๊ฐ"
}
point_histories {
bigint id PK "ํฌ์ธํธ ์ด๋ ฅ ID"
varchar transaction_type "๊ฑฐ๋ ์ ํ('CHARGE','RECHARGE')"
bigint user_id "์ ์ ID"
bigint point_id "ํฌ์ธํธ ID"
decimal amount "๊ฑฐ๋ ๊ธ์ก"
datetime create_time "์์ฑ ์๊ฐ"
}
concerts {
bigint id PK "์ฝ์ํธ ID"
date date "์ฝ์ํธ ๋ ์ง"
}
seats {
bigint id PK "์ข์ ID"
varchar number "์ข์ ๋ฒํธ"
varchar status "์ข์ ์ํ(AVAILABLE, RESERVED, OCCUPIED)"
bigint concert_id "์ฝ์ํธ ID"
date concert_date "์ฝ์ํธ ๋ ์ง"
}
reservations {
bigint id PK "์์ฝ ID"
string status "์์ฝ ์ํ(PENDING, CONFIRMED, CANCELLED)"
datetime reservation_time "์์ฝ ์๊ฐ"
datetime expiration_time "๋ง๋ฃ ์๊ฐ"
bigint user_id "์ ์ ID"
bigint seat_id "์ฝ์ํธ ID"
}
payments {
bigint id PK "๊ฒฐ์ ID"
decimal amount "๊ฒฐ์ ๊ธ์ก"
datetime payment_time "๊ฒฐ์ ์๊ฐ"
bigint user_id "์ ์ ID"
bigint point_id "ํฌ์ธํธ ID"
}
reservations_seats {
bigint id PK "์์ฝ ์ข์ ID"
bigint reservation_id "์์ฝ ID"
bigint seat_id "์ข์ ID"
}
users ||--o{ payments : "N"
users ||--o| points : "1"
users ||--o{ reservations : "N"
concerts ||--o{ seats : "N"
concerts ||--o{ reservations : "N"
points ||--o{ point_histories : "N"
points ||--o{ payments : "N"
reservations ||--o{ reservations_seats : "N"
seats ||--o{ reservations_seats : "N"
์์ฝ ํ๋ก์ธ์ค
- ์ฌ์ฉ์ ์กฐํ
- ํด๋น ๋ ์ง ์ฝ์ํธ ์กฐํ
- ํด๋น ๋ ์ง ์ข์ ์กฐํ
- ์์ฝ ๋ฑ๋ก
- ์ฌ์ฉ์ ํฌ์ธํธ ์ฐจ๊ฐ
๋์์ฑ ์ด์๊ฐ ๋ฐ์ํ๋ ๋ถ๋ถ
๋์์ ์ฌ๋ฌ ํธ๋์ญ์ ์ด ์ข์ ์์ฝ ์ํ ์กฐํ ์ค ๋ฐ์ํ๋ dirty read ํ์
Txid 100 ์๋, Txid 200 ์๋์ด ๋์์ ์์ฝ์ ํ์ ๊ฒฝ์ฐ.
- MySQL ๊ธฐ์ค์ผ๋ก ์ผ๋ฐ์ ์ผ๋ก ์ฝ๊ธฐ์ ๊ฒฝ์ฐ, ๊ฐ์ฅ ๋ง์ง๋ง์ ์ปค๋ฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์(commited read + MVCC)
- MVCC ํน์ฑ์ ๋ฐ๋ผ ์ด๋ ํธ๋์ญ์ ์ด ๋จผ์ ์กฐํ๋ฅผ ์ํํ๋ ๋ค๋ฅธ ํธ๋์ญ์ ์ ์กฐํ ์์ ์ ๋ง์ง ์์(MySQL + innodb ์์ ์ผ๋ฐ SELECT ๊ตฌ๋ฌธ์ ์ ๊ธ์๋ ์ฝ๊ธฐ)
- ๋ฐ๋ผ์, ๋์์ ์์ฝ์ ์งํํ ๊ฒฝ์ฐ, ๋ ํธ๋์ญ์ ๋์ ํ๋ฅ ๋ก ์์ฝ์ผ๋ก ์ ์ ๋์ง ์์ ์ํ๋ก ์ปค๋ฐ๋ ์ข์์ ์กฐํํ๊ฒ๋จ (dirty read ๋ฐ์)
- ์ด๋ฌํ ํ์์ ๊ฐ์ ์ข์์ผ๋ก ๋๊ฐ ์ด์์ ์ค๋ณต๋ ์์ฝ์ ์ํํ๊ฒ ๋จ.
๋ฐ๋ผ์, 2๊ฐ ์ด์์ ํธ๋์ญ์ ์ด ๋ฐ์ํ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ์ฌ ์ข์ ์ ์ ์ ์ํ ๋ฝ ๋งค์ปค๋์ฆ์ ๊ตฌ์ฑํด์ผํ๋ค.
๋๊ด์ ๋ฝ
- ํน์ง
- ๊ฒฝํฉ์ด ์ ๋ฐ์ํ์ง ์๋๋ค๋ ๊ฐ์ ํ์ ์ํํ๋ ๋ฝ ๋งค์ปค๋์ฆ
- ํธ๋์ญ์ ๊ฐ์ ์ํธ๋ฐฐ์ ๋ฅผ ์ํํ์ง ์๊ธฐ์ ์ฑ๋ฅ ์ ํx
- version control ์ญํ ์ ์ปฌ๋ผ์ ํ์ฉํจ.
- postgreSQL์์๋ 'first-updater-win'์ผ๋ก ๋์ํจ
- jpa๋ฅผ ํ์ฉํ ๊ฒฝ์ฐ, MySQL๋ก๋ ํน์ ํ์
์ ์ปฌ๋ผ์ ํตํด ๋์ํจ
- Short
- Integer
- Long
- Timestamp
- ๋๊ฐ ์ด์์ ํธ๋์ญ์ ์ด ๋์์ read๋ฅผ ์ํํ๋๋ผ๋ ๋ ํธ๋์ญ์ ์์ ์กฐํํ version์ด ๋ถ์ผ์นํ๋ฉด ํ๋์ ํธ๋์ญ์ ์ ์คํจํ๋ค.
- ์ฃผ์์ฌํญ
- ์กฐํ ์ฟผ๋ฆฌ์ ๋ํ ์ํธ๋ฐฐ์ ๊ฐ ์ด๋ฃจ์ด์ง์ง ์๊ธฐ ๋๋ฌธ์ ํธ๋์ญ์ ๋ฒ์๋ณด๋ค ๋ฝ์ ๋ฒ์๊ฐ ๋ ๋์ ๊ฒฝ์ฐ, ์๋์ ๋ค๋ฅธ version control ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์
- retry ๋ฐ ๋ณด์ ํธ๋์ญ์ ๊ณผ ๊ฐ์ ๋ถ๊ฐ ๊ธฐ๋ฅ ์ถ๊ฐ๋ก ์ธํด, ๋น์ฆ๋์ค ๋ก์ง์ด ๋ณต์กํด์ง ์ ์์
- jpa๋ฅผ ํ์ฉํ ๊ฒฝ์ฐ, version ์ญํ ์ ํ๋ ์ปฌ๋ผ์ ์ง์ ๊ฑด๋ค์ฌ์ ์๋จ. ๊ทธ๋ฌ๋ ๋ฒํฌ ์ฐ์ฐ์ ๊ฒฝ์ฐ, ์ง์ ๊ฑด๋ค์ฌ์ผํจ
- ์ถฉ๋์ด ์์ฃผ ๋ฐ์ํ๋ค๋ฉด, ๋ฐ๋ณต๋ ์ฟผ๋ฆฌ๋ฅผ ์ํํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์ง๋ฏ๋ก ์คํ๋ ค ๋น๊ด์ ๋ฝ์ด ๋ ์ข์ ์ ์์
๋น๊ด์ ๋ฝ [์ฑํ]
- ํน์ง
- ๊ฒฝํฉ์ด ์์ฃผ ๋ฐ์ํ๋ค๋ ๊ฐ์ ํ์ ์ํํ๋ ๋ฝ ๋งค์ปค๋์ฆ
- ํธ๋์ญ์ ๊ฐ์ ์ํธ๋ฐฐ์ ๋ฅผ ์ํํ๊ธฐ์ ํธ๋ํฝ์ด ๋ชฐ๋ฆด๊ฒฝ์ฐ ๊ฐ ํธ๋์ญ์ ์ ์๋ต์๊ฐ ๋์ ์ผ๋ก ์ธํด ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์์
- ์ผ๋ฐ์ ์ธ select ์ฟผ๋ฆฌ ๋ง์ง๋ง ๋ถ๋ถ์ for update ๊ตฌ๋ฌธ์ ์ถ๊ฐํ์ฌ, locking read ์ํ
- ๋๊ฐ ์ด์์ ํธ๋์ญ์ ์ด ๋์์ read๋ฅผ ์ํํ๋ ค๊ณ ํ ๊ฒฝ์ฐ, ๋จผ์ ๋ฝ์ ํ๋ํ ํธ๋์ญ์ ๋ง read๋ฅผ ์ํํ๊ณ , ๋๋จธ์ง ํธ๋์ญ์ ์ ๋จผ์ ๋ฝ์ ํ๋ํ ํธ๋์ญ์ ์ด ์ปค๋ฐ์ ์๋ฃํ๊ณ ๋ฝ์ ๋ฐ๋ฉํ ๋๊น์ง ๋๊ธฐํจ
- ์ฃผ์ ์ฌํญ
- ์ํธ๋ฐฐ์ ๋ฅผ ํตํ ๋ฝ ๊ด๋ฆฌ๋ ํ์ฐ์ ์ผ๋ก ์ฑ๋ฅ์ ํ๊ฐ ์ฐพ์์ค๋ฏ๋ก,
- read์ ๊ฒฝ์ฐ ๋ฐฐ์ ๋ฝ์ ํ๋ํ ํธ๋์ญ์ ๋ผ๋ฆฌ๋ง, ์ํธ๋ฐฐ์ ๊ฐ ์ ์ฉ๋๋ค.
- ์ฌ๋ฌ ๋ ์ฝ๋๋ฅผ ๋์์ผ๋ก ๋ฐฐํ๋ฝ์ ๊ฑธ ๋ ๋ฐ๋๋ฝ์ ์กฐ์ฌํด๋ผ...
- ์นดํ์นด+์นดํ์นด ์คํธ๋ฆผ์ฆ๋ฅผ ํ์ฉํ ๋ฝ ๊ด๋ฆฌ, ๋ ๋์ค๋ฅผ ํ์ฉํ ๋ถ์ฐ๋ฝ ๊ด๋ฆฌ ๋ฑ ๋ค์ํ ๋ฝ ๊ด๋ฆฌ ๋ฐฉ๋ฒ์ด ์๋ค.
- ๊ทธ๋ฌ๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฝ์ ํตํด ํธ๋์ญ์ ๋์์ฑ ๊ด๋ฆฌ ๊ฒฝํ์ ์ ๋๋ก ์์๋ณด๊ณ ์ถ๋ค.
- ์ ํธํ๋ ๋ฐฉํฅ
- ๋น๊ด๋ฝ์ผ๋ก ์ฐ์ ๋์์ฑ ํด๊ฒฐ ->
- ์ฑ๋ฅ ์ด์ ๋ฐ์ ->
- ์กฐํ ์ฉ, Lock ์ฐ์ฐ ์ฉ ํ ์ด๋ธ ๋ถ๋ฆฌ ->
- ๋ ๋์ ์ฑ๋ฅ ๊ฐ์ ์ ์ํด ํธ๋์ญ์ ๋ฒ์ ์ถ์ ->
- ๋ณต์กํด์ง๋ ์ฝ๋ ๊ฐ์ ๋ฐ ํ์ฅ์ฑ์ ์ํด ๋ ๋์ค ๋ฐ ์นดํ์นด๋ฅผ ํ์ฉ
- ์ต๊ณ ์ ๋ฐฉ๋ฒ์ ํ๋ฒ์ ์ฐพ์๋ด๋ ๊ฒ๋ณด๋ค ์ฃผ์ด์ง ์ํฉ์์ ์ต์ ํด๋ฅผ ์ฐพ๋ ๊ณผ์ ์ ๋จผ์ ๊ฒช์ด๋ณด๊ณ ์ถ์๋ค.
- ๋ ๋์ค๋ฅผ ํ์ฉํ ๋ฝ ๊ด๋ฆฌ๋ ๋ ๋์ค์ ํน์ฑ์, ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์, ๋ ๋์ค ์๋ฒ๊ฐ ๋ค์ด๋๋ฉด ๋ฝ์ด ํด์ ๋๋ ๋ฌธ์ ๊ฐ ์์.
- ์นดํ์นด๋ฅผ ํ์ฉํ ๋ฐฉ๋ฒ์ ๊ฒฝ์ฐ, ์นดํ์นด์ ํน์ฑ์ ๋ณด์ ํธ๋์ญ์ ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง ๊ณ ๋ฏผํด๋ณด์์ผ ํ๋ค.
- ๋ฐ๋ผ์, ๋จผ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฝ์ ํ์ฉํ ๋ฐฉ๋ฒ์ ๊ตฌํํ์ฌ์ผ ๋ ๋์ค ๋ฐ ์นดํ์นด๋ฅผ ํ์ฉํ ๋ฐฉ๋ฒ์ ๋ฌธ์ ๊ฐ ์๊ฒจ๋ ๋์ํ ์ ์๋๋ก ๊ตฌ์ฑํ ์ ์์ ๋ฏ ํ๋ค.
- ๋จผ์ ๋น๊ด๋ฝ์ผ๋ก ๊ตฌํํ๊ณ , ์ฑ๋ฅ์ด์๊ฐ ๋ฐ์ํ๋ ์ํฉ์ ๋ง๋ค์ด ์ฑ๋ฅ์ ๊ฐ์ ํ๋ ๋ฐฉํฅ์ผ๋ก ์งํํ ์์ .
- ๊ทธ ๋ค์์ ๊ฐ์ ๋ ๋ฐฉ๋ฒ์ด ๋ฌด์์ด ๋์๋ , ์ฅ์ ๋ฐ์์ผ๋ก ์ธํด ํด๋น ๋ฐฉ๋ฒ์ด ํ์ฉํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ, ๋ณต๊ตฌ๊ฐ ๋ ๋๊น์ง ๊ธฐ์กด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฝ์ ์ฐ๋ ๋ฐฉ๋ฒ์ ๊ณ ๋ คํ ์์ .
Github Flow๋ main ๋ธ๋์น๋ฅผ ๋ฐฐํฌ ๊ฐ๋ฅํ ์ํ๋ก ์ ์งํ๊ณ , ์๋ก์ด ๊ธฐ๋ฅ์ด๋ ๋ฒ๊ทธ ์์ ์ ์ํ ๋ธ๋์น๋ฅผ ์์ฑํ์ฌ ์์ ํ ํ, ์์ ์ด ์๋ฃ๋๋ฉด master ๋ธ๋์น๋ก PR์ ๋ณด๋ด๋ ๋ฐฉ์์ ๋๋ค.
- ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ด๋ค.
- ๊ฐ ๊ธฐ๋ฅ๋ณ ์์ ๊ธฐ๊ฐ์ด ์งง๊ธฐ๋๋ฌธ์ ๋ธ๋์น๋ฅผ ์์ฑํ๊ณ ๋ณํฉํ๋ ๊ณผ์ ์ด ๋น ๋ฅธ ์ ๋ต์ด ํ์ํฉ๋๋ค.
- ๋์์ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ ๊ฒฝ์ฐ์๋ ์ถฉ๋์ด ๋ฐ์ํ ํ๋ฅ ์ด ๋ฎ์ ๋ฐฉ๋ฒ์ด ํ์ํฉ๋๋ค.
- ๋ธ๋์น ์์ฑ: main ๋ธ๋์น ํ๋์ ์์กดํ๊ธฐ ๋๋ฌธ์ ๋ธ๋์น ์์ฑ์, ๋ธ๋์น ์ด๋ฆ์ ํตํด ์๋๋ฅผ ๋ช ํํ๊ฒ ๋๋ฌ๋ด๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- ๊ฐ๋ฐ ์์
๋ฐ ์ปค๋ฐ๊ณผ ํธ์
- ๊ฐ๋ฐ์ ์งํํ๋ฉด์ ์ปค๋ฐ์ ๋จ๊น๋๋ค.
- ์ปค๋ฐ์ ๋จ๊ธธ ๋๋ ์ปค๋ฐ ๋ฉ์์ง๋ฅผ ๋ช ํํ๊ฒ ์์ฑํฉ๋๋ค.
- ์์๋ก push ํฉ๋๋ค.
- remote ์ ์ฅ์์ ์์ ๋ด์ญ์ ๊ณต์ ํ์ฌ ๋ค๋ฅธ ์ฌ๋๋ค๋ ํ์ธํ ์ ์๋๋ก ํฉ๋๋ค.
- Pull Request ์์ฑ
- ์ฝ๋ ๋ฆฌ๋ทฐ ๋ฐ ํผ๋๋ฐฑ
- ํ ์คํธ: ๋จ์ ํ ์คํธ ๋ฟ๋ง ์๋๋ผ, ๋ผ์ด๋ธ ์๋ฒ์ ์ง์ ๋ฐฐํฌํด๋ณด๋ฉด์, ์ค์ ๋ก ๋ฐฐํฌํ ์ ์๋ ์ํ์ธ์ง ๊ฒ์ฆํฉ๋๋ค.
์ถ์ฒ : Git Commit Message StyleGuide
"ํ๊ทธ: ์ ๋ชฉ"์ ํํ์ด๊ณ , : ๋ค์ ๊ณต๋ฐฑ์ด ์์์ ์ ์ํ๋ค.
ํ๊ทธ ์ด๋ฆ | ์ค๋ช |
---|---|
Feat | ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๊ฒฝ์ฐ |
Fix | ๋ฒ๊ทธ๋ฅผ ๊ณ ์น ๊ฒฝ์ฐ |
!HOTFIX | ๊ธํ๊ฒ ์น๋ช ์ ์ธ ๋ฒ๊ทธ๋ฅผ ๊ณ ์ณ์ผํ๋ ๊ฒฝ์ฐ |
Refactor | ํ๋ก๋์ ์ฝ๋ ๋ฆฌํฉํ ๋ง |
Comment | ํ์ํ ์ฃผ์ ์ถ๊ฐ ๋ฐ ๋ณ๊ฒฝ |
Document | ๋ฌธ์๋ฅผ ์์ ํ ๊ฒฝ์ฐ |
Test | ํ ์คํธ ์ถ๊ฐ, ํ ์คํธ ๋ฆฌํฉํ ๋ง(ํ๋ก๋์ ์ฝ๋ ๋ณ๊ฒฝ X) |
Chore | ๋น๋ task ์ ๋ฐ์ดํธ, ํจํค์ง ๋งค๋์ ๋ฅผ ์ค์ ํ๋ ๊ฒฝ์ฐ(ํ๋ก๋์ ์ฝ๋ ๋ณ๊ฒฝ X) |
Rename | ํ์ผ ํน์ ํด๋๋ช ์ ์์ ํ๊ฑฐ๋ ์ฎ๊ธฐ๋ ์์ ๋ง์ธ ๊ฒฝ์ฐ |
Remove | ํ์ผ์ ์ญ์ ํ๋ ์์ ๋ง ์ํํ ๊ฒฝ์ฐ |
- Github Actions๋ฅผ ์ฌ์ฉํ์ฌ CI/CD๋ฅผ ๊ตฌ์ถํฉ๋๋ค.
- Github Actions๋ Github์์ ์ ๊ณตํ๋ CI/CD ์๋น์ค๋ก, Github ์ ์ฅ์์ ์๋ ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ํฌํ๋ก์ฐ๋ฅผ ์๋ํํ ์ ์์ต๋๋ค.
- Jenkins, k8s ๋ฑ ๋ค์ํ ci/cd ํด์ด ์์ง๋ง, ํด ์ฌ์ฉ๋ฒ ๋ณด๋ค๋ ci/cd์ ๊ฐ๋ ์ ์ดํดํ๊ณ , ์ค์ ๋ก ๊ตฌ์ถํด๋ณด๋ ๊ฒ์ด ์ค์ํ๋ค๊ณ ํ๋จํ์ฌ, Github Actions๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ํ์ฌ๋ CI์ ์ง์คํ๊ณ ์์ต๋๋ค.
- ๋์์์ด ์ฝ๋๋ฅผ ํตํฉํ๊ณ ํ ์คํธ๋ฅผ ์ํํ์ฌ ํ์ง์ ์ ์งํ๋ ํ๋ก์ธ์ค์ ๋๋ค.
- ์ ํ ์ฝ๋๋ฅผ ์ต์ ํํ๊ณ ๋ฐ๋ก ๋ฐฐํฌํ ์ ์๋ ๋ฌธํ๋ฅผ ์ด๋์ด๋ด๋ ๊ฒ์ด ์ค์ํ๊ธฐ์ ์ด๋ค ๋๊ตฌ๋ฅผ ์ฐ๋ ๊ฒ๋ณด๋ค ์ฃผ์ด์ง ์ํฉ์ ๋ง๊ฒ ์ ์ ํ ํ์ดํ๋ผ์ธ์ ๊ตฌ์ฑํ๋ ๊ฒ์ด ๋ ์ค์ํฉ๋๋ค.
- ํด๋น ํ๋ก์ ํธ๋ ์ฝ๋๋ฅผ ์ปค๋ฐํ๊ฑฐ๋ pr์ ์ฌ๋ฆด๋๋ง๋ค CI ํ์ดํ๋ผ์ธ์ด ๋์ํ๋๋ก ๊ตฌ์ฑํ์์ต๋๋ค.
- checkout
- Github Actions์ด ์คํ๋๋ ํ๊ฒฝ์ ์ฝ๋๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
- test : ์ ํ ์ฝ๋์ ๋ํ ํ ์คํธ๋ฅผ ์ํํ๊ณ , ์คํจํ ๊ฒฝ์ฐ ๋น๋๋ฅผ ์ค๋จํฉ๋๋ค.
- lint : ์ฝ๋ ์คํ์ผ์ ๊ฒ์ฌํ๊ณ , ์คํจํ ๊ฒฝ์ฐ ๋น๋๋ฅผ ์ค๋จํฉ๋๋ค. ๋ณธ ํ๋ก์ ํธ๋ ktlint๋ฅผ ํตํด, kotlin ๊ณต์ ์ฝ๋ฉ ์ปจ๋ฒค์ ์ ์ค์ํ๋๋ก ํฉ๋๋ค.
- build
- 2,3๋ฒ์ ์์ ์ gradlew์์ build task๋ฅผ ์คํํ ๋, test์ lint๋ฅผ ์ ํํ๊ณ ์คํจํ ๊ฒฝ์ฐ build๋ฅผ ์ค๋จํฉ๋๋ค.
- CI ํ์ดํ๋ผ์ธ์ด ์ฑ๊ณตํ๋ฉด, CD ํ์ดํ๋ผ์ธ์ด ์คํ๋๋๋ก ๊ตฌ์ฑํ ์์ ์ ๋๋ค.
- jib๋ฅผ ์ฌ์ฉํ์ฌ, was์ docker ์ด๋ฏธ์ง ๋น๋ ํ๋ก์ธ์ค๋ฅผ ๋จ์ํํ๊ณ , ๋น๋ ์๋๋ฅผ ๋์ด๋ ๋ฐฉํฅ์ ์ฑํ ํ์์ต๋๋ค.
- jib๋ฅผ ํ์ฉํ๋ฉด, was์ ๋น๋ ๋ฐ ๋ฐฐํฌ ์๋ํ๊ฐ ๋ ์์ํด์ง๋ฉฐ, layer caching์ ํตํด ๋น๋ ์๋๋ฅผ ๋์ผ ์ ์์ต๋๋ค.
- ํ์ฌ ํ๋ก์ ํธ์์๋ ์์คํฌ๋ฆฝํธ๋ฅผ ํตํด, ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ๋ฅผ ์ํํ๊ณ ์์ต๋๋ค.
- ๊ด๋ฆฌํ๋ ์ปจํ ์ด๋๊ฐ ๋ง์์ ธ ๋ณต์กํด์ง ๊ฒฝ์ฐ, ์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ ์ ๊ตฌ์ฑํ๊ณ ๊ทธ์ ๋ง๋ ๋๊ตฌ๋ฅผ ์ ํํ์ฌ CD ํ์ดํ๋ผ์ธ์ ๊ณ ๋ํํ ์์ ์ ๋๋ค.
์ฝ์ํธ ์์ฝ ์๋น์ค๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์ ์๋ 6๊ฐ์ง์ api๊ฐ ํ์ํฉ๋๋ค.
- ์ ์ ํ ํฐ ๋ฐ๊ธ API
- ์์ฝ ๊ฐ๋ฅ ๋ ์ง ์กฐํ API
- ์์ฝ ๊ฐ๋ฅ ์ข์ ์กฐํ API
- ์ข์ ์์ฝ ์์ฒญ API
- ์์ก ์ถฉ์ / ์กฐํ API
- ๊ฒฐ์ API
๋ฆฌํฉํ ๋ง ๋ฐ ๊ณ ๋ํ ๊ณผ์ ์ดํ ์ํ์ค ๋ค์ด์ด๊ทธ๋จ ์ฌ์์ฑ ์ค