[Java] volatile - ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ๊ฐ€์‹œ์„ฑ ๋ฌธ์ œ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…
ยท
Backend/Jave&Spring
๋“ค์–ด๊ฐ€๋ฉฐ ๋…๋ฆฝ ํ + ์ „์šฉ ์›Œ์ปค ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋น„์Šค์—์„œ ์ข…๋ฃŒ ์‹ ํ˜ธ๊ฐ€ ์›Œ์ปค ์Šค๋ ˆ๋“œ์— ์ „๋‹ฌ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. @PreDestroy์—์„œ running = false๋ฅผ ๋ถ„๋ช…ํžˆ ์ผ๋Š”๋ฐ๋„ ์›Œ์ปค ์Šค๋ ˆ๋“œ๋Š” ๋ฃจํ”„๋ฅผ ๊ณ„์† ๋Œ๊ณ  ์žˆ์—ˆ๋‹ค. private volatile boolean running = true; ํ•ด๊ฒฐ์ฑ…์€ volatile ํ•œ ํ‚ค์›Œ๋“œ์˜€์ง€๋งŒ, ์™œ ์—†์œผ๋ฉด ์•ˆ ๋˜๋Š”์ง€๋Š” ์„ค๋ช…ํ•˜๊ธฐ ์–ด๋ ค์› ๋‹ค. ์ด ๊ธ€์€ ๋ฌธ์ œ์˜ ์›์ธ์„ ํŒŒ์•…ํ•˜๊ณ  ์˜ฌ๋ฐ”๋ฅธ ๊ตฌํ˜„์— ์ด๋ฅด๊ธฐ๊นŒ์ง€์˜ ๊ณผ์ •์„ ๋‹ด์•˜๋‹ค. 1. ๋ฌธ์ œ ๋ฐœ์ƒ - volatile ์—†์ด ์–ด๋–ค ์ผ์ด ๋ฒŒ์–ด์ง€๋Š”๊ฐ€ volatile ์—†์ด ์ข…๋ฃŒ ํ”Œ๋ž˜๊ทธ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ์–ด๋–ค ์ผ์ด ์ƒ๊ธฐ๋Š”์ง€ ์ฝ”๋“œ๋กœ ๋จผ์ € ๋ณด์ž.// volatile ์—†์Œprivate boolean running = true;// ์›Œ์ปค ..
[DB] READ_UNCOMMITTED์—์„œ DELETE๊ฐ€ ํƒ€์ž„์•„์›ƒ ๋‚˜๋Š” ์ด์œ 
ยท
Backend/Database
๋ฌธ์ œ ์ƒํ™ฉ ํŠน์ • ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ๊ด„ ์‚ญ์ œํ•˜๋Š” ๋ฐฐ์น˜์—์„œ ๋‘ ์ข…๋ฅ˜์˜ ํƒ€์ž„์•„์›ƒ์ด ๋ฐœ์ƒํ–ˆ๋‹ค.Lock wait timeout exceeded; try restarting transaction ← ์„œ๋ธŒ์ฟผ๋ฆฌ DELETE ๋‹จ๊ณ„Query execution was interrupted (max_statement_time exceeded) ← PK ๊ธฐ๋ฐ˜ SELECT+DELETE ๋‹จ๊ณ„ ๋‘ ์—๋Ÿฌ๋Š” ๋™์‹œ์— ๋ฐœ์ƒํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ์„œ๋ธŒ์ฟผ๋ฆฌ DELETE๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ Lock wait timeout์ด ๋ฐœ์ƒํ–ˆ๊ณ , PK ๊ธฐ๋ฐ˜ SELECT+DELETE๋กœ ์ „ํ™˜ํ•œ ๋’ค max_statement_time exceeded๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ํƒ€์ž„์•„์›ƒ ์ข…๋ฅ˜๊ฐ€ ๋ฐ”๋€ ๊ฒƒ ์ž์ฒด๊ฐ€ ๋ถ„์„ ํฌ์ธํŠธ๋‹ค. ์ดˆ๊ธฐ ์ฝ”๋“œ๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ DELETE ๊ตฌ์กฐ์˜€๋‹ค.DELET..
[Spring/batch] BlockingQueue์™€ ์Šค๋ ˆ๋“œ๋ฅผ ํ™œ์šฉํ•œ Telegram 429 Rate Limit ํ•ด๊ฒฐ
ยท
Backend/Jave&Spring
๋ฌธ์ œ ์ƒํ™ฉ ์Šคํ”„๋ง ๋ฐฐ์น˜ ์„œ๋น„์Šค์—์„œ ์—ฌ๋Ÿฌ ์ž‘์—… ๋Œ€์ƒ์„ ์Šค๋ ˆ๋“œ ํ’€๋กœ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌํ•˜๊ณ , ๊ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ์™„๋ฃŒ ํ›„ Telegram์œผ๋กœ ๋ฐฐ์น˜ ๊ฒฐ๊ณผ๋ฅผ ์•Œ๋ฆผํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค. ํ‰์†Œ์—๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ๋Š”๋ฐ, ๋‹จ๊ธฐ๊ฐ„(1~2์ดˆ)์— ๋๋‚˜๋Š” ๋ฐฐ์น˜ ๋Œ€์ƒ์ด ๋งŽ์€ ํŠน์ • ์‹œ๊ฐ„๋Œ€์˜ ๋ฐฐ์น˜์—์„œ๋งŒ ์•„๋ž˜์™€ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐ˜๋ณต ๋ฐœ์ƒํ–ˆ๋‹ค. 14:30:00์— 46๊ฑด์„ ๋Œ€์ƒ์œผ๋กœ ๋ฐฐ์น˜ ์‹œ์ž‘ ํ›„, ์ˆœ์ฐจ์ ์œผ๋กœ Telegram ์•Œ๋ฆผ์„ ๋ฐœ์†กํ–ˆ๋‹ค.(๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ˆ˜ํ–‰๋ถ€ํ„ฐ ์•Œ๋ฆผ ๋ฐœ์†ก๊นŒ์ง€ ๋ฐฐ์น˜ ๋Œ€์ƒ ๋‹น 1~2์ดˆ ์•ˆ์— ๋๋‚œ๋‹ค.) ๊ทธ๋Ÿฌ๋‹ค๊ฐ€ 14:30:33๋ถ€ํ„ฐ Telegram ์•Œ๋ฆผ ๋ฐœ์†ก ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. 14:30:33 429 Too Many Requests retry_after: 2714:30:34 429 Too Many Requests retry_after: 2..
[Obsidian] Notion์—์„œ Obsidian์œผ๋กœ ๋ฌธ์„œ ๊ด€๋ฆฌ ์ „ํ™˜ ํ›„๊ธฐ
ยท
Dev
๋…ธ์…˜๊ณผ ํ•จ๊ป˜ํ•œ ์‹œ๊ฐ„๋“ค ์ด์ „์— ์ทจ์—… ์ค€๋น„๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด์„œ ๋…ธ์…˜์„ ์ฒ˜์Œ ์ผ๋‹ค. ์ž๊ธฐ์†Œ๊ฐœ์„œ, ์ง€์› ํ˜„ํ™ฉ ํŠธ๋ž˜ํ‚น, ๋ฉด์ ‘ ๊ธฐ๋ก๊นŒ์ง€. ์ดํ›„์—๋Š” ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ ๊ธฐํš์„œ, ํšŒ์‚ฌ ์—…๋ฌด ๋ฉ”๋ชจ, ์ผ์ƒ ๊ธฐ๋ก๊นŒ์ง€ ๋…ธ์…˜ ํ•˜๋‚˜๋กœ ๋‹ค ํ•ด๊ฒฐํ–ˆ๋‹ค. ๊ทธ๋งŒํผ ๋…ธ์…˜์€ ์“ฐ๊ธฐ ํŽธํ•˜๊ณ  ์˜ˆ์˜๋‹ค. ํŽ˜์ด์ง€ ๊ณต์œ ๋„ ๋งํฌ ํ•˜๋‚˜๋ฉด ๋์ด๊ณ , ํŒ€์›๊ณผ ํ˜‘์—…ํ•˜๊ธฐ๋„ ์ข‹๋‹ค. ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ์‚ฌ๋žŒ๋„ ๊ธˆ๋ฐฉ ์ ์‘ํ•  ์ˆ˜ ์žˆ๋Š” ๋‚ฎ์€ ์ง„์ž…์žฅ๋ฒฝ์ด ๊ฐ€์žฅ ํฐ ์žฅ์ ์ด์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ํ•œ ๋ฒˆ ์˜ต์‹œ๋””์–ธ์„ ์‹œ๋„ํ•ด๋ดค๋‹ค. ๊ฒฐ๋ก ์€ ํฌ๊ธฐ. ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜์— ๋ณผํŠธ ๊ตฌ์กฐ ์žก๋Š” ๊ฒƒ๋„ ๋‚ฏ์„ค์—ˆ๊ณ , ๋…ธ์…˜์ฒ˜๋Ÿผ ๋ธ”๋ก ๋“œ๋ž˜๊ทธ๋กœ ๋ฐ”๋กœ ๋ ˆ์ด์•„์›ƒ์„ ์žก์„ ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ๋„ ๋ถˆํŽธํ–ˆ๋‹ค. ๋‚˜๋Š” ๊ฐœ๋ฐœ์ž๋ผ ๋งˆํฌ๋‹ค์šด์— ์ต์ˆ™ํ•˜์ง€๋งŒ ๋งˆํฌ๋‹ค์šด์œผ๋กœ๋งŒ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ๋„ ๋‹น์‹œ์—” ๋ฒˆ๊ฑฐ๋กญ๊ฒŒ ๋А๊ปด์กŒ๋‹ค. ๊ฐˆ์•„ํƒ„ ์ด์œ ๋…ธ์…˜ ๋ฌด๋ฃŒ ํ”Œ๋žœ์˜ ๋ธ”๋ก ์ œํ•œ ๋…ธ์…˜ ๋ฌด๋ฃŒ..
[ClickHouse] Distributed ํ…Œ์ด๋ธ” - DROP PARTITION์ด ์™œ ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋งŒ ์ง€์›Œ์งˆ๊นŒ?
ยท
Backend/Database
ClickHouse ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ฒ˜์Œ ์‚ฌ์šฉํ•˜๋‹ค ๋ณด๋ฉด ๋‹นํ™ฉ์Šค๋Ÿฝ๋‹ค. ๋ถ„๋ช…ํžˆ ํŠน์ • ๋‚ ์งœ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ–ˆ๋Š”๋ฐ, ์กฐํšŒํ•ด๋ณด๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ์ „ํžˆ ๋‚จ์•„์žˆ๋‹ค. ๋ถ„๋ช… DROP PARTITION์„ ์‹คํ–‰ํ–ˆ๋Š”๋ฐ. ์•Œ๊ณ  ๋ณด๋ฉด ์‚ญ์ œ๋œ ๊ฑด ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ์ผ๋ถ€ Shard์˜ ๋ฐ์ดํ„ฐ๋ฟ์ด๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ์™œ ์ด๋Ÿฐ ์ผ์ด ์ƒ๊ธฐ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด์— ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ •๋ฆฌํ•œ๋‹ค. ๋ฐฐ๊ฒฝ: Distributed ํ…Œ์ด๋ธ”์€ ๋ผ์šฐํ„ฐ๋‹ค์•ž์„  ๊ธ€์—์„œ ๋‹ค๋ค˜์ง€๋งŒ ๋‹ค์‹œ ์งš๊ณ  ๋„˜์–ด๊ฐ€์ž.ClickHouse ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ํ…Œ์ด๋ธ”์€ ๋‘ ๋ฒŒ์ด๋‹ค.default.user_events ← Distributed ํ…Œ์ด๋ธ” (๋ผ์šฐํ„ฐ, ๋ฐ์ดํ„ฐ ์—†์Œ)local.user_events_local ← ๋กœ์ปฌ ํ…Œ์ด๋ธ” (์‹ค์ œ ๋ฐ์ดํ„ฐ ์ €์žฅ..
[ClickHouse] ๋ฐ์ดํ„ฐ ์‚ญ์ œ - ALTER DELETE vs DROP PARTITION
ยท
Backend/Database
ClickHouse์—์„œ ์ž˜๋ชป ์ ์žฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์›Œ์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ์ƒ๊ฒผ๋‹ค. MySQL์ด๋ผ๋ฉด ๊ทธ๋ƒฅ DELETE FROM ... WHERE ... ๋‚ ๋ฆฌ๋ฉด ๋์ธ๋ฐ, ClickHouse ํด๋Ÿฌ์Šคํ„ฐ ํ™˜๊ฒฝ์—์„œ๋Š” ๊ทธ๊ฒŒ ์•ˆ ๋œ๋‹ค. DELETE FROM ๋ฌธ๋ฒ• ์ž์ฒด๋Š” ์กด์žฌํ•˜์ง€๋งŒ, ON CLUSTER๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์•„ ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด์— ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ ํ™˜๊ฒฝ์—์„œ๋Š” ๋ฐ˜๋“œ์‹œ ALTER TABLE ... DELETE๋‚˜ DROP PARTITION์„ ์จ์•ผ ํ•œ๋‹ค. ์ด ๊ธ€์€ ํด๋Ÿฌ์Šคํ„ฐ ํ™˜๊ฒฝ์„ ์ „์ œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ธ ALTER DELETE์™€ DROP PARTITION์„ ๋น„๊ตํ•˜๊ณ , ๊ฐ๊ฐ ์–ธ์ œ ์“ฐ๋Š” ๊ฒŒ ๋งž๋Š”์ง€ ์ •๋ฆฌํ•œ๋‹ค. ๋ฐฉ๋ฒ• ์„ ํƒ์˜ ๊ธฐ์ค€์€ ๋ฐ์ดํ„ฐ ์–‘์ด ์•„๋‹ˆ๋ผ ์‚ญ์ œ ํŒจํ„ด์ด๋‹ค. ์ž‘์€ ์–‘์ด๋ผ๋„ ALTER DELETE๋Š” ํŒŒํŠธ..
giraffe_
'๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก