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

์ „์ฒด ๊ธ€110

QoS, Traffic Shaping, Traffic Policing QoS(Quality of Service) QoS(Quality of Service)๋ž€ ์„œ๋น„์Šค ํ’ˆ์งˆ(QoS)์€ ํ•œ์ •๋œ ๋„คํŠธ์›Œํฌ ์šฉ๋Ÿ‰์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์ œ์–ดํ•˜๊ณ  ์ฃผ์š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋‚˜ ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ํ†ต์‹  ๋„คํŠธ์›Œํฌ์ƒ์— ํ๋ฅด๋Š” ๋ฐ์ดํ„ฐ์˜ ์ค‘์š”๋„๋ฅผ ๋ถ„๋ฅ˜ํ•˜์—ฌ, ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. QoS ๊ทœ์น™์— ๋”ฐ๋ฅธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ตœ์ ํ™” ์˜ˆ์‹œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. - ํŠธ๋ž˜ํ”ฝ ์šฐ์„  ์ˆœ์œ„ ์ง€์ •์„œ๋กœ ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์กฐ์ง์˜ ๋„คํŠธ์›Œํฌ ๋‚ด์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ์ˆ˜์ค€์˜ ์ค‘์š”๋„๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์›๊ฒฉ ํšŒ์˜ ํŠธ๋ž˜ํ”ฝ์€ ์†Œ์…œ ๋ฏธ๋””์–ด ์‚ฌ์ดํŠธ์— ๋Œ€ํ•œ ์›น ์—ฐ๊ฒฐ๋ณด๋‹ค ๋” ์ค‘์š”ํ•˜๋ฉฐ ๋„คํŠธ์›Œํฌ ์„ฑ๋Šฅ ์ €ํ•˜์— ๋” ๋ฏผ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํŠธ๋ž˜ํ”ฝ ์„œ๋ช…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํŠธ๋ž˜ํ”ฝ์˜ ์†Œ์Šค๋ฅผ ์‹๋ณ„ํ•จ์œผ๋กœ์จ ์กฐ์ง์˜ ๋„คํŠธ์›Œํฌ ์ธํ”„๋ผ๋Š” ํ•„์š”ํ•œ.. 2024. 12. 18.
[๋ฉ”์„ธ์ง€ ๋ธŒ๋กœ์ปค] RabbitMQ vs Apache KafKa ๋“ค์–ด๊ฐ€๋ฉฐ๋ฉ”์„ธ์ง€ ๋ธŒ๋กœ์ปค๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋ณด๋‚ด๋Š” ์ชฝ๊ณผ ๋ฐ›๋Š” ์ชฝ ์‚ฌ์ด์—์„œ ์ ์ ˆํ•œ ๋ถ„๋ฐฐ๋ฅผ ๋„์™€์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”์„ธ์ง€ ๋ธŒ๋กœ์ปค๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Publisher์™€ Subscriber๋Š” ์„œ๋น„์Šค์˜ ๋ณธ์งˆ์— ๋”ฐ๋ผ ์ž์‹ ์˜ ์—ญํ• ์— ์ข€๋” ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์ฃ . ๋ฉ”์„ธ์ง€ ๋ธŒ๋กœ์ปค์˜ ์ข…๋ฅ˜๋Š” ๋งค์šฐ ๋‹ค์–‘ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ๋Œ€ํ‘œ์ ์ธ ๋ฉ”์„ธ์ง€ ๋ธŒ๋กœ์ปค์ธ RabbitMQ์™€ Apache KafKa ์„œ๋น„์Šค์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. RabbitMQ์™€ Kafka๋Š” ๋‘˜ ๋‹ค ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์ด์ง€๋งŒ, ์„ค๊ณ„ ์ฒ ํ•™๊ณผ ์ฃผ์š” ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” RabbitMQ์™€ Kafka์˜ ์ฃผ์š” ์ฐจ์ด์ ์ž…๋‹ˆ๋‹ค.1. ์„ค๊ณ„ ์ฒ ํ•™RabbitMQ:AMQP(Advanced Message Queuing Protocol)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค๊ณ„๋œ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค.๋ฉ”์‹œ์ง€ ์ „๋‹ฌ, ๋ผ์šฐํŒ….. 2024. 12. 16.
[DB] INSERTํ–ˆ๋˜ ๋ฐ์ดํ„ฐ๋Š” ์–ด๋””์— ์ €์žฅ๋ ๊นŒ?(๋ฐ์ดํ„ฐ ์ €์žฅ ๊ตฌ์กฐ์™€ ์—‘์„ธ์Šค) ๋“ค์–ด๊ฐ€๋ฉฐ๋กœ์ปฌ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์„ค์น˜ํ•ด๋ณด์‹  ๋ถ„๋“ค์ด๋ผ๋ฉด ์–ด๋Š์ •๋„ ์•„์‹œ๊ฒ ์ง€๋งŒ, ๋ฐ์ดํ„ฐ๋Š” ํŒŒ์ผ๋กœ ์ €์žฅ์ด ๋ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ฆฌ์ ์ธ ๊ณ„์ธต์—์„œ๋Š” ํŒŒ์ผ๊ณผ ๋ธ”๋ก, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋กœ ๊ตฌ์„ฑ์ด ๋˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํŒŒ์ผ์— ์“ฐ์—ฌ์ง„ ๋ฐ์ดํ„ฐ๋“ค์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์—ญํ• ์„ ํ•˜์ฃ . ์šฐ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ์— SQL์„ ๋ณด๋‚ด์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๊ฑฐ๋‚˜, ์ˆ˜์ •, ์‚ญ์ œ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ด€๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ์ƒํ™ฉ์—์„œ ์šฐ๋ฆฌ๋Š” ๋•Œ๋ก  ๋ณต์žกํ•œ SQL๋„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋‹จ์ˆœํžˆ SQL๋งŒ ์ž˜ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ž˜ ์•„๋Š” ๊ฒƒ์ด ์•„๋‹ ๊ฒ๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋‚ด๋ถ€ ์ž‘๋™ ์›๋ฆฌ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์„ฑ๋Šฅ์„ ์˜ฌ๋ฆฌ๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๊ฒƒ์„ ์‹ ๊ฒฝ์จ์•ผํ•˜๋Š”์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๊ตฌ์กฐ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ €์žฅํ•˜.. 2024. 12. 15.
N+1 ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ๋ฐฉ๋ฒ• N+1 ๋ฌธ์ œ๋ž€?N+1 ๋ฌธ์ œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๊ด€๋ จ๋œ ์„ฑ๋Šฅ ๋ฌธ์ œ๋กœ, ์ฃผ๋กœ ORMs(Object-Relational Mapping)์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.์ด๋Š” ํ•œ ๋ฒˆ์˜ ์ฟผ๋ฆฌ๋กœ ์ถฉ๋ถ„ํžˆ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ์ถ”๊ฐ€์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด N๊ฐœ์˜ ์ถ”๊ฐ€ ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์ƒํ™ฉ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.์ด๋กœ ์ธํ•ด ์„ฑ๋Šฅ์ด ์ €ํ•˜๋˜๊ณ , ํŠนํžˆ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์‹ฌ๊ฐํ•œ ๋ณ‘๋ชฉํ˜„์ƒ์„ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.  N+1 ๋ฌธ์ œ์˜ ์˜ˆ์‹œ์ƒํ™ฉ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.Author ํ…Œ์ด๋ธ”idname1John Doe2Jane SmithBook ํ…Œ์ด๋ธ”idtitleauthor_id1Book A12Book B13Book C2 ์ฝ”๋“œ ์˜ˆ์‹œ (Python + SQLAlchemy)from sqlalchemy.orm import joinedl.. 2024. 12. 11.
ํ…œํ”Œ๋ฆฟ ๋ฉ”ํƒ€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋ชจ๋“  ๊ฒƒ(Template Meta Programming) ํ…œํ”Œ๋ฆฟ ๋ฉ”ํƒ€ํ”„๋กœ๊ทธ๋ž˜๋ฐ (Template Metaprogramming)ํ…œํ”Œ๋ฆฟ ๋ฉ”ํƒ€ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Template Metaprogramming)์€ C++์˜ ๊ฐ•๋ ฅํ•œ ํ…œํ”Œ๋ฆฟ ์‹œ์Šคํ…œ์„ ์ด์šฉํ•˜์—ฌ ์ปดํŒŒ์ผ ํƒ€์ž„์— ์ฝ”๋“œ์˜ ์ผ๋ถ€๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๊ณ„์‚ฐํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ด ๊ธฐ๋ฒ•์€ C++์˜ ํ…œํ”Œ๋ฆฟ์„ ๋‹จ์ˆœํ•œ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ ๋„๊ตฌ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์—์„œ ๋” ๋‚˜์•„๊ฐ€, ๋ณต์žกํ•œ ๊ณ„์‚ฐ์ด๋‚˜ ์กฐ๊ฑด ์ฒ˜๋ฆฌ๋ฅผ ์ปดํŒŒ์ผ ์‹œ์ ์— ๋ฏธ๋ฆฌ ์ˆ˜ํ–‰ํ•˜์—ฌ, ์‹คํ–‰ ์‹œ์ ์˜ ์„ฑ๋Šฅ์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.1. ๊ธฐ๋ณธ ๊ฐœ๋…ํ…œํ”Œ๋ฆฟ ๋ฉ”ํƒ€ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ์˜ ์‹คํ–‰ ์‹œ์ (runtime) ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ, ํ”„๋กœ๊ทธ๋žจ์ด ์ปดํŒŒ์ผ๋  ๋•Œ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๊ธฐ ์ „์— ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ๋ฏธ๋ฆฌ ์ˆ˜ํ–‰ํ•˜์—ฌ, ์‹คํ–‰ ์‹œ์ ์—์„œ๋Š” ์ตœ๋Œ€ํ•œ ํšจ์œจ์ ์ธ ์ฝ”๋“œ๋งŒ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก .. 2024. 8. 28.
Structured Bindings์˜ ๋ชจ๋“  ๊ฒƒ Structured Bindings๋Š” C++17์—์„œ ๋„์ž…๋œ ๊ธฐ๋Šฅ์œผ๋กœ, ๋ณตํ•ฉ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ(์˜ˆ: std::tuple, std::pair, ๋ฐฐ์—ด, ๊ตฌ์กฐ์ฒด ๋“ฑ)์—์„œ ์—ฌ๋Ÿฌ ๊ฐ’์„ ๋™์‹œ์— ์ถ”์ถœํ•˜๊ณ , ๊ฐ๊ฐ์„ ๋ณ„๋„์˜ ๋ณ€์ˆ˜์— ๋ฐ”์ธ๋”ฉํ•  ์ˆ˜ ์žˆ๋Š” ํŽธ๋ฆฌํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํŠนํžˆ ํŠœํ”Œ์ด๋‚˜ ์‚ฌ์šฉ์ž ์ •์˜ ๊ตฌ์กฐ์ฒด์—์„œ ์œ ์šฉํ•˜๋ฉฐ, ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ํŽธ์˜์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.1. ๊ธฐ๋ณธ ๊ฐœ๋…Structured Bindings๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ๋ณตํ•ฉ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์—์„œ ๊ฐ ์š”์†Œ๋ฅผ ์‰ฝ๊ฒŒ ๋ถ„ํ•ดํ•˜์—ฌ ๊ฐ๊ฐ์˜ ๋ณ€์ˆ˜์— ๋‹ด์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” auto ํ‚ค์›Œ๋“œ์™€ ์œ ์‚ฌํ•œ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•:auto [var1, var2, var3] = someTuple;์—ฌ๊ธฐ์„œ someTuple์€ ๋ณตํ•ฉ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ด๊ณ , [var1, var2, var3]๋Š” .. 2024. 8. 27.