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

BackEnd๐ŸŒฑ116

MySQL ๋ฒ„์ „์— ๋”ฐ๋ฅธ @Transactional(readOnly=true)์˜ ๋™์ž‘ ๊ณผ์ • ๊ฐœ์š” ์ด ๊ธ€์€ ํƒœํ˜„๋‹˜์˜ ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€์—์„œ ์˜๊ฐ์„ ๋ฐ›์•„ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ†ตํ•ด RDBMS๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ณผ์ •์—์„œ, ์šฐ๋ฆฌ๋Š” ์„ฑ๋Šฅ ์ตœ์ ํ™”, ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ, ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ ์œ ์ง€ ๋“ฑ ์—ฌ๋Ÿฌ ์ด์œ ๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— @Transactional(readOnly=true) ์–ด๋…ธํ…Œ์ด์…˜์„ ์ž์ฃผ ์‚ฌ์šฉํ•˜๊ณค ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด ์–ด๋…ธํ…Œ์ด์…˜์€ ์–ด๋– ํ•œ ์›๋ฆฌ๋กœ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์ผ๊นŒ์š”? ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” @Transactional(readOnly=true)์˜ JDBC ๋‹จ๊ณ„์—์„œ์˜ ๋™์ž‘ ๊ณผ์ •์„ ์œ„์ฃผ๋กœ ์‚ดํŽด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๋™์ž‘ ๊ณผ์ • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— @Transactional(readOnly=true)์„ ๊ฑธ๊ณ  ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ๋™์ž‘ํ•˜๋Š” ์ „์ฒด์ ์ธ ๊ณผ์ •์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์ค€๋น„ ์ฝ๊ธฐ ์ „์šฉ ์ƒํƒœ ์ „ํŒŒ ๋น„์ฆˆ๋‹ˆ์Šค.. 2024. 1. 24.
[Kafka] ๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ ์ข…๋ฅ˜์™€ ํŒŒํ‹ฐ์…˜ ํ• ๋‹น ์ „๋žต ๊ฐœ์š”์นดํ”„์นด ์ปจ์Šˆ๋จธ๋Š” ํ† ํ”ฝ์˜ ๊ฐ ํŒŒํ‹ฐ์…˜์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ํŠน์ • ์ปจ์Šˆ๋จธ๊ฐ€ ๋ฌธ์ œ๋ฅผ ๊ฒช๊ฒŒ ๋˜๋ฉด ๊ทธ ์ปจ์Šˆ๋จธ๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋˜ ํŒŒํ‹ฐ์…˜์˜ ์†Œ์œ ๊ถŒ์„ ๋‹ค๋ฅธ ์ปจ์Šˆ๋จธ๋กœ ๋„˜๊ฒจ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๊ณผ์ •์„ '๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ'์ด๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ ์ฃผ๋กœ ์•„๋ž˜ ๋„ค ๊ฐ€์ง€ ์ƒํ™ฉ์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.์ปจ์Šˆ๋จธ ๊ทธ๋ฃน์— ์ƒˆ๋กœ์šด ์ปจ์Šˆ๋จธ๊ฐ€ ์ถ”๊ฐ€๋  ๋•Œ๊ธฐ์กด ์ปจ์Šˆ๋จธ๊ฐ€ ๊ทธ๋ฃน์—์„œ ๋‚˜๊ฐˆ ๋•Œ๊ตฌ๋…ํ•˜๋Š” ํ† ํ”ฝ์— ์ƒˆ๋กœ์šด ํŒŒํ‹ฐ์…˜์ด ์ƒ๊ธธ ๋•Œ์ปจ์Šˆ๋จธ๊ฐ€ ๊ตฌ๋…ํ•˜๋Š” ํ† ํ”ฝ์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ์ด ๊ฐ€์žฅ ๋งŽ์ด ์ผ์–ด๋‚˜๋Š” ์ผ๋ฐ˜์ ์ธ ์ƒํ™ฉ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ ์‹œ์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ข…๋ฃŒ ํ›„ ์ƒˆ๋กœ์šด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋˜๋ฉด์„œ, ๊ธฐ์กด ์ปจ์Šˆ๋จธ๊ฐ€ ์‚ญ์ œ๋˜๊ณ  ์ƒˆ๋กœ์šด ์ปจ์Šˆ๋จธ๊ฐ€ ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ์ด ์ตœ์†Œ ๋‘ ๋ฒˆ ์ด์ƒ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.๊ทธ๋ฆฌ๊ณ  ๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ ๊ณผ์ •์€ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฌธ์ œ์ ์„ ๋™๋ฐ˜ํ•ฉ๋‹ˆ๋‹ค.. 2024. 1. 7.
Hibernate์˜ @Formula๋ฅผ ์ด์šฉํ•œ ์—ฐ๊ด€ ๊ด€๊ณ„ ์—”ํ‹ฐํ‹ฐ ์ง‘๊ณ„ ๊ฐœ์š” Hibernate์˜ @Formula ์–ด๋…ธํ…Œ์ด์…˜์€ ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค ๋‚ด์—์„œ ์‹ค์ œ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” '๊ฐ€์ƒ ์ปฌ๋Ÿผ'์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. @Formula๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค๋ฅธ ์ปฌ๋Ÿผ๋“ค์˜ ๊ฐ’์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ ๊ณ„์‚ฐ๋œ ๊ฐ’์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ๊ฐ’์€ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ๋งŒ ๊ณ„์‚ฐ๋˜์–ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์‹œ ์ฝ”๋“œ @Formula ์–ด๋…ธํ…Œ์ด์…˜์˜ ์ „ํ˜•์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์—ฐ๊ด€๋œ ๋ฐ์ดํ„ฐ์˜ ์ง‘๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฒŒ์‹œ๊ธ€๊ณผ ์—ฐ๊ฒฐ๋œ ๋Œ“๊ธ€์˜ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์ „์ฒด ์ฝ”๋“œ๋Š” ๊นƒํ—ˆ๋ธŒ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. @Entity public class Post { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) pri.. 2023. 12. 20.
[Java] CompletableFuture๋กœ ๋น„๋™๊ธฐ ๋ฐ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌํ•˜๊ธฐ Future vs CompletableFuture Future์™€ CompletableFuture๋Š” ๋ชจ๋‘ Java์—์„œ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. Java 5์—์„œ ๋„์ž…๋œ Future๋Š” ๋น„๋™๊ธฐ ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, Java 8์—์„œ ๋„์ž…๋œ CompletableFuture๋Š” Future๋ฅผ ํ™•์žฅํ•˜์—ฌ ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. CompletableFuture์™€ Future์ฐจ์ด๋Š” ๋ฌด์—‡์ผ๊นŒ์š”? Future์— ๋Œ€ํ•œ ์ƒ์„ธํ•œ ๋‚ด์šฉ์€ ์ด๋ฒˆ ํฌ์ŠคํŒ…์˜ ์ฃผ์ œ์—์„œ ๋ฒ—์–ด๋‚  ๊ฒƒ ๊ฐ™์•„ ๊ฐ„๋‹จํ•˜๊ฒŒ CompletableFuture์™€์˜ ์ฐจ์ด์ ๋งŒ ๋น„๊ตํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. Blocking vs Non-Blocking Future๋Š” get() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋น„๋™๊ธฐ ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋ฉ”์„œ๋“œ๋Š” ์—ฐ์‚ฐ์ด ์™„๋ฃŒ.. 2023. 12. 12.
Bucket4j๋กœ ํŠธ๋ž˜ํ”ฝ ์ œํ•œํ•˜๊ธฐ(Redis & MariaDB) ๊ฐœ์š” ์ตœ๊ทผ ์—…๋ฌด ํ”„๋กœ์ ํŠธ์—์„œ ํŠน์ •(์š”๊ธˆ์ด ๋ถ€๊ฐ€๋˜๋Š”) ๋กœ์ง์— ๋Œ€ํ•ด ์›”๋ณ„ ์‚ฌ์šฉ๋Ÿ‰์„ ์ œํ•œํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์–ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์™€ ๊ด€๋ จํ•˜์—ฌ ์ฒ˜๋ฆฌ์œจ ์ œํ•œ ๊ธฐ์ˆ ์„ ์•Œ์•„๋ณด์•˜๋Š”๋ฐ Bucket4j, Guava, RateLimitj, Resilience4j ๋“ฑ ๋‹ค์–‘ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ๋Š” ๊ฑธ ์•Œ๊ฒŒ ๋˜์—ˆ๊ณ , ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ์ธ Spring Boot 2.7.x, MariaDB(nosql & in-momory๋ถ€์žฌ), Java 11์— ์•Œ๋งž์€ Bucket4j๋ฅผ ์„ ํƒํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๊ณ ๋ คํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์˜ ํŠน์ง•๊ณผ ๊ทธ ์„ ํƒ ์ด์œ ์ž…๋‹ˆ๋‹ค. Guava: ๋‹ค์–‘ํ•œ ํ•ต์‹ฌ Java ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ, ๋‹จ์ˆœํžˆ Rate Limiting ๊ธฐ๋Šฅ๋งŒ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๊ธฐ์—๋Š” ๋‹ค์†Œ ๋ฌด๊ฑฐ์šด ๋А๋‚Œ์ด๋‹ค. Resilience4j: ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ .. 2023. 12. 3.
ShedLock์œผ๋กœ ๋‹ค์ค‘ ์ธ์Šคํ„ด์Šค ํ™˜๊ฒฝ์—์„œ ๋‹จ์ผ ์Šค์ผ€์ค„๋Ÿฌ ๋™์ž‘ ๋ณด์žฅํ•˜๊ธฐ ๊ฐœ์š” ์Šคํ”„๋ง์—์„œ ์ œ๊ณตํ•˜๋Š” @EnableScheduling ์–ด๋…ธํ…Œ์ด์…˜์€ ๊ฐ„ํŽธํ•˜๊ฒŒ ์Šค์ผ€์ค„๋ง ์ž‘์—…์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ฃผ์ง€๋งŒ, ๋‹ค์ค‘ ์ธ์Šคํ„ด์Šค ํ™˜๊ฒฝ์—์„œ๋Š” ๋™์ผํ•œ ์ž‘์—…์ด ์—ฌ๋Ÿฌ ๋ฒˆ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„  ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์ง€๋งŒ, ShedLock์ด๋ผ๋Š” ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์†์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ShedLock์€ ์Šคํ”„๋ง ์Šค์ผ€์ค„๋ง๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋™์ผํ•œ ์Šค์ผ€์ค„๋ง ์ž‘์—…์„ ๋™์‹œ์— ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ด ์ค๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ๊นƒํ—ˆ๋ธŒ์—์„œ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ShedLock ์ดํ•ดํ•˜๊ธฐ ShedLock์€ ๋ถ„์‚ฐ๋œ ์‹œ์Šคํ…œ ํ™˜๊ฒฝ์—์„œ ๋™์ผํ•œ ์Šค์ผ€์ค„๋ง ์ž‘์—…์ด ์ค‘๋ณต์œผ๋กœ ์ˆ˜ํ–‰๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ง€์ •๋œ ์ž‘์—…์— ์ž ๊ธˆ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ .. 2023. 11. 24.
default method๋กœ JpaRepository ์ข€ ๋” ์šฐ์•„ํ•˜๊ฒŒ ์จ๋ณด๊ธฐ ๊ฐœ์š” Spring Data JPA์—์„œ JpaRepository ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ Java 8์—์„œ ๋„์ž…๋œ default method๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ข€ ๋” ๊น”๋”ํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. Optional ์ œ๊ฑฐํ•˜๊ธฐ Spring Data JPA์˜ findByXX ๋ฉ”์„œ๋“œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Optional์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ด๋กœ ์ธํ•ด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—์„œ Optional ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์ถ”๊ฐ€์ ์ธ ์ž‘์—…์ด ํ•„์š”ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋Ÿด ๋•Œ default ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์ด ๋ฌธ์ œ๋ฅผ ์šฐ์•„ํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. public interface UserRepository extends JpaRepository { // Default ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ findById์˜ Optional์„ ๋‚ด๋ถ€์ ์œผ๋กœ ์ฒ˜๋ฆฌ default User fin.. 2023. 11. 16.
[Docker MySQL] Proxy Layer ๊ตฌ์ถ•ํ•˜๊ธฐ ๊ฐœ์š” ์ด์ „ ๊ฒŒ์‹œ๊ธ€ [Docker MySQL] Orchestrator๋ฅผ ์ด์šฉํ•œ High Availability(HA) ๊ตฌ์ถ•ํ•˜๊ธฐ์—์„œ ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์Šฌ๋ ˆ์ด๋ธŒ ์„œ๋ฒ„๋ฅผ ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„๋กœ ์Šน๊ฒฉ์‹œํ‚ค๋Š” ๊ณผ์ •์„ ์ž๋™ํ™”ํ•˜๋Š” Orchestrator๋ฅผ ํ™œ์šฉํ•œ ๊ณ ๊ฐ€์šฉ์„ฑ(High Availability, HA) ๊ตฌ์„ฑ์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ž๋™์œผ๋กœ ์Šฌ๋ ˆ์ด๋ธŒ ์„œ๋ฒ„์— ๋™๊ธฐํ™”๋˜๊ฒŒ ๋˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ณ  ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๋ถ„์‚ฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, HA ๊ตฌ์„ฑ๋งŒ์œผ๋กœ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ DB ์„œ๋ฒ„ ์‚ฌ์ด์˜ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ค์ • ์ •๋ณด์—๋Š” ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•œ db001์ด ๋งˆ์Šคํ„ฐ DB๋กœ ์„ค์ •๋˜์–ด ์žˆ๋‹ค๋ฉด.. 2023. 11. 12.
@Scheduled ์‚ฌ์šฉํ•  ๋•Œ ์Šค๋ ˆ๋“œ ์„ค์ • ๊ฐœ์š” ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ œ๊ณตํ•˜๋Š” @Scheduled ์–ด๋…ธํ…Œ์ด์…˜์€ ๋ฉ”์„œ๋“œ์— ์Šค์ผ€์ค„๋ง ๊ธฐ๋Šฅ์„ ๋ถ€์—ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ @Scheduled ์–ด๋…ธํ…Œ์ด์…˜๋งŒ์„ ์‚ฌ์šฉํ•˜๋ฉด ์Šคํ”„๋ง์€ ๋‹จ์ผ ์Šค๋ ˆ๋“œ์—์„œ ์Šค์ผ€์ค„๋ง ์ž‘์—…๋“ค์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ, ์ด๋Š” ํ•˜๋‚˜์˜ ์Šค์ผ€์ค„๋ง ์ž‘์—…์ด ์™„๋ฃŒ๋˜์–ด์•ผ๋งŒ ๋‹ค์Œ ์Šค์ผ€์ค„๋ง ์ž‘์—…์ด ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ถ€๊ฐ€์ ์ธ ์„ค์ • ์—†์ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด, ์ผ๋ถ€ ์ž‘์—…์ด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์‹œ๊ฐ„์— ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์‹œ ์ƒํ™ฉ์„ ํ•œ๋ฒˆ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. @Configuration @EnableScheduling public class ScheduledTasks { private final Logger log = LoggerFactory.getLogger(ScheduledTasks.c.. 2023. 11. 9.