[Spring] Filter, Interceptor, AOP ์ •๋ฆฌ

[Spring] Filter, Interceptor, AOP ์ •๋ฆฌ

๊ฐœ์š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋ฉด ํŠน์ • ๋‹จ๊ณ„์—์„œ ์ž‘๋™ํ•˜๊ฑฐ๋‚˜, ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ๋ฐ˜๋ณต๋˜๋Š” ๋กœ์ง์„ ๊ณตํ†ต์œผ๋กœ ๊ด€๋ฆฌํ•ด์•ผ ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด Filter , Interceptor, AOP ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ๊ณตํ†ต์œผ๋กœ ์ ์šฉ๋˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด ์ค‘๋ณต์ด ๋Š˜์–ด๋‚˜๊ณ , ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›Œ์ง‘๋‹ˆ๋‹ค. ์ด ์„ธ ๊ธฐ์ˆ ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์—์„œ ์ค‘๋ณต๋˜๋Š” ๋กœ์ง์„ ์ œ๊ฑฐํ•˜๊ณ , ํŠน์ • ๋‹จ๊ณ„์—์„œ์˜ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ€๋กœ์ฑ„๊ฑฐ๋‚˜ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ์ด ์„ธ ๊ฐ€์ง€ ๊ธฐ์ˆ ์˜ ์ •์˜์™€ ํŠน์ง•, ๊ฐ ์‚ฌ์šฉ ์ผ€์ด์Šค๋ฅผ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์‹คํ–‰ ์‹œ์  ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด Request โ†’ Filter โ†’ Servlet โ†’ Interceptor โ†’ AOP โ†’ Controller ์ˆœ์œผ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ Filter๋Š” Spring๊ณผ ๋ฌด๊ด€ํ•œ Web Cont..

  • textsms
[JPA] JPA (Java Persistence API) ?!

[JPA] JPA (Java Persistence API) ?!

์˜ค๋Š˜์€ JPA (Java Persistence API)๋ž€ ๋ฌด์—‡์ธ์ง€ ํ•œ๋ฒˆ ์•Œ์•„๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋Š˜๋„ ๊ทธ๋Ÿผ ๊ฐ™์ด ๊ณต๋ถ€๋ฅผ ํ•ด๋ณผ๊นŒ์š”? #1. JPA ?! JPA (Java Persistence API)๋Š” ์ž๋ฐ”์—์„œ ORM(Object-Relational Mapping)์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ API์ด๋ฉฐ, ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ„์˜ ๋ถˆ์ผ์น˜๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. JPA์˜ ๊ธฐ๋ณธ ๋ฌธ๋ฒ• ๋ฐ ํ™œ์šฉ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. #2. JPA ๊ธฐ๋ณธ ๋ฌธ๋ฒ• #2. 1. ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค ์ž‘์„ฑ JPA๋Š” ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค. ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค. @Entity @Table(name = "table_name") public class EntityName {..

  • textsms
[JUnit] JUnit์„ ์ด์šฉํ•œ TDD(Test-Driven Development)

[JUnit] JUnit์„ ์ด์šฉํ•œ TDD(Test-Driven Development)

์˜ค๋Š˜์€ JUnit์„ ์ด์šฉํ•œ TDD(Test-Driven Development) ๊ธฐ๋ณธ ๋ฌธ๋ฒ•๊ณผ ํ™œ์šฉ ์˜ˆ์ œ์— ๋Œ€ํ•ด์„œ ํฌ์ŠคํŒ…ํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ €๋„ ์ด๋ฒˆ์— ๊ณต๋ถ€ํ•˜๋Š” ๋งˆ์Œ์œผ๋กœ ์ž๋ฃŒ๋ฅผ ์ฐพ์•„์„œ ์ •๋ฆฌ๋ฅผ ํ•ด๋ดค์Šต๋‹ˆ๋‹ค. ์ž˜๋ชป๋œ ์ ์€ ๊ฐ€๊ฐ ์—†์ด ํ”ผ๋“œ๋ฐฑ ์ฃผ์‹œ๋ฉด ํฐ ๋„์›€์ด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜๋„ ๊ณต๋ถ€๋ฅผ ์‹œ์ž‘ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜ Junit ?! JUnit์€ ์ž๋ฐ”์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. TDD๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ ํ›„, ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. JUnit์„ ์ด์šฉํ•œ TDD๋ฅผ ์ ์šฉํ•˜๋ฉด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ ๊ฐœ๋ฐœํ•˜๋Š” ๊ณผ์ •์—์„œ ์•ˆ์ •์ ์ด๊ณ  ๊ฒฌ๊ณ ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค ์ƒ์„ฑ JUnit์„ ์ด์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” @Test ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉ..

  • textsms
[Java 8] Stream API ๊ธฐ๋ณธ ๋ฌธ๋ฒ• ๋ฐ ํ™œ์šฉ ์˜ˆ์ œ

[Java 8] Stream API ๊ธฐ๋ณธ ๋ฌธ๋ฒ• ๋ฐ ํ™œ์šฉ ์˜ˆ์ œ

Java 8์˜ Stream API๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐฐ์—ด, ๋ฆฌ์ŠคํŠธ, ๋งต ๋“ฑ์˜ ์ปฌ๋ ‰์…˜์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜๊ณ  ํ•„ํ„ฐ๋ง, ๋งคํ•‘, ์ง‘๊ณ„ ๋“ฑ ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” Stream API์˜ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•๊ณผ ํ™œ์šฉ ์˜ˆ์ œ๋ฅผ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. #1. Stream ์ƒ์„ฑ Stream์€ Collection, List, Set, Array ๋“ฑ์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Stream์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. #1. 1. Collection์œผ๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ List list = Arrays.asList("a", "b", "c"); Stream stream = list.stream(); #1. 2. Array๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ Str..

  • textsms
[Spring] ์Šค์›จ๊ฑฐ(Swagger) ์„ค์ •

[Spring] ์Šค์›จ๊ฑฐ(Swagger) ์„ค์ •

๋งค๋ฒˆ Thymeleaf, Jsp, Pebble, Freemarker ๋“ฑ๋“ฑ ํ…œํ”Œ๋ฆฟ ์—”์ง„๋งŒ ์‚ฌ์šฉํ•˜๋‹ค ๋ณด๋‹ˆ ํผ๋ธ”๋ฆฌ์‹ฑ ์ž‘์—…๋ณธ์„ ๋ฐ›์•„์„œ ์‚ฌ์šฉ์ž ํ™”๋ฉด์„ ์™„์„ฑํ•˜๋Š” ์ž‘์—…์„ ์ฃผ๋กœ ํ•˜๊ฒŒ ๋์—ˆ๋Š”๋ฐ, ์ด๋ฒˆ์—๋Š” ์ƒˆ๋กญ๊ฒŒ JPA์™€ React ๋˜๋Š” Vue๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Back / Front๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•˜๊ณ  Back ์ชฝ์—์„œ๋Š” Front ์ชฝ์œผ๋กœ API ๊ทœ๊ฒฉ์„œ๋งŒ ์ „๋‹ฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ, ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ๋กœ ์ง„ํ–‰ํ•˜๋‹ค ๋ณด๋‹ˆ๊นŒ ์‹œ๊ฐ„์  ์—ฌ์œ ๊ฐ€ ๋งŽ์ง€๊ฐ€ ์•Š์•„์„œ API ์—ฐ๋™๊ทœ๊ฒฉ์„œ๊นŒ์ง€ ์ž‘์„ฑํ•˜๊ธฐ์—๋Š” ์–ด๋ ค์›€์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. (ํ•‘๊ณ„์ธ๊ฑฐ ๋‹ค๋“ค ์•„์‹œ์ฃ ?) ํ•ด์„œ.. ์ด๋ฒˆ ๊ธฐํšŒ์— ์Šค์›จ๊ฑฐ(Swagger) API๋ฅผ ํ™œ์šฉํ•ด์„œ API ์—ฐ๋™๊ทœ๊ฒฉ์„œ๋Š” Swagger์—๊ฒŒ ๋งก๊ฒจ๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. #1. Swagger ์„ค์ • 1. gradle ์„ค์ • // swagger implementa..

  • textsms
[Error] JPA Cannot resolve table

[Error] JPA Cannot resolve table

IntelliJ๋กœ springboot, jpa, querydsl ์ž‘์—…์„ ํ•˜๋‹ค ๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์—๋Ÿฌ๋ฅผ ๋งˆ์ฃผํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ๋Š” IntelliJ๊ฐ€ ์ •๋ง ์„ธ๋ฐ€ํ•˜๊ฒŒ ๊ฒ€์‚ฌ๋ฅผ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ์ž…๋‹ˆ๋‹ค. ์ด ์—๋Ÿฌ๋Š” ์žˆ์–ด๋„ ์‚ฌ์‹ค ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๋Š”๋ฐ ๋ฌธ์ œ ๋  ๊ฒƒ์ด ์—†์ง€๋งŒ, ๊ฐœ๋ฐœ์ž๋ผ๋ฉด.. ๋งค์šฐ ๋ถˆํŽธํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. (์ €๋งŒ.. ๊ทธ๋Ÿฐ๊ฐ€์š”..? ๐Ÿ˜‚๐Ÿ˜‚) ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ €๋Š” ์ˆจ๊น€ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. #1. Settings Settings > Editor > Inspections > Unresolved database references in annotations ์ฒดํฌ ํ•ด์ œ ์ ์šฉ ํ›„ ๋‹ค์‹œ ํ™•์ธ์„ ํ•ด๋ณด๋ฉด ์ •์ƒ์ ์œผ๋กœ ์—๋Ÿฌ๊ฐ€ ์ œ๊ฑฐ(์ˆจ๊น€)๋œ ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

  • textsms
[Spring] @Controller, @RestController ์ฐจ์ด์ 

[Spring] @Controller, @RestController ์ฐจ์ด์ 

Spring์˜ ์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜ MVC ํ”„๋ ˆ์ž„ ์›Œํฌ๋Š” RESTful ์›น ์„œ๋น„์Šค ์ƒ์„ฑ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹จ์ˆœํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ „ํ†ต์ ์ธ Spring MVC ์ปจํŠธ๋กค๋Ÿฌ์™€ RESTful ์›น ์„œ๋น„์Šค ์ปจํŠธ๋กค๋Ÿฌ์˜ ์ฃผ์š” ์ฐจ์ด์ ์€ HTTP Response Body๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด MVC ์ปจํŠธ๋กค๋Ÿฌ๋Š” View ๊ธฐ์ˆ ์— ์˜์กดํ•˜์ง€๋งŒ RESTful ์›น ์„œ๋น„์Šค ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋‹จ์ˆœํžˆ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๊ฐ์ฒด ๋ฐ์ดํ„ฐ๋Š” JSON / XML๋กœ HTTP ์‘๋‹ต์— ์ง์ ‘ ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค. @Controller(Spring MVC Controller) 1. Controller - View ์•„๋ž˜์™€ ๊ฐ™์€ ๊ณผ์ •์„ ํ†ตํ•ด Spring MVC Container๋Š” Client์˜ ์š”์ฒญ์œผ๋กœ๋ถ€ํ„ฐ View๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. Client๋Š” URI ํ˜•์‹์œผ๋กœ ์›น ์„œ๋น„์Šค์— ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. Ma..

  • textsms