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

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

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

[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..

[Docker] ์šด์˜ ํ™˜๊ฒฝ Docker Compose ์ž‘์„ฑ & ์Šคํ”„๋ง๋ถ€ํŠธ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ํ•˜๊ธฐ

ํ•„์ž๋Š” ๋กœ์ปฌํ™˜๊ฒฝ์—์„œ ์ธํ…”๋ฆฌ์ œ์ด ๋””๋ฒ„๊น…์„ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๋กœ์ปฌํ™˜๊ฒฝ์—์„œ๋Š” Redis์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปจํ…Œ์ด๋„ˆ๋งŒ ๋„์› ๋‹ค. ํ•˜์ง€๋งŒ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค์˜ ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด์„œ๋Š” ์Šคํ”„๋ง๋ถ€ํŠธ ์ปจํ…Œ์ด๋„ˆ๋„ ๋„์›Œ์ค˜์•ผ ํ•œ๋‹ค. ์šด์˜ํ™˜๊ฒฝ์„ ์œ„ํ•œ Redis + Mysql + Spring Boot ์ปจํ…Œ์ด๋„ˆ๋ฅผ๋„์›Œ๋ณด์ž. ์šฐ์„  ์šด์˜ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•  Docker Compose ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜์ž. ์ด์ „์— ๋กœ์ปฌ ํ™˜๊ฒฝ์„ ์œ„ํ•ด ์ƒ์„ฑํ–ˆ๋˜ docker-compose-local.yml๊ณผ Dockerfile๊ณผ ๋™์ผํ•œ ๊ฒฝ๋กœ์— docker-compose.yml ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด ์ค€๋‹ค. docker-compose.yml version: "3.8" services: creditmarket-redis: # ์„œ๋น„์Šค๋ช… container_name: creditmarket-redis #..

[Redis] Redis๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์บ์‹ฑ& ์กฐํšŒ ์„ฑ๋Šฅ ๊ฐœ์„ ํ•˜๊ธฐ

Redis ํŠน์ง•๊ณผ ์žฅ/๋‹จ์ ์— ์•Œ์•„๋ณด์ž Redis ํŠน์ง• In-memory ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ key-value ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค. ๋‹ค์–‘ํ•œ command๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ single thread์ด๋‹ค. ์žฅ์  ์—ฌ๋Ÿฌ instance๊ฐ€ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜์žˆ๋‹ค. ๋‹ค์–‘ํ•œ command๋ฅผ ์ง€์›ํ•œ๋‹ค. ๋‹จ์  Local caching์— ๋น„ํ•ด์„œ๋Š” ๋Š๋ฆฌ๋‹ค. ํ˜„์žฌ ํ•„์ž์˜ ํ”„๋กœ์ ํŠธ๋Š” ์ƒํ’ˆ ๋ฐ์ดํ„ฐ๋ฅผ ๋งค๋ฒˆ ์š”์ฒญ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์กฐํšŒํ•ด์„œ ๊ฐ€์ ธ์˜ค๊ณ  ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ณ€ํ™”ํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋งค๋ฒˆ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์กฐํšŒํ•ด์„œ ๊ฐ€์ ธ์˜จ๋‹ค๋ฉด ์„ฑ๋Šฅ์— ๋ฌด๋ฆฌ๊ฐ€ ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๋ฐ์ดํ„ฐ๋ฅผ redis๋กœ ์บ์‹ฑ์„ ํ•ด๋‘๊ณ  ์กฐํšŒํ•  ๋•Œ ์บ์‹ฑ๋œ ๋ฐ์ดํ„ฐ๋ฅผ redis๋กœ๋ถ€ํ„ฐ ์กฐํšŒ๋ฅผ ํ•ด์„œ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ์„ ์„ ํ•ด๋ณด์ž. ๋˜ํ•œ Redis๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” failover์— ๋Œ€ํ•œ ๋ถ€..

[Redis] Redis์„ ํ†ตํ•ด JWT ๋กœ๊ทธ์ธ, ๋กœ๊ทธ์•„์›ƒ ๊ตฌํ˜„ํ•˜๊ธฐ

ํ”„๋กœ์ ํŠธ์—์„œ JWT์„ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ ๋กœ๊ทธ์•„์›ƒ ๊ตฌํ˜„์„ ์œ„ํ•ด Redis๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ–ˆ๋‹ค.JWT์˜ ํŠน์„ฑ์ƒ ํ•œ ๋ฒˆ ๋ฐœ๊ธ‰๋œ ํ† ํฐ์€ ๋งŒ๋ฃŒ๋˜๊ธฐ ์ „๊นŒ์ง€ ๊ณ„์† ์œ ํšจํ•˜๊ฒŒ ๋‚จ์•„์žˆ๊ธฐ๋•Œ๋ฌธ์— ๋กœ๊ทธ์•„์›ƒ์„ ์œ„ํ•ด์„œ๋Š” ์„œ๋ฒ„๋Š” ํ•ด๋‹น ์‚ฌ์šฉ์ž์˜ ํ† ํฐ์„ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค. Redis๋Š” ์ด๋Ÿฌํ•œ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ๋ฅผ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ๋†’์€ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.Redis๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋กœ๊ทธ์ธ, ๋กœ๊ทธ์•„์›ƒ์„ ๊ตฌํ˜„ํ•ด๋ณด์ž.  ์˜์กด์„ฑ ์ถ”๊ฐ€ & Redis ์„ค์ • build.gradle์— redis dependency๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์ž.implementation 'org.springframework.boot:spring-boot-starter-data-redis'  RedisRepositoryConfig.javaRedis ์„ค์ •ํ•˜..

[Docker] Docker Compose ํŒŒ์ผ๋กœ ๋‹ค์ค‘ ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ ๊ตฌ์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ(feat. ์˜ค๋ฅ˜๋“ค)

ํ•„์ž๋Š” ํ”„๋กœ์ ํŠธ์—์„œ redis ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด docker-compose ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ redis ์ปจํ…Œ์ด๋„ˆ๋ž‘ mysql ์ปจํ…Œ์ด๋„ˆ 2๊ฐœ๋ฅผ ๋„์šธ๋ ค๊ณ  ํ•œ๋‹ค. ์šฐ์„  ๋„์ปค์™€ ๋„์ปค ์ปดํฌ์ฆˆ์˜ ์ฐจ์ด๋ฅผ ์•Œ์•„๋ณด์ž. Docker Docker๋Š” ๋‹จ์ผ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋นŒ๋“œ, ์‹คํ–‰ ๋ฐ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ Docker ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€ ๋นŒ๋“œ, ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰, ๋กœ๊ทธ ํ™•์ธ, ์ปจํ…Œ์ด๋„ˆ ์ค‘์ง€ ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹จ์ผ ์›น ์„œ๋ฒ„ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋„์šธ ๋•Œ Docker๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Docker Compose Docker Compose๋Š” ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ •์˜ํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์„œ๋น„์Šค, ๋„คํŠธ์›Œํฌ, ๋ณผ๋ฅจ ๋“ฑ์„ ํฌํ•จํ•˜๋Š” ๋ณต์žกํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์Šคํƒ์„ ์ •์˜..

[Docker] Dockerfile, ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑํ›„ ์‹คํ–‰ํ•˜๊ธฐ

๋„์ปค์˜ ์žฅ์  - ํ•˜์ดํผ ๋ฐ”์ด์ € ๊ตฌ์กฐ๋ฅผ ํ† ๋Œ€๋กœ ๋“ฑ์žฅํ–ˆ์œผ๋ฉฐ, VM๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ€๋ณ๊ฒŒ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์— ์œ ๋ฆฌ! ์ด๋ฏธ์ง€ - ์ฝ”๋“œ, ๋Ÿฌํƒ€์ž„, ์‹œ์Šคํ…œ ๋„๊ตฌ, ์‹œ์Šคํ…œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ์„ค์ •๊ณผ ๊ฐ™์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“ ๊ฒƒ์„ ํ‘œํ•จํ•˜๋Š” ํŒจํ‚ค์ง€ - ์ปจํ…Œ์ด๋„ˆ๋ž€ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋…๋ฆฝ๋œ ๊ณต๊ฐ„์—์„œ ์‹คํ–‰ ํ• ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ์ˆ  - ์ฆ‰ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์„ค์ •์ด๋‚˜ ์ข…์†์„ฑ๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. - ์ปจํ…Œ์ด๋„ˆ๋Š” ์ด๋ฏธ์ง€ ์ธ์Šคํ„ด์Šค์ด๋ฉฐ, ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•œ๋‹ค. Docker Compose๋ž€ - ๋ฉ€ํ‹ฐ ์ปจํ…Œ์ด๋„ˆ ๋„์ปค ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ •์˜ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋„๊ตฌ - Application, Databse, Redis, Nginx ๋“ฑ ๊ฐ ๋…๋ฆฝ์ ์ธ ์ปจํ…Œ์ด๋„ˆ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค๊ณ  ํ–ˆ์„๋•Œ ๋‹ค์ค‘ ์ปจํ…Œ์ด๋„ˆ ๋ผ์ดํ”„ ์‚ฌ์ดํด์„ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋กœ๋ถ€ํ„ฐ ์ด๋ฃจ์–ด์ง„ ..

[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 ..