23.11.13 - woowacourse/Branding GitHub Wiki

๋ธŒ๋žœ๋”ฉ ๊ทผ๋กœ ํšŒ์˜๋ก

[ํ…Œ์ฝ”๋ธ” 1์กฐ]

์ง€๋‚œ์ฃผ ์—…๋ฌด๋‚ด์šฉ

  • ์• ์‰ฌ: ์ฝ”์น˜ ํ”ผ๋“œ๋ฐฑ ์žฌ์š”์ฒญ
  • ๊ฐ€๋žŒ: ์„ผํŠธ ๊ธ€ ์ง„ํ–‰์ค‘ (๋ฉด์ ‘ ์ค‘์ด๋ผ ์กฐ๊ธˆ ๋Šฆ์–ด์ง)
  • ๋ฆฌ์˜ค: ๋ฆฌ์˜ค ๊ธ€ PR

์ด๋ฒˆ์ฃผ ์—…๋ฌด ๋‚ด์šฉ

  • ์• ์‰ฌ: ์ฝ”์น˜ ํ”ผ๋“œ๋ฐฑ ์žฌ์š”์ฒญ
  • ๊ฐ€๋žŒ: ์„ผํŠธ ๊ธ€ ์ง„ํ–‰์ค‘ (๋ฉด์ ‘ ์ค‘์ด๋ผ ์กฐ๊ธˆ ๋Šฆ์–ด์ง)
  • ๋ฆฌ์˜ค: ์ฝ”์น˜ ํ”ผ๋“œ๋ฐฑ ์š”์ฒญ ์˜ˆ์ •

[ํ…Œ์ฝ”๋ธ” 2์กฐ]

์ง€๋‚œ์ฃผ ์—…๋ฌด ๋‚ด์šฉ

  • ๋ฃจ์ฟ : ๋ฒ ๋ฒ  ๊ธ€ ํฌ๋ฃจ ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜
  • ์ด๋ ˆ: ์นด๋“œ ๋‰ด์Šค ์ œ์ž‘
  • ํฌ์ด: ์นด๋“œ ๋‰ด์Šค ์ œ์ž‘
  • ๋กœ์ด: ํ…Œ์˜ค, ์—ฌ์šฐ ๊ธ€ ํฌ๋ฃจ ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜

์ด๋ฒˆ์ฃผ ์—…๋ฌด ๋‚ด์šฉ

  • ๋ฃจ์ฟ : ๋ฒ ๋ฒ  ๊ธ€ ํฌ๋ฃจ&์ฝ”์น˜ ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜
  • ์ด๋ ˆ: ๊ธ€ ๋ฐฐํฌ
  • ํฌ์ด: ๊ธ€ ๋ฐฐํฌ
  • ๋กœ์ด: ํ…Œ์˜ค, ์—ฌ์šฐ ๊ธ€ ์ฝ”์น˜ ํ”ผ๋“œ๋ฐฑ & ์—ฌ์šฐ ๊ธ€ ์นด๋“œ ๋‰ด์Šค ์ œ์ž‘

[์˜์ƒ๊ธฐํšํŒ€]

์ง€๋‚œ์ฃผ ์—…๋ฌด ๋‚ด์šฉ

  • ์ตœ์ข… ๋ฐ๋ชจ๋ฐ์ด ์˜์ƒ ํŽธ์ง‘ ์™„๋ฃŒ

์ด๋ฒˆ์ฃผ ์—…๋ฌด ๋‚ด์šฉ

  • ์ธ๋„ค์ผ ์ œ์ž‘ ํ›„ ์—…๋กœ๋“œ ์˜ˆ์ •

[ํ…Œ์ฝ”ํ†ก]

๋ฐฑ์—”๋“œ

  • ์ฌ์ƒท: 1/1
  • ๋งˆ์ฝ”: 0/0
  • ํ† ๋ฆฌ: 1/1

ํ”„๋ก ํŠธ์—”๋“œ/์•ˆ๋“œ๋กœ์ด๋“œ

  • ์ฝ”๋‚œ: 1/1
  • ์—์ด๋“ : 1/1
  • ์ฝ”๋น„: 0/1

[์ง„ํ–‰ ์‚ฌํ•ญ ์™ธ ์ด์Šˆ]

ํ…Œ์ฝ”๋ธ” ์ƒˆ๋กœ์šด ๊ธ€ ๊ธฐ๊ณ  ๊ด€๋ จ

  • ๋ฐฑ์—”๋“œ ํฌ๋ฃจ ๋ฉ”๋ฆฌ(์ตœ์Šน์›)๊ฐ€ ํ…Œ์ฝ”๋ธ”์— ๊ธฐ๊ณ ํ•˜๊ณ  ์‹ถ๋‹ค๋Š” ์˜๊ฒฌ์„ ์ „ํ•ด์™€์„œ์š”!

์ฃผ์ œ๋Š” ์Šคํ”„๋ง ์ด๋ฒคํŠธ์™€ ํŠธ๋žœ์žญ์…˜ ๋ถ„๋ฆฌ

  1. ํ”„๋กœ์ ํŠธ์—์„œ ํŠธ๋žœ์žญ์…˜ ๋ถ„๋ฆฌ์˜ ํ•„์š”์„ฑ์„ ๋Š๋‚€ ๊ณ„๊ธฐ

    • ์˜ˆ์™ธ๋ฅผ try-catch๋กœ ์žก์•„๋„ RuntimeException์— ์˜ํ•ด ๋กค๋ฐฑ๋˜์–ด ํŠธ๋žœ์žญ์…˜ ๋ถ„๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

    โ†’ ๋‘ ๊ฐœ์˜ ๋…๋ฆฝ์ ์ธ ์„œ๋น„์Šค๋ผ๊ณ  ํŒ๋‹จํ•ด ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ํŠธ๋žœ์žญ์…˜ ๋ถ„๋ฆฌ

  2. ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠธ๋žœ์žญ์…˜์„ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

    1. @Transactional(propagation = Propagation.REQUIRES_NEW) + @EventListener ์‚ฌ์šฉ ์‹œ ๋™์ž‘ ๋ฐฉ์‹๊ณผ ์ฃผ์˜ํ•  ์ 
    2. @TransactionalEventListener ์œผ๋กœ 1๋ฒˆ ๋ฐฉ๋ฒ• ์‚ฌ์šฉ ์‹œ ํ•œ๊ณ„๋ฅผ ๋ณด์™„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•, ์‚ฌ์šฉ ์‹œ ๋™์ž‘ ๋ฐฉ์‹๊ณผ ์ฃผ์˜ํ•  ์ 
    3. @Async + @TransactionalEventListener ์œผ๋กœ 2๋ฒˆ ๋ฐฉ๋ฒ• ์‚ฌ์šฉ ์‹œ ํ•œ๊ณ„๋ฅผ ๋ณด์™„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•, ์‚ฌ์šฉ ์‹œ ๋™์ž‘ ๋ฐฉ์‹๊ณผ ์ฃผ์˜ํ•  ์ 

์˜๊ฒฌ

  1. ๋ฐฑ์—”๋“œ ๊ธฐ๊ณ ๋ฅผ ํฌ๋งํ–ˆ์ง€๋งŒ ์„ ์ •์—์„œ ํƒˆ๋ฝํ•œ ์ธ์›์ด ์žˆ์–ด์„œ ์•„์‰ฌ์›Œํ•˜๋Š” ํฌ๋ฃจ๋“ค์ด ์žˆ๋‹ค. ํ•ด๋‹น ์ธ์›์ธ ๋Š๋ผ๊ธฐ์—๋Š” ๋น„ํ•ฉ๋ฆฌ์ ์ผ ์ˆ˜ ์žˆ์Œ.
  2. ์ฃผ์ œ๊ฐ€ ์ด๋ฏธ ํ…Œ์ฝ”๋ธ”์— ๊ธฐ๊ณ ๋œ ๊ฒƒ์ด ์žˆ์–ด์„œ ์•„์‰ฌ์›€

๊ฒฐ๋ก 

  • ํ…Œ์ฝ”๋ธ”์— ์˜ฌ๋ฆฌ์ง„ ์•Š๊ณ , ๋”ฐ๋กœ ๋ธ”๋กœ๊ทธ์— ๊ธ€์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํ•  ์˜ˆ์ •

ํ…Œ์ฝ”๋ธ” ๊ฐœ์„  ์ž‘์—… ๊ณต์œ 

  1. ์—์ด๋“  ๋ฆฌ๋ทฐ์— ์ด์–ด ๊ณต์› ๋ฆฌ๋ทฐ๊นŒ์ง€ ์™„๋ฃŒ
  2. ๋นŒ๋“œ ํƒ€์ž„ ๊ฐœ์„ ์— ๋Œ€ํ•ด์„œ ์ฃผ๋ง์— ๋จธ์ง€ ์™„๋ฃŒ
  3. ํ…Œ์ฝ”๋ธ” ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์— ๋จธ์ง€ํ•˜๊ณ  ์ •์ƒ์ ์œผ๋กœ ํ…Œ์ŠคํŠธ ๋˜๋Š”์ง€ ํ™•์ธ
    • ์บ์‹œ๊ฐ€ ๋˜์–ด์„œ ๋นŒ๋“œ ์‹œ๊ฐ„์ด ์ค„์–ด๋“œ๋Š” ๋ถ€๋ถ„์€ ํ…Œ์ŠคํŠธ ํ•˜์ง€ ๋ชปํ•จ
    • ์ดํ›„ ์ž‘์—…๋“ค์ด ๋จธ์ง€๋˜์–ด์„œ ์ƒˆ๋กœ ๋นŒ๋“œํ•  ๋•Œ ์‹œ๊ฐ„์ด ์ค„์–ด๋“œ๋Š”์ง€ ํ™•์ธํ•ด๋ณผ ์˜ˆ์ •
  4. ์ด๋ฒˆ์ฃผ์— ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ ์ž‘์—… ๊ณต์› ๋ฆฌ๋ทฐ ๋ฐ˜์˜ํ•ด์„œ ๋งˆ๋ฌด๋ฆฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.