์ „์ฒด ๊ธ€

Server/๐Ÿ“› ์—๋Ÿฌ ๊ธฐ๋ก

[๐Ÿ“› Error] Redis Master ↔๏ธŽ Replica ์—ฐ๊ฒฐ ์˜ค๋ฅ˜ - Error condition on socket for SYNC: Connection refused

์˜ค๋ฅ˜ ๋‚ด์šฉ์ธ์Šคํ„ด์Šค ๋ณด์•ˆ๊ทธ๋ฃน์— 6379 ํฌํŠธ๋ฅผ ํฌํ•จํ–ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  Connection refused ์—๋Ÿฌ๊ฐ€ ๋‚ฌ๋‹ค. ๋ณต์ œ ์„ค์ •์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋ผ๋Š”๋ฐ ์„œ๋ฒ„๊ฐ€ ์ œ๋Œ€๋กœ ์„ค์ •๋˜์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž.     ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• Master ์„œ๋ฒ„์˜ ์„ค์ •์„ ์ˆ˜์ •ํ•œ๋‹ค. Master ์„œ๋ฒ„์˜ Redis ์„ค์ • ํŒŒ์ผ('redis.conf')์„ ์—ด์–ด์„œ 'bind' ์— ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์˜ ์‚ฌ์„ค IP ์ฃผ์†Œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. 'bind' ์„ค์ •์„ ํ†ตํ•ด Redis๊ฐ€ ์ˆ˜์‹  ๋Œ€๊ธฐํ•  ์ฃผ์†Œ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์œ„์˜ ์„ค์ • ๋ณ€๊ฒฝ ํ›„์—๋Š” Redis๋ฅผ ์žฌ์‹œ์ž‘ํ•˜์—ฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•ด์•ผํ•œ๋‹ค.  Replica ์„œ๋ฒ„๋กœ ๋Œ์•„์™€์„œ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ์ •์ƒ์ ์œผ๋กœ ์—ฐ๊ฒฐ์ด ์„ฑ๊ณต๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

DevOps/โ›“๏ธ CI&CD

[โ›“๏ธ CI/CD] Jenkins๋ฅผ ์ด์šฉํ•ด ๋ฐฐํฌํ•˜๊ธฐ 2 - ๋‹ค๋ฅธ ์„œ๋ฒ„

๋‹ค๋ฅธ ์„œ๋ฒ„์— ๋ฐฐํฌํ•˜๊ธฐ - ๊ตฌ์กฐ๋„ ์ด์ „์—๋Š” ๋กœ์ปฌ์—์„œ Tomcat ์„œ๋ฒ„์— hello-world.war ํŒŒ์ผ์„ ๋ฐฐํฌํ–ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” ๋‹ค๋ฅธ ์„œ๋ฒ„์— ๊ฒฐ๊ณผ๋ฌผ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•ด์„œ ๋ฐฐํฌํ•ด๋ณผ ๊ฒƒ์ด๋‹ค. ๊ตฌ์กฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค. ๋‹ค๋ฅธ ์„œ๋ฒ„(์„œ๋ฒ„2)๋กœ VM์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ Docker์— ๊ฐ€์ƒ ์„œ๋ฒ„๋ฅผ ์„ค์น˜ํ•œ๋‹ค. ๐Ÿ‘‰ ๋‚˜๋Š” ๋„์ปค์— ssh ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•œ ์ด๋ฏธ์ง€ ์‚ฌ์šฉํ•ด์„œ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ํ˜•ํƒœ๋กœ ๊ธฐ๋™ํ•  ์˜ˆ์ • ! ์„œ๋ฒ„2์— ๋„์ปค ์—”์ง„์„ ์„ค์น˜ํ•œ๋‹ค. (๋„์ปค ์•ˆ์— ๋„์ปค๊ฐ€ ์žˆ๋Š” ํ˜•ํƒœ = Docker in Docker) ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฏธ์ง€ ์ƒ์„ฑ โž” Dockerfile + *.warํŒŒ์ผ๋กœ ์ด๋ฏธ์ง€ ์ƒ์„ฑ ์ด๋ฏธ์ง€๋Š” Tomcat ์„œ๋ฒ„์™€ warํŒŒ์ผ์„ ํฌํ•จ ์ด๋ฏธ์ง€๋กœ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์‹œํ‚ด. ssh ์„œ๋ฒ„์— ์ ‘์†ํ•ด์„œ docker๋ฅผ ์‹คํ–‰์‹œ์ผœ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. โœจ Je..

DevOps/โ›“๏ธ CI&CD

[โ›“๏ธ CI/CD] Jenkins๋ฅผ ์ด์šฉํ•ด ๋ฐฐํฌํ•˜๊ธฐ 1 - ๋กœ์ปฌ ์„œ๋ฒ„

Git, Maven ์„ค์ • ๋ฐ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ Jenkins ๊ด€๋ฆฌ ํƒญ โž” Plugins์— ๋“ค์–ด๊ฐ€์„œ Github๊ณผ Maven plugin์„ ์„ค์น˜ํ•œ๋‹ค. Gradle๋กœ ์ง„ํ–‰ ์‹œ์—๋„ plugin์„ ์„ค์น˜ํ•˜๊ณ  ์ž‘์—… ํ”„๋กœ์ ํŠธ๋ฅผ Freestyle project๋กœ ์„ ํƒํ•˜๋ฉด ๋œ๋‹ค. ์ƒˆ๋กœ์šด item(project)๋ฅผ ๋งŒ๋“ค๊ณ  ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์˜ฌ github ๋งํฌ๋ฅผ ๊ธฐ์ž…ํ•œ๋‹ค. Maven๊ณผ ๊ด€๋ จ๋œ ์„ค์ • ํŒŒ์ผ์ธ pom.xml์„ ๊ธฐ๋ฐ˜์œผ๋กœ buildํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ณ  build ์˜ต์…˜์„ clean, compile, package๋กœ ์ง€์ •ํ•œ๋‹ค. clean : ๊ธฐ์กด์— buildํ•œ ๊ฒƒ์ด ์žˆ๋‹ค๋ฉด ์ง€์šด๋‹ค. compile : ์ปดํŒŒ์ผํ•œ๋‹ค. package : pom.xml์— ๋“ฑ๋ก๋œ package ํ˜•์‹(jar or war)์— ๋”ฐ๋ผ ํŒจํ‚ค์ง•ํ•œ๋‹ค. build๋ฅผ ์„ฑ..

DevOps/โ›“๏ธ CI&CD

[โ›“๏ธ CI/CD] CI/CD์™€ Jenkins

CI/CD๋Š” ๊ฐœ๋ฐœ ๊ฒฐ๊ณผ๋ฌผ์— ๋Œ€ํ•ด ์ง€์†์ ์ธ ํ†ตํ•ฉ๊ณผ ์ง€์†์ ์ธ ๋ฐฐํฌ๋ฅผ ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์ด๋ฉฐ ํ†ตํ•ฉ, ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ ์ „ ๊ณผ์ •์— ๋Œ€ํ•œ ์ž๋™ํ™”๋ฅผ ๊ฑฐ์นœ๋‹ค. CI์—์„œ๋Š” ์ปดํŒŒ์ผ, ํ…Œ์ŠคํŠธ, ํŒจํ‚ค์ง• ์ž‘์—…์ด ํฌํ•จ๋˜๊ณ  CD๋Š” CI์— ์˜ํ•ด ํŒจํ‚ค์ง•๋œ ๊ฒƒ์„ ๋ฐฐํฌํ•˜๋Š” ์ž‘์—…์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ํŠนํžˆ ๋ถ„์‚ฐ๋œ ์„œ๋ฒ„์—์„œ ์‹คํ–‰๋˜๋Š” MSA ํ™˜๊ฒฝ์—์„œ์˜ ์ž๋™ํ™” ๋ฐฐํฌ๋Š” ๋ณด๋‹ค ํšจ์œจ์ ์ธ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. CI/CD WorkFlow ๊ฐœ๋ฐœ์ž๊ฐ€ git commit์„ ํ•œ๋‹ค. CI/CD ๋„๊ตฌ(Jenkins)๊ฐ€ SCM(git)์— ์ €์žฅ๋œ ์ฝ”๋“œ๋ฅผ ๋ถˆ๋Ÿฌ์˜จ๋‹ค. CI/CD ๋„๊ตฌ๊ฐ€ ์†Œ์Šค์ฝ”๋“œ์˜ build, test, package๋ฅผ ์ผ๊ด„์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค. ์‹คํŒจ ์‹œ fail, ์„ฑ๊ณต ์‹œ pass ์„œ๋ฒ„์— ๋ฐฐํฌํ•œ๋‹ค. ์•ž์œผ๋กœ ์œ„์™€ ๊ฐ™์€ ๊ณผ์ •์„ ์‹คํ–‰ํ•ด ๋ณผ ๊ฒƒ์ด๋‹ค ! Jenkins..

Spring Framework/Spring WebFlux

[Spring WebFlux] Spring WebFlux๋ž€?

Spring WebFlux๋Š” Reactive Stream API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ non-blocking, asynchronous๋ฅผ ์ง€์›ํ•˜๋Š” ๋น„๋™๊ธฐ ์Šคํ”„๋ง ์›น ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. ์ด๋Š” ๋Œ€๋Ÿ‰์˜ ์›น ํŠธ๋ž˜ํ”ฝ (I/O๊ฐ€ ๋งŽ์€ ์›น ์„œ๋น„์Šค ๋กœ์ง)์—์„œ MVC์™€ ๋Œ€๋น„ํ•˜์—ฌ ํšจ์œจ์ ์ด๊ณ  ๋†’์€ ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ํ™œ์šฉ๋˜๊ณ  ์žˆ๋‹ค. ๋งค๋ฒˆ WebFlux์˜ ์„ฑ๋Šฅ์ด ์ข‹๋‹ค๊ณ ๋Š” ํ•  ์ˆ˜ ์—†์Œ! ๋”๋ณด๊ธฐ ๐Ÿ‘‰ ๊ทธ๋Ÿฌ๋ฉด ์ฃผ๋กœ ์–ด๋””์—์„œ ํ™œ์šฉ๋˜๋‚˜...? ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์—์„œ ๋‹ค์–‘ํ•œ ๋™์‹œ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๋Š” gateway server ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์œ„ํ•œ ์›น์†Œ์ผ“ ๋Œ€๋Ÿ‰์˜ I/O๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ์„œ๋น„์Šค Spring MVC vs Spring WebFlux Spring ๊ณต์‹ ํŽ˜์ด์ง€์— ๋‚˜์™€์žˆ๋Š” ํ‘œ๋ฅผ ํ†ตํ•ด ๋‘˜์˜ ์ฐจ์ด์ ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. WebFlux๋Š” ๋น„๋™๊ธฐ/๋…ผ๋ธ”..

Spring Framework/โ˜๏ธ Spring Cloud

[Spring Cloud] ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”๋ฅผ ์œ„ํ•œ Apache Kafka ํ™œ์šฉ

Apache Kafka ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™” Orders โž” Catalogs Order Service์— ์š”์ฒญ๋œ ์ฃผ๋ฌธ ์ˆ˜๋Ÿ‰ ์ •๋ณด๋ฅผ Catalog Service์— ๋ฐ˜์˜ Order Service์—์„œ Kafka Topic์œผ๋กœ ๋ฉ”์‹œ์ง€ ์ „์†ก โž” Producer Catalog Service์—์„œ Kafka Topic์— ์ „์†ก๋œ ๋ฉ”์‹œ์ง€ ์ทจ๋“ โž” Consumer Order-Service์™€ Catalog-Service์— Kafka ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์ถ”๊ฐ€ ZooKeeperServer์™€ KafkaServer ๊ธฐ๋™ + Eureka Server (discovery-service) ์‹คํ–‰ config-service, apigateway-service, order-service, catalog-service ์‹คํ–‰ ์ˆ˜๋Ÿ‰ ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ Multip..

CS/๐Ÿ—„๏ธ Data

[Data] ๋ฐ์ดํ„ฐ ํŠธ๋žœ์žญ์…˜ - @Transactional

ํŠธ๋žœ์žญ์…˜์ด๋ž€ ํŠธ๋žœ์žญ์…˜์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ˆ˜ํ–‰๋˜๋Š” ์ž‘์—…๋“ค์„ ๋…ผ๋ฆฌ์ ์ธ ์ž‘์—… ๋‹จ์œ„๋กœ ๋ฌถ์–ด ์•ˆ์ „ํ•˜๊ฒŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. ๐Ÿ”น ACID ์„ฑ์งˆ ์›์ž์„ฑ : ํŠธ๋žœ์žญ์…˜๊ณผ ๊ด€๋ จ๋œ ์ž‘์—…๋“ค์ด ๋ถ€๋ถ„์ ์œผ๋กœ ์‹คํ–‰๋˜๋‹ค๊ฐ€ ์ค‘๋‹จ๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๋ณด์žฅ MVCC โž” Undo Log ํ†ตํ•ด์„œ ํŠธ๋žœ์žญ์…˜ ์‹คํŒจ ์‹œ rollback ์ผ๊ด€์„ฑ : ํŠธ๋žœ์žญ์…˜์ด ์‹คํ–‰์„ ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒํ•˜๋ฉด ์–ธ์ œ๋‚˜ ์ผ๊ด€์„ฑ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒํƒœ๋กœ ์œ ์ง€ ๐Ÿ‘‰ ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ ์ œ์•ฝ ์กฐ๊ฑด ํ†ตํ•ด์„œ ์ผ๊ด€์„ฑ ๋ณด์žฅ โž” ex) ์œ ๋‹ˆํฌ ์ œ์•ฝ, ์™ธ๋ž˜ํ‚ค ์ œ์•ฝ ๋“ฑ ๋…๋ฆฝ์„ฑ : ํŠธ๋žœ์žญ์…˜์„ ์ˆ˜ํ–‰ ์‹œ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์˜ ์—ฐ์‚ฐ ์ž‘์—…์ด ๋ผ์–ด๋“ค์ง€ ๋ชปํ•˜๋„๋ก ๋ณด์žฅ ๐Ÿ‘‰ ์„ฑ๋Šฅ ๊ด€๋ จ ์ด์œ ๋กœ ์ธํ•ด ๊ฐ€์žฅ ์œ ์—ฐ์„ฑ ์žˆ๋Š” ์ œ์•ฝ ์กฐ๊ฑด ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ๋ ˆ๋ฒจ ํ†ตํ•ด์„œ ๋ณด์žฅ ์ง€์†์„ฑ : ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰๋œ ํŠธ๋žœ์žญ์…˜์€ ์˜์›ํžˆ ๋ฐ˜์˜๋˜์–ด์•ผ..

CS/๐Ÿ—„๏ธ Data

[Data] ์ธ๋ฑ์Šค๋กœ ์กฐํšŒ ์ตœ์ ํ™”์‹œํ‚ค๊ธฐ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ฑ๋Šฅ์˜ ํ•ต์‹ฌ์€ ๋””์Šคํฌ์˜ ๋žœ๋ค I/O(์ ‘๊ทผ)์„ ์ตœ์†Œํ™”์‹œํ‚ค๋Š” ๊ฒƒ์ด๋‹ค. ์ธ๋ฑ์Šค๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์กฐํšŒ๋ฅผ ์ตœ์ ํ™”์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ์ธ๋ฑ์Šค ์ธ๋ฑ์Šค๋Š” ์ •๋ ฌ๋œ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ์ด๋ฅผ ํ†ตํ•ด ํƒ์ƒ‰๋ฒ”์œ„๋ฅผ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ธ๋ฑ์Šค๋„ ํ…Œ์ด๋ธ”์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฟผ๋ฆฌ๊ฐ€ ๋‚ ์•„์˜ค๋ฉด ์ธ๋ฑ์Šค๋ฅผ ์กฐํšŒํ•œ ํ›„ ์ฐพ์€ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ์›๋ณธ๋ฐ์ดํ„ฐ๋กœ ๋Œ์•„๊ฐ€ ์–ป๊ฒŒ ๋œ๋‹ค. ์ธ๋ฑ์Šค ์ž๋ฃŒ๊ตฌ์กฐ HashMap ๋‹จ๊ฑด ๊ฒ€์ƒ‰ ์†๋„ โž” O(1) ๋ฒ”์œ„ ํƒ์ƒ‰ โž” O(N) like 'AB%' ์™€ ๊ฐ™์€ ์ฟผ๋ฆฌ๋ฌธ์„ ์‚ฌ์šฉํ•  ๋•Œ ํ‚ค๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ๊บผ๋‚ด์„œ ๋น„๊ตํ•ด์•ผํ•จ List ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ฆฌ์ŠคํŠธ ํƒ์ƒ‰ โž” O(N) ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ ํƒ์ƒ‰ โž” O(logN) ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ฆฌ์ŠคํŠธ์˜ ์ •๋ ฌ ์‹œ๊ฐ„ ๋ณต์žก๋„ โž” O(N) ~ O(N*logN) ์‚ฝ์ž… ๋ฐ ์‚ญ์ œ ๋น„์šฉ ๋งค์šฐ ๋†’์Œ Tree ํŠธ๋ฆฌ ๋†’์ด์— ๋”ฐ๋ผ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๊ฒฐ์ •..

soogoori
๐Ÿƒ๐Ÿป‍โ™€๏ธ์Šคํ…๋ฐ”์ด์Šคํ…