Skip to content

๐Ÿ› ๏ธ [refactor] ์ถœ์„ ์š”์ฒญ ์‘๋‹ต ์ง€์—ฐ ๊ฐœ์„ ย #118

@binary-ho

Description

@binary-ho

๐Ÿ› ๏ธ ๋ฆฌํŒฉํ† ๋ง์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„

image

ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ์ถœ์„ ๊ณผ์ •์—์„œ ๊ฐ•์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ƒํ™ฉ๊ณผ ๋™์ผํ•˜๊ฒŒ, ์ถœ์„ ๋˜ํ•œ ์‘๋‹ต ์‹œ๊ฐ„์„ ์ค„์ด๋ฉด ์ข‹๊ฒ ๋‹ค๋Š” ํŒ๋‹จ์ด ๋“ค์—ˆ๋‹ค.
์ถœ์„ ์š”์ฒญ์—์„œ DB ์ปค๋„ฅ์…˜์€ ๋‘ ์ƒํ™ฉ์—์„œ ์ผ์–ด๋‚œ๋‹ค.

  1. ์ถœ์„ํ•˜๊ธฐ ์œ„ํ•ด DB์—์„œ "์ˆ˜๊ฐ•์‹ ์ฒญ"์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
    ์—ฌ๊ธฐ์„œ ์ˆ˜๊ฐ•์ƒ์€ ๋งž๋Š”์ง€, ์ˆ˜์—…์€ ์—ด๋ ค์žˆ๋Š”์ง€ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค.
  2. ๊ฐ์ข… ๊ฒ€์ฆ ์ดํ›„, DB์— ์ถœ์„ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•œ๋‹ค.

1. ์ˆ˜๊ฐ•์‹ ์ฒญ ์ •๋ณด ์บ์‹œ ํ™œ์šฉ

1๋ฒˆ ์‚ฌํ•ญ์€ ์ด๋ฏธ ์ˆ˜๊ฐ•์ƒ ์บ์‹ฑ์ด ๋˜์–ด ์žˆ์–ด์„œ, ๊ทธ๊ฑธ ํ™œ์šฉํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค!
์บ์‹ฑ์„ ๋„์ž…ํ•  ๋•Œ ํ•จ๊ป˜ ํ™œ์šฉํ–ˆ์œผ๋ฉด ๋” ์ข‹์•˜์„ ๊ฒƒ ๊ฐ™๋‹ค.
๊ทธ๋ฆฌ๊ณ  ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ 2๋ฒˆ ์‚ฌํ•ญ๋„ ์‘๋‹ต ์‹œ๊ฐ„์„ ์ค„์—ฌ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.


๋„์ž… ์ดํ›„ 14.725์ดˆ์—์„œ 6.481์ดˆ๋กœ ์ค„์–ด๋“ค์—ˆ๋‹ค.

image

2. ์ €์žฅ ๋ถ€ํ•˜ ์ค„์ด๊ธฐ

์ฒ˜์Œ์—๋Š” ๋ถ€ํ•˜๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ํ ๊ฐ™์€ ๊ณณ์— ์ถœ์„ ๋ฐ์ดํ„ฐ๋“ค์„ ์ €์žฅํ•ด์„œ n์ดˆ๋งˆ๋‹ค pollingํ•ด ํ•œ๋ฒˆ์— ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ ค ํ–ˆ๋‹ค.
๋ถ„๋ช…ํžˆ ์ด๋Ÿฐ ๋ฐฉ์‹์€ ๋ถ„๋ช… DB์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์—ฌ์ค„ ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ,

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

๊ทธ๋ฆฌ๊ณ , ๋” ์ค‘์š”ํ•œ ๊ฒƒ์€ ์‘๋‹ต ์ง€์—ฐ์„ ์ค„์ด๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.
๋”ฐ๋ผ์„œ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋ณต์žกํ•œ insert๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ณ , ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰ํ•ด์„œ ์‘๋‹ต ์ง€์—ฐ์„ ์ค„์ด๊ฒ ๋‹ค.

๋ฌธ์ œ๋Š” ์ตœ๊ทผ ์ถœ์„ ์กฐํšŒ ๊ธฐ๋Šฅ์ธ๋ฐ, (#117 )
์Šค๋ ˆ๋“œ ํ’€ ์‚ฌ์ด์ฆˆ์˜ ๋ฌธ์ œ๋กœ ์œ ์ € ์ถœ์„์ด ๋ฐ€๋ฆฌ๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ ์ œ๋Œ€๋กœ ์ถœ์„ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด ์‹ค์ œ ์ถœ์„ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰ํ•˜๊ณ , DB์— ์ €์žฅ๋˜๋Š” ์‚ฌ์ด์— ์œ ์ €๊ฐ€ ์ž์‹ ์˜ ์ถœ์„์„ ํ™•์ธํ•œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ณด์—ฌ์ค˜์•ผ ํ•˜๋Š”๊ฐ€?
์ดํ›„ ์‹ค์ œ๋กœ ๋ฐ˜์˜๋œ ๊ฒƒ์€ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋Š”๊ฐ€?

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ณผ์ •์„ ๋”ฐ๋ฅด๊ฒ ๋‹ค

  1. ์ถœ์„์‹œ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰ํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ์œ ์ €์—๊ฒŒ ์‘๋‹ตํ•ด์ค€๋‹ค.
  2. ์ด๋•Œ ์ถœ์„ ๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜ํ•œ๋‹ค๋ฉด, ์ด๋ฒคํŠธ ๋ฐœํ–‰๊ณผ ๊ฐ™์ด ์ถœ์„ ์‹ ์ฒญ์„ ์บ์‹ฑํ•œ๋‹ค.
    ์œ ์ €์—๊ฒŒ๋Š” "์ถœ์„ ์‹œ๋„ ์ค‘.."๊ณผ ๊ฐ™์ด ๋ณด์—ฌ์ง€๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.
  3. ์ดํ›„, ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๊ณผ์ •์—์„œ DB์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ , ์„ฑ๊ณต ์‘๋‹ต์ด ์˜ค๋Š” ๊ฒฝ์šฐ ์บ์‹ฑ๋œ ์ถœ์„ ์‹ ์ฒญ ๋ฐ์ดํ„ฐ์— ์ถœ์„์ด ๋ฐ˜์˜ ๋˜์—ˆ์Œ์„ ํ‘œ์‹œํ•œ๋‹ค.
    -> ์œ ์ €์—๊ฒŒ๋Š” "์ถœ์„ ์„ฑ๊ณต"๊ณผ ๊ฐ™์ด ๋ณด์—ฌ์ง€๋ฉด ๋  ๊ฒƒ์ด๋‹ค.

image

โ˜‘ Refactoring TODO

  • ์ถœ์„ ์‹œ๋„์‹œ ์ˆ˜๊ฐ• ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ๋•Œ, ์บ์‹ฑ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉ
  • Async ์„ค์ • ๋ณ€๊ฒฝ
  • ์บ์‹ฑ๋  "์ถœ์„ ์š”์ฒญ ๊ธฐ๋ก" ๊ฐ์ฒด ์ƒ์„ฑ
  • ์ถœ์„์‹œ ์ด๋ฒคํŠธ ๋ฐœํ–‰ + ์บ์‹ฑ ๊ตฌํ˜„
  • ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ์„ฑ๊ณต์‹œ (DB ์ €์žฅ) ์บ์‹ฑ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๊ตฌํ˜„

Metadata

Metadata

Assignees

Labels

Refactor๋ฆฌํŒฉํ† ๋ง

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions