๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

redis12

[๋น…๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ๋ถ„์„์„ ์œ„ํ•œ NoSQL & Redis] Chapter 6 - Redis Cluster ์‹œ์Šคํ…œ & ๋กœ๊ทธ ๋ชจ๋‹ˆํ„ฐ๋ง 6.1 ๋ณต์ œ & ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ๊ฐœ์š” ์ž์› ๊ณต์œ  ์„œ๋ฒ„ ์ž์› ์ œํ•œ์ , ๊ณผ๋ถ€ํ•˜ ์‹œ ๋‹ค๋ฅธ ์„œ๋ฒ„ ์ž์› ํ™œ์šฉ์œผ๋กœ ํšจ์œจ์„ฑ ์ฆ๊ฐ€ ์„ฑ๋Šฅ ํ–ฅ์ƒ ๊ณผ๋ถ€ํ•˜ ๋ฐœ์ƒ ์‹œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ํ†ตํ•ด ์ž์› ๋ถ„๋ฐฐ ๊ฐ€๋Šฅ ์•ˆ์ •์„ฑ ๋ณต์ œ ์„œ๋ฒ„๋กœ ์žฅ์•  ๋Œ€์ฒดํ•˜์—ฌ ์ž‘๋™ ๋ฐ์ดํ„ฐ ์ฐธ์กฐ ๊ฐ€๋Šฅํ•ด ์œ„ํ—˜ ๋ถ„์‚ฐ ๊ฐ€๋Šฅ Redis: ๋งˆ์Šคํ„ฐ-์Šฌ๋ ˆ์ด๋ธŒ, ๋งˆ์Šคํ„ฐ-์Šฌ๋ ˆ์ด๋ธŒ-์„ผํ‹ฐ๋„, ํŒŒํ‹ฐ์…˜ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๋ณต์ œ, ๋ถ„์‚ฐ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ Partition ์œ ํ˜• ๋ฒ”์œ„ ํŒŒํ‹ฐ์…˜ (Range Partition) Key-Value๋ฅผ ์„œ๋ฒ„์— ๋ถ„์‚ฐ ์ €์žฅ ์„œ๋ฒ„ ๋Œ€์ˆ˜ ๊ฒฐ์ •์— ๋”ฐ๋ผ ์ €์žฅ ์œ„์น˜ ๊ฒฐ์ • ์„œ๋ฒ„์— ์ €์žฅํ•  ๋ฐ์ดํ„ฐ ์–‘ ๋ถˆ๊ท ํ˜• ๋ฌธ์ œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ ํ•ด์‹œ ํŒŒํ‹ฐ์…˜ (Hash Partition) Hash ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ฐ์ดํ„ฐ ๋ถ„์‚ฐ ์ €์žฅ Partition ๊ตฌํ˜„ ๋ฐฉ๋ฒ• Client Side Partitioning ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ ๋ถ„.. 2023. 8. 20.
[๋น…๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ๋ถ„์„์„ ์œ„ํ•œ NoSQL & Redis] Chapter 5 - Redis ์•„ํ‚คํ…์ฒ˜ 5.1 Redis ์•„ํ‚คํ…์ฒ˜ 1. ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ Resident Area ์‚ฌ์šฉ์ž์˜ ์ž‘์—…์ด ๋จผ์ € ์ €์žฅ๋˜๋Š” ์˜์—ญ ์‹ค์ œ ์ž‘์—… ์ˆ˜ํ–‰ ๊ณต๊ฐ„ "WorkingSet" ์˜์—ญ์œผ๋กœ๋„ ํ‘œํ˜„ Data Structure ์ƒํƒœ ์ •๋ณด ์ €์žฅ์„ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ Redis Server ์šด์˜ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง์— ํ•„์š” 2. ํŒŒ์ผ ์˜์—ญ AOF ํŒŒ์ผ ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ ์ง€์† ์ €์žฅ ์Šค๋ƒ…์ƒท ๋ฐ์ดํ„ฐ DUMP ํŒŒ์ผ ์†Œ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ผ์‹œ์  ์ €์žฅ 3. ํ”„๋กœ์„ธ์Šค ์˜์—ญ Server Process Redis ์ธ์Šคํ„ด์Šค ๊ด€๋ฆฌ ๋ฐ ์‚ฌ์šฉ์ž ์ž‘์—… ์ˆ˜ํ–‰ 4๊ฐœ์˜ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๋กœ ๊ตฌ์„ฑ Main thread, Sub thread 1(BIO-Close-File), Sub thread 2(BIO-AOF-Resync), Sub thread 3(BIO-Lazy-Free) Client Process .. 2023. 8. 20.
[๋น…๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ๋ถ„์„์„ ์œ„ํ•œ NoSQL & Redis] Chapter 4 - Redis Data Modeling 4.1 ํ‚ค-๋ฐธ๋ฅ˜(Key-Value) ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง ๊ฐœ๋… 4.1.1 ์šฉ์–ด ์„ค๋ช… ํ…Œ์ด๋ธ”(Table): ๊ด€๊ณ„ํ˜• DB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋…ผ๋ฆฌ์  ๊ตฌ์กฐ๋ฅผ ํ…Œ์ด๋ธ”(table)์ด๋ผ๊ณ  ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ Key-Value DB์—์„œ๋„ ํ…Œ์ด๋ธ”(Table)์ด๋ผ๊ณ  ํ•จ. ํ•„๋“œ(Field) ๋˜๋Š” ์—˜๋ฆฌ๋จผํŠธ(Element): ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์„ ๊ตฌ์„ฑํ•˜๊ณ  ์žˆ๋Š” ์š”์†Œ๋“ค์„ ๊ด€๊ณ„ํ˜• DB์—์„œ๋Š” ์ปฌ๋Ÿผ(column)์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ Key-Value DB์—์„œ๋Š” ํ•„๋“œ(Field) ๋˜๋Š” ์—˜๋ฆฌ๋จผํŠธ(Element)๋ผ๊ณ  ๋งํ•จ. Key-Value DB์—์„œ๋Š” ํ•˜๋‚˜์˜ Key์™€ ํ•˜๋‚˜ ์ด์ƒ์˜ ํ•„๋“œ ๋˜๋Š” ์—˜๋ฆฌ๋จผํŠธ๋กœ ๊ตฌ์„ฑ๋จ. Key-Value DB์—์„œ๋Š” ์ œ์•ฝ ์กฐ๊ฑด ๊ธฐ๋Šฅ์ด ์ œ๊ณต๋˜์ง€ ์•Š์ง€๋งŒ, HyperLogLogs ๋ฐ์ดํ„ฐ ์†์„ฑ์„ ํ†ตํ•ด ์›ํ•˜๋Š” ์กฐ๊ฑด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ, ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ.. 2023. 8. 20.
[๋น…๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ๋ถ„์„์„ ์œ„ํ•œ NoSQL & Redis] Chapter 3 - ํŠธ๋žœ์žญ์…˜ ์ œ์–ด & ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ 3.1 Isolation & Lock ๋ชจ๋“  NoSQL ์ œํ’ˆ์ด ํŠธ๋žœ์žญ์…˜์„ ์ œ์–ดํ•˜์ง€๋Š” ์•Š์ง€๋งŒ, Redis๋Š” ํŠธ๋žœ์žญ์…˜ ์ œ์–ด ๊ฐ€๋Šฅ. Redis๋Š” Read Commited ํƒ€์ž…์˜ ํŠธ๋žœ์žญ์…˜ ์ œ์–ด๋„ ๊ฐ€๋Šฅํ•จ. Redis 4.0 ๋ฒ„์ „์—์„œ Data Sets ๋ฝ ๋งค์ปค๋‹ˆ์ฆ˜ ์ œ๊ณต. 3.2 CAS (Check and Set) CAS๋Š” ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ ๊ณต์œ ๋ฅผ ์œ„ํ•œ ๊ธฐ์ˆ ๋กœ ๋™์‹œ ์ฒ˜๋ฆฌ ์‹œ ์ถฉ๋Œ์„ ํ”ผํ•จ. Watch ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถฉ๋Œ ๊ฐ์ง€ ๊ฐ€๋Šฅ. 3.3 commit & rollback EXEC: ๋ณ€๊ฒฝํ•œ ๋ฐ์ดํ„ฐ ์ตœ์ข… ์ €์žฅ์— ์‚ฌ์šฉ. DISCARD: ๋ณ€๊ฒฝํ•œ ๋ฐ์ดํ„ฐ ์ตœ์ข… ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ์ทจ์†Œ. 3.4 Index ์œ ํ˜• ๋ฐ ์ƒ์„ฑ Redis๋Š” Primary Key Index์™€ Secondary Key Index๋ฅผ ์ œ๊ณต. Exact Match์™€ Ra.. 2023. 8. 20.
[๋น…๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ๋ถ„์„์„ ์œ„ํ•œ NoSQL & Redis] Chapter 2 - Redis ์„ค์น˜ ๋ฐ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ Redis์˜ ์ฃผ์š” ํŠน์ง• Redis๋Š” NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๋ถ„๋ฅ˜๋˜๋ฉฐ Key-Value ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. Key-Value DB์ธ ๋™์‹œ์— In-Memory ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์™€ ์ €์žฅ ๊ธฐ์ˆ ์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ ๋น ๋ฅธ Read/Write ์„ฑ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ์ง€์›ํ•˜๋ฉฐ String, Set, Sorted Set, Hash, List, HyperLogLogs ๋“ฑ์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ์ƒ์˜ ๋ฐ์ดํ„ฐ๋ฅผ Dump ํŒŒ์ผ๊ณผ AOF(Append Of File) ๋ฐฉ์‹์œผ๋กœ ๋””์Šคํฌ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Master/Slave Replication์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ๋ถ„์‚ฐ ๋ณต์ œ๋ฅผ ์ง€์›ํ•˜๋ฉฐ Query Off Loading์„ ํ†ตํ•ด Master๋Š” Read/Write ์ž‘์—…, Slave๋Š” Read ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  .. 2023. 8. 20.
[๋น…๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ๋ถ„์„์„ ์œ„ํ•œ NoSQL & Redis] Chapter 1 - NOSQL ๊ฐœ๋… Chapter1 - NOSQL ๊ฐœ๋… NOSQL Not Only SQL ๊ธฐ์กด SQL ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, SQL ์ด ํ•  ์ˆ˜ ์—†๋Š” ์˜์—ญ์˜ ๊ธฐ์ˆ ๋„ ์ œ๊ณตํ•˜๋Š” ๋Œ€์ฒด, ๋ณด์™„ ๊ธฐ์ˆ  ์žฅ์  ํด๋ผ์šฐ๋“œ ์ปดํ“จํŒ… ํ™˜๊ฒฝ์— ์ ํ•ฉํ•˜๋‹ค. RDBMS ์— ๋น„ํ•ด ๋น„์šฉ ๋ฐ ์„ฑ๋Šฅ ์ง€์—ฐ ๋ฌธ์ œ์— ์ ํ•ฉ ๊ตฌ์ถ• ๋‹จ๊ณ„์— ๋น„์šฉ ๋ฐœ์ƒ์ด ๋œํ•˜๋‹ค. ์œ ์—ฐํ•œ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ RDBMS ๋Š” ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋ฅผ ์„ค๊ณ„ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์„ ์ˆ˜ ๊ฐœ๋…๋“ค์ด ๋งŽ๋‹ค. ๋น„์ •ํ˜• ๊ตฌ์กฐ์ธ ์ปฌ๋ ‰์…˜, ํ…Œ์ด๋ธ”, ๋…ธ๋“œ๋Š” ๊ตฌ์ฒด์ ์ด๊ณ  ๊นŒ๋‹ค๋กญ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ์„ค๊ณ„ํ•˜๊ธฐ ์‰ฝ๋‹ค. ๋น…๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์— ํšจ๊ณผ์  RDBMS ๋ณด๋‹ค ๋น…๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์— ํšจ๊ณผ์ ์ด๋‹ค. ๋น…๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์— ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด๊ธฐ ๋•Œ๋ฌธ. NOSQL ์ข…๋ฅ˜์™€ ์„ ์ • ๊ธฐ์ค€ ์ˆœ์ฐจ์ ์œผ๋กœ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉฐ ์„ ์ • ๊ธฐ์ค€์„ ์„ธ๋ถ„ํ™”ํ•œ๋‹ค. 1. ์ดˆ๋‹น 5๋งŒ๊ฑด ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐœ.. 2023. 7. 23.
[๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ] 6์žฅ ํ‚ค-๊ฐ’ ์ €์žฅ์†Œ ์„ค๊ณ„ ํ‚ค-๊ฐ’ ์ €์žฅ์†Œ ์„ค๊ณ„ ํ‚ค-๊ฐ’ ์ €์žฅ์†Œ๋Š” ํ‚ค-๊ฐ’ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋Š” ๋น„ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด๋‹ค. ์ด ์ €์žฅ์†Œ์— ์ €์žฅ๋˜๋Š” ๊ฐ’์€ ๊ณ ์œ  ์‹๋ณ„์ž๋ฅผ ํ‚ค๋กœ ๊ฐ€์ ธ์•ผํ•œ๋‹ค. ํ‚ค์™€ ๊ฐ’ ์‚ฌ์ด์˜ ์ด๋Ÿฐ ์—ฐ๊ฒฐ๊ด€๊ณ„๋ฅผ “ํ‚ค-๊ฐ’” ์Œ์ด๋ผ๊ณ  ์ง€์นญํ•œ๋‹ค. ํ‚ค-๊ฐ’ ์Œ์—์„œ์˜ ํ‚ค๋Š” ์œ ์ผํ•ด์•ผ ํ•˜๋ฉฐ ํ•ด๋‹น ํ‚ค์— ๋งค๋‹ฌ๋ฆฐ ๊ฐ’์€ ํ‚ค๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. ํ‚ค๋Š” ์ผ๋ฐ˜ ํ…์ŠคํŠธ์ผ ์ˆ˜๋„ ์žˆ๊ณ  ํ•ด์‹œ๊ฐ’์ผ์ˆ˜๋„ ์žˆ๋‹ค. ์„ฑ๋Šฅ์ƒ์˜ ์ด์œ ๋กœ ํ‚ค๋Š” ์งง์„์ˆ˜๋ก ์ข‹๋‹ค. ํ‚ค-๊ฐ’ ์Œ์—์„œ์˜ ๊ฐ’์€ ๋ฌธ์ž์—ด์ผ ์ˆ˜ ๋„ ์žˆ๊ณ  ๋ฆฌ์ŠคํŠธ์ผ ์ˆ˜๋„ ์žˆ๊ณ  ๊ฐ์ฒด์ผ ์ˆ˜๋„ ์žˆ๋‹ค. ํ‚ค-๊ฐ’ ์ €์žฅ์†Œ๋Š” ๋ณดํ†ต ๊ฐ’์œผ๋กœ ๋ฌด์—‡์ด ์˜ค๋“  ์ƒ๊ด€ํ•˜์ง€ ์•Š๋Š”๋‹ค. ํ‚ค-๊ฐ’ ์ €์žฅ์†Œ๋กœ ๋„๋ฆฌ ์•Œ๋ ค์ง„ ๊ฒƒ์œผ๋กœ๋Š” ์•„๋งˆ์กด ๋‹ค์ด๋‚˜๋ชจ, memcached, ๋ ˆ๋””์Šค ๊ฐ™์€ ๊ฒƒ๋“ค์ด ์žˆ๋‹ค. ๋ฌธ์ œ ์ดํ•ด ๋ฐ ์„ค๊ณ„ ๋ฒ”์œ„ ํ™•์ • ์™„๋ฒฝํ•œ ์„ค๊ณ„๋Š” ์—†๋‹ค. ์ฝ๊ธฐ, ์“ฐ๊ธฐ ๊ทธ๋ฆฌ๊ณ  .. 2023. 2. 28.
[Refactor] ํŒจํ‚ค์ง€ ๊ตฌ์กฐ์™€ ์˜์กด์„ฑ ๋‘ ๋ฒˆ์งธ ํ”„๋กœ์ ํŠธ์˜ ์ฝ”๋“œ ์ž‘์„ฑ์ด ๊ฑฐ์˜ ๋๋‚ฌ๊ณ , ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ์„ ์•ž๋‘๋ฉฐ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ›์•˜๋‹ค. ๊ฐ€์žฅ ํฐ ๊ณจ์ž๋Š” ์•„๋ฌด๋ž˜๋„ ์ฐธ์กฐ ๊ด€๊ณ„์ด๋‹ค. ํŒจํ‚ค์ง€ ๊ตฌ์กฐ๋ฅผ Layered์—์„œ ์•ฝ๊ฐ„์˜ DDD(์• ๋งคํ•˜์ง€๋งŒ ใ…Žใ…Ž) ๋ฅผ ๊ณ๋“ค์ธ ๊ตฌ์กฐ๋กœ ๋ณ€๊ฒฝํ–ˆ๋‹ค. ๊ทธ ๊ณผ์ •์—์„œ ํŒจํ‚ค์ง€ ๊ฐ„ ์˜์กด์„ฑ์— ๋Œ€ํ•ด์„œ ๊ณ ๋ฏผํ•ด๋ณด๊ณ  ์ž‘๋ช…ํ•˜๋Š” ๊ฒƒ๊ณผ ์„ค๊ณ„ํ•˜๋Š” ์‹œ๊ฐ„์ด ์ •๋ง ์˜ค๋ž˜ ๊ฑธ๋ ธ๋‹ค. ์ฝ”๋”ฉ์„ ๊ณต๋ถ€ํ•˜๋ฉด ํ•  ์ˆ˜๋ก ์ž‘์€ ๊ฒƒ์— ์‹œ๊ฐ„์„ ์˜ค๋ž˜ ๋“ค์ด๊ฒŒ ๋˜๋Š” ๊ฑธ ๋Š๋‚€๋‹ค. ์–ด์ œ๋Š” ํŒจํ‚ค์ง€ ์ด๋ฆ„์„ ์ง“๋Š”๋ฐ ๋ฐ˜๋‚˜์ ˆ์ด ๊ฑธ๋ ธ๋‹ค. ํšŒ์‚ฌ์—์„œ๋Š” ๋ณ€์ˆ˜๋ช… ์ง“๋Š” ๊ฑธ๋กœ๋„ ํšŒ์˜๋ฅผ ํ•œ๋‹ค๊ณ  ํ•˜๋‹ˆ ์•ฝ๊ฐ„ ์‹ค๊ฐ์ด ๋‚˜๊ธฐ๋„ ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ๋””ํ…Œ์ผํ•˜๊ฒŒ ์ฑ„์›Œ๋‚˜๊ฐ€๋ฉด ๊ทธ ๋งŒํผ ๋‚ด ์‹ค๋ ฅ์ด ๋œ๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค. ์ตœ์ƒ์œ„ ๊ตฌ์กฐ auth : ์ธ์ฆ, ์ธ๊ฐ€ ์ฒ˜๋ฆฌ ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ ์ด์šฉ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊นŒ์ง€ ๋„๋‹ฌํ•˜์ง€ ์•Š๋Š” ํ•„ํ„ฐ ์œ„์ฃผ์ด๊ธฐ ๋•Œ๋ฌธ์— .. 2022. 10. 14.
[Redisson] ํŠธ๋žœ์žญ์…˜ ๋ฌธ์ œ ๋ฐœ์ƒ ๋ฐ ํ•ด๊ฒฐ ์ง€๋‚œ ํฌ์ŠคํŠธ [Redisson]์„ ์ด์šฉํ•œ ๋ถ„์‚ฐ Lock ๊ตฌํ˜„ & ๋™์‹œ์„ฑ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋‚ด ํ”„๋กœ์ ํŠธ์˜ Payment๋ฅผ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ๊ฐ€์žฅ ๊ธฐ๋ณธ ์ค‘์— ๊ธฐ๋ณธ์ด ๋˜๋Š” ๋ฌธ์ œ๋ฅผ ์ง๋ฉดํ–ˆ์—ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ฐ”๋กœ ๋™์‹œ์„ฑ ๋ฌธ์ œ! ์Šคํ”„๋ง๋ถ€ํŠธ์˜ ๋‚ด์žฅ ์„œ๋ฒ„๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ†ฐ์บฃ, ์–ธ๋”ํ† ์šฐ ๋“ฑ๋“ฑ์˜ WAS๋กœ ๋Œ์•„๊ฐ€๋Š”๋ฐ ์ด sweeeetgoguma.tistory.com ์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ Redisson์„ ์ด์šฉํ•˜์—ฌ ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ๋ฆฌํŒฉํ† ๋ง์ด ๊ฑฐ์˜ ๋๋‚˜๊ฐ€ ์กฐํšŒ API๋ฅผ ๊ตฌ์ฒดํ™”ํ•˜์—ฌ ๋ช‡ ๊ฐœ ์ถ”๊ฐ€ํ•˜๋˜ ๋„์ค‘, ์Šค๋ ˆ๋“œ 100๊ฐœ์˜ ๋™์‹œ ์š”์ฒญ์„ ์ง์ ‘์ ์œผ๋กœ ๋ฐ›๋Š” ๊ณผ์ •์„ ํ™•์ธํ•˜๊ณ  ์‹ถ์–ด์กŒ๋‹ค. ๊ทธ๋ž˜์„œ ์‹คํ—˜ํ•ด๋ดค๋‹ค. ๊ฒฐ๊ณผ๋Š”?? ์ฒ˜์ฐธํ•˜๋‹ค.. ๋ฌด์—‡์ด ๋ฌธ์ œ์˜€์„๊นŒ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๊ฐ€ ์”นํ˜”๋‹ค. @GetMapping("/test") public void t.. 2022. 10. 1.
[Redisson]์„ ์ด์šฉํ•œ ๋ถ„์‚ฐ Lock ๊ตฌํ˜„ & ๋™์‹œ์„ฑ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋‚ด ํ”„๋กœ์ ํŠธ์˜ Payment๋ฅผ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ๊ฐ€์žฅ ๊ธฐ๋ณธ ์ค‘์— ๊ธฐ๋ณธ์ด ๋˜๋Š” ๋ฌธ์ œ๋ฅผ ์ง๋ฉดํ–ˆ์—ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ฐ”๋กœ ๋™์‹œ์„ฑ ๋ฌธ์ œ! ์Šคํ”„๋ง๋ถ€ํŠธ์˜ ๋‚ด์žฅ ์„œ๋ฒ„๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ†ฐ์บฃ, ์–ธ๋”ํ† ์šฐ ๋“ฑ๋“ฑ์˜ WAS๋กœ ๋Œ์•„๊ฐ€๋Š”๋ฐ ์ด WAS๋Š” ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. A๋ผ๋Š” ์ƒํ’ˆ (์žฌ๊ณ  3๊ฐœ) ์„ [๊ฐ€]๊ตฐ์ด 2๊ฐœ ๊ตฌ๋งคํ•˜๋ ค ํ•œ๋‹ค. ๋™์‹œ์— [๋‚˜]๊ตฐ์ด 2๊ฐœ ๊ตฌ๋งคํ•˜๋ ค ํ•œ๋‹ค. ๋ฏธ์„ธํ•˜๊ฒŒ ๋‚˜๋งˆ 0.00001์ดˆ์˜ ์ฐจ์ด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ๊ฒฐ๊ตญ ๊ฐ๊ฐ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ฐ™์€ ์ƒํ’ˆ์˜ ์žฌ๊ณ ๋ฅผ ์กฐํšŒํ•œ๋‹ค. ์›๋ž˜๋Œ€๋กœ๋ผ๋ฉด ํ•œ ๋ช…์€ ๋ชป ์‚ฌ์•ผ ์ •์ƒ์ด๋‹ค. ์œ„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด ๋ญ๊ฐ€ ์žˆ์„๊นŒ? 1. Synchronized ์ž๋ฐ”๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. Thread-Safe ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ์ข‹์•„๋ณด์ด๋‚˜, ์„œ๋ฒ„๊ฐ€ ์ฆ์„ค๋  ๊ฒฝ์šฐ ์˜๋ฏธ๊ฐ€ ์—†์–ด์ง„๋‹ค. 2. Database Lock D.. 2022. 9. 27.
2022.05.26 ใ€ŒํŠธ๋ž˜ํ”ฝ์ด ๋ชฐ๋ ธ์„ ๊ฒฝ์šฐใ€ ์ด๋ฉ”์ผ์„ ํ†ตํ•ด ์ธ์ฆ ๋ฒˆํ˜ธ๋ฅผ ์ „์†กํ•˜๋Š” ๋ฐฉ์‹์€ ๋งค์šฐ ๋Š๋ฆฌ๋‹ค. ์„œ๋ฒ„ ์‚ฌ์šฉ์ž๊ฐ€ ๋Š˜์–ด๋‚ ์ˆ˜๋ก ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์ด ๋ชฐ๋ ค ์ธ์ฆ ๋ฒˆํ˜ธ๋ฅผ ์ „์†กํ•˜๋Š” ์‹œ๊ฐ„์ด ๋ฌด์ง„์žฅ ๋Š˜์–ด๋‚  ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฌ๋ฉด ์•ˆ ๋œ๋‹ค. ๊ทธ๋ž˜์„œ ์ฐพ์•„๋ณด์•˜๋‹ค. ํŠธ๋ž˜ํ”ฝ์ด ๋ชฐ๋ ธ์„ ๊ฒฝ์šฐ์—๋Š” ์–ด๋–ค ์‹์œผ๋กœ ํ•ด๊ฒฐ์„ ํ•˜๋Š”์ง€? ๋™๊ธฐ์™€ ๋น„๋™๊ธฐ ๋ฐฉ์‹์ด ์žˆ๋‹ค. ๋™๊ธฐ๋Š” ์ฒซ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์™„๋ฃŒ๋˜์–ด์•ผ ๋‹ค์Œ ํ”„๋กœ์„ธ์Šค๋กœ ๋„˜์–ด๊ฐ€๋Š” ๋ฐฉ์‹์ด๊ณ , ์™„๋ฃŒ ์—ฌ๋ถ€์™€ ์ƒ๊ด€์—†์ด ๋‹ค์Œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์š”์ฒญํ•˜๊ฑฐ๋‚˜ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๋น„๋™๊ธฐ ๋ฐฉ์‹์ด๋‹ค. ์ด๋ฉ”์ผ ์ „์†ก์— ์ด ๋น„๋™๊ธฐ ๋ฐฉ์‹์„ ์ ์šฉํ•ด ๋ณด๊ณ ์ž ํ•œ๋‹ค. Async Config ์Šคํ”„๋ง์—์„œ๋Š” @Async๋ฅผ ํ†ตํ•ด ๋น„๋™๊ธฐ ๋ฐฉ์‹์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. configuration์„ ํ†ตํ•ด ์Šค๋ ˆ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ปค์Šคํ„ฐ ๋งˆ์ด์ง• ์‹œ์ผฐ๋‹ค. Async ์ ์šฉ ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๊ธธ ๋ฐ”๋ผ๋Š” ๋ฉ”์„œ๋“œ์— ์• ๋…ธํ…Œ์ด์…˜์„ ์ .. 2022. 5. 26.
2022.05.25 ใ€ŒEmail ์ธ์ฆใ€ ์—ด์‹ฌํžˆ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋‹ค๊ฐ€ ์ดˆ๊ธฐ ๊ตฌ์ƒํ•œ wiki๋ฅผ ๋‹ค์‹œ ๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค. ํšŒ์›๊ฐ€์ž… ์‹œ ์ด๋ฉ”์ผ api๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋Š”๋ฐ ๊ทธ๊ฑธ ๊นŒ๋จน์—ˆ๋‹ค.. ๊ทธ๋ž˜์„œ ํšŒ์›๊ฐ€์ž…์„ ๋‹ค์‹œ ๊ฑด๋“œ๋ฆฌ๊ฒŒ ๋˜์—ˆ๋‹ค. Java์˜ MailSender ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ SMTP ๊ตฌ๊ธ€ ์ด๋ฉ”์ผ๋กœ ์ด๋ฉ”์ผ ์ธ์ฆ ๋ฒˆํ˜ธ๋ฅผ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ์ด๋ฉ”์ผ๋กœ ๋ณด๋‚ด์ฃผ๋„๋ก ์„ค๊ณ„ํ•˜๊ณ  ์ธ์ฆ ๋ฒˆํ˜ธ๋ฅผ redis DB์— ์ €์žฅํ•˜์—ฌ ๋น„๊ตํ•˜๊ณ  ํšŒ์›๊ฐ€์ž…์„ ์ด๋ฃจ๊ฒŒ ํ•  ๊ฒƒ์ด๋‹ค. Mail Sender // Mail implementation 'org.springframework.boot:spring-boot-starter-mail' ๋จผ์ € ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค. Application.yml ์ง€๊ธˆ๊นŒ์ง€ Properties ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, ์ด๋ฒˆ ๊ธฐํšŒ์— yaml์„ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค. ์ด์œ ๋Š” ์ธ.. 2022. 5. 25.
๋ฐ˜์‘ํ˜•