Spring9 ๋ฉํฐ DBํ๊ฒฝ์์ JPA ์ฌ์ฉ์ ์ฃผ์์ (feat. connection leak) JPA์์ Muti Datasource ์ค์ ์ ๊ดํ ํธ๋ฌ๋ธ ์ํ ์ ๊ธฐ๋กํ ํฌ์คํ ์ ๋๋ค. ์ต์ข ์ธํ ๋ฐฉ์์ ํ๋จ์ ๊ธฐ์ฌ๋์ด ์์ต๋๋ค.๋ฌธ์ ์ํฉ์ ํฌ ์๋น์ค๋ ํ๋์ ํ๋ก์ ํธ์์ ์ฌ๋ฌ๋์ DataBase๋ฅผ ์ฐ๋ํ๋ ํ๊ฒฝ์ ๋๋ค. ๊ทธ ์ค์์ ๋ช๊ฐ์ DataBase๋ง ํ์์ ์ํด JPA/QueryDsl์ ์ฐ๋ํ์ฌ ์ฌ์ฉํ๋๋ฐ ์ต๊ทผ์ ์๋ก์ด Datasource๋ฅผ ์ถ๊ฐํ์ฌ QueryDsl์ ์ฌ์ฉํ๋ ์ค ๋ค์๊ณผ ๊ฐ์ connection leak warning์ด ๋จ๋ ๊ฒ์ ํ์ธํ์์ต๋๋ค.java.lang.Exception: Apparent connection leak detected๋ฌธ์ ์ ์์ธ์ ํ์ ํ๊ธฐ ์ํด hikari๋ก๊ทธ๋ฅผ ํ์ธํด๋ณด๋, ์ฟผ๋ฆฌ๊ฐ ๋ชจ๋ ์คํ๋ ํ์๋ active connenction์ด ์ ์ง๋๊ณ ์์๊ณ (์ปค๋ฅ์ ์.. 2026. 2. 13. Spring Security์์ ๋ฐ์ํ ์์ธ๊ฐ ControllerAdvice์์ ํธ๋ค๋ง๋๋ ๋ฌธ์ Spring Security์์ ๋ฐ์ํ ์์ธ๊ฐ ControllerAdvice์์ ํธ๋ค๋ง๋๋ ๋ฌธ์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฐ์ํ Exception์ด ControllerAdvice์ ํธ๋ค๋ง๋๋ ๊ฒ์ด ๋ญ๊ฐ ๋ฌธ์ ์ผ๊น์? ์ต๊ทผ์ Client์๊ฒ ์ ๋ฌํ๋ error ๋ฉ์ธ์ง๋ฅผ ๊ณตํตํํ๊ธฐ ์ํด Rest Controller Advice์ ๋ค์๊ณผ ๊ฐ์ ๋ฉ์๋๋ฅผ ์ฝ๋๋ฅผ ์ถ๊ฐํ์์ต๋๋ค.@RestControllerAdvicepublic class GlobalExceptionHandler extends ResponseEntityExceptionHandler { ... @ExceptionHandler(Exception.class) public ResponseEntity handleException(HttpServletRequest .. 2024. 4. 25. [Spring] OpenFeign์ ์ด์ฉํ์ฌ API ํต์ ํด๋ณด๊ธฐ (feat. ๊ณ ์์ด ์ฌ์ง ๊ฒ์) OpenFeign์ ์ด์ฉํ์ฌ API ํต์ ํด๋ณด๊ธฐ (feat. ๊ณ ์์ด ์ฌ์ง ๊ฒ์) ํด๋น ์ฝ์ค์ ๊ณผ์ ๋ฅผ ์ํํ ๋ด์ฉ์ ๋๋ค. [Java/Spring]๊ณ ์์ด ์ฌ์ง ๊ฒ์ ์ฌ์ดํธ API ๊ณผ์ ํ์ด๋ณด๊ธฐ [Java/Spring]๊ณ ์์ด ์ฌ์ง ๊ฒ์ ์ฌ์ดํธ API ๊ณผ์ ํ์ด๋ณด๊ธฐ [Java/Spring]๊ณ ์์ด ์ฌ์ง ๊ฒ์ ์ฌ์ดํธ API ๊ณผ์ ํ์ด๋ณด๊ธฐ ์ฝ์ค ๋์ด๋ ์ด๊ธ ์ฌ์ฉ ์ธ์ด # java ๊ฐ์ ์๊ฐ ํ๋ก๊ทธ๋๋จธ์ค ๊ณผ์ ํ ์คํธ ์ฐ์ต์ ์๋ ๊ณ ์์ด ์ฌ์ง ๊ฒ์ ์ฌ์ดํธ์์ ์ฌ์ฉ๋ API๋ฅผ ์ง์ ๊ตฌํํด school.programmers.co.kr ์ ๊ฐ ์ฐ๋ํ ์ธ๋ถ API๋ ๊ณ ์์ด ์ฌ์ง์ ์กฐํํ๋ The Cat API์ ๋๋ค. https://thecatapi.com/ The Cat API - Cats as a Service. A public .. 2023. 4. 25. [Spring] Filter์ Interceptor ์ฐจ์ด Spring์์๋ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๋ถ๋ฆฌ๋์ด ๊ณตํต์ ์ผ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ ์ ๋ฌด๋ฅผ ์ํํ๊ธฐ ์ํ ๋ช๊ฐ์ง์ ๊ธฐ๋ฅ๋ค์ ์ง์ํ๋ค. Filter (ํํฐ) Interceptor(์ธํฐ์ ํฐ) AOP(๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ) ์์ ๊ฐ์ ๊ธฐ๋ฅ์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ์ ๋ชจ๋ํํ์ฌ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๋ถ๋ฆฌํ์ฌ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ด๊ณ ์ค๋ณต ์ฝ๋๋ฅผ ์ ๊ฑฐํ๋ค. AOP๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด์ ๊ฑธ์ณ ๊ณตํต์ผ๋ก ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ์ ์ง์ํ๋ค๋ฉด, Filter์ Interceptor๋ ์ฃผ๋ก Controller ๋ ์ด์ด์์ ์ฌ์ฉ๋๋ฉฐ ํด๋ผ์ด์ธํธ์ ์์ฒญ๊ณผ ์๋ต์ ๊ฐ๋ก์ฑ ์ฒ๋ฆฌํ๊ฒ ๋๋ค. Filter์ Interceptor์ ์ฐจ์ด์ ์ ์ค์ ์ ์ผ๋ก ์ ๋ฆฌํด๋ณด์. Filter J2EE ํ์ค ์คํ ๊ธฐ๋ฅ์ผ๋ก ๋์คํจ์ฒ ์๋ธ๋ฆฟ(Dispatcher Servlet)์ ์์ฒญ์ด .. 2023. 4. 22. [JPA] ์ปค์ ๊ธฐ๋ฐ pagenation ๊ตฌํํ๊ธฐ ์ปค์ ๊ธฐ๋ฐ ํ์ด์ง๋ค์ด์ Cursor ๊ฐ๋ ์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์์๊ฒ ์๋ตํด์ค ๋ง์ง๋ง ๋ฐ์ดํฐ ๊ธฐ์ค์ผ๋ก ๋ค์ n๊ฐ ์์ฒญ/์๋ต offset ๊ธฐ๋ฐ ์ฟผ๋ฆฌ๊ฐ ๋ค์๊ณผ ๊ฐ๋ค๋ฉด SELECT * FROM items WHERE ์กฐ๊ฑด๋ฌธ ORDER BY id DESC OFFSET ํ์ด์ง๋ฒํธ LIMIT ํ์ด์ง์ฌ์ด์ฆ cursor ๊ธฐ๋ฐ ์ฟผ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ๋ค. SELECT * FROM items WHERE ์กฐ๊ฑด๋ฌธ AND id < ๋ง์ง๋ง์กฐํ_id ORDER BY id DESC LIMIT ํ์ด์ง์ฌ์ด์ฆ ์ง์ ์กฐํ ๊ฒฐ๊ณผ์ ๋ง์ง๋ง ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋ก ๋ค์ด๊ฐ๋๋ฐ SQL ํค์๋๊ฐ ์๋ ๊ณ ์ ๋ ์กฐ๊ฑด๋ฌธ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ๋๋ฌธ์ ์ ์ ์ฟผ๋ฆฌ๋ก์์ ํ๊ณ๊ฐ ์๋ ๊ฒ ๊ฐ๋ค. (๋ฌผ๋ก ๋์ ์ฟผ๋ฆฌ์ธ QueryDSL์ ์ฌ์ฉํ๋ฉด ๋๋ค.) controller /** * ๊ฒ์๋ฌผ page .. 2023. 3. 1. [JPA] ์คํ์ ๊ธฐ๋ฐ Pagenation ๊ตฌํํ๊ธฐ Spring Data JPA์์๋ Pagination์ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋๋ก Pageable ๊ฐ์ฒด๋ฅผ ์ ๊ณตํ๋ค. ์คํ์ ๊ธฐ๋ฐ Pagenation DB์ offset์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ‘ํ์ด์ง’ ๋จ์๋ก ๊ตฌ๋ถํ์ฌ ์์ฒญ/์๋ต ํ๋ค. controller /** * ๊ฒ์๋ฌผ page ์กฐํ * * @param pageable * @return Page */ @GetMapping(produces = APPLICATION_JSON_VALUE) public ApiResponse getPosts(@PageableDefault(sort = "id", direction = Sort.Direction.DESC) Pageable pageable) { Page pages = postService.findAll(pageable); ret.. 2023. 3. 1. ์ด์ 1 2 ๋ค์