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

728x90

์ „์ฒด ๊ธ€

(74)
[SpringWebflux] reactor operator - 4 Backpressure ๊ด€๋ จ ์—ฐ์‚ฐ์ž delaySequence / limitRate sample delaySequence ์ฃผ์–ด์ง„ duration ๋งŒํผ ์ง€์—ฐ์‹œํ‚ต๋‹ˆ๋‹ค. limitRate() backpressure์— request๋ฅผ ์กฐ์ ˆํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. limitRate()์—์„œ ์ ํžŒ ์ˆ˜ ๋งŽ์€ request๋ฅผ ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰ request๋ฅผ 2๋ฒˆ๋งŒ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. TestCode public class Operator4 { // limit public Flux fluxDelayAndLimit(){ return Flux.range(1,10) .delaySequence(Duration.ofSeconds(1)) .log() .limitRate(2); } } class Operator4Test { private O..
[SpringWebflux] Reactor operator - 3 ์ง‘๊ณ„ ์—ฐ์‚ฐ์ž count distinct reduce groupby count count: ์†ก์ถœ๋˜๋Š” ์š”์†Œ๋ฅผ ํ•ฉ์ณ์„œ ๋‹จ์ผ ๊ฐ’์œผ๋กœ ์ „๋‹ฌํ•˜๋Š”๊ฒŒ count ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด 4๊ฐœ์˜ ์š”์†Œ๊ฐ€ ์ „๋‹ฌ๋˜์—ˆ์„๋•Œ ์š”์†Œ์˜ ์ด ๊ฐฏ์ˆ˜์ธ 4๋ฅผ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค. TestCode public class Operator3 { // count public Mono fluxCount(){ return Flux.range(1, 10).count().log(); } } class Operator3Test { private Operator3 operator3 = new Operator3(); @Test void fluxCount() { StepVerifier.create(operator3.fluxCount()) .expectNext(10L) .ve..
[Spring Webflux] CPU bound vs I/O Bound CPU๋ž€? CPU๋ž€ Computing Process Unit์˜ ์•ฝ์ž์ž…๋‹ˆ๋‹ค. ๊ธฐ๊ณ„์–ด ๋ช…๋ น์–ด๋“ค์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ค‘์•™ ์ฒ˜๋ฆฌ ์žฅ์น˜ ์ž…๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์ปดํ“จํ„ฐ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๋™์ž‘๋“ค์€ CPU๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋Š”๋ฐ CPU Bound ์ž‘์—…์ด๋ž€ ๋‹จ์ˆœํžˆ CPU๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ CPU๋ฅผ ์ค‘์ ์ ์œผ๋กœ ๋‹ค๋ฃจ๋Š” ์ž‘์—…๋“ค์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด ์•”ํ˜ธํ™”, ์••์ถ•๊ณผ ๊ฐ™์€ ์ˆ˜ํ•™์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณ„์‚ฐ, ๋‹ค์ˆ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ง‘๊ณ„ํ•˜๋Š” ์ž‘์—… ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ๋กœ CPU ๊ณ„์‚ฐ ๋Šฅ๋ ฅ์— ๋”ฐ๋ผ ์„ฑ๋Šฅ์ด ์ขŒ์šฐ๋˜๋Š” ๊ทธ๋Ÿฌํ•œ ์ž‘์—…๋“ค์„ ๋งํ•ฉ๋‹ˆ๋‹ค. CPU Bound ์œ„ ๊ทธ๋ฆผ์€ Hardware, Kernel, Application์„ ๊ณ„์ธตํ™”, ์ถ”์ƒํ™”ํ•˜์—ฌ ๋‚˜ํƒ€๋‚ธ ๊ทธ๋ฆผ์ž…๋‹ˆ๋‹ค. Application ๋ ˆ์ด์–ด์—์„œ๋Š” App #1์€ ์‹คํ–‰๋œ ํ”„๋กœ์„ธ์Šค์ด๊ณ  ๋ฌผ๋ฆฌ์ ์ธ ํ•˜๋‚˜์˜ CPU์ฝ”์–ด..
[SpringWebflux] Spring Webflux ์†Œ๊ฐœ Spring Webflux์—์„œ Spring์€ ์šฐ๋ฆฌ๊ฐ€ ์ž˜ ์•Œ๊ณ  ์žˆ๋Š” Spring framework๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. Webflux๋Š” Reactive Stream API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ non-blocking๊ณผ asynchronous๋ฅผ ์ง€์›ํ•˜๋Š” ๋น„๋™๊ธฐ spring web framework์ž…๋‹ˆ๋‹ค. Reactive Stream API, non-block, asynchronous ๋Š” springwebflux์˜ ์ฃผ์š” ํ‚ค์›Œ๋“œ๋ผ ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ฃผ์š” ๊ธฐ์ˆ ๋“ค์ด ๋Œ€๋Ÿ‰์˜ ์›น ํŠธ๋ž˜ํ”ฝ, ํŠนํžˆ I/O๊ฐ€ ๋งŽ์€ ์›น ์„œ๋น„์Šค ๋กœ์ง์—์„œ ๊ธฐ์กด ์„œ๋ธ”๋ฆฟ ๊ธฐ๋ฐ˜ MVC ๋Œ€๋น„ ํšจ์œจ์ ์ด๊ณ  ๋†’์€ ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค์—์„œ ๋‹ค์–‘ํ•œ ๋™์‹œ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•ด์•ผํ•˜๋Š” ๊ฒŒ์ดํŠธ์›จ์ด ์„œ๋ฒ„๋‚˜, ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์„ ์œ„ํ•œ ์›น์†Œ์ผ“, ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌ..
[Redis] Redis๋ž€? 1. Redis๋ž€? Remote Dictionary Server in-memory, key-value ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋ฅผ ์ง€์›ํ•˜๋Š” ์˜คํ”ˆ ์†Œ์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž…๋‹ˆ๋‹ค. Dictionary ๋ผ๋Š” ์ด๋ฆ„์„ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๋ฐ”๋ผ๋ณด๋ฉด ํŠนํžˆ ์ž๋ฐ”์—์„œ Hash Table์ด๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด์„œ key-value ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋‹ค๋ฃฌ๋‹ค๋Š”๊ฒƒ์„ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜คํ”ˆ ์†Œ์Šค ์ด๊ธฐ๋•Œ๋ฌธ์— ๊นƒํ—ˆ๋ธŒ, ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ํ†ตํ•ด ๋‚ด๋ถ€ ๊ตฌํ˜„์ด ์–ด๋–ป๊ฒŒ ๋˜์–ด์žˆ๋Š”์ง€ ์ง์ ‘ ํ™•์ธํ•ด ๋ณผ ์ˆ˜ ์žˆ๊ณ  ๋น ๋ฅธ ์†๋„์™€ ์ด์‹์„ฑ์— ๊ฐ•์ ์ด ์žˆ๋Š” C์–ธ์–ด๋กœ ๊ตฌํ˜„์ด ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. 2. RedisํŠน์ง• in-memory database Redis๋Š” ์ง€๋‚œ ํฌ์ŠคํŒ…์—์„œ ๋‹ค๋ฃฌ in-memory database ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋น ๋ฅธ ์‘๋‹ต์†๋„๋ฅผ ์œ„ํ•ด์„œ ๋””์Šคํฌ๊ฐ€ ์•„๋‹Œ ๋ฉ”๋ชจ๋ฆฌ..
[Redis] in-memory database๋ž€? in-memory database in-memory๋Š” ์ปดํ“จํ„ฐ์˜ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. database๋Š” ์ปดํ“จํ„ฐ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ์Šคํ…œ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฐ์ดํ„ฐ๋ฅผ ์ ์žฌํ•˜์—ฌ ํ™œ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. in-memory database ์ฃผ์š” ํŠน์ง• ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ์„œ ์‚ฌ์šฉํ•œ๋‹ค๋Š”๊ฒƒ์€ ์–ด๋–ค ์˜๋ฏธ๋ฅผ ๋งํ• ๊นŒ์š”? 1. Millisecond Response (1ms = 0.001s) ๋””์Šคํฌ ๋Œ€๋น„ ๋งค์šฐ ๋น ๋ฅธ ์‘๋‹ต์†๋„๋ฅผ ๋ณด์žฅํ•ฉ์ˆ˜์žˆ์Šต๋‹ˆ๋‹ค. ms ๋‹จ์œ„์˜ ๋น ๋ฅธ ์‘๋‹ต์†๋„๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ์‹œ์Šคํ…œ์—์„œ ํ™œ์šฉํ•˜๊ธฐ ์ ํ•ฉํ•˜๋ฉฐ, ๋Œ€๋Ÿ‰์˜ ํŠธ๋ž˜ํ”ฝ์„ init๋˜๋Š” ์„œ๋น„์Šค์—์„œ ์ด์šฉํ•˜๊ธฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋น ๋ฅธ ์†๋„๋กœ ์ธํ•œ ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. 2. Volatility of RAM ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ด..
[MongoDB] ๋ชฝ๊ณ DB 7.0 ๋ฒ„์ „, mongo ์ฐพ์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ ์„ค์น˜ ํ™˜๊ฒฝ: MongoDB 7.0 ๋ชฝ๊ณ DB ์„ค์น˜ ํ›„ ํ™˜๊ฒฝ๋ณ€์ˆ˜๊นŒ์ง€ ์žก์•„ ์คฌ๋Š”๋ฐ mogo ๋ช…๋ น์–ด๋ฅผ ์ฐพ์ง€ ๋ชปํ–ˆ๋‹ค. ๊ตฌ๊ธ€๋ง ํ•ด๋ณด๋‹ˆ mongo.exe๊ฐ€ ์—†์–ด์ ธ์„œ mongosh๋ฅผ ๋‹ค์šด๋ฐ›์•„์„œ ์‚ฌ์šฉํ•˜๋ผ๊ณ  ํ•œ๋‹ค. ์œ„ ์‚ฌ์ดํŠธ์—์„œ sh๋ฅผ ๋‹ค์šด๋ฐ›์€ ํ›„ mongosh.exe์™€ dllํŒŒ์ผ์„ ๋ชฝ๊ณ  db ์„ค์น˜ ๊ฒฝ๋กœ/bin ์— ๋ณต๋ถ™ ํ•œ ๋‹ค์Œ cmd์—์„œ "mongosh"๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ž˜๋œ๋‹ค ( ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์…‹ํŒ… ๋˜์–ด ์žˆ์–ด์•ผ ํ•จ)
[Spring] Spring Core(2): ์˜์กด์„ฑ ์ฃผ์ž…(DI), ๊ฐœ๋…, ๋ฐฉ๋ฒ•, ์žฅ๋‹จ์ , ์ƒ์„ฑ์ž ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜์ž ์˜์กด์„ฑ ์ฃผ์ž…(DI)์ด๋ž€? ์˜์กด์„ฑ ์ฃผ์ž… = Dependency Injection = DI ๋จผ์ € '์˜์กด์„ฑ' ์ด ๋ฌด์—‡์ธ์ง€ ๋ถ€ํ„ฐ ์•Œ์•„๋ณด์ž! ์˜์กด์„ฑ (Dependnecy) ๊ธฐ์—…์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์ง€ ์•Š๋‹ค. ์™„์ „ ๊ฐ„๋‹จํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋”๋ผ๋„, ๋ช‡ ๊ฐœ์˜ ๊ฐ์ฒด๊ฐ€ ์„œ๋กœ ํ˜‘๋ ฅํ•˜๊ณ  ์žˆ๋‹ค. ๊ฐ์ฒด๊ฐ€ ํ˜‘๋ ฅํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด์„ฑ์ด ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์˜์กด์„ฑ์ด๋ž€ ํŒŒ๋ผ๋ฏธํ„ฐ๋‚˜ ๋ฆฌํ„ด๊ฐ’ ๋˜๋Š” ์ง€์—ญ ๋ณ€์ˆ˜ ๋“ฑ์œผ๋กœ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•œ์˜ ๊ฐ์ฒด๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ๋ถ€ํ’ˆ์ด ๋œ๋‹ค. ์ด ๊ธ€์—์„œ ๋งํ•  ์˜์กด์„ฑ ์ฃผ์ž…์€ Spring์˜ ์˜์กด์„ฑ ์ฃผ์ž…์ด๋‹ค. Spring์—์„œ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๊ฐ์ฒด๋ฅผ Spring Bean์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ์ฃผ๋กœ Controller, Service, Repository๋ฅผ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ..

728x90