๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋ชฉ๋ก์ „์ฒด ๊ธ€ (180)

Unfazedโ—๏ธ๐ŸŽฏ

๋กœ์ปฌ ์บ์‹œ(Guava, Caffeine Cache) ๋ถ„์‚ฐ ์บ์‹œ(Redis, Memcached), ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์บ์‹œ, ์บ์‹ฑ ์ „๋žต

1. ์บ์‹ฑ, ์บ์‹œ1.1. ์บ์‹ฑ์˜ ๋ชฉ์  ์บ์‹ฑ(Caching)์˜ ์ฃผ๋ชฉ์ ์€ "์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋‚˜ ๊ฐ’์„ ๋ฏธ๋ฆฌ ๋ณต์‚ฌํ•ด ๋†“์€ ์ž„์‹œ ์žฅ์†Œ"๋ฅผ ๋งˆ๋ จํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ ์ง€์—ญ์„ฑ(Data Locality) ์›์น™, ์ฆ‰ ํ•œ๋ฒˆ ์‚ฌ์šฉ๋œ ๋ฐ์ดํ„ฐ๋Š” ๊ฐ€๊นŒ์šด ๋ฏธ๋ž˜์— ๋‹ค์‹œ ์‚ฌ์šฉ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค๋Š” ๊ฒฝํ—˜์  ๋ฒ•์น™์— ๊ทผ๊ฑฐํ•œ๋‹ค. ์บ์‹ฑ์˜ ์ง์ ‘์ ์ธ ๊ฐ€์น˜๋Š” ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋””์Šคํฌ(SSD, HDD) ๊ธฐ๋ฐ˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์˜๊ตฌ ์ €์žฅ๋˜์ง€๋งŒ, ๋””์Šคํฌ ์ ‘๊ทผ์€ ๋ฉ”๋ชจ๋ฆฌ(RAM) ์ ‘๊ทผ์— ๋น„ํ•ด ์†๋„๊ฐ€ ํ˜„์ €ํžˆ ๋А๋ฆฌ๋‹ค. ์ธ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ RAM์— ์ €์žฅํ•จ์œผ๋กœ์จ ๋ฐ€๋ฆฌ์ดˆ ๋ฏธ๋งŒ์˜ ์ดˆ์ €์ง€์—ฐ(ultra-low latency) ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜์—ฌ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ „๋ฐ˜์ ์ธ ์‘๋‹ต ์†๋„๋ฅผ ํฌ๊ฒŒ ๊ฐœ์„ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์บ์‹ฑ์ด ๋‹จ์ˆœํžˆ ์†๋„ ๊ฐœ..

์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๊ด€์ ์—์„œ ๋ณด๋Š” I/O

ํ‰์ƒ์‹œ ์‚ฌ์šฉํ•˜๋Š” printf, System.out.println, Scanner ๊ฐ™์€ ๊ฐ„๋‹จํ•œ API ํ˜ธ์ถœ์ด ์‹ค์ œ๋กœ ์šด์˜์ฒด์ œ์™€ ํ•˜๋“œ์›จ์–ด ์‚ฌ์ด์—์„œ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€๋ฅผ ๋‹จ๊ณ„์ ์œผ๋กœ ์•Œ์•„๋ณด์ž.1. ์‚ฌ์šฉ์ž ๊ณต๊ฐ„ vs ์ปค๋„ ๊ณต๊ฐ„1-1. ๊ฒฝ๊ณ„์˜ ์ •์˜ํ˜„๋Œ€ OS๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„๊ณผ ์ปค๋„ ๊ณต๊ฐ„์œผ๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค. ์ปค๋„ ๊ณต๊ฐ„์€ ํŠน๊ถŒ(privilege) ๋ชจ๋“œ(Ring 0)์—์„œ ์‹คํ–‰๋˜๋ฉฐ ํ•˜๋“œ์›จ์–ด์™€ ๋ฏผ๊ฐํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋น„ํŠน๊ถŒ ๋ชจ๋“œ๋‹ค. ์ด๋Š” ์•ˆ์ •์„ฑ, ๋ณด์•ˆ์˜ ํ•ต์‹ฌ์ด ๋œ๋‹ค. 1-2. ์™œ ์ค‘์š”ํ•œ๊ฐ€์‚ฌ์šฉ์ž ์ฝ”๋“œ๊ฐ€ ํ•˜๋“œ์›จ์–ด๋ฅผ ์ง์ ‘ ์กฐ์ž‘ํ•˜๋ฉด ์‹œ์Šคํ…œ ์ „์ฒด๊ฐ€ ๋ถˆ์•ˆ์ •ํ•ด์ง„๋‹ค. ๋”ฐ๋ผ์„œ I/O ๊ฐ™์€ ํŠน๊ถŒ ์ž‘์—…์€ ์‚ฌ์šฉ์ž → ์ปค๋„๋กœ ํ†ต์ œ๋œ ์š”์ฒญ(์‹œ์Šคํ…œ ์ฝœ) ํ˜•ํƒœ๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„๋‹ค. ์ด ์ „ํ™˜์€ ์ปจํ…..

[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] ์•„์ดํ…œ 1: ์ƒ์„ฑ์ž ๋Œ€์‹  ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ๊ณ ๋ คํ•˜๋ผ

new ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐ์ฒด ์ƒ์„ฑ์€ ์ž๋ฐ” ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๊ฐ€์žฅ ์ต์ˆ™ํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋•Œ๋กœ๋Š” ์ด ๋ฐฉ์‹์ด ์ฝ”๋“œ์˜ ์˜๋„๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๋“œ๋Ÿฌ๋‚ด์ง€ ๋ชปํ•˜๊ฑฐ๋‚˜, ๋ถˆํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ๊ณ„์† ๋งŒ๋“ค์–ด๋‚ด๋Š” ์›์ธ์ด ๋˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.์ด๋Ÿด ๋•Œ ์ƒ์„ฑ์ž์˜ ์ข‹์€ ๋Œ€์•ˆ์ด ๋˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ(Static Factory Method)์ž…๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ new ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹ , ์˜๋ฏธ ์žˆ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง„ ์ •์  ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐ€๋…์„ฑ๊ณผ ์œ ์—ฐ์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ค๊ณ , ๋” ํšจ์œจ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” 3ํŒ ์•„์ดํ…œ 1 "์ƒ์„ฑ์ž ๋Œ€์‹  ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ๊ณ ๋ คํ•˜๋ผ"์˜ ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ์˜ 5๊ฐ€์ง€ ํ•ต์‹ฌ ์žฅ์ ๊ณผ ๋‹จ์ ์„ ์˜ˆ์ œ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 1. ์ •์  ํŒฉํ„ฐ..

๋…์„œ 2025. 9. 6. 15:11
[์šฉ์–ด์ •๋ฆฌ] ์˜คํ”„๋กœ๋“œ(Offload)

์˜คํ”„๋กœ๋“œ(Offload): ํŠน์ • ์‹œ์Šคํ…œ์ด๋‚˜ ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๋ฅผ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์ด๋‚˜ ์„œ๋ฒ„๋กœ ๋„˜๊ฒจ์„œ ๋ถ€๋‹ด์„ ์ค„์ด๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํ™œ์šฉ ์˜ˆ์‹œ์ •์  ์ฝ˜ํ…์ธ  ์˜คํ”„๋กœ๋“œ ๋ฐฉ์‹์ฝ˜ํ…์ธ  ์บ์‹ฑ: ์ •์  ์ฝ˜ํ…์ธ ๋ฅผ CDN์˜ ์—ฌ๋Ÿฌ ์—ฃ์ง€ ์„œ๋ฒ„์— ์ €์žฅ(์บ์‹ฑ)ํ•ฉ๋‹ˆ๋‹ค.์‚ฌ์šฉ์ž ์š”์ฒญ ์ฒ˜๋ฆฌ: ์‚ฌ์šฉ์ž๊ฐ€ ์ •์  ์ฝ˜ํ…์ธ ๋ฅผ ์š”์ฒญํ•˜๋ฉด, ๊ฐ€๊นŒ์šด ์—ฃ์ง€ ์„œ๋ฒ„์—์„œ ์ฝ˜ํ…์ธ ๋ฅผ ๋ฐ”๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.์›๋ณธ ์„œ๋ฒ„ ๋ถ€๋‹ด ๊ฐ์†Œ: ์—ฃ์ง€ ์„œ๋ฒ„์—์„œ ๋Œ€๋ถ€๋ถ„์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ, ์›๋ณธ ์„œ๋ฒ„๊นŒ์ง€ ๋„๋‹ฌํ•˜๋Š” ์š”์ฒญ์ด ์ค„์–ด๋“ค์–ด ์›๋ณธ ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๊ฐ€ ๊ฐ์†Œํ•ฉ๋‹ˆ๋‹ค. ์žฅ์ ์„ฑ๋Šฅ ํ–ฅ์ƒ: ์‚ฌ์šฉ์ž๋Š” ๊ฐ€๊นŒ์šด ์—ฃ์ง€ ์„œ๋ฒ„์—์„œ ์ฝ˜ํ…์ธ ๋ฅผ ๋ฐ›์•„ ์›น ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์†๋„๊ฐ€ ๋นจ๋ผ์ง‘๋‹ˆ๋‹ค. ์•ˆ์ •์„ฑ ์ฆ๋Œ€: ์›๋ณธ ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๊ฐ€ ์ค„์–ด๋“ค์–ด ์„œ๋ฒ„์˜ ์•ˆ์ •์„ฑ์ด ๋†’์•„์ง€๊ณ , ํŠธ๋ž˜ํ”ฝ ๊ธ‰์ฆ ์‹œ์—๋„ ์›น์‚ฌ์ดํŠธ๊ฐ€ ์›ํ™œํ•˜๊ฒŒ ์šด์˜๋ฉ๋‹ˆ๋‹ค. ๋น„์šฉ ํšจ์œจ์„ฑ: ์›๋ณธ ์„œ๋ฒ„์—์„œ..

[SQL] DELETE vs TRUNCATE (PostgreSQL, MySQL, SQL Server, Oracle)

1. DELETE(DML) vs TRUNCATE(DDL)DELETE: ๋ฐ์ดํ„ฐ ์กฐ์ž‘ ์–ธ์–ด(DML) ๋ช…๋ น์–ดDELETE๋Š” ๋ฐ์ดํ„ฐ ์กฐ์ž‘ ์–ธ์–ด(DML)์— ์†ํ•˜๋Š” ๋ช…๋ น์–ด๋กœ, ํ…Œ์ด๋ธ” ๋‚ด๋ถ€์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. DELETE์˜ ํ•ต์‹ฌ์€ ๊ฐœ๋ณ„ ํ–‰(row) ์ˆ˜์ค€์—์„œ ์ž‘๋™ํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. WHERE ์ ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ํ–‰๋งŒ ์„ ํƒ์ ์œผ๋กœ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜, WHERE ์ ˆ ์—†์ด ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. DELETE๊ฐ€ ํ–‰ ๋‹จ์œ„๋กœ ์ž‘๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๊ฐ ํ–‰์„ ์‚ญ์ œํ•  ๋•Œ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ‘œ์ค€ ํŠธ๋žœ์žญ์…˜ ๋ฐ ์ผ๊ด€์„ฑ ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.์‚ญ์ œ๋˜๋Š” ๊ฐ ํ–‰์— ๋Œ€ํ•œ ํŠธ๋žœ์žญ์…˜ ๋กœ๊ทธ(๋˜๋Š” PostgreSQL์˜ WAL, Oracle์˜ Redo ๋กœ๊ทธ) ๊ธฐ๋ก๊ด€..

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์‹œ๊ฐ„์ดˆ๊ณผ (์˜ค๋‹ต ์ •๋ฆฌ)

๋ฌธ์ œ“์ฒซ 3์ˆซ์ž์˜ ์ •์ƒ ๊ณต์ฐจ๋ณด๋‹ค ํฐ ์ฆ๊ฐ€๋Š” ๊ธ‰์ฆ” ๋กœ์ง ๊ตฌํ˜„๋ฐ˜ํ™˜ ํƒ€์ž…: int[]์ดˆ๊ธฐ ๊ตฌํ˜„ ์‹œ List์— ๋‹ด์•„ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํ„ด → ์‹œ๊ฐ„์ดˆ๊ณผ์›์ธList ์‚ฌ์šฉ ์‹œ ๋ฐ•์‹ฑ(Boxing) & ์–ธ๋ฐ•์‹ฑ(Unboxing) ๋ฐ˜๋ณต ๋ฐœ์ƒresult.add(i) → int → Integer (๋ฐ•์‹ฑ)List → int[] ๋ณ€ํ™˜ ์‹œ Integer → int (์–ธ๋ฐ•์‹ฑ)๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ์—์„œ ๊ฐ์ฒด ์ƒ์„ฑ + GC ๋ถ€ํ•˜๋กœ ์‹คํ–‰ ์‹œ๊ฐ„ ๊ธ‰์ฆํ•ด๊ฒฐprimitive ๋ฐฐ์—ด(int[])์— ์ง์ ‘ ์ €์žฅ๊ฒฐ๊ณผ ํฌ๊ธฐ ํ™•์ •๋ฐฉ๋ฒ• 1: ์ž„์‹œ ๋ฐฐ์—ด์— ์ €์žฅ ํ›„ Arrays.copyOf๋กœ ์ž˜๋ผ์„œ ๋ฐ˜ํ™˜๋ฐฉ๋ฒ• 2: ๋‘ ๋ฒˆ ์ˆœํšŒํ•ด ๊ฒฐ๊ณผ ํฌ๊ธฐ๋ฅผ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐ ํ›„ ์ •ํ™•ํ•œ ํฌ๊ธฐ์˜ ๋ฐฐ์—ด ์ƒ์„ฑ๋ฐ•์‹ฑ/์–ธ๋ฐ•์‹ฑ ์ œ๊ฑฐ → ์„ฑ๋Šฅ ๊ฐœ์„ ๋ฐฐ์šด ์ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ์—์„œ ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์‹œ List ์‚ฌ์šฉ์€ ์ฃผ์˜๊ฐ€ ํ•„์š”ํŠนํžˆ ..

์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ(์ข…๋ฅ˜, ์ง€ํ‘œ, ๋„๊ตฌ)

์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๋Š” ์†Œํ”„ํŠธ์›จ์–ด์˜ ๊ธฐ๋Šฅ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ์™€ ๋‹ฌ๋ฆฌ, ํŠน์ • ์ž‘์—… ๋ถ€ํ•˜(Workload) ํ•˜์—์„œ ์‹œ์Šคํ…œ์˜ ์‘๋‹ต์„ฑ, ์•ˆ์ •์„ฑ, ๊ทธ๋ฆฌ๊ณ  ์ž์› ์‚ฌ์šฉ๋ฅ ๊ณผ ๊ฐ™์€ ๋น„๊ธฐ๋Šฅ์ ์ธ ์ธก๋ฉด์„ ์ธก์ •ํ•˜๊ณ  ํ‰๊ฐ€ํ•˜๋Š” ํ…Œ์ŠคํŠธ ์œ ํ˜•์ž…๋‹ˆ๋‹ค. ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ์˜ ์ฃผ๋œ ๋ชฉํ‘œ๋Š” ๋‹จ์ˆœํžˆ ๋ฒ„๊ทธ๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์‹œ์Šคํ…œ์˜ ์„ฑ๋Šฅ ์ €ํ•˜ ์ง€์ , ์ฆ‰ ๋ณ‘๋ชฉ(Bottleneck)์„ ์‹๋ณ„ํ•˜๊ณ  ์ œ๊ฑฐํ•˜๋Š” ๋ฐ ์žˆ์Šต๋‹ˆ๋‹ค. 1. ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ์˜ ์ข…๋ฅ˜์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๋Š” ํ•˜๋‚˜์˜ ๊ฐœ๋…์ด ์•„๋‹Œ, ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๋ชฉ์ ์„ ๊ฐ€์ง„ ์—ฌ๋Ÿฌ ํ…Œ์ŠคํŠธ์˜ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค. '์ƒˆ๋กœ ์ง€์€ ๋‹ค๋ฆฌ์˜ ์•ˆ์ •์„ฑ์„ ๊ฒ€์‚ฌํ•œ๋‹ค'๋Š” ์ƒํ™ฉ์„ ํ†ตํ•ด ๊ฐ ํ…Œ์ŠคํŠธ์˜ ๋ชฉํ‘œ๋ฅผ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ (Load Testing): ์ถœํ‡ด๊ทผ ์‹œ๊ฐ„๋Œ€์˜ ๊ตํ†ต๋Ÿ‰ ํ…Œ์ŠคํŠธ๋ชฉํ‘œ: ์‹œ์Šคํ…œ์ด ์˜ˆ์ƒ๋˜๋Š” ์ตœ๋Œ€์น˜์˜ ์ •์ƒ์ ์ธ ๋ถ€ํ•˜(์˜ˆ: ํ”ผ..

S3 + Cloudfront ๋„์ž… ๊ณผ์ •

์ •์  ๋ฆฌ์†Œ์Šค(์ด๋ฏธ์ง€, CSS, JavaScript ํŒŒ์ผ ๋“ฑ)์˜ ํšจ์œจ์ ์ธ ๋ฐฐํฌ๋Š” ์‚ฌ์šฉ์ž ๊ฒฝํ—˜๊ณผ ์‹œ์Šคํ…œ ์„ฑ๋Šฅ์— ์ง์ ‘์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค. ๊ธฐ์กด์— ๋‹จ์ผ ์„œ๋ฒ„์—์„œ ์ •์  ํŒŒ์ผ์„ ์ง์ ‘ ์„œ๋น™ํ•˜๋Š” ๋ฐฉ์‹์€ ์—ฌ๋Ÿฌ ํ•œ๊ณ„์ ์„ ๊ฐ–๊ณ  ์žˆ๋‹ค.๊ธฐ์กด ๋ฐฉ์‹์˜ ํ•œ๊ณ„์ง€์—ญ๋ณ„ ์‚ฌ์šฉ์ž ์ ‘๊ทผ ์†๋„ ์ฐจ์ด์„œ๋ฒ„ ๋ถ€ํ•˜ ์ง‘์ค‘์œผ๋กœ ์ธํ•œ ์„ฑ๋Šฅ ์ €ํ•˜ํŠธ๋ž˜ํ”ฝ ๊ธ‰์ฆ ์‹œ ๋ณ‘๋ชฉ ํ˜„์ƒ ๋ฐœ์ƒ๋ณด์•ˆ ์ทจ์•ฝ์  ๋…ธ์ถœ๋Œ€์—ญํญ ๋น„์šฉ ์ฆ๊ฐ€์œ„์˜ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด, (๋˜ ์šฐ๋ฆฌ ํŒ€์› ์ค‘ ํ•œ๋ช…์ด ํ”„๋ก ํŠธ ์ชฝ ์—…๋ฐ์ดํŠธ๋ฅผ ์ž์ฃผํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์—) ๋…๋ฆฝ์ ์ธ ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•ด ํšจ์œจ์„ฑ์„ ๋†’์ด๊ณ ์ž Amazon S3 (Simple Storage Service)์™€ CloudFront CDN (Content Delivery Network)์„ ๊ฒฐํ•ฉํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋„์ž…ํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.S3 + CDN๋ฅผ ๋„์ž…ํ•˜์—ฌ ์–ป..

Infrastructure & DevOps/AWS 2025. 7. 26. 13:29
Redis ํ‚ค (ํƒ€์ž…๋ณ„ ๋ฐ์ดํ„ฐ ์กฐํšŒ, KEYS, SCAN ๋น„๊ต)

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Redis์˜ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์•Œ์•„๋ณด๊ณ , ๊ฐ ํƒ€์ž…์— ๋งž๋Š” ๊ฐ’์„ ์†์‰ฝ๊ฒŒ ์กฐํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.1. ํƒ€์ž…(TYPE) ํ™•์ธํ•˜๊ธฐ ๊ฐ’์„ ์กฐํšŒํ•˜๊ธฐ ์ „์— ๊ฐ€์žฅ ๋จผ์ € ํ•  ์ผ์€ ํ•ด๋‹น ํ‚ค๊ฐ€ ์–ด๋–ค ๋ฐ์ดํ„ฐ ํƒ€์ž…์œผ๋กœ ์ €์žฅ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋•Œ TYPE ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.# 'weather:active:regions'๋ผ๋Š” ํ‚ค์˜ ํƒ€์ž…์„ ํ™•์ธ127.0.0.1:6379[1]> TYPE weather:active:regionszsetTYPE ๋ช…๋ น์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋Œ€ํ‘œ์ ์ธ ํƒ€์ž…์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.string: ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ์ž์—ด. ๊ฐ„๋‹จํ•œ ํ…์ŠคํŠธ๋ถ€ํ„ฐ JSON ๋ฐ์ดํ„ฐ๊นŒ์ง€ ๋‹ด์„ ์ˆ˜ ์žˆ์Œhash: ์—ฌ๋Ÿฌ ํ•„๋“œ(field)์™€ ๊ฐ’(value) ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๊ฐ์ฒดlist: ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋œ ์ˆœ์„œ๋ฅผ ๊ธฐ์–ตํ•˜๋Š” ๋ชฉ๋ก..

DB/Redis 2025. 7. 24. 23:39
Java I/O ๋ชจ๋ธ๊ณผ Spring ํ”„๋ ˆ์ž„์›Œํฌ (๋™๊ธฐ, ๋น„๋™๊ธฐ, ๋ธ”๋กœํ‚น, ๋…ผ๋ธ”๋กœํ‚น, Spring MVC, Spring Webflux)

CPU๋Š” ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ ํ•œ ๋ฒˆ ํ•˜๋Š” ์‹œ๊ฐ„์— ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ์˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.ํ˜„๋Œ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์—์„œ ๋ณ‘๋ชฉ์€ ์ฃผ๋กœ CPU๊ฐ€ ์•„๋‹Œ I/O ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ์›์ธ์ด ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” Java ์ƒํƒœ๊ณ„๊ฐ€ ์ด ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•ด ์™”๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  Spring MVC์™€ WebFlux ์ค‘ ์–ธ์ œ ๋ฌด์—‡์„ ์„ ํƒํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.1. ๋ฌธ์ œ์˜ ์‹œ์ž‘: I/O ๋ณ‘๋ชฉ ํ˜„์ƒCPU vs I/O ์†๋„ ๊ฒฉ์ฐจํ˜„๋Œ€ ์‹œ์Šคํ…œ์˜ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ๋Š” CPU ์ฒ˜๋ฆฌ ์†๋„์™€ I/O ์ž‘์—… ์†๋„ ์‚ฌ์ด์˜ ํฐ ๊ฒฉ์ฐจ์ž…๋‹ˆ๋‹ค.CPU: ์ดˆ๋‹น ์ˆ˜์‹ญ์–ต ๊ฐœ์˜ ๋ช…๋ น์–ด ์ฒ˜๋ฆฌ๋„คํŠธ์›Œํฌ/๋””์Šคํฌ: ๋ฐ€๋ฆฌ์ดˆ(ms) ๋‹จ์œ„์˜ ์‘๋‹ต ์‹œ๊ฐ„์ด๋Ÿฌํ•œ ๋ถˆ๊ท ํ˜•์œผ๋กœ ์ธํ•ด ์Šค๋ ˆ๋“œ๊ฐ€ I/O ๋Œ€๊ธฐ ์ค‘ ์œ ํœด ์ƒํƒœ๊ฐ€ ๋˜๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜๋ฉฐ, ์ด๋Š” ์‹œ์Šคํ…œ ํ™•์žฅ์„ฑ์˜ ์ฃผ์š” ์ œ์•ฝ ์š”์†Œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.์ „ํ†ต์ ์ธ ๋ฐฉ์‹(..