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

BackEnd๐ŸŒฑ/Spring44

WebClient์—์„œ ์—๋Ÿฌ ์ฒ˜๋ฆฌ์™€ ์žฌ์‹œ๋„ํ•˜๋Š” ๋ฐฉ๋ฒ• ์„œ๋ก  HTTP ์š”์ฒญ์€ ๋„คํŠธ์›Œํฌ ์ง€์—ฐ, ์ผ์‹œ์ ์ธ ์„œ๋ฒ„ ์˜ค๋ฅ˜, ์ž˜๋ชป๋œ ์š”์ฒญ ๋“ฑ ๋‹ค์–‘ํ•œ ์ด์œ ๋กœ ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹คํ–‰ ํ๋ฆ„์— ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๊ธฐ์— ์—๋Ÿฌ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” WebClient๋ฅผ ์‚ฌ์šฉ์‹œ HTTP์š”์ฒญ ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•œ ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๋ณต๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ์žฌ์‹œ๋„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ „๋žต์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์—๋Ÿฌ ์ฒ˜๋ฆฌ onErrorReturn() onErrorReturn()์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ฃผ์–ด์ง„ default ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋น„๋™๊ธฐ ํ†ต์‹ ์—์„œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•˜๋Š”๋ฐ, ํŠนํžˆ ๋„คํŠธ์›Œํฌ ์˜ค๋ฅ˜ ๋˜๋Š” ์„œ๋ฒ„์˜ ๋ฌธ์ œ๋กœ ์ธํ•œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํ†ต์‹  ์ž์ฒด๋ฅผ ์ค‘๋‹จ์‹œํ‚ค์ง€ ์•Š๊ณ , ๋””ํดํŠธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์—ฌ ์ •์ƒ์ ์œผ๋กœ ๊ณ„์† ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ.. 2023. 8. 3.
Spring Batch๋ž€? ๊ฐ„๋‹จํ•œ ๊ฐœ๋…๊ณผ ์ฝ”๋“œ ์‚ดํŽด๋ณด๊ธฐ ์„œ๋ก  ์Šคํ”„๋ง ๋ฐฐ์น˜(Spring Batch)๋Š” ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ ๊ธฐ๋ฐ˜์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐฐ์น˜ ์ž‘์—…์€ ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜, ์ฃผ๊ธฐ์ ์ด๊ณ  ๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, ์Šคํ”„๋ง ๋ฐฐ์น˜๋Š” ์ด๋Ÿฌํ•œ ์ž‘์—…์„ ํšจ์œจ์ ์ด๊ณ  ์•ˆ์ •์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€ํ‘œ์ ์œผ๋กœ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊น… ๋ฐ ์ถ”์  ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ์ž‘์—… ์ฒ˜๋ฆฌ ํ†ต๊ณ„ ์ž‘์—… ์žฌ์‹œ์ž‘ ๊ฑด๋„ˆ๋›ฐ๊ธฐ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ Batch์™€ Scheduler์˜ ์ฐจ์ด ๋ฐฐ์น˜(Batch)๋Š” ๋…ผ๋ฆฌ์  ๋˜๋Š” ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๊ด€๋ จ๋œ ์ผ๋ จ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ์ผ๊ด„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— ์Šค์ผ€์ค„๋Ÿฌ(Scheduler)๋Š” ์ฃผ์–ด์ง„ ์ž‘์—…์„ ๋ฏธ๋ฆฌ ์ •์˜๋œ ์‹œ๊ฐ„์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋„๊ตฌ๋‚˜ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•  ์ .. 2023. 7. 29.
์Šคํ”„๋ง์—์„œ @Async๋ฅผ ์‚ฌ์šฉํ• ๋•Œ ์ฃผ์˜์  ๊ฐœ์š”๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์˜ค๋Š˜๋‚ ์˜ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์—์„œ ๋งค์šฐ ์ค‘์š”ํ•œ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ, ๋Š๋ฆฐ I/O ์ž‘์—…, ๋ณต์žกํ•œ ๊ณ„์‚ฐ ๋“ฑ ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด์„œ ์‹œ์Šคํ…œ์˜ ์‘๋‹ต ์‹œ๊ฐ„์„ ๊ฐœ์„ ํ•˜๊ณ , ๋ฆฌ์†Œ์Šค๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ๋„์›€์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.์Šคํ”„๋ง์—์„œ๋Š” @Async ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ๋น„๋™๊ธฐ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Ÿฌํ•œ @Async ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์‚ฌํ•ญ์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.  ์ฃผ์˜์ Exception Handling๋ฉ”์„œ๋“œ ํ˜ธ์ถœ๋ฆฌํ„ด ํƒ€์ž…ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌExecution  Exception Handling๊ธฐ๋ณธ์ ์œผ๋กœ @Async ๋ฉ”์„œ๋“œ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ๋Š” ํ˜ธ์ถœ์ž์—๊ฒŒ ์ „ํŒŒ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” @Async ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ๋ฉ”์„œ๋“œ๊ฐ€ ๋ณ„๋„์˜ ์Šค๋ ˆ๋“œ.. 2023. 7. 24.
Kafka ๊ฐœ๋…๊ณผ Spring Boot + Kafka ๊ฐ„๋‹จํ•œ ์—ฐ๋™ ์„œ๋ก ๊ธฐ์กด ๋ฐ์ดํ„ฐ ์‹œ์Šคํ…œ์˜ ๊ตฌ์กฐ๋Š” ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ end-to-end๋กœ ์ง์ ‘ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋Š” ๊ฐ„๋‹จํ•˜์ง€๋งŒ ๊ฐ๊ฐ์˜ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์ด ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์–ด, ์š”๊ตฌ์‚ฌํ•ญ์ด ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ์‹œ์Šคํ…œ์˜ ๋ณต์žก๋„๋ฅผ ๋†’์ด๋Š” ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์™”๊ณ , ํฌ๊ฒŒ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฌธ์ œ์ ๋“ค์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.์‹œ์Šคํ…œ ๋ณต์žก๋„์˜ ์ฆ๊ฐ€์ค‘์•™ํ™”๋œ ๋ฐ์ดํ„ฐ ์ „์†ก ์˜์—ญ์ด ์—†์–ด, ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์„ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ต๊ณ , ์‹œ์Šคํ…œ ๊ด€๋ฆฌ๊ฐ€ ๋ณต์žกํ•จ.์‹œ์Šคํ…œ์˜ ์ผ๋ถ€๋ถ„์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค์„ ํ™•์ธํ•ด์•ผ ํ•จ.๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ ์œ ์ง€์˜ ์–ด๋ ค์›€๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ ์‹œ์Šคํ…œ๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ถ„์‚ฐ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ, ํ•œ ์‹œ์Šคํ…œ์—์„œ ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์— ์ฆ‰์‹œ ๋ฐ˜์˜๋˜์ง€ ์•Š์•„ ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์–ด๋ ค์›€.๋ฐ์ดํ„ฐ ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ์˜ ์–ด๋ ค์›€์ „ํ†ต์ ์ธ ๋ฉ”์‹œ์ง€ ํ ์‹œ์Šค.. 2023. 7. 19.
์Šคํ”„๋ง ์ด๋ฒคํŠธ ๋ฐœํ–‰๊ณผ ๊ตฌ๋…์œผ๋กœ ํŠธ๋žœ์žญ์…˜ ๋ถ„๋ฆฌํ•˜๊ธฐ ์„œ๋ก ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค๋‹ค ๋ณด๋ฉด ๋‹ค์–‘ํ•œ ์™ธ๋ถ€ ๋ชจ๋“ˆ์ด๋‚˜ ์‹œ์Šคํ…œ์„ ์—ฐ๋™ํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ์ƒ๊ธฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์„ ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์ฝ”๋“œ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.@Service@Transactional(readOnly = true)@RequiredArgsConstructorpublic class UserService { private final MessageService messageService; private final UserRepository userRepository; @Transactional public void signUp(String email) { // ์œ ์ € ์ €์žฅ userRepository.save(new User(email)); .. 2023. 7. 9.
SSE๋กœ ์•Œ๋ฆผ ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ with Spring ์„œ๋ก  ์ธํ„ฐ๋„ท์€ ์›น ๋ธŒ๋ผ์šฐ์ €์™€ ์›น ์„œ๋ฒ„ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ ์œ„ํ•ด์„œ HTTP ํ‘œ์ค€ ์œ„์— ๊ตฌ์ถ•๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์›น ๋ธŒ๋ผ์šฐ์ €์ธ ํด๋ผ์ด์–ธํŠธ๊ฐ€ HTTP ์š”์ฒญ์„ ์„œ๋ฒ„์— ๋ณด๋‚ด๊ณ , ์„œ๋ฒ„๋Š” ์ ์ ˆํ•œ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๋Š”๋ฐ ์ด๋Ÿฐ ์™•๋ณต ํ†ต์‹ ์€ 'https://www.google.com'๊ณผ ๊ฐ™์€ ์ฃผ์†Œ๋ฅผ ๋ธŒ๋ผ์šฐ์ €์— ์ž…๋ ฅํ–ˆ์„ ๋•Œ ์›น ํŽ˜์ด์ง€๋ฅผ ๋ฐ›๊ฒŒ ๋˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ HTTP ํ‘œ์ค€์€ ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์ง€์›๋˜์ง€๋งŒ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์—ฐ์†์ ์ธ ์ •๋ณด๋ฅผ ์„œ๋ฒ„์— ์ „์†กํ•˜๊ฑฐ๋‚˜, ์‹ค์‹œ๊ฐ„์œผ๋กœ ์—…๋ฐ์ดํŠธ๋œ ์„œ๋ฒ„์˜ ์ •๋ณด๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋‚ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ง€์†์ ์ธ HTTP ์š”์ฒญ์„ ํ•˜๊ฒŒ ๋˜๊ธฐ์— ๋น„์šฉ๋ฉด์—์„œ ๋งค์šฐ ๋น„ ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ํด๋ง, ์›น์†Œ์ผ“, ๊ทธ๋ฆฌ๊ณ  SSE๊ฐ€ ๋“ฑ์žฅํ–ˆ๋Š”๋ฐ, ์ด๋“ค์€ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์˜ ์†๋„์™€ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ์— ์ค‘์ ์„ ๋‘” ํ”„๋กœํ† ์ฝœ ๋“ค์ž…๋‹ˆ.. 2023. 6. 18.
Gradle๋กœ ๋ฉ€ํ‹ฐ๋ชจ๋“ˆ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑํ•˜๊ธฐ ์„œ๋ก  ํ˜„์žฌ ์ œ๊ฐ€ ์žˆ๋Š” ๋ถ€์„œ์—์„œ๋Š” ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋‹ค์ˆ˜์˜ ํ”„๋กœ์ ํŠธ๊ฐ€ ์กด์žฌํ•˜๋Š”๋ฐ, ํ•˜๋‚˜์˜ ๋„๋ฉ”์ธ์„ ๊ณต์œ ํ•˜๊ณ  ๊นƒ์„ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋„๋ฉ”์ธ ํด๋ž˜์Šค๋“ค์€ ๋ฉ€ํ‹ฐ ํ”„๋กœ์ ํŠธ์— Nexus Maven ์ €์žฅ์†Œ๋ฅผ ์ด์šฉํ•ด์„œ ๋„๋ฉ”์ธ ํด๋ž˜์Šค๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ์ด๋ฏธ ์„ธํŒ…์ด ๋œ ํ™˜๊ฒฝ์—์„œ ๊ฐœ๋ฐœ์„ ํ•˜๊ณ  ์žˆ๊ธฐ์— ๋”ฐ๋กœ ์„ค์ •์— ๊ด€ํ•ด์„œ๋Š” ๊ฑด๋“œ๋ฆด ๋ถ€๋ถ„์ด ์—†๊ธฐ๋„ ํ•˜๊ณ , ์ง์ ‘ ๊ตฌ์„ฑํ•ด ๋ณธ ์ ๋„ ์—†์–ด์„œ ์ด๋ฒˆ๊ธฐํšŒ์— ์ •๋ฆฌ์™€ ํ•จ๊ป˜ ์ง์ ‘ ํ™˜๊ฒฝ ๊ตฌ์„ฑ์„ ํ•ด๋ณด๊ณ ์ž ํฌ์ŠคํŒ…ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ฒŒ์‹œ๊ธ€์—์„œ๋Š” ๋ฉ€ํ‹ฐ๋ชจ๋“ˆ์˜ ์ •์˜์™€ Gradle์„ ์ด์šฉํ•œ ๋ฉ€ํ‹ฐ๋ชจ๋“ˆ์˜ ๊ตฌ์„ฑ์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ชฉ์ฐจ ๋ฉ€ํ‹ฐ๋ชจ๋“ˆ์ด๋ž€? Gradle๋กœ ๋ฉ€ํ‹ฐ๋ชจ๋“ˆ ๊ตฌ์„ฑํ•˜๊ธฐ ํ…Œ์ŠคํŠธ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ Apple Silicon (M1), IntelliJ Java 11, Spr.. 2023. 3. 4.
ํŠธ๋žœ์žญ์…˜(Transaction)์˜ ์˜ˆ์™ธ(Exception)์— ๋”ฐ๋ฅธ ๋กค๋ฐฑ ์ฒ˜๋ฆฌ ์„œ๋ก ์ด์ „์— Java์˜ Checked Exception๊ณผ UnChecked Exception์— ๋Œ€ํ•ด ์ •๋ฆฌํ•œ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ์š”์•ฝํ•˜๋ฉด RuntimeException์„ ์ƒ์†ํ•˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค๋Š” Checked Exception, ์ƒ์†ํ•œ ํด๋ž˜์Šค๋Š” Unchecked Exception์ด๋ฉฐ, Checked Exception์€ try-catch์„ ํ†ตํ•ด ์˜ˆ์™ธ๋ฅผ ๊ผญ ์ฒ˜๋ฆฌํ•ด ์ฃผ์–ด์•ผ ์ปดํŒŒ์ผ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๊ฐ๊ฐ์˜ ์˜ˆ์™ธ๋“ค์— ๋Œ€ํ•˜์—ฌ Transaction์—์„œ ๋กค๋ฐฑ์ด ์–ด๋–ป๊ฒŒ ๋ฐ˜์˜๋˜๋Š”์ง€ ํ•œ๋ฒˆ ์ •๋ฆฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ณตํ†ต ์ฝ”๋“œ@Entity@NoArgsConstructor(access = AccessLevel.PROTECTED)public class User {    @Id    @GeneratedVa.. 2023. 2. 5.
DB ์ปค๋„ฅ์…˜ ํ’€(Connection Pool)๊ณผ Hikari CP ์„œ๋ก  HikariCP๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์žˆ์–ด, ๊ฐ€์žฅ ๋น ๋ฅด๊ณ  ๊ฐ€๋ฒผ์šด Connection Pool ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ฒŒ์‹œ๊ธ€์—์„œ๋Š” Connection Pool๊ณผ Hikari CP์— ๋Œ€ํ•ด ํ•œ๋ฒˆ ์ •๋ฆฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ชฉ์ฐจ ์ „ํ†ต์ ์ธ WAS์™€ DB ์—ฐ๊ฒฐ ๋ฐฉ๋ฒ• Connection Pool์ด๋ž€? Connection Pool์„ ๋ฌด์ž‘์ • ํฌ๊ฒŒ ๋งŒ๋“ค๋ฉด ์„ฑ๋Šฅ์ด ์ข‹์•„์งˆ๊นŒ? ์ด์ƒ์ ์ธ Connection Pool์˜ ํฌ๊ธฐ๋Š” ์–ผ๋งˆ์ผ๊นŒ? Hikari CP๋ž€? ์ „ํ†ต์ ์ธ WAS์™€ DB ์—ฐ๊ฒฐ ๋ฐฉ๋ฒ• ์ผ๋ฐ˜์ ์œผ๋กœ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ CRUD์™€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ์‚ฐ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์œ„ ์ด๋ฏธ์ง€์™€ ๊ฐ™์ด DB์— ์ง์ ‘ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋งค๋ฒˆ ๋“œ๋ผ์ด๋ฒ„(Driver)๋ฅผ ๋กœ๋“œํ•˜๊ณ  connection ๊ฐ์ฒด๋ฅผ ๋ฐ›์•„์˜ค.. 2023. 1. 18.