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

๋ชฉ๋ก๐—ฃ๐—ฟ๐—ผ๐—ด๐—ฟ๐—ฎ๐—บ๐—บ๐—ถ๐—ป๐—ด๐Ÿ’ป/๐’๐ฉ๐ซ๐ข๐ง๐  (28)

๐‘†๐‘ข๐‘›๐‘ โ„Ž๐‘–๐‘›๐‘’ ๐‘Ž๐‘“๐‘ก๐‘’๐‘Ÿ ๐‘Ÿ๐‘Ž๐‘–๐‘›โœง

[Spring] SSE & Kafka ๋ฅผ ํ™œ์šฉํ•ด์„œ ์•Œ๋ฆผ ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ

ํ•„์ž๋Š” ์ฒ˜์Œ์—๋Š” ์•Œ๋ฆผ ํ…Œ์ด๋ธ”์„ ๊ตฌํ˜„ํ•œํ›„ ๋Œ“๊ธ€์ด ๋‹ฌ๋ฆฌ๋ฉด ์•Œ๋ฆผํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๋กœ ์ €์žฅํ•˜์˜€๊ณ , API๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ํ•ด๋‹น ์‚ฌ์šฉ์ž์˜ ์•Œ๋ฆผ ๋ฐ์ดํ„ฐ๋ฅผ DB์—์„œ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜์˜€๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฐ polling ๋ฐฉ์‹์€ ์ •ํ•ด์ง„ ์ฃผ๊ธฐ๋งˆ๋‹ค ๋ฌด์กฐ๊ฑด ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์„ ๋•Œ๋„ ํŠธ๋ž˜ํ”ฝ์„ ๋ฐœ์ƒ์‹œํ‚ค๋ฉฐ, ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜์ง€์•Š๋Š”๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ํ•„์ž๋Š” Kafka๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•Œ๋ฆผ ์ด๋ฒคํŠธ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ , Server-Sent Events(SSE)๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์— ์‹ค์‹œ๊ฐ„์œผ๋กœ ์•Œ๋ฆผ์„ ์ „๋‹ฌํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•ด๋ณผ๊ฒƒ์ด๋‹ค. ๊ฒŒ์‹œํŒ์˜ ๊ธ€์— ๋Œ“๊ธ€์ด ๋‹ฌ๋ฆฌ๋ฉด ์•Œ๋žŒ์ด ์ƒ๊ธฐ๊ณ , ์„œ๋ฒ„๋Š” Kafka๋ฅผ ํ†ตํ•ด ๋น„๋™๊ธฐ์ ์œผ๋กœ ์•Œ๋žŒ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ์ฒ˜๋ฆฌ๋œ ์•Œ๋žŒ์€ SSE๋ฅผ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์— ์ „์†กํ•˜๋Š” ..

[Spring] ์„ฑ๋Šฅ ์ตœ์ ํ™” 3ํŽธ - ์ธ๋ฑ์Šค ํ™œ์šฉํ•˜๊ธฐ

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

[Spring] ์„ฑ๋Šฅ ์ตœ์ ํ™” 2ํŽธ - ์Šค์นด์šฐํŠธ ๋ชจ๋‹ˆํ„ฐ๋ง TOOL ์„ค์น˜

Scouter Scouter๋Š” ์˜คํ”ˆ ์†Œ์Šค ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง ํˆด๋กœ, ์ฃผ๋กœ ์ž๋ฐ”(JAVA) ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹ค์‹œ๊ฐ„ ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋ฌธ์ œ ์ง„๋‹จ์— ์‚ฌ์šฉ๋œ๋‹ค. ์ด ํˆด์€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์˜ ์„ฑ๋Šฅ ์ง€ํ‘œ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ , ๋ถ„์„ํ•˜์—ฌ ์„ฑ๋Šฅ ์ €ํ•˜์˜ ์›์ธ์„ ํŒŒ์•…ํ•˜๊ณ  ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค. Scouter๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด CPU ์‚ฌ์šฉ๋Ÿ‰, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰, SQL ์ฟผ๋ฆฌ ์„ฑ๋Šฅ, HTTP ์š”์ฒญ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„ ๋“ฑ ๋‹ค์–‘ํ•œ ์„ฑ๋Šฅ ์ง€ํ‘œ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๋‹ค. 1. ์Šค์นด์šฐํŠธ ๋ชจ๋‹ˆํ„ฐ๋ง TOOL ์„ค์น˜ํ•˜๊ธฐ https://github.com/scouter-project/scouter/releases Releases · scouter-project/scouter Scouter is an open source APM (Application Performan..

[Spring] ์„ฑ๋Šฅ ์ตœ์ ํ™” 1ํŽธ - ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ ngrinder ์„ค์น˜ํ•˜๊ธฐ

ngrinder ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ๋ฐ ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์˜คํ”ˆ ์†Œ์Šค ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. nGrinder๋Š” Java ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๊ณ  nGrinder์—์„œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ฐ€์ƒ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋งŒ๋“ค์–ด ํŠธ๋ž˜ํ”ฝ์— ๋ชฐ๋ ธ์„ ๋•Œ ์„ฑ๋Šฅ์„ ์ธก์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค. 1. ngrinder ์„ค์น˜ํ•˜๊ธฐ https://github.com/naver/ngrinder/releasesโ€‹ ์—์„œ ngrinder-controller-3.5.5-p1.war ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œํ•˜๋ฉด ๋œ๋‹ค. ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฝ๊ฒŒ ngrinder ๋ผ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  ๋‹ค์šด๋ฐ›์€ ํŒŒ์ผ์„ ์œ„์น˜์‹œํ‚ค์ž. ํ•ด๋‹น ํŒŒ์ผ์ด ์žˆ๋Š” ๊ฒฝ๋กœ์—์„œ ํ„ฐ๋ฏธ๋„์„ ์—ด๊ณ  java -jar ngrinder-controller-3.5.9.war --port=8300 ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ๋ฉด ์‹คํ–‰๋œ๋‹ค. java ..

[Spring] DTO ๊ตฌ์กฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑํ•ด์•ผํ• ๊นŒ

dto ๊ตฌ์กฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑํ•ด์•ผํ• ์ง€ ๊ณ ๋ฏผ์„ ์ •๋ง ๋งŽ์ด ํ–ˆ๋‹ค. ๋‚˜์˜ ๋ฐฉ๋ฒ•์ด ์ •๋‹ต์ด ์•„๋‹ˆ์ง€๋งŒ ๋‚˜์™€ ๊ฐ™์€ ๊ณ ๋ฏผ์„ ํ•˜๋Š” ๋ถ„๋“ค์„ ์œ„ํ•ด ๊ณ ๋ฏผ์„ ๊ธฐ๋กํ•ด๋ณธ๋‹ค. ๐Ÿ˜“ ๊ณ ๋ฏผ์˜ ์„œ๋ง‰ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋งŽ์€ dto ๊ฐ€ ๋งŒ๋“ค์–ด์กŒ๋‹ค. ๊ทธ๋ž˜์„œ ์ฒ˜์Œ์—๋Š” ๋น„์Šทํ•œ dto ๊ฐ์ฒด๋“ค์„ InnerStaticClass ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑํ•˜์˜€๋‹ค. ์šฐ์„  InnerStaicClass ๋ฅผ ์•Œ์•„๋ณด์ž ๐Ÿ”InnerStaicClass ๋‚ด๋ถ€ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  ์™ธ๋ถ€ ํด๋ž˜์Šค์™€ ๋‚ด๋ถ€ ํด๋ž˜์Šค๊ฐ€ ๊ธด๋ฐ€ํ•œ ๊ด€๊ณ„๋ฅผ ๋งบ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ๋‚ด๋ถ€ ํด๋ž˜์Šค์—์„œ ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„์— ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. ์„œ๋กœ ๊ด€๋ จ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ๋ฌถ์–ด์„œ ์ฝ”๋“œ์˜ ์บก์Šํ™”๋ฅผ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค. ์™ธ๋ถ€์—์„œ๋Š” ๋‚ด๋ถ€ ํด๋ž˜์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ์˜ ๋ณต์žก์„ฑ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. static์ด ๋ถ™์ง€ ์•Š์•˜์„ ๋•Œ ๋‹จ์  ์ฐธ์กฐ๊ฐ’..

[Spring] QueryDSL

QueryDSL ์ •์ž‘ ํƒ€์ž…์„ ์ด์šฉํ•ด SQL๊ณผ ๊ฐ™์€ ์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ ์ฟผ๋ฆฌ๋ฅผ ๋ฌธ์ž๊ฐ€ ์•„๋‹Œ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•ด๋„, ์‰ฝ๊ณ  ๊ฐ„๊ฒฐํ•˜๋ฉฐ ๊ทธ ๋ชจ์–‘๋„ ์ฟผ๋ฆฌ์™€ ๋น„์Šทํ•˜๊ฒŒ ๊ฐœ๋ฐœํ• ์ˆ˜ ์žˆ๋Š” ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ QueryDSL์˜ ์žฅ์  IDE๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ฝ”๋“œ ์ž๋™ ์™„์„ฑ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฌธ๋ฒ•์ ์œผ๋กœ ์ž˜๋ชป๋œ ์ฟผ๋ฆฌ๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ์ •์ƒ์ ์œผ๋กœ ํ™œ์šฉ๋œ QueryDSL์€ ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค. ๊ณ ์ •๋œ SQL ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋™์ ์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๋ฏ€๋กœ ๊ฐ€๋…์„ฑ ๋ฐ ์ƒ์‚ฐ์„ฑ์ด ํ–ฅ์ƒ๋œ๋‹ค. ๋„๋ฉ”์ธ ํƒ€์ž…๊ณผ ํ”„๋กœํผํ‹ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ฐธ์กฐํ• ์ˆ˜ ์žˆ๋‹ค. QueryDSL ์„ค์ • buildscript { ext { queryDslVersion = "5.0.0" } } plugins { i..