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

์ „์ฒด ๊ธ€250

[์•„ํŒŒ์น˜ ์นดํ”„์นด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ with ์ž๋ฐ”] 4-2์žฅ ์นดํ”„์นด ํ”„๋กœ๋“€์„œ ์นดํ”„์นด ํ”„๋กœ๋“€์„œ ์นดํ”„์นด ํ”„๋กœ๋“€์„œ๋Š” ํ† ํ”ฝ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ฒซ ๋‹จ๊ณ„! acks ์˜ต์…˜ ํ”„๋กœ๋“€์„œ์˜ ์˜ต์…˜์œผ๋กœ acks ์˜ต์…˜ ํ”„๋กœ๋“€์„œ๊ฐ€ ์ „์†กํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ์— ์–ผ๋งˆ๋‚˜ ์‹ ๋ขฐ์„ฑ ์žˆ๊ฒŒ ์ €์žฅํ•  ์ง€ ์ง€์ • ๊ฐ€๋Šฅ ์˜ต์…˜์— ๋”ฐ๋ผ ์„ฑ๋Šฅ์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค. acks = 0 ํ”„๋กœ๋“€์„œ๊ฐ€ ๋ฆฌ๋” ํŒŒํ‹ฐ์…˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ–ˆ์„ ๋•Œ ๋ฆฌ๋” ํŒŒํ‹ฐ์…˜์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ ํ•˜์ง€ ์•Š๋Š”๋‹ค ๋ฆฌ๋” ํŒŒํ‹ฐ์…˜์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋œ ์ดํ›„, ๋ช‡ ๋ฒˆ์งธ ์˜คํ”„์…‹์— ์ €์žฅ๋˜์—ˆ๋Š”์ง€ return ์ด ๊ฒฝ์šฐ์—๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋œ ์—ฌ๋ถ€์— ๋”ฐ๋ฅธ ์‘๋‹ต์„ ๋ฐ›์ง€ ์•Š์Œ. ํ”„๋กœ๋“€์„œ๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก ์‹คํŒจ์‹œ, ์žฌ์‹œ๋„ํ•  ์ˆ˜ ์žˆ๊ฒŒ, retries ์˜ต์…˜ ์„ค์ • ๊ฐ€๋Šฅ ํ•˜์ง€๋งŒ acks = 0 ์ผ ๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ ์ „์†ก์„ ๋ฌด์กฐ๊ฑด ์„ฑ๊ณต์œผ๋กœ ๊ฐ„์ฃผ, ํ•ด๋‹น ์˜ต์…˜์€ ๋ฌด์˜๋ฏธํ•˜๋‹ค. ํ”„๋กœ๋“€์„œ์™€ ๋ธŒ๋กœ์ปค ์‚ฌ์ด์˜ ๋„คํŠธ์›Œํฌ ์˜ค๋ฅ˜.. 2023. 5. 7.
[์•„ํŒŒ์น˜ ์นดํ”„์นด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ with ์ž๋ฐ”] 4-1์žฅ ํ† ํ”ฝ๊ณผ ํŒŒํ‹ฐ์…˜ ํ† ํ”ฝ๊ณผ ํŒŒํ‹ฐ์…˜ ํ† ํ”ฝ์ด ์‚ฌ๋ผ์ง€๋ฉด ์นดํ”„์นด ํŒŒ์ดํ”„ ๋ผ์ธ์€ ๋™์ž‘ํ•˜์ง€ ์•Š์Œ. ์ ์ • ํŒŒํ‹ฐ์…˜ ๊ฐœ์ˆ˜ ํ† ํ”ฝ์˜ ํŒŒํ‹ฐ์…˜์˜ ๊ฐœ์ˆ˜๋Š” ์นดํ”„์นด ์„ฑ๋Šฅ๊ณผ ๋ฐ€์ ‘ํ•œ ๊ด€๊ณ„๊ฐ€ ์žˆ๋‹ค. ํŒŒํ‹ฐ์…˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์„ค์ •ํ•˜๊ณ  ์šด์˜ํ•˜์ž. ํŒŒํ‹ฐ์…˜ ๊ฐœ์ˆ˜๋ฅผ ์ •ํ•  ๋•Œ ๊ณ ๋ คํ•  ์  ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋Ÿ‰ ๋ฉ”์‹œ์ง€ ํ‚ค ์‚ฌ์šฉ ์—ฌ๋ถ€ ๋ธŒ๋กœ์ปค์™€ ์ปจ์Šˆ๋จธ์˜ ์˜ํ–ฅ๋„ ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋Š” ์นดํ”„์นด๋Š”, ํŒŒํ‹ฐ์…˜์˜ ์ˆ˜ ๋งŒํผ ํŒŒ์ผ์— ์ ‘๊ทผํ•œ๋‹ค. ์šด์˜์ฒด์ œ ํŠน์„ฑ ์ƒ ํ”„๋กœ์„ธ์Šค ๋‹น ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ ๊ฐœ์ˆ˜๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๋‹ค. ๋ธŒ๋กœ์ปค๊ฐ€ ์ ‘๊ทผํ•˜๋Š” ํŒŒ์ผ ๊ฐœ์ˆ˜๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ๋Š”, ์นดํ”„์นด ๋ธŒ๋กœ์ปค์˜ ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๋ฉด ๋œ๋‹ค. ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์†๋„๋ฅผ ์˜ฌ๋ฆฌ์ž ์ปจ์Šˆ๋จธ์˜ ์ฒ˜๋ฆฌ๋Ÿ‰ ๋Š˜๋ฆฌ๊ธฐ ์ปจ์Šˆ๋จธ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์„œ๋ฒ„๋ฅผ ์Šค์ผ€์ผ์—… GC ํŠœ๋‹ ์ปจ์Šˆ๋จธ๋Š” (S3, ํ•˜๋‘ก, ์˜ค๋ผํด ๋“ฑ๋“ฑ) ์˜ ์‹œ์Šคํ…œ๊ณผ ์—ฐ๋™๋˜๋ฏ€๋กœ, ์ผ์ • ์ˆ˜์ค€ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ๋†’์ด๋Š”๋ฐ,.. 2023. 5. 5.
OutBox Pattern ์„ ํ™œ์šฉํ•œ ๋ฉ”์ผ ์ „์†ก ์„œ๋น„์Šค ๊ฐœ๋ฐœ [At Least Once] ์Šคํ”„๋ง์—์„œ ๋ฉ”์ผ ์ „์†ก์€ ์ •๋ง ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. JavaMailSender ๋กœ ๋ง์ด์•ผ. ๋‹จ์ˆœํžˆ, ๋ฉ”์ผ๋งŒ ์ „์†กํ•˜๋Š” ํ•จ์ˆ˜๋งŒ ๊ตฌํ˜„ํ•˜๋ฉด ๋์ผ๊นŒ? ๋ฌผ๋ก  ์ƒํ™ฉ์— ๋”ฐ๋ผ ๊ฐ„๋‹จํ•œ ๊ตฌํ˜„์ด๋‚˜, ๋ณต์žกํ•œ ๊ตฌํ˜„์ด ๋‚˜๋ˆ ์ ธ์•ผ ํ•œ๋‹ค. ์‹ค ์„œ๋น„์Šค์—์„œ๋Š”? ๋ฉ”์ผ๋กœ ์ „์†กํ•ด์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ค‘์š”๋„์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒ ์ง€๋งŒ, ์•„๋ฌด๋ž˜๋„ ๋ฉ”์ผ์„ ์ˆ˜์‹ ํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ ์ž…์žฅ์—์„œ๋Š” ์„œ๋ฒ„ ์žฅ์•  ๋•Œ๋ฌธ์—, ๋ฉ”์ผ ์ˆ˜์‹ ์ด ์•ˆ ๋  ๊ฒฝ์šฐ ๋งค์šฐ ๋‹นํ™ฉ์Šค๋Ÿฌ์šธ ๊ฒƒ์ด๋‹ค. ์ฆ‰, ์ ์–ด๋„ ํ•œ๋ฒˆ ์ „์†ก (At least once) ๋ฅผ ๋งŒ์กฑํ•˜๋Š” Eventually Consistency ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ๋ฉ”์ผ ์ „์†ก ์„œ๋น„์Šค์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค๋ค„์ ธ์•ผ ํ•  ์‚ฌํ•ญ์ด๋‹ค. ์ผ๋ก€๋กœ, ๋ถ„์‚ฐ ์„œ๋ฒ„ ํ™˜๊ฒฝ์—์„œ๋Š”, ์•Œ๋ฆผ ์„œ๋น„์Šค๋งŒ์„ ๋‹ค๋ฃจ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์กด์žฌํ•˜๋Š”๋ฐ, ์ด๋•Œ outbox ํŒจํ„ด์ด๋ผ๋Š” ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ.. 2023. 4. 20.
[์•„ํŒŒ์น˜ ์นดํ”„์นด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ with ์ž๋ฐ”] 3-6์žฅ ์นดํ”„์นด ์ปค๋„ฅํŠธ ์นดํ”„์นด ์ปค๋„ฅํŠธ๋ž€? ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ ์ƒ์„ฑ ์‹œ ๋ฐ˜๋ณต ์ž‘์—…์„ ์ค„์ด๊ณ , ํšจ์œจ์ ์ธ ์ „์†ก์„ ์œ„ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์˜ˆ๋กœ, ํŒŒ์ดํ”„๋ผ์ธ ์ƒ์„ฑ ์‹œ, ํ”„๋กœ๋“€์„œ | ์ปจ์Šˆ๋จธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ณ„์† ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฐ˜๋ณต ์ƒ์„ฑ ์ž‘์—…์˜ ๊ฒฝ์šฐ ๊ณ„์†์ ์œผ๋กœ ๋ฐฐํฌ ๋ฐ ์šด์˜์ด ๋น„ํšจ์œจ์ ์ด๋‹ค. ์ด๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ์„ฑ ๋งž์ถค Source Connector ํ”„๋กœ๋“€์„œ ์—ญํ•  ํ† ํ”ฝ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ๋•Œ Sink Connector ์ปจ์Šˆ๋จธ ์—ญํ•  ํ† ํ”ฝ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ์ €์žฅํ•  ๋•Œ ์˜ˆ์‹œ๋กœ, Mysql ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ณ  ์ €์žฅํ•  ๋•Œ (JDBC ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€) ์ปค๋„ฅํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ํŒŒ์ดํ”„๋ผ์ธ ์ƒ์„ฑ ๊ฐ€๋Šฅ ํŠน์ง• ์˜คํ”ˆ ์†Œ์Šค ์ปค๋„ฅํ„ฐ๋Š” ์ปค๋„ฅํ„ฐ jar ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. gradle ์˜ Mysql connector ๋ฅผ ๋งํ•˜๋Š”๊ฑด๊ฐ€? ์ปค๋„ฅํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ, ํŒŒ์ดํ”„๋ผ์ธ ์ƒ์„ฑ ์‹œ.. 2023. 4. 20.
[์•„ํŒŒ์น˜ ์นดํ”„์นด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ with ์ž๋ฐ”] 3-5์žฅ ์นดํ”„์นด ์ŠคํŠธ๋ฆผ์ฆˆ ์นดํ”„์นด ์ŠคํŠธ๋ฆผ์ฆˆ ํ† ํ”ฝ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋‹ค๋ฅธ ํ† ํ”ฝ์— ์ ์žฌํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์นดํ”„์นด ํด๋Ÿฌ์Šคํ„ฐ์™€ ์™„๋ฒฝ ํ˜ธํ™˜ ๋ฐ ์ŠคํŠธ๋ฆผ ์ฒ˜๋ฆฌ์— ํ•„์š”ํ•œ ํŽธ๋ฆฌํ•œ ๊ธฐ๋Šฅ ์ œ๊ณต ์žฅ์•  ๋ฐœ์ƒ ์‹œ Exactly Once ํ•˜๋„๋ก ์žฅ์•  ํ—ˆ์šฉ ์‹œ์Šคํ…œ ์žฅ์ฐฉ => ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์•ˆ์ •์„ฑ Up. ๊ฐœ์š” ์ŠคํŠธ๋ฆผ์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋‚ด๋ถ€์ ์œผ๋กœ 1๊ฐœ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ ์ƒ์„ฑ ๊ฐ€๋Šฅ ์Šค๋ ˆ๋“œ๋Š” 1๊ฐœ ์ด์ƒ์˜ ํƒœ์Šคํฌ๋ฅผ ๊ฐ€์ง„๋‹ค. ์ŠคํŠธ๋ฆผ์ฆˆ์˜ Task ๋Š” ์ŠคํŠธ๋ฆผ์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋ฉด ์ƒ๊ธฐ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ตœ์†Œ ์ฒ˜๋ฆฌ ๋‹จ์œ„ 3๊ฐœ์˜ ํŒŒํ‹ฐ์…˜์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ํ† ํ”ฝ์„ ์ฒ˜๋ฆฌํ•  ๊ฒฝ์šฐ, ์ŠคํŠธ๋ฆผ์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ ์‹œ, ๋‚ด๋ถ€์˜ 3๊ฐœ์˜ ํƒœ์Šคํฌ๊ฐ€ ์ƒ๊น€. ์นดํ”„์นด ์ŠคํŠธ๋ฆผ์ฆˆ๋Š” ์ŠคํŠธ๋ฆผ์ฆˆ DSL (Domain Specific Language) ๊ณผ ํ”„๋กœ์„ธ์„œ API 2๊ฐœ์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐœ๋ฐœ ๊ฐ€๋Šฅ ์ŠคํŠธ๋ฆผ์ฆˆ DSL ์€ .. 2023. 4. 13.
[์•„ํŒŒ์น˜ ์นดํ”„์นด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ with ์ž๋ฐ”] 3.4 ์žฅ ์นดํ”„์นด ํด๋ผ์ด์–ธํŠธ ์นดํ”„์นด ํด๋ผ์ด์–ธํŠธ ์นดํ”„์นด ํด๋Ÿฌ์Šคํ„ฐ์— ๋ช…๋ น์„ ๋‚ด๋ฆฌ๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์†ก์ˆ˜์‹  ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. ์นดํ”„์นด ํ”„๋กœ๋“€์„œ, ์ปจ์Šˆ๋จธ, ์–ด๋“œ๋ฏผ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ œ๊ณตํ•จ. ์—„์—ฐํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋ฏ€๋กœ, ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ตฌํ˜„ ํ›„ ์‹คํ–‰. ํ”„๋กœ๋“€์„œ API ์นดํ”„์นด์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ์–ธํ•˜๊ณ  ๋ธŒ๋กœ์ปค์˜ ํŠน์ • ํ† ํ”ฝ์˜ ํŒŒํ‹ฐ์…˜์— ์ „์†ก. ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ๋•Œ ๋ฆฌ๋” ํŒŒํ‹ฐ์…˜ ์†Œ์œ ์˜ ์นดํ”„์นด ๋ธŒ๋กœ์ปค์™€ ์ง์ ‘ ํ†ต์‹ ํ•œ๋‹ค. ์ฃผ์š” ํŠน์ง• ์นด๋ธŒ์นด ๋ธŒ๋กœ์ปค๋กœ ๋ฐ์ดํ„ฐ ์ „์†ก ์‹œ, ๋‚ด๋ถ€์ ์œผ๋กœ ํŒŒํ‹ฐ์…”๋„ˆ ๋ฐ ๋ฐฐ์น˜ ์ƒ์„ฑ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นจ. UniformStickyPartitioner ์™€ RoundRobinPartitioner ์˜ 2๊ฐœ ํŒŒํ‹ฐ์…˜์„ ์ œ๊ณตํ•จ. ๋ฉ”์‹œ์ง€ ํ‚ค ์œ ๋ฌด์—์„œ ์ฐจ์ด์ ์ด ๋ฐœ์ƒํ•œ๋‹ค. ํ”„๋กœ๋“€์„œ ๋™์ž‘์— ํŠนํ™”๋œ UniformStickyPartitioner๋Š” ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰ ๋ฐ ๋‚ฎ์€ .. 2023. 4. 9.
[์•„ํŒŒ์น˜ ์นดํ”„์นด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ with ์ž๋ฐ”] 3-2, 3์žฅ ํ† ํ”ฝ๊ณผ ํŒŒํ‹ฐ์…˜, ๋ ˆ์ฝ”๋“œ ํ† ํ”ฝ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๋‹จ์œ„ 1๊ฐœ ์ด์ƒ์˜ ํŒŒํ‹ฐ์…˜ ์†Œ์œ  ๋ฐ์ดํ„ฐ๋ฅผ Record ๋ผ ์นญํ•จ ํŒŒํ‹ฐ์…˜ ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ์˜ ํ•ต์‹ฌ ์ปจ์Šˆ๋จธ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๋Š” ์Šค์ผ€์ผ ์•„์›ƒ์œผ๋กœ ํ•œ์ •๋œ ์ปจ์Šˆ๋จธ์˜ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ๋ณด์กฐ ๊ฐ€๋Šฅ. Queue์™€ ๊ฐ™์€ ๊ตฌ์กฐ ๋ ˆ์ฝ”๋“œ ํƒ€์ž„ ์Šคํƒฌํ”„, ๋ฉ”์‹œ์ง€ ํ‚ค, ๋ฉ”์‹œ์ง€ ๊ฐ’, ์˜คํ”„์…‹, ํ—ค๋” ๊ตฌ์„ฑ ํ•œ๋ฒˆ ์ ์žฌ๋œ ๋ ˆ์ฝ”๋“œ๋Š” ์ˆ˜์ • ๋ถˆ๊ฐ€ ๋ฐ log retention or capacity์— ๋”ฐ๋ผ ์‚ญ์ œ ํŠน์ง• ์ƒ์„ฑ๋œ ์‹œ์ ์— Unix Time ์„ค์ • ๋จ, ๋ ˆ์ฝ”๋“œ ์ƒ์„ฑ ์‹œ ํƒ€์ž„ ์Šคํƒฌํ”„๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์— ์œ ์˜ ๋ฉ”์‹œ์ง€ ํ‚ค๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•ด์‹œ ๊ฐ’์„ ํ† ๋Œ€๋กœ ํŒŒํ‹ฐ์…˜ ์ง€์ • ๊ฐ€๋Šฅ ํ•„์š”์‹œ null ์„ค์ • ๋ฉ”์‹œ์ง€ ๊ฐ’์€ ์ง๋ ฌํ™”, ์—ญ์ง๋ ฌํ™” ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋กœ ์„ค์ • => ๋™์ผํ•œ ํ˜•ํƒœ๋กœ ์ƒํ˜ธ ๊ฐ„ ์ˆ˜ํ–‰ ์ปจ์Šˆ๋จธ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ๊ฐˆ ๋•Œ, ์˜คํ”„์…‹์„ ์‚ฌ์šฉ ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์ด .. 2023. 3. 27.
[์•„ํŒŒ์น˜ ์นดํ”„์นด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ with ์ž๋ฐ”] 3-1์žฅ ์นดํ”„์นด ๋ธŒ๋กœ์ปค์™€ ํด๋Ÿฌ์Šคํ„ฐ ์ฃผํ‚คํผ ์นดํ”„์นด ๋ธŒ๋กœ์ปค ์นดํ”„์นด ํด๋ผ์ด์–ธํŠธ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ฃผ์ฒด ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์‚ฐ ์ €์žฅํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณดํ†ต 3๋Œ€ ์ด์ƒ์˜ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ์šด์˜ ๋ถ„์‚ฐ ์ €์žฅ ๋ฐ ๋ณต์ œ ์นดํ”„์นด ๋ธŒ๋กœ์ปค์˜ ํŠน์ง• ์ „๋‹ฌ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒํ‹ฐ์…˜์— ์ €์žฅ ๋ฐ ์ „๋‹ฌ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ ๋ฉ”๋ชจ๋ฆฌ๋‚˜ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๊ฐ€ ์•„๋‹Œ, ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ €์žฅ => ์†๋„ ์ด์Šˆ๋ฅผ ์บ์‹ฑ์œผ๋กœ ๊ฐœ์„  ๋ฐ์ดํ„ฐ์˜ ๋ณต์ œ๋Š” ํŒŒํ‹ฐ์…˜ ๋‹จ์œ„๋กœ ์ด๋ฃจ์–ด์ง => ๋ฆฌ๋” ํŒŒํ‹ฐ์…˜์œผ๋กœ๋ถ€ํ„ฐ ๋ฐ›์Œ ์ปจํŠธ๋กค๋Ÿฌ ๋‹ค๋ฅธ ๋ธŒ๋กœ์ปค๋“ค์˜ ์ƒํƒœ ์ฒดํฌ ๋ฐ ํ•˜๋‚˜์˜ ๋ธŒ๋กœ์ปค๊ฐ€ ์ œ์™ธ๋  ๊ฒฝ์šฐ, ๋ฆฌ๋” ํŒŒํ‹ฐ์…˜์„ ์žฌ๋ถ„๋ฐฐ ๋ฐ์ดํ„ฐ ์‚ญ์ œ ์นดํ”„์นด๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ† ํ”ฝ ๋ฐ์ดํ„ฐ ์‚ญ์ œํ•˜์ง€ ์•Š์Œ. ๋ธŒ๋กœ์ปค๋งŒ์ด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œ ๊ฐ€๋Šฅํ•จ. => ์‚ญ์ œ ์šฉ๋Ÿ‰ ์˜ต์…˜ ๊ฐ’ ์„ค์ • ๊ฐ€๋Šฅ ์ฝ”๋””๋„ค์ดํ„ฐ ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน ์ƒํƒœ ์ฒดํฌ ๋ฐ .. 2023. 3. 27.
[๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ] 11์žฅ ๋‰ด์Šค ํ”ผ๋“œ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๋‰ด์Šค ํ”ผ๋“œ ํ™ˆํŽ˜์ด์ง€ ์ค‘์•™์— ์ง€์†์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜๋Š” ์Šคํ† ๋ฆฌ๋“ค ์‚ฌ์šฉ์ž ์ƒํƒœ ์ •๋ณด ์—…๋ฐ์ดํŠธ, ์‚ฌ์ง„, ๋น„๋””์˜ค, ๋งํฌ, ์•ฑ ํ™œ๋™ ๋“ฑ๋“ฑ 1๋‹จ๊ณ„ : ๋ฌธ์ œ ์ดํ•ด ๋ฐ ์„ค๊ณ„ ๋ฒ”์œ„ ํ™•์ • ๋ชจ๋ฐ”์ผ ์•ฑ์„ ์œ„ํ•œ ์‹œ์Šคํ…œ์ธ์ง€, ์›น์„ ์œ„ํ•œ ์‹œ์Šคํ…œ์ธ์ง€ ๋‘˜ ๋‹ค ์ง€์›ํ•ด์•ผ ํ•จ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์œผ๋ก  ์–ด๋–ค ๊ฒƒ์ด ์žˆ๋Š”์ง€ ์‚ฌ์šฉ์ž๋Š” ๋‰ด์Šค ํ”ผ๋“œ์— ์ƒˆ๋กœ์šด ์Šคํ† ๋ฆฌ๋ฅผ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ ์นœ๊ตฌ๋“ค์ด ์˜ฌ๋ฆฌ๋Š” ์Šคํ† ๋ฆฌ๋ฅผ ๋ณผ ์ˆ˜๋„ ์žˆ์–ด์•ผ ํ•จ ๋‰ด์Šค ํ”ผ๋“œ์—๋Š” ์–ด๋–ค ์ˆœ์„œ๋กœ ์Šคํ† ๋ฆฌ๊ฐ€ ํ‘œ์‹œ๋˜์–ด์•ผ ํ•˜๋Š”์ง€? ๋‹จ์ˆœํžˆ ์‹œ๊ฐ„ ํ๋ฆ„ ์—ญ์ˆœ์œผ๋กœ ํ‘œ์‹œ๋œ๋‹ค๊ณ  ๊ฐ€์ • ํ•œ ๋ช…์˜ ์‚ฌ์šฉ์ž๋Š” ์ตœ๋Œ€ ๋ช‡ ๋ช…์˜ ์นœ๊ตฌ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š”์ง€? ์˜ˆ์‹œ : 5000๋ช… ํŠธ๋ž˜ํ”ฝ ๊ทœ๋ชจ? ๋งค์ผ ์ฒœ๋งŒ ๋ช…์ด ๋ฐฉ๋ฌธํ•œ๋‹ค๊ณ  ๊ฐ€์ • ํ”ผ๋“œ์— ์ด๋ฏธ์ง€๋‚˜ ๋น„๋””์˜ค ์Šคํ† ๋ฆฌ๋„ ์˜ฌ๋ผ์˜ฌ ์ˆ˜ ์žˆ๋Š”์ง€? ์Šคํ† ๋ฆฌ์—๋Š” ์ด๋ฏธ์ง€๋‚˜ ๋น„๋””์˜ค ๋“ฑ์˜ ๋ฏธ๋””์–ด ํŒŒ์ผ ํฌํ•จ ๊ฐ€๋Šฅ 2๋‹จ๊ณ„ :.. 2023. 3. 19.
[๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ] 10์žฅ ์•Œ๋ฆผ ์‹œ์Šคํ…œ ์„ค๊ณ„ ์•Œ๋ฆผ ์‹œ์Šคํ…œ์€ ์–ด๋Š ์„œ๋น„์Šค๋‚˜ ํ•ญ์ƒ ๊ณ ๋ฏผํ•˜๊ฒŒ ๋˜๋Š” ๋ถ€๋ถ„์ด๋ผ ์ƒ๊ฐํ•œ๋‹ค. ์‹ค์ œ๋กœ ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ, ๋‹ค์–‘ํ•œ ๊ณ ๋ฏผ๋“ค์„ ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์„ค๊ณ„์— ๋Œ€ํ•œ ์ดˆ์ ์—์„œ ๋ฐ”๋ผ๋ณธ ๊ฑด ์ƒˆ๋กœ์› ๋‹ค. ์•Œ๋ฆผ ์‹œ์Šคํ…œ ๊ณ ๊ฐ์—๊ฒŒ ์ค‘์š”ํ•  ๋งŒํ•œ ์ •๋ณด๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ „์†ก ๋ชจ๋ฐ”์ผ ํ‘ธ์‹œ ์•Œ๋ฆผ, SMS ๋ฉ”์‹œ์ง€, ์ด๋ฉ”์ผ ์„ธ ๊ฐ€์ง€๋กœ ๋ถ„๋ฅ˜ 1๋‹จ๊ณ„ : ๋ฌธ์ œ ์ดํ•ด ๋ฐ ์„ค๊ณ„ ๋ฒ”์œ„ ํ™•์ • ์‹œ์Šคํ…œ์ด ์ง€์›ํ•˜๋Š” ์•Œ๋ฆผ ์ข…๋ฅ˜ ํ‘ธ์‹œ ์•Œ๋ฆผ, SMS ๋ฉ”์‹œ์ง€, ์ด๋ฉ”์ผ ์‹ค์‹œ๊ฐ„ ์‹œ์Šคํ…œ ์—ฌ๋ถ€ ์—ฐ์„ฑ ์‹ค์‹œ๊ฐ„ ์‹œ์Šคํ…œ์ด๋ผ๊ณ  ๊ฐ€์ • (์‹œ์Šคํ…œ ๋ถ€ํ•˜ ์‹œ ์•ฝ๊ฐ„์˜ ์ง€์—ฐ ๋ฌด๋ฐฉ) ์ง€์›ํ•ด์•ผ ํ•˜๋Š” ์ข…๋ฅ˜์˜ ๋‹จ๋ง iOS, ์•ˆ๋“œ๋กœ์ด๋“œ, ๋žฉํ†ฑ/๋ฐ์Šคํฌํ†ฑ ์•Œ๋ฆผ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ฃผ์ฒด ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ or ์„œ๋ฒ„ ์ธก์˜ ์Šค์ผ€์ค„๋ง ์•Œ๋ฆผ์„ ๋ฐ›์ง€ ์•Š๋„๋ก ์„ค์ •๋„ ๊ฐ€๋Šฅํ•ด์•ผ ํ•จ ํ•˜๋ฃจ์— ๋ณด๋‚ผ ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋Š” ์–‘ ์ฒœ๋งŒ ๊ฑด์˜ ๋ชจ๋ฐ”์ผ ํ‘ธ์‹œ.. 2023. 3. 18.
[์•„ํŒŒ์น˜ ์นดํ”„์นด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ with ์ž๋ฐ”] 1์žฅ ๋“ค์–ด๊ฐ€๋ฉฐ ์•„ํŒŒ์น˜ ์นดํ”„์นด ๊ฐœ๋ฐœ ๊ณต๋ถ€๋ฅผ ํ•˜๋ฉฐ ํ•„์ˆ˜๋กœ MQ, MB ์ •๋„๋Š” ํ•˜๋‚˜ ๊ณต๋ถ€ํ•ด์•ผ ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์„ ๊พธ์ค€ํžˆ ํ•ด์™”๋‹ค. ๊ณต๋ถ€ํ• ๋งŒํ•œ ์‹ค๋ ฅ์ด ๋˜๋Š”๊ฒŒ ๋ฒ ์ด์Šค๊ฐ€ ๋  ์‹œ๊ธฐ์™€, ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•ด์•ผ ๋  ์‹œ๊ธฐ๊ฐ€ ๋”ฑ ๋งž์•„ ๋–จ์–ด์ ธ ๋ฐ”๋กœ ๊ณต๋ถ€ํ•˜๊ธฐ๋กœ ๋งˆ์Œ ๋จน์—ˆ๋‹ค. ์นดํ”„์นด๋ž€? ์นดํ”„์นด ๋‚ด๋ถ€์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ํŒŒํ‹ฐ์…˜ ๋™์ž‘์€ FIFO ๋ฐฉ์‹์˜ ํ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์œ ์‚ฌํ•˜๋‹ค. ํ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ‘ํ”„๋กœ๋“€์…”' ์ด๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ๊ฐ€๋Š” ๊ฒƒ์ด ‘์ปจ์Šˆ๋จธ'. ์นดํ”„์นด๋ฅผ ํ†ตํ•ด ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ํฌ๋งท์€ ๊ฑฐ์˜ ์ œํ•œ์ด ์—†๋‹ค. ์ง๋ ฌํ™”, ์—ญ์ง๋ ฌํ™”๋ฅผ ํ†ตํ•ด ByteArray ๋กœ ํ†ต์‹ ํ•˜๋ฏ€๋กœ ์ž๋ฐ”์—์„œ ์„ ์–ธํ•œ ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ์ง€์›ํ•œ๋‹ค. (์นดํ”„์นด ํด๋ผ์ด์–ธํŠธ์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ByteArray, ByteBuffer, Double, Long, String ํƒ€์ž…์— ๋Œ€์‘ํ•œ ์ง๋ ฌํ™”.. 2023. 3. 13.
[๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ] 9์žฅ ์›น ํฌ๋กค๋Ÿฌ ์„ค๊ณ„ ์›น ํฌ๋กค๋Ÿฌ๋ž€ ๊ฒ€์ƒ‰ ์—”์ง„์—์„œ ๋„๋ฆฌ ์“ฐ๋Š” ๊ธฐ์ˆ ๋กœ, ์›น์— ์ƒˆ๋กœ ์˜ฌ๋ผ์˜ค๊ฑฐ๋‚˜ ๊ฐฑ์‹ ๋œ ์ฝ˜ํ…์ธ ๋ฅผ ์ฐพ์•„๋‚ด๋Š” ๊ฒƒ์ด ์ฃผ๋œ ๋ชฉ์ ์ด๋‹ค. ์›น ํฌ๋กค๋Ÿฌ๋Š” ๋ช‡ ๊ฐœ ์›นํŽ˜์ด์ง€์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ๊ทธ ๋งํฌ๋ฅผ ๋”ฐ๋ผ ๋‚˜๊ฐ€๋ฉด์„œ ์ƒˆ๋กœ์šด ์ฝ˜ํ…์ธ ๋ฅผ ์ˆ˜์ง‘ํ•œ๋‹ค. ๊ฒ€์ƒ‰ ์—”์ง„ ์ธ๋ฑ์‹ฑ : ํฌ๋กค๋Ÿฌ์˜ ๊ฐ€์žฅ ๋ณดํŽธ์ ์ธ ์šฉ๋ก€. ํฌ๋กค๋Ÿฌ๋Š” ์›น ํŽ˜์ด์ง€๋ฅผ ๋ชจ์•„ ๊ฒ€์ƒ‰ ์—”์ง„์„ ์œ„ํ•œ ๋กœ์ปฌ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ ๋‹ค. ์ผ๋ก€๋กœ Googlebot์€ ๊ตฌ๊ธ€ ๊ฒ€์ƒ‰ ์—”์ง„์ด ์‚ฌ์šฉํ•˜๋Š” ์›น ํฌ๋กค๋Ÿฌ๋‹ค. ์›น ์•„์นด์ด๋น™ : ๋‚˜์ค‘์— ์‚ฌ์šฉํ•  ๋ชฉ์ ์œผ๋กœ ์žฅ๊ธฐ๋ณด๊ด€ํ•˜๊ธฐ ์œ„ํ•ด ์›น์—์„œ ์ •๋ณด๋ฅผ ๋ชจ์œผ๋Š” ์ ˆ์ฐจ์ด๋‹ค. ์›น ๋งˆ์ด๋‹ : ์›น ๋งˆ์ด๋‹์„ ํ†ตํ•ด ์ธํ„ฐ๋„ท์—์„œ ์œ ์šฉํ•œ ์ง€์‹์„ ๋„์ถœํ•ด ๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ์›น ๋ชจ๋‹ˆํ„ฐ๋ง : ํฌ๋กค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ธํ„ฐ๋„ท์—์„œ ์ €์ž‘๊ถŒ์ด๋‚˜ ์ƒํ‘œ๊ถŒ์ด ์นจํ•ด๋˜๋Š” ์‚ฌ๋ก€๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ก€๋กœ ๋””์ง€๋งˆํฌ์‚ฌ๋Š” ์›นํฌ๋กค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•ด ํ•ด์ ํŒ .. 2023. 3. 12.
[๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ] Chapter 8 URL ๋‹จ์ถ•๊ธฐ ์„ค๊ณ„ 1๋‹จ๊ณ„ : ๋ฌธ์ œ ์ดํ•ด ๋ฐ ์„ค๊ณ„ ๋ฒ”์œ„ ํ™•์ • URL ๋‹จ์ถ•๊ธฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•ด์•ผ ํ•˜๋Š”์ง€? ๊ธด ์ฃผ์†Œ๊ฐ€ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์กŒ์„ ๋•Œ ๋‹จ์ถ• URL์„ ๊ฒฐ๊ณผ๋กœ ์ œ๊ณตํ•ด์•ผ ํ•จ ๋‹จ์ถ• URL์— ์ ‘์†ํ•˜๋ฉด ์›๋ž˜ URL๋กœ ๊ฐˆ ์ˆ˜๋„ ์žˆ์–ด์•ผ ํ•จ ํŠธ๋ž˜ํ”ฝ ๊ทœ๋ชจ๋Š”? ๋งค์ผ 1์–ต(100million) ๊ฐœ์˜ ๋‹จ์ถ• URL ๋‹จ์ถ• URL์˜ ๊ธธ์ด๋Š”? ์งง์œผ๋ฉด ์งง์„์ˆ˜๋ก ์ข‹์Œ ๋‹จ์ถ• URL์— ํฌํ•จ๋  ๋ฌธ์ž์— ์ œํ•œ์€? ์ˆซ์ž(0๋ถ€ํ„ฐ 9๊นŒ์ง€)์™€ ์˜๋ฌธ์ž(a๋ถ€ํ„ฐ z, A๋ถ€ํ„ฐ Z๊นŒ์ง€)๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ๋‹จ์ถ•๋œ URL์„ ์‹œ์Šคํ…œ์—์„œ ์ง€์šฐ๊ฑฐ๋‚˜ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€? ์‹œ์Šคํ…œ์„ ๋‹จ์ˆœํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์‚ญ์ œ๋‚˜ ๊ฐฑ์‹ ์€ ํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ๊ฐ€์ • 2๋‹จ๊ณ„ : ๊ฐœ๋žต์  ์„ค๊ณ„์•ˆ ์ œ์‹œ ๋ฐ ๋™์˜ ๊ตฌํ•˜๊ธฐ API ์—”๋“œํฌ์ธํŠธ ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„๊ฐ€ ์ œ๊ณตํ•˜๋Š” API ์—”๋“œํฌ์ธํŠธ๋ฅผ ์œ„ํ•ด ์„œ๋ฒ„์™€ ํ†ต์‹  URL ๋‹จ์ถ•๊ธฐ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‘ ๊ฐœ์˜ ์—”๋“œํฌ.. 2023. 3. 7.
[๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ] Chapter 7. ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ์œ„ํ•œ ์œ ์ผํ•œ ID ์ƒ์„ฑ๊ธฐ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ ์œ ์ผ์„ฑ์ด ๋ณด์žฅ๋˜๋Š” ID๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€์ด๋‹ค. ๋‹ค์ค‘ ๋งˆ์Šคํ„ฐ ๋ณต์ œ (multi-master replication) UUID (Universally Unique Identifier) ํ‹ฐ์ผ“ ์„œ๋ฒ„ (Ticket Server) ํŠธ์œ„ํ„ฐ ์Šค๋…ธํ”Œ๋ ˆ์ดํฌ (Twitter Snowflake) ์ ‘๊ทผ๋ฒ• ๋‹ค์ค‘ ๋งˆ์Šคํ„ฐ ๋ณต์ œ ์ด ์ ‘๊ทผ๋ฒ•์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ auto_increment ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋‹ค๋งŒ ๋‹ค์Œ ID์˜ ๊ฐ’์„ ๊ตฌํ•  ๋•Œ 1์ด ์•„๋‹ˆ๋ผ k๋งŒํผ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค. ์—ฌ๊ธฐ์„œ k๋Š” ํ˜„์žฌ ์‚ฌ์šฉ์ค‘์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์„œ๋ฒ„์˜ ์ˆ˜๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๋ฉด ์ดˆ๋‹น ์ƒ์‚ฐ ๊ฐ€๋Šฅ ID์ˆ˜๋„ ๋Š˜๋ฆด ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทœ๋ชจ ํ™•์žฅ์„ฑ ๋ฌธ์ œ๋ฅผ ์–ด๋Š์ •๋„ ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•˜๋‹ค. ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ์„ผํ„ฐ์— ๊ฑธ์ณ ๊ทœ๋ชจ๋ฅผ ๋Š˜๋ฆฌ๊ธฐ ์–ด๋ ต๋‹ค. ID์˜ ์œ ์ผ์„ฑ์€ ๋ณด์žฅ๋˜์ง€๋งŒ ๊ทธ.. 2023. 3. 2.
[Spring data JPA] N+1 ๋ฌธ์ œ ํ•ด๊ฒฐ ์ด๋ ‡๊ฒŒ ์ด๋ฃจ์–ด์ง„ ERD ๋ชจ๋ธ์ด ์žˆ๋‹ค. (์˜ˆ์‹œ) ์กฐ๊ฑด์— ๋งž์ถฐ ๋ถˆ๋Ÿฌ์˜ค๊ณ ์ž ํ•˜๋Š” Data๋Š” ์„ธ ํ…Œ์ด๋ธ”์˜ ์ •๋ณด๋ฅผ ๋ชจ๋‘ ํ•„์š”๋กœ ํ•œ๋‹ค. ์ด๋•Œ Fetch join์„ ๊ณ ๋ คํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค. Permission ์ž…์žฅ์—์„œ user์™€ document๋ฅผ ๋‘๋ฒˆ ๋‹ค fetch join ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด๋Šฅ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์„ฑ๋Šฅ ์ƒ ์—„์ฒญ๋‚œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์„ ๊ฒฝ์šฐ, ์—ฐ๊ด€๋œ ์—”ํ‹ฐํ‹ฐ์˜ ์ˆ˜๋ฅผ ์ œํ•œํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ๋‚˜๋ˆ ์„œ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ผ ๊ฒƒ์ด๋‹ค. ํ•ด๋‹น ์—”ํ‹ฐํ‹ฐ๋“ค์€ ๋ชจ๋‘ FetchType.LAZY ๋กœ ์„ค์ •๋˜์–ด ์žˆ๋‹ค. ๊ธฐ์กด ์ฟผ๋ฆฌ : val documents = documentQueryService.findDocumentsByIdFetchJoinPermissions(projectId) return Response.UserPe.. 2023. 2. 28.
๋ฐ˜์‘ํ˜•