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

Spring19

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] Filter์™€ Interceptor ์ฐจ์ด Spring์—์„œ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ถ„๋ฆฌ๋˜์–ด ๊ณตํ†ต์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์—…๋ฌด๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ช‡๊ฐ€์ง€์˜ ๊ธฐ๋Šฅ๋“ค์„ ์ง€์›ํ•œ๋‹ค. Filter (ํ•„ํ„ฐ) Interceptor(์ธํ„ฐ์…‰ํ„ฐ) AOP(๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ) ์œ„์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์€ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ์„ ๋ชจ๋“ˆํ™”ํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ถ„๋ฆฌํ•˜์—ฌ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ด๊ณ  ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค. AOP๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์— ๊ฑธ์ณ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ์„ ์ง€์›ํ•œ๋‹ค๋ฉด, Filter์™€ Interceptor๋Š” ์ฃผ๋กœ Controller ๋ ˆ์ด์–ด์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ๊ฐ€๋กœ์ฑ„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค. Filter์™€ Interceptor์˜ ์ฐจ์ด์ ์„ ์ค‘์ ์ ์œผ๋กœ ์ •๋ฆฌํ•ด๋ณด์ž. Filter J2EE ํ‘œ์ค€ ์ŠคํŽ™ ๊ธฐ๋Šฅ์œผ๋กœ ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ(Dispatcher Servlet)์— ์š”์ฒญ์ด .. 2023. 4. 22.
[Spring] Spring MVC โ€ป Spring MVC ๋ฐœํ‘œ ์ž๋ฃŒ์ž…๋‹ˆ๋‹ค! Spring MVC ๋ž€? Spring ํ”„๋ ˆ์ž„์›Œํฌ ์ค‘์— ์›น ๊ณ„์ธต์„ ๋‹ด๋‹นํ•˜๋Š” ๋ชจ๋“ˆ ์ค‘ ํ•˜๋‚˜๋กœ ์ •์‹ ๋ช…์นญ์€ Spring Web MVC ์ž…๋‹ˆ๋‹ค. ๐Ÿ’ก Spring MVC๋Š” Servlet API์œ„์—์„œ ๋™์ž‘ํ•˜๋ฉฐ Model, View, Controller ์„ธ๊ฐ€์ง€ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•ด ํด๋ผ์ด์–ธํŠธ์˜ ๋‹ค์–‘ํ•œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋‹จ์ˆœ ํ…์ŠคํŠธ ํ˜•์‹๋ถ€ํ„ฐ REST ํ˜•์‹, View ํ˜•์‹์˜ ์‘๋‹ต์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํŽธ๋ฆฌํ•˜๊ฒŒ ๊ตฌ์„ฑ๋œ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. Spring MVC๊ฐ€ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๊ฐœ๋ฐœ์ž๋ฅผ ํŽธํ•˜๊ฒŒ ํ•ด์คฌ๋Š”์ง€ ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ๊ณผ ๋™์ž‘ ๋ฐฉ์‹์„ ์ค‘์‹ฌ์œผ๋กœ ๋ฐœํ‘œ๋ฅผ ์ง„ํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ Spring MVC๊ฐ€ ์žˆ๊ธฐ ์ „์—๋Š” HTML ์ฝ”๋“œ์— JAVA ์ฝ”๋“œ๋ฅผ ๋„ฃ์–ด ๋™์  ์›น ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” JSP์™€ ์„œ.. 2023. 2. 18.
[Spring] Map Struct ์‚ฌ์šฉํ•˜๊ธฐ Map Struct https://mapstruct.org/ ๐Ÿ’ก MapStruct๋Š” ๊ตฌ์„ฑ ์ ‘๊ทผ๋ฒ•์— ๋Œ€ํ•œ ๊ทœ์•ฝ์— ๊ทผ๊ฑฐํ•˜์—ฌ Java Bean ์ข…๋ฅ˜ ๊ฐ„์˜ ๋งคํ•‘ ๊ตฌํ˜„์„ ํฌ๊ฒŒ ๋‹จ์ˆœํ™”ํ•œ code generator ์ด๋‹ค. ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•˜๋ฉด Dto ์™€ Entity์˜ ๋ณ€ํ™˜์„ ์‰ฝ๊ฒŒ ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด Map Struct๋ฅผ ์™œ ์‚ฌ์šฉํ• ๊นŒ? ์žฅ์  ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํŒŒ์ผ์‹œ ๋งคํ•‘์ฝ”๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๊ธฐ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ ์˜ค๋ฅ˜ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. (์ปดํŒŒ์ผ ์‹œ์ ์— ๋งคํ•‘ ์ •๋ณด๊ฐ€ ํƒ€์ž… ์„ธ์ดํ”„ํ•œ ์ง€๋ฅผ ๊ฒ€์ฆ) ๋ฆฌํ”Œ๋ ‰์…˜์ด ์•„๋‹Œ ์ง์ ‘ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜์—ฌ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค. ๋””๋ฒ„๊น…์ด ์‰ฝ๋‹ค. ๊ตฌํ˜„์ฒด๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑ ๋˜๊ธฐ๋•Œ๋ฌธ์— ์ƒ์„ฑ๋œ ๋งคํ•‘ ์ฝ”๋“œ๋ฅผ ๋ˆˆ์œผ๋กœ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค. → ์‹ค์ œ ๊ฑฐ๋Œ€ํ•œ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค๋‹ค๋ณด๋ฉด, ๋‹ค์–‘ํ•œ ๋„๋ฉ”์ธ ์˜์—ญ๋“ค์ด ์žˆ.. 2023. 1. 21.
[TIL] 221209 - JPA : REST-API, API ๋ฌธ์„œํ™” SpringBoot Part4 (5) ํ•™์Šต๋ชฉํ‘œ ์—”ํ‹ฐํ‹ฐ (์ฃผ๋ฌธ๊ด€๋ฆฌ vs ๊ฒŒ์‹œํŒ) API ๊ฐœ๋ฐœ (JUnit, Lombok, OSIV) API ๋ฌธ์„œํ™” (๋ ˆ์ŠคํŠธ ๋‹ฅ์Šค, ์Šค์›จ๊ฑฐ) org.springframework.restdocs spring-restdocs-mockmvc test ์ฃผ๋ฌธ๊ด€๋ฆฌ API ๊ฐœ๋ฐœ ์ฃผ๋ฌธ์ƒ์„ฑ(POST) ์ฃผ๋ฌธ์กฐํšŒ(GET) ๋ฆฌ์ŠคํŠธ(PAGING) ๋‹จ๊ฑด (ONE) Service layer converter entity๋ฅผ Transaction ๋ฌถ์Œ ๋ฐ–์— ๊นŒ์ง€ ๋Œ๊ณ  ๋‚˜๊ฐ€๋Š” ๊ฒƒ์€ ์ข‹์ง€ ์•Š๋‹ค. entity๋Š” RDB์™€ ์–ด๋Š ์ •๋„ ํ†ต์‹ ์„ ํ•˜๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— entity๊ฐ€ ๋ฌถ์Œ ๋ฐ–์œผ๋กœ ๋น ์ ธ๋‚˜๊ฐ€๋ฉด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๊ณณ์—์„œ ์ฟผ๋ฆฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (OSIV) → dto ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ ํ†ต์‹ ํ•œ๋‹ค. Orde.. 2022. 12. 20.
[TIL] 221207 - JPA : ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘, ๊ณ ๊ธ‰ ๋งคํ•‘, ํ”„๋ก์‹œ SpringBoot Part4(3) ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘ ๊ฐ์ฒด ์—ฐ๊ด€๊ด€๊ณ„ VS ํ…Œ์ด๋ธ” ์—ฐ๊ด€๊ด€๊ณ„ ํ…Œ์ด๋ธ”์€ ์™ธ๋ž˜ํ‚ค๋กœ ์—ฐ๊ด€ ๊ด€๊ณ„๋ฅผ ๋งบ๋Š”๋‹ค. ๊ฐ์ฒด๋Š” ์ฐธ์กฐ(์ฃผ์†Œ)๋กœ ์—ฐ๊ด€ ๊ด€๊ณ„๋ฅผ ๋งบ๋Š”๋‹ค. ํ•ต์‹ฌ ํ‚ค์›Œ๋“œ ๋ฐฉํ–ฅ์„ฑ (๋‹จ๋ฐฉํ–ฅ, ์–‘๋ฐฉํ–ฅ) ํ…Œ์ด๋ธ”์—์„œ ๊ด€๊ณ„๋Š” ํ–ฅ์ƒ ์–‘๋ฐฉํ–ฅ์ด๋‹ค. ์™ธ๋ž˜ํ‚ค๋ฅผ ์ด์šฉํ•ด์„œ ์–‘๋ฐฉํ–ฅ์œผ๋กœ ์กฐ์ธ์ด ๊ฐ€๋Šฅ SELECT * FROM orders AS o JOIN member AS m ON o.member._id = m.id ๊ฐ์ฒด์—์„œ์˜ ๋‹จ,์–‘๋ฐฉํ–ฅ ๊ด€๊ณ„ // ํšŒ์› -> ์ฃผ๋ฌธ ๋‹จ๋ฐฉํ–ฅ ๋งคํ•‘ ๊ฒฝ์šฐ. ํšŒ์›์—์„œ ์ฃผ๋ฌธ๋งŒ ์ฐธ์กฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. class Member { private long id; private List orders; // ํšŒ์› -> ์ฃผ๋ฌธ } class Order { private String id; } Member member .. 2022. 12. 14.