๊ฐ€์žฅ ์‰ฌ์šด ๋™์‹œ์„ฑ ๋ฌธ์ œ - Race Condition

๋Œ€ํ‘œ์ ์ธ ๋™์‹œ์„ฑ ๋ฌธ์ œ์ธ ๊ฒฝ์Ÿ ์ƒํƒœ(Race Condition)๋ฅผ ์ฃผ์ œ๋กœ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค. ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๋‹จ์ผ ์„œ๋ฒ„ ํ™˜๊ฒฝ๊ณผ ๋ถ„์‚ฐ ํ™˜๊ฒฝ์„ ๋น„๊ตํ•˜๋ฉด์„œ ์‹ค์Šตํ•ฉ๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜ ๊ฒฝ๊ณ„์™€ ๊ฒฉ๋ฆฌ์ˆ˜์ค€์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚™๊ด€์  ๋ฝ, ๋น„๊ด€์  ๋ฝ, ๋ถ„์‚ฐ ๋ฝ์˜ ์ฐจ์ด๋ฅผ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

(5.0) ์ˆ˜๊ฐ•ํ‰ 7๊ฐœ

์ˆ˜๊ฐ•์ƒ 70๋ช…

๋‚œ์ด๋„ ์ดˆ๊ธ‰

์ˆ˜๊ฐ•๊ธฐํ•œ ๋ฌด์ œํ•œ

์‹ค์Šต ์ค‘์‹ฌ
์‹ค์Šต ์ค‘์‹ฌ
๋‚™๊ด€์ ๋ฝ
๋‚™๊ด€์ ๋ฝ
๋น„๊ด€์ ๋ฝ
๋น„๊ด€์ ๋ฝ
๋ถ„์‚ฐ๋ฝ
๋ถ„์‚ฐ๋ฝ
๋™์‹œ์„ฑ๋ฌธ์ œ
๋™์‹œ์„ฑ๋ฌธ์ œ
์‹ค์Šต ์ค‘์‹ฌ
์‹ค์Šต ์ค‘์‹ฌ
๋‚™๊ด€์ ๋ฝ
๋‚™๊ด€์ ๋ฝ
๋น„๊ด€์ ๋ฝ
๋น„๊ด€์ ๋ฝ
๋ถ„์‚ฐ๋ฝ
๋ถ„์‚ฐ๋ฝ
๋™์‹œ์„ฑ๋ฌธ์ œ
๋™์‹œ์„ฑ๋ฌธ์ œ

๋จผ์ € ๊ฒฝํ—˜ํ•œ ์ˆ˜๊ฐ•์ƒ๋“ค์˜ ํ›„๊ธฐ

๋จผ์ € ๊ฒฝํ—˜ํ•œ ์ˆ˜๊ฐ•์ƒ๋“ค์˜ ํ›„๊ธฐ

5.0

5.0

๋ฝ€๋ฏธ

100% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

๋™์‹œ์„ฑ ๋ฌธ์ œ๋Š” ๊ฐœ๋…์€ ๋“ค์–ด๋ดค์ง€๋งŒ ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ๋ฐœ์ƒํ•˜๋Š”์ง€ ์ฒด๊ฐํ•˜๊ธฐ ์–ด๋ ค์› ๋Š”๋ฐ, ์ด ๊ฐ•์˜๋Š” โ€œ๊ฐ€์žฅ ์‰ฌ์šด ๋™์‹œ์„ฑ ๋ฌธ์ œโ€๋ผ๋Š” ์ œ๋ชฉ์— ์ž˜ ๋งž๋Š” ๊ฐ•์˜์˜€์Šต๋‹ˆ๋‹ค ! ๐Ÿ‘ Race Condition์„ ๊ทธ๋ฆผ๊ณผ ์ฝ”๋“œ ์˜ˆ์‹œ๋กœ ์„ค๋ช…ํ•ด์ฃผ์…”์„œ ์ดํ•ด๊ฐ€ ์ž˜ ๋˜์—ˆ๊ณ , ์™œ ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€ ํ๋ฆ„์„ ๋”ฐ๋ผ๊ฐ€๋ฉฐ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜Š ๋‹ค๋ฅธ ์ฃผ์ œ๋กœ ๊ฐ•์˜ ๋˜ ๋“ค์–ด๋ณด๊ณ  ์‹ถ์–ด์š” !

5.0

ํ•˜๋‚˜์˜๋ฌต

100% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

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

5.0

์ด๋‹ฌํŒฝ

100% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ์ด๋ก ์ ์œผ๋กœ๋งŒ ์•Œ๊ณ  ์žˆ์—ˆ๋Š”๋ฐ ๊ฐ•์‚ฌ๋‹˜ ๋”ฐ๋ผ race condition์„ ์ฝ”๋“œ ๋ ˆ๋ฒจ์—์„œ ์ง์ ‘ ์žฌํ˜„ํ•˜๊ณ  ํ•ด๊ฒฐํ•ด๋ณด๋ฉด์„œ ๊ฐ์„ ํ™•์‹คํžˆ ์ตํž ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ณต์œ DB, ๋ถ„์‚ฐํ™˜๊ฒฝ ๋“ฑ ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์„ ๊ฐ€์ •ํ•˜๊ณ  ์‹ค์Šตํ•˜๋Š” ๊ฒƒ๋„ ๋„์›€์ด ๋งŽ์ด ๋์–ด์š”. ใ…Žใ…Ž ์ €์ฒ˜๋Ÿผ ๋™์‹œ์„ฑ ๋ฌธ์ œ์— ์ž…๋ฌธํ•˜๋Š” ๋ถ„๋“ค์—๊ฒŒ ์ข‹์€ ๊ฐ•์˜์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค~

์ˆ˜๊ฐ• ํ›„ ์ด๋Ÿฐ๊ฑธ ์–ป์„ ์ˆ˜ ์žˆ์–ด์š”

  • ๋™์‹œ์„ฑ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ทผ๋ณธ์ ์ธ ์›์ธ๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  • ๋‹จ์ผ ์„œ๋ฒ„ ํ™˜๊ฒฝ๊ณผ ๋ถ„์‚ฐ ์„œ๋ฒ„ ํ™˜๊ฒฝ์—์„œ ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•

  • ๋‚™๊ด€์  ๋ฝ, ๋น„๊ด€์  ๋ฝ, ๋ถ„์‚ฐ ๋ฝ ์ œ๋Œ€๋กœ ์•Œ๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ

  • ํŠธ๋žœ์žญ์…˜ ๊ฒฝ๊ณ„์™€ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์˜ ์ดํ•ด

  • IntelliJ IDEA, Docker, k6 ํ™œ์šฉ ๋ฐฉ๋ฒ•

๋™์‹œ์„ฑ ๋ฌธ์ œ ์•„์ง๋„ ํ—ท๊ฐˆ๋ฆฌ์‹œ๋‚˜์š”?

์ด ๊ฐ•์˜๋กœ ๋‚™๊ด€์  ๋ฝ, ๋น„๊ด€์  ๋ฝ, ๋ถ„์‚ฐ ๋ฝ ๋“ฑ ๋™์‹œ์„ฑ ๋ฌธ์ œ์˜ ๊ฐœ๋…๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ •ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•˜์„ธ์š”.

  • ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ํ™˜๊ฒฝ์„ ๋งŒ๋“ค์–ด์„œ ์‹ค์ œ๋กœ ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ๊ฒฝํ—˜ํ•ฉ๋‹ˆ๋‹ค.

  • ๋‹จ์ผ ์„œ๋ฒ„ ํ™˜๊ฒฝ๊ณผ ๋ถ„์‚ฐ ์„œ๋ฒ„ ํ™˜๊ฒฝ์—์„œ ๋™์‹œ์„ฑ ๋ฌธ์ œ์˜ ์ฐจ์ด๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

  • ์ •ํ™•ํžˆ ๋ชจ๋ฅด๊ณ  ์‚ฌ์šฉํ–ˆ๋˜ @Transactional ์• ๋…ธํ…Œ์ด์…˜์˜ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋™์‹œ์„ฑ ๋ฌธ์ œ๋Š” ํ•˜๋‚˜์ธ๋ฐ ์™œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€์ผ๊นŒ์š”? ์ด์œ ๋ฅผ ํ™•์ธํ•ด ๋ณด์„ธ์š”.

์ด๋Ÿฐ ๋ถ„๋“ค๊ป˜ ์ถ”์ฒœํ•ด์š”

์ด ๊ฐ•์˜๋ฅผ ๋“ค์–ด์•ผ ํ•˜๋Š” ๋ถ„ (1)

๋™์‹œ์„ฑ ๋ฌธ์ œ ์‚ฌ์‹ค ์•„์ง๋„ ์ž˜ ๋ชจ๋ฅด๊ฒ ์–ด์š”. ๐Ÿ˜…

์ด ๊ฐ•์˜๋ฅผ ๋“ค์–ด์•ผ ํ•˜๋Š” ๋ถ„ (2)

๋‚™๊ด€์  ๋ฝ, ๋น„๊ด€์  ๋ฝ, ๋ถ„์‚ฐ ๋ฝ์˜ ์ฐจ์ด๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๊ณ  ์žˆ์–ด์š”. ๐ŸŒง๏ธ

์ด ๊ฐ•์˜๋ฅผ ๋“ค์–ด์•ผ ํ•˜๋Š” ๋ถ„ (3)

๋™์‹œ์„ฑ ๋ฌธ์ œ๋Š” ์–ด๋–ป๊ฒŒ ํ…Œ์ŠคํŠธํ•ด์•ผ ํ•˜๋‚˜์š”? ๐Ÿ“œ

์ˆ˜๊ฐ• ํ›„์—๋Š”

  • ์‹ค๋ฌด์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ๋ฐœ์ƒํ•˜๋Š” ๋™์‹œ์„ฑ ๋ฌธ์ œ์ธ ๊ฒฝ์Ÿ ์ƒํƒœ(Race Condition)์— ๋Œ€ํ•ด์„œ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ž˜ ๋ชจ๋ฅด๊ณ  ์‚ฌ์šฉํ–ˆ ๋˜ @Transcational ์• ๋…ธํ…Œ์ด์…˜์„ ์ œ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋‹จ์ผ ์„œ๋ฒ„ ํ™˜๊ฒฝ๊ณผ ๋ถ„์‚ฐ ์„œ๋ฒ„ ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•˜๊ณ  ์ •ํ™•ํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€๊ณผ ๊ฒฝ๊ณ„์— ๋Œ€ํ•ด์„œ ์ดํ•ดํ•˜๊ณ  ์‹ค๋ฌด์— ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ฐ•์˜์˜ ํŠน์ง•

ํŽธ๋ฆฌํ•œ ์‹ค์Šต์„ ์œ„ํ•œ IntelliJ IDEA์˜ ํ™œ์šฉ๊ณผ Notion, Github๋ฅผ ํ™œ์šฉํ•œ ๊ฐ•์˜ ์ž๋ฃŒ ์ œ๊ณต

์ด ๊ฐ•์˜์˜ ํ•ต์‹ฌ ๊ฐ•์  (1)

IntelliJ์— ์ด๋Ÿฐ ๊ธฐ๋Šฅ์ด ์žˆ์—ˆ๊ตฌ๋‚˜. ๐Ÿ˜ฒ

์‹คํ–‰๋œ API ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ…Œ์ŠคํŠธ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  DB์— ์ ‘์†ํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  Redis์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋Š” ์ž‘์—…์„ IntelliJ์—์„œ ๋ชจ๋‘ ํ•œ๋ฒˆ์— ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ฐ•์˜์˜ ํ•ต์‹ฌ ๊ฐ•์  (2)

์—…๋ฐ์ดํŠธ๊ฐ€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ˜์˜๋˜๋Š” Notion ๊ฐ•์˜ ์ž๋ฃŒ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์‹ค์Šต์„ ์ž˜ ๋”ฐ๋ผ์˜ค์‹ค ์ˆ˜ ์žˆ๋„๋ก ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๋ฅผ GitHub ๋งํฌ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๋‚ด์šฉ์„ ๋ฐฐ์›Œ์š”

๋™์‹œ์„ฑ ๋ฌธ์ œ์˜ ๊ทผ๋ณธ์ ์ธ ์ด์œ ์™€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

๋™์‹œ์„ฑ ๋ฌธ์ œ์˜ ๊ทผ๋ณธ์ ์ธ ์ด์œ ๋ฅผ ์•Œ๊ณ  ๊ณ„์‹œ๋‚˜์š”?

๊ทผ๋ณธ์ ์ธ ์›์ธ๋ถ€ํ„ฐ ์ดํ•ดํ•˜๊ณ  ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šฐ๋ฉด ๋” ์ •ํ™•ํ•˜๊ฒŒ ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•˜๊ณ  ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ•์˜์—์„œ๋Š” ๋™์‹œ์„ฑ ๋ฌธ์ œ์˜ ๊ฐœ๋…๋ถ€ํ„ฐ ์žก๊ณ  ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ ์‹ค์Šตํ•˜๋Š” ๋‹ค์–‘ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

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

์–ด๋–ค ํ™˜๊ฒฝ์—์„œ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•ด์•ผํ•  ์ง€ ์•Œ๊ณ ์žˆ์–ด์•ผ ์‹ค๋ฌด์— ๋ฐ”๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2๊ฐœ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋™์‹œ์— ์‹คํ–‰ํ•˜์—ฌ ๋ถ„์‚ฐ ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ฐ•์˜๋ฅผ ๋งŒ๋“  ์‚ฌ๋žŒ

  • (ํ˜„) ์•ˆ๋žฉ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž


๊ถ๊ธˆํ•œ ์ ์ด ์žˆ๋‚˜์š”?

Q. ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ผ๋Š” ์ฃผ์ œ๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ต๊ฒŒ ๋А๊ปด์ ธ์š”. ๐Ÿซฅ

๋™์‹œ์„ฑ ๋ฌธ์ œ๊ฐ€ ์–ด๋ ต๊ฒŒ ๋А๊ปด์ง€๋Š” ์ด์œ ๋Š” ๊ฐœ๋…์ด ๋ณต์žกํ•ด์„œ๊ฐ€ ์•„๋‹ˆ๋ผ, ์‹ค๋ฌด์—์„œ ์ง์ ‘ ๊ฒฝํ—˜ํ•˜๊ธฐ ์ „๊นŒ์ง€ ๊ฐ์ด ์žกํžˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
๊ฐ•์˜์—์„œ๋Š” ํ•ต์‹ฌ ๊ฐœ๋…๋งŒ ์ถ”๋ ค ์‹ค์Šต ์ค‘์‹ฌ์œผ๋กœ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
์ฝ”๋“œ๋กœ ๋ฐ”๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด ๋น ๋ฅด๊ฒŒ ์ดํ•ดํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Q. ์Šคํ”„๋ง ๋ถ€ํŠธ๋‚˜ JPA์— ๋Œ€ํ•ด์„œ ์•„์ง ์ž˜ ๋ชจ๋ฅด๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ๐Ÿคฆโ€โ™€๏ธ

์Šคํ”„๋ง ๋ถ€ํŠธ์™€ JPA๋ฅผ ๊นŠ์ด ์•Œ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.
๋™์‹œ์„ฑ ๊ฐœ๋…์€ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋ณ„๊ฐœ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ฐ•์˜์—์„œ๋Š” ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์ตœ์†Œํ•œ์œผ๋กœ ์„ค๋ช…ํ•˜๊ณ  ๋ฐ”๋กœ ์‹ค์Šต์— ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
์‹ค์Šต์—์„œ ์‚ฌ์šฉํ•œ ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๋„ ๊นƒํ—ˆ๋ธŒ๋กœ ์ œ๊ณตํ•˜๊ณ  ์žˆ์œผ๋‹ˆ ๋ฐ”๋กœ ๋”ฐ๋ผ์˜ค์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Q. ๋™์‹œ์„ฑ ๋ฌธ์ œ๊ฐ€ ์‹ค๋ฌด์—์„œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๊ฑด๊ฐ€์š”โ“

๋„ค, ์‹ค์ œ ์„œ๋น„์Šค์—์„œ๋Š” ์ž์ฃผ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ๊ฑฐ๋‚˜ ๊ณต์œ  ์ž์› ์ ‘๊ทผ์ด ์žˆ๋Š” ๊ตฌ์กฐ์—์„œ๋Š” ๊ฑฐ์˜ ํ•„์—ฐ์ ์œผ๋กœ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
ํŠนํžˆ ์žฌ๊ณ  ๊ฐ์†Œ, ๊ฒฐ์ œ, ์˜ˆ์•ฝ์ฒ˜๋Ÿผ ์ƒํƒœ ๋ณ€๊ฒฝ ๋กœ์ง์—์„œ ๋นˆ๋ฒˆํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ์ดˆ๊ธฐ ์„ค๊ณ„ ๋‹จ๊ณ„๋ถ€ํ„ฐ ๋™์‹œ์„ฑ ์ œ์–ด ์ „๋žต์„ ๊ณ ๋ คํ•˜๋Š” ๊ฒƒ์ด ์‹ค๋ฌด์—์„œ ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค.

์ˆ˜๊ฐ• ์ „ ์ฐธ๊ณ  ์‚ฌํ•ญ

๊ฐ•์‚ฌ์˜ ์‹ค์Šต ํ™˜๊ฒฝ

  • ์šด์˜ ์ฒด์ œ ๋ฐ ๋ฒ„์ „: Windows 11

  • ์‚ฌ์šฉ ๋„๊ตฌ: IntelliJ IDEA Ultimate Edition, Docker, k6, Spring Boot, DBMS/RDBMS, Redis


์„ ์ˆ˜ ์ง€์‹ ๋ฐ ์œ ์˜์‚ฌํ•ญ

  • Spring Boot, JPA, RDBMS

  • ์ด ๊ฐ•์˜๋Š” ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ์‹ค์Šตํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ์ˆœ๊ฐ„์ ์œผ๋กœ ๋งŽ์€ ์š”์ฒญ์„ ๋งŒ๋“œ๋Š” ํ™˜๊ฒฝ์—์„œ ์‹ค์Šตํ•˜๊ณ  ์žˆ์ง€๋งŒ ๋Œ€๋Ÿ‰์˜ ์š”์ฒญ์„ ๋ฌธ์ œ์—†์ด ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ฐ•์˜๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

  • ๋Œ€๋Ÿ‰์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์„œ๋กœ ๋‹ค๋ฅธ ์ฃผ์ œ๋ผ๋Š” ์ ์„ ์•Œ๋ ค๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๋ถ„๋“ค๊ป˜
์ถ”์ฒœ๋“œ๋ ค์š”

ํ•™์Šต ๋Œ€์ƒ์€
๋ˆ„๊ตฌ์ผ๊นŒ์š”?

  • ๊ณ„์†ํ•ด์„œ ํ—ท๊ฐˆ๋ฆฌ๋Š” ๋™์‹œ์„ฑ ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ๊ณ ๋ฏผ์ธ ๊ฐœ๋ฐœ์ž

  • ๋™์‹œ์„ฑ ๋ฌธ์ œ์™€ ๊ด€๋ จ๋œ ํŠธ๋žœ์žญ์…˜์„ ์ดํ•ดํ•˜๊ณ  ์‹ถ์€ ๊ฐœ๋ฐœ์ž

  • ๋‚™๊ด€์  ๋ฝ, ๋น„๊ด€์  ๋ฝ, ๋ถ„์‚ฐ ๋ฝ์˜ ์ฐจ์ด๋ฅผ ์ดํ•ดํ•˜๊ณ  ์ ์šฉํ•˜๊ณ  ์‹ถ์€ ๊ฐœ๋ฐœ์ž

์„ ์ˆ˜ ์ง€์‹,
ํ•„์š”ํ• ๊นŒ์š”?

  • ๊ฐ„๋‹จํ•œ API ๋ฐฑ์—”๋“œ ์„œ๋ฒ„ ๊ฐœ๋ฐœ ๊ฒฝํ—˜ (Spring Boot)

  • ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค(RDBMS, NoSQL)์— ๋Œ€ํ•œ ๊ธฐ์ดˆ ์ง€์‹

์•ˆ๋…•ํ•˜์„ธ์š”
์กฐ์š”ํ”ผ์ž…๋‹ˆ๋‹ค.

70

๋ช…

์ˆ˜๊ฐ•์ƒ

7

๊ฐœ

์ˆ˜๊ฐ•ํ‰

5.0

์ 

๊ฐ•์˜ ํ‰์ 

1

๊ฐœ

๊ฐ•์˜

(ํ˜„) ์•ˆ๋žฉ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž

์ปค๋ฆฌํ˜๋Ÿผ

์ „์ฒด

25๊ฐœ โˆ™ (3์‹œ๊ฐ„ 54๋ถ„)

๊ฐ•์˜ ๊ฒŒ์‹œ์ผ: 
๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ์ผ: 

์ˆ˜๊ฐ•ํ‰

์ „์ฒด

7๊ฐœ

5.0

7๊ฐœ์˜ ์ˆ˜๊ฐ•ํ‰

  • ์ด๋‹ฌํŒฝ๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
    ์ด๋‹ฌํŒฝ

    ์ˆ˜๊ฐ•ํ‰ 1

    โˆ™

    ํ‰๊ท  ํ‰์  5.0

    5

    100% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

    ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ์ด๋ก ์ ์œผ๋กœ๋งŒ ์•Œ๊ณ  ์žˆ์—ˆ๋Š”๋ฐ ๊ฐ•์‚ฌ๋‹˜ ๋”ฐ๋ผ race condition์„ ์ฝ”๋“œ ๋ ˆ๋ฒจ์—์„œ ์ง์ ‘ ์žฌํ˜„ํ•˜๊ณ  ํ•ด๊ฒฐํ•ด๋ณด๋ฉด์„œ ๊ฐ์„ ํ™•์‹คํžˆ ์ตํž ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ณต์œ DB, ๋ถ„์‚ฐํ™˜๊ฒฝ ๋“ฑ ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์„ ๊ฐ€์ •ํ•˜๊ณ  ์‹ค์Šตํ•˜๋Š” ๊ฒƒ๋„ ๋„์›€์ด ๋งŽ์ด ๋์–ด์š”. ใ…Žใ…Ž ์ €์ฒ˜๋Ÿผ ๋™์‹œ์„ฑ ๋ฌธ์ œ์— ์ž…๋ฌธํ•˜๋Š” ๋ถ„๋“ค์—๊ฒŒ ์ข‹์€ ๊ฐ•์˜์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค~

    • ์กฐ์š”ํ”ผ
      ์ง€์‹๊ณต์œ ์ž

      ์ด๋ก ์œผ๋กœ๋งŒ ์•Œ๋˜ ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ์ง์ ‘ ์ฝ”๋“œ๋กœ ์žฌํ˜„ํ•˜๊ณ  ํ•ด๊ฒฐํ•˜์‹œ๋ฉด์„œ ํ™•์‹คํžˆ ๊ฐ์„ ์žก์œผ์…จ๋‹ค๋Š” ํ”ผ๋“œ๋ฐฑ์ด ์ €์—๊ฒ ๋„ˆ๋ฌด ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๊ฐ•์˜๋ฅผ ๊ธฐํšํ•  ๋•Œ ์ด ๋ถ€๋ถ„์ด ๊ฐ€์žฅ ํฐ ๋ชฉํ‘œ์˜€๊ฑฐ๋“ ์š”. ๊ณต์œ  DB๋‚˜ ๋ถ„์‚ฐ ํ™˜๊ฒฝ ๊ฐ™์€ ์‹ค๋ฌด์ ์ธ ํ™˜๊ฒฝ์„ ๊ฐ€์ •ํ•˜๊ณ  ์—ฐ์Šตํ•˜์‹  ๊ฒƒ์ด ์‹ค๋ฌด์—์„œ ๋งŽ์€ ๋„์›€์ด ๋˜์…จ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค. ๋™์‹œ์„ฑ ์ž…๋ฌธ์ž๋ถ„๋“ค์—๊ฒŒ ์ข‹์€ ๊ฐ•์˜๊ฐ€ ๋  ๊ฒƒ ๊ฐ™๋‹ค๋Š” ๋ง์”€๋„ ์ €์—๊ฒŒ ํฐ ํž˜์ด ๋ฉ๋‹ˆ๋‹ค. ์ข‹์€ ๋ฆฌ๋ทฐ ๋‚จ๊ฒจ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๐Ÿ™‡

  • ๋ฝ€๋ฏธ๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
    ๋ฝ€๋ฏธ

    ์ˆ˜๊ฐ•ํ‰ 1

    โˆ™

    ํ‰๊ท  ํ‰์  5.0

    ์ˆ˜์ •๋จ

    5

    100% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

    ๋™์‹œ์„ฑ ๋ฌธ์ œ๋Š” ๊ฐœ๋…์€ ๋“ค์–ด๋ดค์ง€๋งŒ ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ๋ฐœ์ƒํ•˜๋Š”์ง€ ์ฒด๊ฐํ•˜๊ธฐ ์–ด๋ ค์› ๋Š”๋ฐ, ์ด ๊ฐ•์˜๋Š” โ€œ๊ฐ€์žฅ ์‰ฌ์šด ๋™์‹œ์„ฑ ๋ฌธ์ œโ€๋ผ๋Š” ์ œ๋ชฉ์— ์ž˜ ๋งž๋Š” ๊ฐ•์˜์˜€์Šต๋‹ˆ๋‹ค ! ๐Ÿ‘ Race Condition์„ ๊ทธ๋ฆผ๊ณผ ์ฝ”๋“œ ์˜ˆ์‹œ๋กœ ์„ค๋ช…ํ•ด์ฃผ์…”์„œ ์ดํ•ด๊ฐ€ ์ž˜ ๋˜์—ˆ๊ณ , ์™œ ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€ ํ๋ฆ„์„ ๋”ฐ๋ผ๊ฐ€๋ฉฐ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜Š ๋‹ค๋ฅธ ์ฃผ์ œ๋กœ ๊ฐ•์˜ ๋˜ ๋“ค์–ด๋ณด๊ณ  ์‹ถ์–ด์š” !

    • ์กฐ์š”ํ”ผ
      ์ง€์‹๊ณต์œ ์ž

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

  • ํ•˜๋‚˜์˜๋ฌต๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
    ํ•˜๋‚˜์˜๋ฌต

    ์ˆ˜๊ฐ•ํ‰ 1

    โˆ™

    ํ‰๊ท  ํ‰์  5.0

    ์ˆ˜์ •๋จ

    5

    100% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

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

    • ์กฐ์š”ํ”ผ
      ์ง€์‹๊ณต์œ ์ž

      ์ •์„ฑ ๊ฐ€๋“ํ•œ ์ˆ˜๊ฐ•ํ‰ ๋‚จ๊ฒจ์ฃผ์…”์„œ ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์‹ค ๋™์‹œ์„ฑ์ด๋ผ๋Š” ๊ฒŒ ๋ˆˆ์— ๋ณด์ด์ง€ ์•Š์•„์„œ ๋ง‰์ƒ ์ดํ•ดํ•˜๋ ค๋ฉด ์–ด๋ ต๊ฒŒ ๋А๊ปด์ง€๋Š” ์ฃผ์ œ์ธ๋ฐ ๊ฐ•์˜๋ฅผ ํ†ตํ•ด ๊ฐ์„ ์žก์œผ์…จ๋‹ค๋‹ˆ ๊ฐ•์‚ฌ๋กœ์„œ ๋ฟŒ๋“ฏํ•˜๊ณ , ์ œ๊ฐ€ ์˜๋„ํ–ˆ๋˜ '์ด๋ก ๋ณด๋‹ค ์‹ค์Šต์œผ๋กœ ์ง์ ‘ ์ฒด๊ฐํ•˜๊ธฐ'๋ฅผ ์ž˜ ์•Œ์•„๋ด ์ฃผ์‹  ๊ฒƒ ๊ฐ™์•„์„œ ๊ธฐ๋ถ„์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์™„๊ฐ•ํ•˜์‹œ๋А๋ผ ๊ณ ์ƒ ๋งŽ์œผ์…จ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๐Ÿ™‡โ€โ™€๏ธ

  • ์Šคํ”„๋ง๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
    ์Šคํ”„๋ง

    ์ˆ˜๊ฐ•ํ‰ 111

    โˆ™

    ํ‰๊ท  ํ‰์  4.9

    5

    20% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

    • ์˜ฌ๋ฆฌํŒŒ๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
      ์˜ฌ๋ฆฌํŒŒ

      ์ˆ˜๊ฐ•ํ‰ 4

      โˆ™

      ํ‰๊ท  ํ‰์  5.0

      5

      60% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

      ๋น„์Šทํ•œ ๊ฐ•์˜

      ๊ฐ™์€ ๋ถ„์•ผ์˜ ๋‹ค๋ฅธ ๊ฐ•์˜๋ฅผ ๋งŒ๋‚˜๋ณด์„ธ์š”!

      โ‚ฉ49,500