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

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

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

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

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

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

[Docker] ์„œ๋ฒ„ ํ„ฐ์งˆ๋•Œ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ์žฌ์‹คํ–‰ํ•˜๊ธฐ

sudo docker start [Container ID] mysqlMySQL๋ฅผ Docker ๋กœ ๋„์šฐ๋Š” ๊ฒฝ์šฐ, ์„œ๋ฒ„๊ฐ€ ํ„ฐ์งˆ ๋•Œ๋งˆ๋‹ค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์žฌ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. 1. AWS ์„œ๋ฒ„ ์žฌ๋ถ€ํŒ…ํ•˜๊ธฐ์šฐ์„  AWS ์—์„œ ์„œ๋ฒ„๋ฅผ ์žฌ๋ถ€ํŒ…ํ•˜์ž์žฌ๋ถ€ํŒ…์„ ํ•˜๊ฒŒ๋˜๋ฉด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์žฌ์‹คํ–‰ ํ•ด์ค˜์•ผํ•œ๋‹ค. 2. ์ปจํ…Œ์ด๋„ˆ ์žฌ์‹คํ–‰ํ•˜๊ธฐssh๋กœ ec2์— ์›๊ฒฉ ์ ‘์†ํ•œ๋‹ค.sudo docker ps -aํ˜„์žฌ ๋™์ž‘ํ•˜๊ณ  ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ๋ฅผ ํ™•์ธํ•œ๋‹ค. sudo docker ps -aa์˜ต์…˜ ํ•˜๋ฉด running ์ƒํƒœ์™€ ์ฃฝ์€ ์ƒํƒœ ๋ชจ๋“  ์ƒํƒœ์— ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ ๋‹ค ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค. mysql ์ด exited ์ƒํƒœ ๋œ ๊ฒƒ์„ ํ™•์ธํ•˜๊ณ sudo docker start [Container ID]๋กœ mysql ์žฌ๊ธฐ๋™ํ•œ๋‹ค.sudo docker ps ๋กœ ์‹คํ–‰์‹œํ‚จ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ž˜ ๋™..