๐Ÿ๏ธ Spring

๐Ÿฅบ ์„œ๋ก  ๋„๋ฉ”์ธ ๊ณ„์ธต์˜ Repository์™€ ์˜์†์„ฑ ๊ณ„์ธต์˜ Repository๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์‚ฌ์šฉํ•ด๋ณด๋ ค ์‹œ๋„ํ–ˆ๋˜ ๊ณผ์ •์—์„œ, findBy*** ์‹์˜ ์ด๋ฆ„์˜ ๋ฉ”์„œ๋“œ์™€, @Query๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง์ ‘ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋“ฑ์˜ ๋ฉ”์„œ๋“œ๋Š” ์–ด๋–ค ์‹์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜๊ณ , ์–ด๋ ค์šด ๋‚ด์šฉ์€ ์•„๋‹ˆ๊ธฐ๋„ ํ•˜๊ณ  ์ƒ๊ฐํ–ˆ๋˜ ๋ฐฉ์‹ ๊ทธ๋ž˜๋„ ์ ์šฉ๋˜๊ธด ํ•˜์ง€๋งŒ, ๊ทธ๋ž˜๋„ ํ˜น์‹œ ๋„์›€ ๋˜์‹œ๋Š” ๋ถ„์ด ์žˆ์„๊นŒ๋ด ์ž‘์„ฑํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿง ๋„๋ฉ”์ธ ๊ณ„์ธต์˜ Repository์™€, ์˜์†์„ฑ ๊ณ„์ธต์˜ Repository ๋ถ„๋ฆฌํ•˜๊ธฐ ์ €๋Š” ์œ„ ์‚ฌ์ง„์ฒ˜๋Ÿผ ๋„๋ฉ”์ธ ๊ณ„์ธต๊ณผ ์ธํ”„๋ผ์ŠคํŠธ๋Ÿญ์ณ ๊ณ„์ธต์„ ๋‚˜๋ˆ„์—ˆ๊ณ , JpaArticleRepository๋Š” ArticleRepository๋ฅผ ์ƒ์†๋ฐ›์Šต๋‹ˆ๋‹ค. ArticleRepository๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์ƒ์†๋ฐ›์€ Jp..
@ConfigurationProperties @ConfigurationProperties๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ application.yml๋“ฑ๊ณผ ๊ฐ™์€ ์„ค์ •์ •๋ณด์— ์ž‘์„ฑํ•œ ์„ค์ • ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. application.yml myproperty: name: shin ์„ค์ • ๊ฐ’์„ ๋ณด๊ด€ํ•  ํด๋ž˜์Šค @ConstructorBinding @ConfigurationProperties("myproperty") data class ApplicationProperties( val name: String, ) { } @ConstructorBinding์„ ์‚ฌ์šฉํ•˜๋ฉด ์ƒ์„ฑ์ž ๋ฐฉ์‹์œผ๋กœ ๊ฐ’์„ ์„ธํŒ…ํ•  ์ˆ˜ ์žˆ์–ด, ๋ถˆ๋ณ€ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด setter๋ฅผ ํ†ตํ•ด ๊ฐ’์„ ๋ฐ”์ธ๋”ฉ ์‹œ..
์–ด๋“œ๋ฐ”์ด์Šค์˜ ์ข…๋ฅ˜ ๋Œ€ํ‘œ์ ์ธ ์–ด๋“œ๋ฐ”์ด์Šค๋กœ๋Š” @Around๊ฐ€ ์‚ฌ์šฉ๋˜์ง€๋งŒ, ์ด์™ธ์—๋„ ๋‹ค๋ฅธ ์–ด๋“œ๋ฐ”์ด์Šค๋“ค์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. @Around @Before @AfterReturning @AfterThrowing @After @Around ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „ํ›„์— ์ˆ˜ํ–‰๋˜๋Š” ์–ด๋“œ๋ฐ”์ด์Šค๋กœ, ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์กฐ์ธ ํฌ์ธํŠธ์˜ ์‹คํ–‰ ์—ฌ๋ถ€์™€, ์‹คํ–‰ ํšŸ์ˆ˜, ๋ฐ˜ํ™˜ ๊ฐ’์˜ ๋ณ€ํ™˜๊ณผ ์˜ˆ์™ธ ๋ณ€ํ™˜ ๋“ฑ์˜ ์—ฌ๋Ÿฌ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. @Before ์กฐ์ธ ํฌ์ธํŠธ ์‹คํ–‰ ์ด์ „์— ์‹คํ–‰๋˜๋Š” ์–ด๋“œ๋ฐ”์ด์Šค์ž…๋‹ˆ๋‹ค. @AfterReturning ์กฐ์ธ ํฌ์ธํŠธ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์™„๋ฃŒ๋œ ํ›„ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ @Around์™€๋Š” ๋‹ฌ๋ฆฌ ๊ฐ’์„ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. (์กฐ์ž‘์€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.) @AfterThrowing ์กฐ์ธ ํฌ์ธํŠธ๊ฐ€ ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋Š” ๊ฒฝ์šฐ์— ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. @After ..
๋งค๊ฐœ๋ณ€์ˆ˜ ์ „๋‹ฌ this, target, args, @target, @within, @annotation, @args ์œ„์˜ ํฌ์ธํŠธ์ปท ์ง€์‹œ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์–ด๋“œ๋ฐ”์ด์Šค์— ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. @Before("allMember() && args(argName, ..)") fun log(argName: String) { println("[log] argName = {${argName}}") } ํฌ์ธํŠธ์ปท์—์„œ์˜ ์ด๋ฆ„๊ณผ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์„ ๋งž์ถ”์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์œ„์˜ ์˜ˆ์‹œ์—์„œ๋Š” argName์œผ๋กœ ๋งž์ถ”์—ˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€๋กœ ํƒ€์ž…์ด ๋ฉ”์„œ๋“œ์— ์ง€์ •๋œ ํƒ€์ž…์œผ๋กœ ์ง€์ •๋ฉ๋‹ˆ๋‹ค. ์ฆ‰ args(argName, ..)๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. args(String, ..) ์˜ˆ์ œ ์ฝ”๋“œ @Target(..
ํฌ์ธํŠธ์ปท ์ง€์‹œ์ž (Pointcut Designators) ์Šคํ”„๋ง์—์„œ๋Š” ํฌ์ธํŠธ์ปท ํ‘œํ˜„์‹์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ AspectJ ํฌ์ธํŠธ์ปท ์ง€์‹œ์ž(PCD)๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. execution: ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์กฐ์ธ ํฌ์ธํŠธ๋ฅผ ๋งค์นญํ•ฉ๋‹ˆ๋‹ค. ์Šคํ”„๋ง AOP์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ์ฐธ๊ณ  - (https://ttl-blog.tistory.com/870) within: ํŠน์ •ํ•œ ํƒ€์ž… ๋‚ด์˜ ์กฐ์ธ ํฌ์ธํŠธ๋ฅผ ๋งค์นญํ•ฉ๋‹ˆ๋‹ค. ๋ถ€๋ชจ ํƒ€์ž…์„ ์ง€์ •ํ•˜๋ฉด ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ์ฐธ๊ณ  - (https://ttl-blog.tistory.com/871) this: ์Šคํ”„๋ง ๋นˆ ๊ฐ์ฒด(์Šคํ”„๋ง AOP ํ”„๋ก์‹œ)๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ์กฐ์ธ ํฌ์ธํŠธ๋ฅผ ๋งค์นญํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ์ฐธ๊ณ  - (https://ttl-blog.tistory.com/878) target: tar..
ํฌ์ธํŠธ์ปท ์ง€์‹œ์ž (Pointcut Designators) ์Šคํ”„๋ง์—์„œ๋Š” ํฌ์ธํŠธ์ปท ํ‘œํ˜„์‹์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ AspectJ ํฌ์ธํŠธ์ปท ์ง€์‹œ์ž(PCD)๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. execution: ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์กฐ์ธ ํฌ์ธํŠธ๋ฅผ ๋งค์นญํ•ฉ๋‹ˆ๋‹ค. ์Šคํ”„๋ง AOP์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ์ฐธ๊ณ  - (https://ttl-blog.tistory.com/870) within: ํŠน์ •ํ•œ ํƒ€์ž… ๋‚ด์˜ ์กฐ์ธ ํฌ์ธํŠธ๋ฅผ ๋งค์นญํ•ฉ๋‹ˆ๋‹ค. ๋ถ€๋ชจ ํƒ€์ž…์„ ์ง€์ •ํ•˜๋ฉด ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ์ฐธ๊ณ  - (https://ttl-blog.tistory.com/871) this: ์Šคํ”„๋ง ๋นˆ ๊ฐ์ฒด(์Šคํ”„๋ง AOP ํ”„๋ก์‹œ)๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ์กฐ์ธ ํฌ์ธํŠธ๋ฅผ ๋งค์นญํ•ฉ๋‹ˆ๋‹ค. target: target ๊ฐ์ฒด(์Šคํ”„๋ง AOP ํ”„๋ก์‹œ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์‹ค์ œ ๋Œ€์ƒ)๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ์กฐ์ธ ..
ํฌ์ธํŠธ์ปท ์ง€์‹œ์ž (Pointcut Designators) ์Šคํ”„๋ง์—์„œ๋Š” ํฌ์ธํŠธ์ปท ํ‘œํ˜„์‹์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ AspectJ ํฌ์ธํŠธ์ปท ์ง€์‹œ์ž(PCD)๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. execution: ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์กฐ์ธ ํฌ์ธํŠธ๋ฅผ ๋งค์นญํ•ฉ๋‹ˆ๋‹ค. ์Šคํ”„๋ง AOP์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ์ฐธ๊ณ  - (https://ttl-blog.tistory.com/870) within: ํŠน์ •ํ•œ ํƒ€์ž… ๋‚ด์˜ ์กฐ์ธ ํฌ์ธํŠธ๋ฅผ ๋งค์นญํ•ฉ๋‹ˆ๋‹ค. ๋ถ€๋ชจ ํƒ€์ž…์„ ์ง€์ •ํ•˜๋ฉด ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ์ฐธ๊ณ  - (https://ttl-blog.tistory.com/871) this: ์Šคํ”„๋ง ๋นˆ ๊ฐ์ฒด(์Šคํ”„๋ง AOP ํ”„๋ก์‹œ)๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ์กฐ์ธ ํฌ์ธํŠธ๋ฅผ ๋งค์นญํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ์ฐธ๊ณ  - (https://ttl-blog.tistory.com/878) target: tar..
ํฌ์ธํŠธ์ปท ์ง€์‹œ์ž (Pointcut Designators) ์Šคํ”„๋ง์—์„œ๋Š” ํฌ์ธํŠธ์ปท ํ‘œํ˜„์‹์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ AspectJ ํฌ์ธํŠธ์ปท ์ง€์‹œ์ž(PCD)๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. execution: ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์กฐ์ธ ํฌ์ธํŠธ๋ฅผ ๋งค์นญํ•ฉ๋‹ˆ๋‹ค. ์Šคํ”„๋ง AOP์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ์ฐธ๊ณ  - (https://ttl-blog.tistory.com/870) within: ํŠน์ •ํ•œ ํƒ€์ž… ๋‚ด์˜ ์กฐ์ธ ํฌ์ธํŠธ๋ฅผ ๋งค์นญํ•ฉ๋‹ˆ๋‹ค. ๋ถ€๋ชจ ํƒ€์ž…์„ ์ง€์ •ํ•˜๋ฉด ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ์ฐธ๊ณ  - (https://ttl-blog.tistory.com/871) this: ์Šคํ”„๋ง ๋นˆ ๊ฐ์ฒด(์Šคํ”„๋ง AOP ํ”„๋ก์‹œ)๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ์กฐ์ธ ํฌ์ธํŠธ๋ฅผ ๋งค์นญํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ์ฐธ๊ณ  - (https://ttl-blog.tistory.com/878) target: tar..
๋ง ๋ž‘
'๐Ÿ๏ธ Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (4 Page)