Skip to content

wanniDev/ticket

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Ticket

  • ์ฝ˜์„œํŠธ ์˜ˆ์•ฝ ์„œ๋น„์Šค ๊ตฌํ˜„ํ•˜๊ธฐ
  • ๋Œ€๊ธฐ์—ด ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๊ณ , ์˜ˆ์•ฝ ์„œ๋น„์Šค๋Š” ์ž‘์—…๊ฐ€๋Šฅํ•œ ์œ ์ €๋งŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž๋Š” ์ขŒ์„์˜ˆ์•ฝ ์‹œ์— ๋ฏธ๋ฆฌ ์ถฉ์ „ํ•œ ์ž”์•ก์„ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์ขŒ์„ ์˜ˆ์•ฝ ์š”์ฒญ์‹œ์—, ๊ฒฐ์ œ๊ฐ€ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š๋”๋ผ๋„ ์ผ์ • ์‹œ๊ฐ„๋™์•ˆ ๋‹ค๋ฅธ ์œ ์ €๊ฐ€ ํ•ด๋‹น ์ขŒ์„์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์„œ๋น„์Šค๋ณ„ ํŠธ๋žœ์žญ์…˜ ๋ฒ”์œ„ ๋ถ„์„ ๋ฐ ๊ฐœ์„ 

ํ˜„์žฌ๋Š” ๋ชจ๋†€๋ฆฌ์‹์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด application layer์—์„œ ๋ชจ๋“  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ฐ ํŠธ๋žœ์žญ์…˜์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์ƒํƒœ์—์„œ๋Š” ํฐ ๋ฌธ์ œ๋Š” ์—†์œผ๋‚˜, ์„œ๋น„์Šค ๊ทœ๋ชจ์— ๋”ฐ๋ผ ํ™•์žฅ์ด ํ•„์š”ํ•ด์ง€๊ฑฐ๋‚˜ ํŠธ๋ž˜ํ”ฝ์ด ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ, ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค๊ฐ€ ์ผ๋ถ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜ ๋ถ„์„์ด ํ•„์š”ํ•œ ์„œ๋น„์Šค
์•„๋ž˜ ๋‚˜์—ดํ•  ๋‘ ์„œ๋น„์Šค๋Š” ์—ฌ๋Ÿฌ api๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ฑฐ๋‚˜, ๋‹จ์ผ DB ํŠธ๋žœ์žญ์…˜๊ณผ๋Š” ๋ฌด๊ด€ํ•˜๋ฉด์„œ ๋Œ€๊ธฐ์‹œ๊ฐ„์ด ๊ธด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ขŒ์„ ์˜ˆ์•ฝ ๋ฐ ํ™•์ • ์„œ๋น„์Šค
  • ํฌ์ธํŠธ ์ถฉ์ „ ์„œ๋น„์Šค

์ขŒ์„ ์˜ˆ์•ฝ ๋ฐ ํ™•์ • ์„œ๋น„์Šค

  • ์ด ๋‘ ์„œ๋น„์Šค๋Š” DB์˜ ๋ถ€ํ•˜๋ฅผ ๋ง‰๊ธฐ์œ„ํ•ด ๋Œ€๊ธฐ์—ด ์‹œ์Šคํ…œ์ด ์ ์šฉ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์˜ˆ์•ฝ ์ƒ์„ฑ/ํ™•์ • ์™ธ๋กœ, ๋Œ€๊ธฐ์—ด ํ† ํฐ ์ƒ์„ฑ ๋ฐ ์ˆœ์„œ ํ™•์ธ์„ ์ˆ˜ํ–‰ํ•˜๋Š” api๋ฅผ ๋ณ„๋„๋กœ ์ˆ˜ํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
  • ์ขŒ์„ ์˜ˆ์•ฝ ๋ฐ ํ™•์ •์„œ๋น„์Šค์˜ ๋™์ž‘ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    • ํ† ํฐ ์ƒ์„ฑ -> ํ† ํฐ ์ˆœ์„œ ํ™•์ธ -> ์˜ˆ์•ฝ ์ƒ์„ฑ or ์˜ˆ์•ฝ ํ™•์ •
  • ํ† ํฐ ์ƒ์„ฑ๊ณผ ํ† ํฐ ์ˆœ์„œ ํ™•์ธ์€ ๋„๋ฉ”์ธ ์ธก๋ฉด์—์„œ๋Š” ์˜ˆ์•ฝ ์ƒ์„ฑ ๋ฐ ํ™•์ •๊ณผ๋Š” ๋ฌด๊ด€ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด๋ฉฐ, ๋ณ„๋„์˜ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๋™์ž‘ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ขŒ์„ ์˜ˆ์•ฝ ๋ฐ ํ™•์ •์€ ๊ณตํ†ต์œผ๋กœ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ ๋ฐ ์ƒ์„ฑ์˜ ๊ณผ์ •์„ ๊ฑฐ์นฉ๋‹ˆ๋‹ค.
  • ๋‘ ๊ฐ€์ง€ ํ”„๋กœ์„ธ์Šค๋Š” ๋™์ผํ•œ ๋„๋ฉ”์ธ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์œผ๋‚˜, ๋ฐ์ดํ„ฐ ์ƒ์„ฑ์˜ ๊ฒฝ์šฐ, ๋น„๊ต์  ํŠธ๋žœ์žญ์…˜ ๋Œ€๊ธฐ์‹œ๊ฐ„์„ ๋Š˜๋ฆฌ๋Š” ์š”์†Œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ, ์ขŒ์„ ์˜ˆ์•ฝ ๋ฐ ํ™•์ • ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ๊ณผ ์ƒ์„ฑ์„ ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๋ฌถ์–ด์„œ ์ฒ˜๋ฆฌํ•˜๋˜, ๋ฐ์ดํ„ฐ ์ƒ์„ฑ์˜ ๊ฒฝ์šฐ ๋น„๋™๊ธฐ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ์‚ฌ์šฉ์ž ์‘๋‹ต์‹œ๊ฐ„์„ ์ค„์—ฌ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํฌ์ธํŠธ ์ถฉ์ „ ์„œ๋น„์Šค

  • ํฌ์ธํŠธ ์ถฉ์ „ ์„œ๋น„์Šค์˜ ๋™์ž‘ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    • ์‚ฌ์šฉ์ž ๊ฒ€์ฆ -> ํฌ์ธํŠธ ๊ฒ€์ฆ -> PG๊ฒฐ์ œ์Šน์ธ -> ํฌ์ธํŠธ ์ถฉ์ „ -> ํฌ์ธํŠธ ์ด๋ ฅ ์ƒ์„ฑ
  • ํฌ์ธํŠธ ์ถฉ์ „ api์˜ ๊ฒฝ์šฐ, PG ๊ฒฐ์ œ ์Šน์ธ๊ณผ ๊ฐ™์€ DB ํŠธ๋žœ์žญ์…˜๊ณผ๋Š” ๋ฌด๊ด€ํ•˜์ง€๋งŒ, ์‘๋‹ต์‹œ๊ฐ„์ด ๊ธด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • PG ๊ฒฐ์ œ ์Šน์ธ DB ํŠธ๋žœ์žญ์…˜๊ณผ ๋ฌด๊ด€ํ•˜์ง€๋งŒ, ํฌ์ธํŠธ ์ถฉ์ „ ์„œ๋น„์Šค์—๋Š” ๊ผญ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด๋ฏ€๋กœ ํ•ด๋‹น ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ ๋น„๋™๊ธฐ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ, ์‚ฌ์šฉ์ž ์‘๋‹ต์‹œ๊ฐ„์„ ๊ฐœ์„  ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฒ€ํ† ํ•ด์•ผํ•  ๋ถ€๋ถ„

  • ๋น„๋™๊ธฐ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด ๊ธฐ์กด์˜ TransactionManager์˜ ํŠธ๋žœ์žญ์…˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋ฏ€๋กœ, ์ด์— ๋Œ€ํ•œ ์ ์ ˆํ•œ ๋ณด์ƒ ํŠธ๋žœ์žญ์…˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ๋Œ€๋ถ€๋ถ„์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด JPA์˜ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ํ™œ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ํŠธ๋žœ์žญ์…˜ ๋ถ„๋ฆฌ ๋ฐ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋กœ ์ธํ•ด ๊ธฐ์กด ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋”ฐ๋ผ์„œ, ์ž์‹ ํ˜น์€ ์™ธ๋ถ€ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๋ถ„๋ฆฌํ•  ๊ฒฝ์šฐ, ๊ธฐ์กด์— ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์˜ ๊ด€๋ฆฌ๋ฅผ ๋ฐ›๋Š” ์—”ํ‹ฐํ‹ฐ์˜ ์—ฐ๊ด€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ๋กœ๋”ฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
    • (๋Œ€๋ถ€๋ถ„ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ์„ ํ•˜๋Š” ๊ณผ์ •์—์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋Š” ๋ฏธ๋ฆฌ ๋กœ๋”ฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.)
    • ํŠธ๋žœ์žญ์…˜ ๋ฒ”์œ„๋ฅผ ์ค„์ด๋˜, ๊ธฐ์กด์˜ ๋ฝ์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š๋„๋ก ์ฃผ์˜ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋Œ€๊ธฐ์—ด ์‹œ์Šคํ…œ

  • ๋Œ€๊ธฐ์—ด์€ ํ† ํฐ์„ ๋ฐœ๊ธ‰๋ฐ›์€ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌ๋˜๋Š” ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.
  • ํ† ํฐ ๋ฐœ๊ธ‰ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด, ํ•ด๋‹น ํ† ํฐ์€ ๋Œ€๊ธฐ์—ด์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
  • ๋Œ€๊ธฐ์—ด์—์„œ ํ† ํฐ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ๋Œ€๊ธฐ์—ด์ด ์กด์žฌํ•˜๋Š” ์ด์œ ๋Š” ํŠธ๋ž˜ํ”ฝ์ด ๋ชฐ๋ ธ์„๋•Œ ๋‹จ์ผ ์‹คํŒจ์ง€์ ์ด ๋  ์ˆ˜ ์žˆ๋Š” DB์— ๋ถ€ํ•˜๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.

๋Œ€๊ธฐ์—ด ๋™์ž‘ ๋งค์ปค๋‹ˆ์ฆ˜

'์˜ˆ์•ฝ ์š”์ฒญ'์„ ์˜ˆ๋กœ ๋“ค๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. ํด๋ผ์ด์–ธํŠธ์—์„œ '์˜ˆ์•ฝํ•˜๊ธฐ' ๋ฒ„ํŠผ์„ ํด๋ฆญ
  2. ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ 'ํ† ํฐ๋ฐœ๊ธ‰ api' ํ˜ธ์ถœ
  3. ์„œ๋ฒ„์—์„œ ํ† ํฐ์„ ๋ฐœ๊ธ‰๋ฐ›๊ณ , ํ•ด๋‹น ํ† ํฐ์„ ๋Œ€๊ธฐ์—ด์— ์ถ”๊ฐ€
  4. ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ '๋Œ€๊ธฐ์—ด ํ™•์ธ api' ํ˜ธ์ถœ
  5. ์„œ๋ฒ„์˜ ๋Œ€๊ธฐ์—ด์˜ ๊ณต๊ฐ„์„ ๋„˜๊ธฐ๋ฉด 429 Too Many Requests ์—๋Ÿฌ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌ
  6. ๋Œ€๊ธฐ์—ด์ด ๊ฝ‰์ฐจ์ง€ ์•Š์•˜๋‹ค๋ฉด, ๋Œ€๊ธฐ์—ด์—์„œ ํ† ํฐ์„ ํ™•์ธํ•˜๊ณ , ํ† ํฐ์ด ๋Œ€๊ธฐ์—ด์— ์žˆ๋Š”์ง€ ํ™•์ธ
  7. ์—†๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ ์†Œ์œ ํ•œ ํ† ํฐ๊ณผ ๋‹ค๋ฅธ ์ •๋ณด๋ผ๋ฉด ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌ
  8. ํ† ํฐ์ด ๋Œ€๊ธฐ์—ด์— ์žˆ๋‹ค๋ฉด, ํ•ด๋‹น ํ† ํฐ์ด ์ œ์ผ ์•ž์— ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ
  9. ์ œ์ผ ์•ž์— ์กด์žฌํ•œ๋‹ค๋ฉด, ํ† ํฐ์„ ๋Œ€๊ธฐ์—ด์—์„œ ์ œ๊ฑฐํ•˜๊ณ , ์˜ˆ์•ฝ์„ ์ง„ํ–‰
  10. ๊ทธ๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด ์•ฝ๊ฐ„์˜ ๋Œ€๊ธฐํ…€์„ ์ฃผ๊ณ  ํ† ํฐ ํ™•์ธํ•˜๊ธฐ 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 ์ˆœ์œผ๋กœ ์ธ๋ฑ์Šค๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

api ์ฃผ์š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์กฐํšŒ ์„ฑ๋Šฅ ๊ฐœ์„ 

  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ˆ˜ํ–‰ ์ค‘ ๋‹จ๊ฑด ์ฟผ๋ฆฌ ์—ฌ๋Ÿฌ๊ฐœ๋กœ ์˜์กดํ•˜๋Š” ๋ฃจํŠธ ๋„๋ฉ”์ธ ์—”ํ‹ฐํ‹ฐ์„ ์กฐํšŒํ•˜๋Š” ์ฟผ๋ฆฌ๋Š” 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"
Loading

๋™์‹œ์„ฑ ์‹œ๋‚˜๋ฆฌ์˜ค

๋™์‹œ์„ฑ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ 1: ์˜ˆ์•ฝ์‹œ ์ขŒ์„ ์„ ์ 

์˜ˆ์•ฝ ํ”„๋กœ์„ธ์Šค

  1. ์‚ฌ์šฉ์ž ์กฐํšŒ
  2. ํ•ด๋‹น ๋‚ ์งœ ์ฝ˜์„œํŠธ ์กฐํšŒ
  3. ํ•ด๋‹น ๋‚ ์งœ ์ขŒ์„ ์กฐํšŒ
  4. ์˜ˆ์•ฝ ๋“ฑ๋ก
  5. ์‚ฌ์šฉ์ž ํฌ์ธํŠธ ์ฐจ๊ฐ

๋™์‹œ์„ฑ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋ถ€๋ถ„

๋™์‹œ์— ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ์ขŒ์„ ์˜ˆ์•ฝ ์ƒํƒœ ์กฐํšŒ ์ค‘ ๋ฐœ์ƒํ•˜๋Š” 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

Github Flow๋Š” main ๋ธŒ๋žœ์น˜๋ฅผ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๊ณ , ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด๋‚˜ ๋ฒ„๊ทธ ์ˆ˜์ •์„ ์œ„ํ•œ ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ž‘์—…ํ•œ ํ›„, ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด master ๋ธŒ๋žœ์น˜๋กœ PR์„ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

Github Flow๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

  • ๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ ์ด๋‹ค.
  • ๊ฐ ๊ธฐ๋Šฅ๋ณ„ ์ž‘์—… ๊ธฐ๊ฐ„์ด ์งง๊ธฐ๋•Œ๋ฌธ์— ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ณ‘ํ•ฉํ•˜๋Š” ๊ณผ์ •์ด ๋น ๋ฅธ ์ „๋žต์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ๋™์‹œ์— ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ํ™•๋ฅ ์ด ๋‚ฎ์€ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Github Flow ์ž‘์—… ํ๋ฆ„

  1. ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ: main ๋ธŒ๋žœ์น˜ ํ•˜๋‚˜์— ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ์‹œ, ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์„ ํ†ตํ•ด ์˜๋„๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๋“œ๋Ÿฌ๋‚ด๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
  2. ๊ฐœ๋ฐœ ์ž‘์—… ๋ฐ ์ปค๋ฐ‹๊ณผ ํ‘ธ์‹œ
    • ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ปค๋ฐ‹์„ ๋‚จ๊น๋‹ˆ๋‹ค.
    • ์ปค๋ฐ‹์„ ๋‚จ๊ธธ ๋•Œ๋Š” ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ์ˆ˜์‹œ๋กœ push ํ•ฉ๋‹ˆ๋‹ค.
    • remote ์ €์žฅ์†Œ์— ์ž‘์—… ๋‚ด์—ญ์„ ๊ณต์œ ํ•˜์—ฌ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  3. Pull Request ์ƒ์„ฑ
  4. ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋ฐ ํ”ผ๋“œ๋ฐฑ
  5. ํ…Œ์ŠคํŠธ: ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๋ผ์ด๋ธŒ ์„œ๋ฒ„์— ์ง์ ‘ ๋ฐฐํฌํ•ด๋ณด๋ฉด์„œ, ์‹ค์ œ๋กœ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ์ธ์ง€ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.

์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€ ์ œ๋ชฉ ์ž‘์„ฑ ๊ฐ€์ด๋“œ

์ถœ์ฒ˜ : Git Commit Message StyleGuide

"ํƒœ๊ทธ: ์ œ๋ชฉ"์˜ ํ˜•ํƒœ์ด๊ณ , : ๋’ค์— ๊ณต๋ฐฑ์ด ์žˆ์Œ์— ์œ ์˜ํ•œ๋‹ค.

ํƒœ๊ทธ ์ด๋ฆ„ ์„ค๋ช…
Feat ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๊ฒฝ์šฐ
Fix ๋ฒ„๊ทธ๋ฅผ ๊ณ ์นœ ๊ฒฝ์šฐ
!HOTFIX ๊ธ‰ํ•˜๊ฒŒ ์น˜๋ช…์ ์ธ ๋ฒ„๊ทธ๋ฅผ ๊ณ ์ณ์•ผํ•˜๋Š” ๊ฒฝ์šฐ
Refactor ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง
Comment ํ•„์š”ํ•œ ์ฃผ์„ ์ถ”๊ฐ€ ๋ฐ ๋ณ€๊ฒฝ
Document ๋ฌธ์„œ๋ฅผ ์ˆ˜์ •ํ•œ ๊ฒฝ์šฐ
Test ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€, ํ…Œ์ŠคํŠธ ๋ฆฌํŒฉํ† ๋ง(ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ ๋ณ€๊ฒฝ X)
Chore ๋นŒ๋“œ task ์—…๋ฐ์ดํŠธ, ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒฝ์šฐ(ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ ๋ณ€๊ฒฝ X)
Rename ํŒŒ์ผ ํ˜น์€ ํด๋”๋ช…์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์˜ฎ๊ธฐ๋Š” ์ž‘์—…๋งŒ์ธ ๊ฒฝ์šฐ
Remove ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๋Š” ์ž‘์—…๋งŒ ์ˆ˜ํ–‰ํ•œ ๊ฒฝ์šฐ

CI/CD workflow

  • Github Actions๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ CI/CD๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.
  • Github Actions๋Š” Github์—์„œ ์ œ๊ณตํ•˜๋Š” CI/CD ์„œ๋น„์Šค๋กœ, Github ์ €์žฅ์†Œ์— ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Jenkins, k8s ๋“ฑ ๋‹ค์–‘ํ•œ ci/cd ํˆด์ด ์žˆ์ง€๋งŒ, ํˆด ์‚ฌ์šฉ๋ฒ• ๋ณด๋‹ค๋Š” ci/cd์˜ ๊ฐœ๋…์„ ์ดํ•ดํ•˜๊ณ , ์‹ค์ œ๋กœ ๊ตฌ์ถ•ํ•ด๋ณด๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ, Github Actions๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ํ˜„์žฌ๋Š” CI์— ์ง‘์ค‘ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

CI(Continuous Integration)

  • ๋Š์ž„์—†์ด ์ฝ”๋“œ๋ฅผ ํ†ตํ•ฉํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ํ’ˆ์งˆ์„ ์œ ์ง€ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค.
  • ์ œํ’ˆ ์ฝ”๋“œ๋ฅผ ์ตœ์‹ ํ™”ํ•˜๊ณ  ๋ฐ”๋กœ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธํ™”๋ฅผ ์ด๋Œ์–ด๋‚ด๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๊ธฐ์— ์–ด๋–ค ๋„๊ตฌ๋ฅผ ์“ฐ๋Š” ๊ฒƒ๋ณด๋‹ค ์ฃผ์–ด์ง„ ์ƒํ™ฉ์— ๋งž๊ฒŒ ์ ์ ˆํ•œ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋Š” ์ฝ”๋“œ๋ฅผ ์ปค๋ฐ‹ํ•˜๊ฑฐ๋‚˜ pr์„ ์˜ฌ๋ฆด๋•Œ๋งˆ๋‹ค CI ํŒŒ์ดํ”„๋ผ์ธ์ด ๋™์ž‘ํ•˜๋„๋ก ๊ตฌ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

CI process

  1. checkout
    • Github Actions์ด ์‹คํ–‰๋˜๋Š” ํ™˜๊ฒฝ์— ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  2. test : ์ œํ’ˆ ์ฝ”๋“œ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ , ์‹คํŒจํ•  ๊ฒฝ์šฐ ๋นŒ๋“œ๋ฅผ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค.
  3. lint : ์ฝ”๋“œ ์Šคํƒ€์ผ์„ ๊ฒ€์‚ฌํ•˜๊ณ , ์‹คํŒจํ•  ๊ฒฝ์šฐ ๋นŒ๋“œ๋ฅผ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋ณธ ํ”„๋กœ์ ํŠธ๋Š” ktlint๋ฅผ ํ†ตํ•ด, kotlin ๊ณต์‹ ์ฝ”๋”ฉ ์ปจ๋ฒค์…˜์„ ์ค€์ˆ˜ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  4. build
  • 2,3๋ฒˆ์˜ ์ž‘์—…์€ gradlew์—์„œ build task๋ฅผ ์‹คํ–‰ํ•  ๋•Œ, test์™€ lint๋ฅผ ์„ ํ–‰ํ•˜๊ณ  ์‹คํŒจํ•  ๊ฒฝ์šฐ build๋ฅผ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค.

CD process

  • CI ํŒŒ์ดํ”„๋ผ์ธ์ด ์„ฑ๊ณตํ•˜๋ฉด, CD ํŒŒ์ดํ”„๋ผ์ธ์ด ์‹คํ–‰๋˜๋„๋ก ๊ตฌ์„ฑํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.
  • jib๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, was์˜ docker ์ด๋ฏธ์ง€ ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ณ , ๋นŒ๋“œ ์†๋„๋ฅผ ๋†’์ด๋Š” ๋ฐฉํ–ฅ์„ ์ฑ„ํƒ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • jib๋ฅผ ํ™œ์šฉํ•˜๋ฉด, was์˜ ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ ์ž๋™ํ™”๊ฐ€ ๋” ์ˆ˜์›”ํ•ด์ง€๋ฉฐ, layer caching์„ ํ†ตํ•ด ๋นŒ๋“œ ์†๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์‰˜์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•ด, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ด€๋ฆฌํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋งŽ์•„์ ธ ๋ณต์žกํ•ด์งˆ ๊ฒฝ์šฐ, ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์„ ๊ตฌ์„ฑํ•˜๊ณ  ๊ทธ์— ๋งž๋Š” ๋„๊ตฌ๋ฅผ ์„ ํƒํ•˜์—ฌ CD ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ณ ๋„ํ™”ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

์š”๊ตฌ์‚ฌํ•ญ ๋ถ„์„

์ฝ˜์„œํŠธ ์˜ˆ์•ฝ ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„  ์•„๋ž˜ 6๊ฐ€์ง€์˜ api๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • ์œ ์ € ํ† ํฐ ๋ฐœ๊ธ‰ API
  • ์˜ˆ์•ฝ ๊ฐ€๋Šฅ ๋‚ ์งœ ์กฐํšŒ API
  • ์˜ˆ์•ฝ ๊ฐ€๋Šฅ ์ขŒ์„ ์กฐํšŒ API
  • ์ขŒ์„ ์˜ˆ์•ฝ ์š”์ฒญ API
  • ์ž”์•ก ์ถฉ์ „ / ์กฐํšŒ API
  • ๊ฒฐ์ œ API

์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ

๋ฆฌํŒฉํ† ๋ง ๋ฐ ๊ณ ๋„ํ™” ๊ณผ์ •์ดํ›„ ์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ ์žฌ์ž‘์„ฑ ์ค‘

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published