๋ฐ˜์‘ํ˜•

๐ŸŒฟ Spring 28

[SpringBoot] UnexpectedRollbackException: Transaction silently rolled back because it has been marked as rollback-only ํ•ด๊ฒฐํ›„๊ธฐ

๋ชฉ์ฐจ ์ƒํ™ฉ 1. ์ด๋ฒคํŠธ์— ๋‹น์ฒจ๋œ ๊ฒฝ์šฐ ํœด๋Œ€ํฐ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  [์ฟ ํฐ๋ฐ›๊ธฐ] ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ฟ ํฐ์ด ์ฆ‰์‹œ ๋ฐœ์†ก๋œ๋‹ค. 2. ๊ทผ๋ฐ ๊ฐ€๋”์”ฉ [์ฟ ํฐ๋ฐ›๊ธฐ] ๋ฒ„ํŠผ์ด ๋ˆŒ๋ฆฐ์ฑ„๋กœ ์•„๋ฌด๋Ÿฐ ๋ฐ˜์‘์ด ์—†๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. (๋ธŒ๋ผ์šฐ์ € ์ž์ฒด๊ฐ€ ๋ฉˆ์ถ˜๋‹ค๋˜๊ฐ€... ์•„๋ฌด๋Ÿฐ ์•ก์…˜ ์—†์ด ๊ทธ๋ƒฅ ๋Œ€๊ธฐ๋งŒ ํ•œ๋‹ค๋˜๊ฐ€...) 3. ๊ธฐ๋‹ค๋ ค๋„ ์‘๋‹ต์ด ์—†์œผ๋‹ˆ ์‚ฌ๋žŒ๋“ค์€ [์ฟ ํฐ ์•ˆ๋ฐ›๊ธฐ] ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ๋‹ค. 4. [์ฟ ํฐ ์•ˆ๋ฐ›๊ธฐ] ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋‹น์ฒจ๋‚ด์—ญ์„ ์ดˆ๊ธฐํ™”์‹œํ‚จ๋‹ค. (๋‹ค๋ฅธ์‚ฌ๋žŒ์—๊ฒŒ ํ• ๋‹น๋˜์–ด์•ผํ•˜๋ฏ€๋กœ) ์„œ๋ฒ„์— ์ฐํžŒ ๋กœ๊ทธ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค. 2022-12-05 10:45:24 ์ฟ ํฐ๋ฐ›๊ธฐ ์‹œ์ž‘ 2022-12-05 10:45:25 ์ฟ ํฐ์•ˆ๋ฐ›๊ธฐ ์‹œ์ž‘ 2022-12-05 10:45:25 ์ฟ ํฐ๋ฐ›๊ธฐ-์ฟ ํฐ๋ฐœ์†ก ์„ฑ๊ณต 2022-12-05 10:45:26 ์ฟ ํฐ์•ˆ๋ฐ›๊ธฐ ์ข…๋ฃŒ 2022-12-05 10:45:2..

๐ŸŒฟ Spring 2022.12.06

[SpringBoot] Jpa Connection Minimum-Idle ์„ค์ •ํ•˜์ง€ ๋ง์ž... ์—๋Ÿฌ ํ›„๊ธฐ

ํ•œ๋™์•ˆ DB์— ์ปค๋„ฅ์…˜์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์–ด์„œ maximum-pool-size๋ฅผ ์„ค์ •์ฃผ์—ˆ๋Š”๋ฐ minimum-idle ์…‹ํŒ…๋„ ์žˆ์–ด์„œ ๊ฐ™์ด ์…‹ํŒ…ํ•ด์ฃผ์—ˆ์—ˆ๋‹ค. spring: datasource: hikari: ... minimum-idle: 5 maximum-pool-size: 10 ๊ทธ๋Ÿฐ๋ฐ..... ์ฒ˜์Œ๋ณด๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค HikariPool-1 - Connection is not available, request timed out after 45005ms. ์˜ค์ž‰???? ์ด์ƒํ•˜๋„ค ์ด ์„œ๋ฒ„๋Š” ์ฒ˜์Œ๋„์šฐ๋Š” ์„œ๋ฒ„๊ฐ€ ์•„๋‹ˆ๋ผ ์ด์ „์—๋„ ๊ณ„์† ๋Œ์•„๊ฐ€๊ณ ์žˆ์—ˆ๋˜ ์„œ๋ฒ„๊ณ , ์‚ฌ์‹ค ์ปค๋„ฅ์…˜ ์—๋Ÿฌ๊ฐ€ ๋‚ ๊ฑฐ์˜€์œผ๋ฉด ์š”์ฒญ์ด ๋” ๋งŽ์•˜์„ ๋•Œ ์—๋Ÿฌ๊ฐ€ ๋‚ฌ์–ด์•ผํ–ˆ๋Š”๋ฐ.. ์ง€๊ธˆ์€ ์š”์ฒญ์ด ์ƒ๋Œ€์ ์œผ๋กœ ์ ์€ํŽธ์ธ๋ฐ ์—๋Ÿฌ๊ฐ€ ๋‚˜์„œ ์˜์•„ํ•ดํ–ˆ๋‹ค ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ด์œ ๊ฐ€ ์žˆ์—ˆ๊ฒ ์ง€๋งŒ ๋‹จํŽธ์ ์œผ๋กœ..

๐ŸŒฟ Spring 2022.12.04

[SpringBoot] Apache Poi๋ฅผ ์ด์šฉํ•œ ์—‘์…€๋‹ค์šด๋กœ๋“œ๋Š” SXSSF๋ฅผ ์“ฐ์ž..!

๋ชฉ์ฐจ ์—๋Ÿฌ ๋ฐœ์ƒ!!!!!!!!!!!! https://lotuus.tistory.com/145 [SpringBoot] Apache Poi๋ฅผ ์ด์šฉํ•œ ์—‘์…€ ๋‹ค์šด๋กœ๋“œ ๊ตฌํ˜„ ๋ชฉ์ฐจ ํ†ต๊ณ„ API๋ฅผ ๋งŒ๋“ค๋‹ค๋ณด๋ฉด ํ™”๋ฉด์—๋„ ๊ฐ’์„ ๋ณด์—ฌ์ฃผ์–ด์•ผํ•˜๊ณ , ์—‘์…€ ๋‹ค์šด๋กœ๋“œ๋„ ๊ฐ€๋Šฅํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค ใ…Žใ…Ž ๋Œ€ํ‘œ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” Apache Poi๋ฅผ ์ด์šฉํ•˜์—ฌ ์—‘์…€ ๋‹ค์šด๋กœ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹น! ์˜ˆ์ œ UserPoint En lotuus.tistory.com ์˜ˆ์ „์—๋„ ์—‘์…€๋‹ค์šด๋กœ๋“œ ๊ฒŒ์‹œ๊ธ€์„ ์˜ฌ๋ ธ์—ˆ๋Š”๋ฐ, ์šด์˜์—์„œ ๊ฐ‘์ž๊ธฐ ํž™๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค๋ฉฐ Out Of Memory ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค..... ์ด์œ ๋Š” ๋‘๊ฐ€์ง€์˜€๋‹ค ์ฒซ๋ฒˆ์งธ ) ์š”์ฒญ ์ค‘๋ณต ํ•„ํ„ฐ๋ง ์•ˆํ•จ ํ™”๋ฉด์— ๋ณด์ด๋Š” ์—‘์…€ ๋‹ค์šด๋กœ๋“œ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ณ , ์‹ค์ œ ๋‹ค์šด๋กœ๋“œ ์ฐฝ์ด ๋œฐ๋•Œ๊นŒ์ง€๋Š” ์‹œ๊ฐ„์ด ์ข€ ๊ฑธ๋ฆฐ๋‹ค ๊ทธ๋Ÿฐ๋ฐ ์ฐธ์„์„ฑ ์—†๋Š” ๋ถ„๋“ค์ด ๊ธฐ..

๐ŸŒฟ Spring 2022.12.03

Spring Jpa SelfJoin ์ˆœํ™˜์ฐธ์กฐ ๋ฐฉ์ง€ํ•˜๋ฉฐ ๋‹ค๋ฅธ ์—”ํ‹ฐํ‹ฐ์™€ ๋งตํ•‘ํ•˜๊ธฐ

๋ชฉ์ฐจ ๋ณดํ†ต ์…€ํ”„์กฐ์ธ์€ ์นดํ…Œ๊ณ ๋ฆฌ์ฒ˜๋Ÿผ 1์ฐจ, 2์ฐจ, 3์ฐจ.... ๋ฌดํ•œ์ •์œผ๋กœ ๋Š˜์–ด๋‚  ์ˆ˜ ์žˆ์„ ๋•Œ ์‚ฌ์šฉ๋˜๋Š”๋ฐ, ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”๋กœ ๋ชจ๋“  ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์–ด์„œ ์œ ์šฉํ•˜๊ฒŒ ์“ฐ์ธ๋‹ค. ์…€ํ”„์กฐ์ธ ํ˜•ํƒœ๋กœ ๊ตฌํ˜„ํ•œ ์นดํ…Œ๊ณ ๋ฆฌ ์—”ํ‹ฐํ‹ฐ์™€ ๋ฉ”๋‰ด ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋งตํ•‘ํ•˜๊ณ  Json์„ ๋‚ด๋ ค์ฃผ๋Š” ๊ณผ์ •์—์„œ ์–ด๋–ป๊ฒŒ ์ˆœํ™˜์ฐธ์กฐ๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ์„๊นŒ?? ์˜ˆ์‹œ๋ฐ์ดํ„ฐ ์นดํ…Œ๊ณ ๋ฆฌ ๋ฉ”๋‰ด ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์‘๋‹ต๊ฐ’ ์นดํ…Œ๊ณ ๋ฆฌ { "message": "์นดํ…Œ๊ณ ๋ฆฌ ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜์˜€์Šต๋‹ˆ๋‹ค.", "data": { "id": 2, "categoryCode": "soup_stews", "categoryName": "์ฐœ_ํƒ•_์ฐŒ๊ฐœ", "parent": { "id": 1, "categoryCode": "koreanfood", "categoryName": "ํ•œ์‹", "parent": null, "ch..

๐ŸŒฟ Spring 2022.11.09

Server-Sent Event (SSE)๋ž€? feat Node.js

๋ชฉ์ฐจ ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์—์„  ๋ฐฑ์—”๋“œ -> ํ”„๋ก ํŠธ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด์ค„๋•Œ ์›น์†Œ์ผ“์„ ์‚ฌ์šฉํ•˜์˜€๋‹ค. ์›น์†Œ์ผ“์€ ์–‘๋ฐฉํ–ฅ์ธ๋ฐ, ๊ตณ์ด ํ”„๋ก ํŠธ -> ๋ฐฑ์—”๋“œ๋ฐฉํ–ฅ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด์žˆ์„ ํ•„์š”๊ฐ€ ์—†์–ด์„œ ์ด๊ฒƒ์ €๊ฒƒ ์ฐพ์•„๋ณด๋‹ˆ SSE๋ฅผ ์•Œ๊ฒŒ๋˜์—ˆ๊ณ , ์‚ฌ์šฉํ•ด๋ณด์•˜๋‹ค! SSE๋ž€ ? SSE๋Š” ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ŠคํŠธ๋ฆฌ๋ฐ ํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค. ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด ์ง€์†์ ์œผ๋กœ API๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋™๊ธฐํ™”ํ•˜๋Š” ์ž‘์—…์„ ์—†์•จ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค! - ์›น์†Œ์ผ“์€ WSS ํ”„๋กœํ† ์ฝœ์„ ๋”ฐ๋กœ ์‚ฌ์šฉํ•˜์ง€๋งŒ SSE๋Š” HTTP๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋•Œ๋ฌธ์— ๋ณ„๋‹ค๋ฅธ ์„œ๋ฒ„ ์…‹ํŒ…์ด ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. - ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ์ตœ์ดˆ ํ•œ๋ฒˆ HTTP์—ฐ๊ฒฐ์„ ๋งบ์œผ๋ฉด ๊ทธ ๋’ค๋กœ ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ง€์†์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค. EX ) ์„œ๋ฒ„์—์„œ ๊ฐ€๋”์”ฉ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์•ผํ•˜๋Š”๋ฐ, N์ดˆ๋™์•ˆ ๋ฐ์ดํ„ฐ๊ฐ€ ์‹ค..

๐ŸŒฟ Spring 2022.09.20

[SpringBoot] Apache Poi๋ฅผ ์ด์šฉํ•œ ์—‘์…€ ๋‹ค์šด๋กœ๋“œ ๊ตฌํ˜„

๋ชฉ์ฐจ 2022.12.03 ๋‚ด์šฉ ์ถ”๊ฐ€ ์•„๋ž˜ ์ฝ”๋“œ์—์„œ๋Š” XSSFWorkbook์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์‹ค์ œ ์šด์˜์„œ๋ฒ„์—์„œ ๋‚˜๋Š” Out Of Memory ์—๋Ÿฌ๋ฅผ ๊ฒฝํ—˜ํ–ˆ๋‹ค. ํŽธ์•ˆํ•œ ์ฃผ๋ง์„ ๋ณด๋‚ด๊ณ ์‹ถ๋‹ค๋ฉด ๊ผญ ๋ฐ˜๋“œ์‹œ ์•„๋ž˜ ๊ธ€์„ ์ฝ์–ด๋ณด๊ณ  SXSSFWorkbook์„ ์‚ฌ์šฉํ•˜์ž. https://lotuus.tistory.com/153 [SpringBoot] Apache Poi๋ฅผ ์ด์šฉํ•œ ์—‘์…€๋‹ค์šด๋กœ๋“œ๋Š” SXSSF๋ฅผ ์“ฐ์ž..! ๋ชฉ์ฐจ ์—๋Ÿฌ ๋ฐœ์ƒ!!!!!!!!!!!! https://lotuus.tistory.com/145 [SpringBoot] Apache Poi๋ฅผ ์ด์šฉํ•œ ์—‘์…€ ๋‹ค์šด๋กœ๋“œ ๊ตฌํ˜„ ๋ชฉ์ฐจ ํ†ต๊ณ„ API๋ฅผ ๋งŒ๋“ค๋‹ค๋ณด๋ฉด ํ™”๋ฉด์—๋„ ๊ฐ’์„ ๋ณด์—ฌ์ฃผ์–ด์•ผํ•˜๊ณ , ์—‘์…€ ๋‹ค์šด๋กœ๋“œ๋„ ๊ฐ€๋Šฅํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค ใ…Ž lotuus.tistory.com ํ†ต๊ณ„ API๋ฅผ ๋งŒ๋“ค๋‹ค๋ณด๋ฉด..

๐ŸŒฟ Spring 2022.08.20

[Spring Boot] FeignClient์™€ ExceptionHandler | FeignClient์˜ ์‘๋‹ต๊ฐ’ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•˜๊ธฐ

๋ชฉ์ฐจ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋‹ค๋ณด๋‹ˆ FeignClient๋กœ ๋‹ค๋ฅธ ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ผ์ด ์ƒ๊ฒผ๋Š”๋ฐ, ์ž์‹์„œ๋น„์Šค๊ฐ€ ๋ถ€๋ชจ์„œ๋น„์Šค์— FeignClient๋กœ APIํ˜ธ์ถœ ์‹œ ๋ถ€๋ชจ์„œ๋น„์Šค์—์„œ Exception์ด ํ„ฐ์ง€๋ฉด ๊ทธ๋Œ€๋กœ ์ž์‹์„œ๋น„์Šค๋„ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์—๋Ÿฌ ์‘๋‹ตํฌ๋งท์ด ์ •ํ•ด์ ธ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€๋ชจ์„œ๋น„์Šค์˜ ์—๋Ÿฌ๋ฉ”์‹œ์ง€๋ฅผ ์ž์‹์„œ๋น„์Šค์—์„œ๋„ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋ฉด ์–ด๋–จ๊นŒ?! ํ•˜๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค ๊ธฐ์กด์ฝ”๋“œ application.yml feign ์„ค์ • ๋ถ€๋ถ„๋งŒ ๊ฐ€์ง€๊ณ ์™”๋‹ค ... feign: parent-api: url: http://localhost:8081 httpclient: follow-redirects: true ... ExceptionController.java CustomException์ด ๋ฐœ์ƒํ•˜๋ฉด ํ•ด๋‹น handler์—์„œ ์ฒ˜๋ฆฌํ•˜๊ฒŒ๋œ๋‹ค @RestC..

๐ŸŒฟ Spring 2022.07.29

Spring DI(์˜์กด์ฃผ์ž…), @Autowired (์˜์กด ์ž๋™์ฃผ์ž…)

๋ชฉ์ฐจ ์˜์กด์ฃผ์ž… ๋ฐฉ๋ฒ• ์„ค์ • ํด๋ž˜์Šค์—์„œ ์ง์ ‘ ์˜์กด ์ฃผ์ž… ์„ค์ •ํด๋ž˜์Šค์—์„œ ์˜์กด๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ฃผ์ž…ํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. @Configuration public class AppCtx { @Bean public MemberDao memberDao(){ return new MemberDao(); } @Bean public MemberRegisterService memberRegisterService(){ return new MemberRegisterService(memberDao()); } @Bean public ChangePasswordService changePasswordService(){ ChangePasswordService changePasswordService = new ChangePasswordService(..

๐ŸŒฟ Spring 2022.04.02

Spring DI(์˜์กด์ฃผ์ž…), Container(๊ฐ์ฒด ์กฐ๋ฆฝ)

๋ชฉ์ฐจ ์˜์กด์ด๋ž€? public class MemberRegisterService { //๊ฐ์ฒด ์ง์ ‘ ์ƒ์„ฑ private MemberDao memberDao = new MemberDao(); public void register(String email){ //์ด๋ฉ”์ผ ์ค‘๋ณต ์ฒดํฌ Member member = memberDao.selectByEmail(email); ... //ํšŒ์›๊ฐ€์ž… ์ฒ˜๋ฆฌ ... } } MemberRegisterService ํด๋ž˜์Šค๋Š” register() ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ MemberDao์˜ selectByEmail() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. MemberDao์˜ selectByEmail() ๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ findByEmail()๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค๋ฉด? -> MemberRegisterService์˜ ์†Œ์Šค์ฝ”๋“œ๋„ ๋ณ€๊ฒฝ..

๐ŸŒฟ Spring 2022.03.28

Spring Container(ApplicationContext)์™€ Bean

๋ชฉ์ฐจ @Configuration ์ด ์–ด๋…ธํ…Œ์ด์…˜์„ ํด๋ž˜์Šค์— ๋ถ™์ด๋ฉด ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์Šคํ”„๋ง ์„ค์ • ํด๋ž˜์Šค๋กœ ๋“ฑ๋กํ•œ๋‹ค. @Bean ๋นˆ ์Šคํ”„๋ง์ด ์ƒ์„ฑํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋นˆ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. @Bean์„ ๋ฉ”์„œ๋“œ์— ๋ถ™์ด๋ฉด ํ•ด๋‹น ๋ฉ”์„œ๋“œ๊ฐ€ ์ƒ์„ฑํ•œ ๊ฐ์ฒด๋ฅผ ์Šคํ”„๋ง์ด ๊ด€๋ฆฌํ•˜๋Š” ๋นˆ ๊ฐ์ฒด๋กœ ๋“ฑ๋กํ•œ๋‹ค. @Configuration //AppContext.java๋ฅผ ์Šคํ”„๋ง ์„ค์ • ํด๋ž˜์Šค๋กœ ๋“ฑ๋กํ•œ๋‹ค public class AppContext { @Bean public Greeter greeter(){ Greeter greeter = new Greeter(); greeter.setFormat("%s, ์•ˆ๋…•ํ•˜์„ธ์š”."); return greeter; } } Greeterํƒ€์ž…์ด๊ณ , "greeter" ๋ผ๋Š” ์ด๋ฆ„์˜ Bean์ด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋ก๋œ๋‹ค. App..

๐ŸŒฟ Spring 2022.03.28
๋ฐ˜์‘ํ˜•