BackEnd๐Ÿ/Spring๐ŸŽƒ

Spring Security์™€ JPA Auditing์„ ํ™œ์šฉํ•œ ์ž๋™ ๋“ฑ๋ก์ž ๋ฐ ์ˆ˜์ •์ž ์ฒ˜๋ฆฌ

JPA Auditing์ด๋ž€? JPA Auditing์€ ์—”ํ‹ฐํ‹ฐ์˜ ์ƒ์„ฑ ๋ฐ ์ˆ˜์ •์— ๋Œ€ํ•œ ๊ฐ์‚ฌ ์ •๋ณด(๋“ฑ๋ก ์‹œ๊ฐ„, ์ˆ˜์ • ์‹œ๊ฐ„, ๋“ฑ๋ก์ž, ์ˆ˜์ •์ž)๋ฅผ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋งค๋ฒˆ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ๋•Œ ์‹œ๊ฐ„์„ ์ˆ˜๋™์œผ๋กœ ์„ค์ •ํ•˜๊ฑฐ๋‚˜, ์ˆ˜์ •์ž๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€ ์—†์ด ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆœ์ˆ˜ JPA ์‚ฌ์šฉ์‹œ Auditing ์„ค์ • ์ˆœ์ˆ˜ JPA ํ™˜๊ฒฝ์—์„œ๋Š” @PrePersist์™€ @PreUpdate ์ฝœ๋ฐฑ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์˜์†ํ™”๋˜๊ธฐ ์ „๊ณผ ์—…๋ฐ์ดํŠธ ๋˜๊ธฐ ์ „์— ์ž๋™์œผ๋กœ ๋‚ ์งœ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. @MappedSuperclass @Getter public class BaseEntity { @Column(updatable = false) private LocalDateTime..

2024. 3. 11. 20:15
BackEnd๐Ÿ/Spring๐ŸŽƒ

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ดํ•ด

๋ณธ ์‹œ๋ฆฌ์ฆˆ๋Š” ์ธํ”„๋Ÿฐ ํ•™์Šต ์‚ฌ์ดํŠธ์˜ ๊น€์˜ํ•œ ๊ฐ•์‚ฌ๋‹˜์˜ java spring mvc - ๋ฐฑ์—”๋“œ ์›น ๊ฐœ๋ฐœ ํ•ต์‹ฌ ๊ธฐ์ˆ  ํŽธ์„ ํ•™์Šตํ•œ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์„œ๋‘ spring์˜ ํ•ต์‹ฌ์›๋ฆฌ๋ฅผ ํ•™์Šตํ•˜๊ณ  spring framework๋ฅผ ํ†ตํ•ด web์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์‹ถ๋‹ค๋Š” ์ƒ๊ฐ์„ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  ํ•™์Šต์ด ๋งˆ์ฐฌ๊ฐ€์ง€๊ฒ ์ง€๋งŒ ๊ฐœ๋…์„ ๋ฐฐ์› ๋‹ค๊ณ  ํ•ด์„œ ๊ทธ๊ฒƒ์„ ๋ฐ”๋กœ ์จ๋จน์„ ์ˆ˜ ์žˆ๊ธฐ๋ž€ ๋จธ๋ฆฌ๊ฐ€ ๋น„์ƒํ•œ ์‚ฌ๋žŒ์ด ์•„๋‹Œ ์ด์ƒ ํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒƒ์ด ์‚ฌ์‹ค... ๊ฐœ๋…์„ ํ•™์Šตํ–ˆ์œผ๋‹ˆ ์‹ค์ƒํ™œ์— ์ ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์‘์šฉ(์‹ฌํ™”)์„ ํ•™์Šตํ•ด๋ณด์ž. spring ์›น ๊ฐœ๋ฐœ์— ์žˆ์–ด์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋ญ˜๊นŒ? ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ๊ฒ ์ง€๋งŒ ๋ฌด์—‡๋ณด๋‹ค mvc ํŒจํ„ด์„ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๊ณ  ์–ด๋–ค ์ƒํƒœ๊ณ„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š”์ง€๋ฅผ ์•„๋Š” ๊ฒƒ์ด ๋จผ์ € ์„ ํ–‰๋˜์–ด์•ผ ํ• ..

2024. 1. 13. 23:51
BackEnd๐Ÿ/Spring๐ŸŽƒ

Spring Security์—์„œ ๋กœ๊ทธ์ธ ์‹คํŒจ ์ฒ˜๋ฆฌ ๊ตฌํ˜„ (์‚ฌ์šฉ์ž ์ •์˜ ๋กœ๊ทธ์ธ ์‹คํŒจ ํ•ธ๋“ค๋Ÿฌ ๊ตฌํ˜„)

์•ˆ๋…•ํ•˜์„ธ์š”! ์˜ค๋Š˜์€ Spring Security์—์„œ ๋กœ๊ทธ์ธ ์‹คํŒจ ์ฒ˜๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธ ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ์‹คํŒจ ์ƒํ™ฉ์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ช…ํ™•ํ•˜๊ฒŒ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์€ ์ค‘์š”ํ•œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด Spring Security์˜ AuthenticationFailureHandler ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ •์˜ ๋กœ๊ทธ์ธ ์‹คํŒจ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 1. ์‚ฌ์šฉ์ž ์ •์˜ ๋กœ๊ทธ์ธ ์‹คํŒจ ํ•ธ๋“ค๋Ÿฌ ๊ตฌํ˜„ ๋จผ์ €, AuthenticationFailureHandler ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” CustomAuthenticationFailureHandler ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค: public class CustomAuthenticationFailureHandler implements ..

2024. 1. 12. 00:52
BackEnd๐Ÿ/Spring๐ŸŽƒ

Spring Data JPA - ๋ฒŒํฌ์„ฑ ์ˆ˜์ • ์ฟผ๋ฆฌ

Spring Data JPA ๊ฒŒ์‹œ๊ธ€์€ ๋Œ€๋ถ€๋ถ„ ์ธํ”„๋Ÿฐ์˜ ๊น€์˜ํ•œ๋‹˜์˜ ๊ฐ•์˜์ธ '์‹ค์ „! ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA' ๊ธฐ๋ฐ˜์œผ๋กœ ๋‚ด์šฉ์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฒŒํฌ์„ฑ ์ˆ˜์ • ์ฟผ๋ฆฌ JPA๋Š” ์—”ํ‹ฐํ‹ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ ๋ณ€๊ฒฝํ•  ๊ฒฝ์šฐ ๋ณ€๊ฒฝ ๊ฐ์ง€ ๊ธฐ๋Šฅ์ด ์ž‘๋™ํ•œ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ๋Š” ํ•œ ๊ฑด ์”ฉ ์ง€์›๋˜๋Š” ๊ฑฐ๊ณ , ๋ชจ๋“  ๋ฐ์ดํ„ฐ์— ์ผ๊ด„์ ์ธ ์—…๋ฐ์ดํŠธ๋ฅผ ๋‚ ๋ ค์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ(ex ๋ชจ๋“  ์ง์›์˜ ์—ฐ๋ด‰ 10% ์ธ์ƒ)์— ๋ฒŒํฌ์„ฑ ์ˆ˜์ • ์ฟผ๋ฆฌ๋ผ๊ณ  ํ•œ๋‹ค. ์ˆœ์ˆ˜ JPA ์˜ˆ์ œ 20์‚ด์ด๊ฑฐ๋‚˜, 20์‚ด ์ด์ƒ์ธ ํšŒ์›์˜ ๋‚˜์ด๋ฅผ +1 MemberJpaRepository.class public int bulkAgePlus(int age) { return em.createQuery("update Member m set m.age = m.age + 1 where m.age >= :age") .setPa..

2023. 11. 14. 18:55
BackEnd๐Ÿ/Spring๐ŸŽƒ

[springboot 3.x, querydsl] QClass ์ƒ์„ฑ ๋ฐ ๊ฒฝ๋กœ ์„ค์ •

๊น€์˜ํ•œ๋‹˜ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ๋‚˜์„œ ๊ฐ•์˜์— ์žˆ๋Š” Querydsl ์„ธํŒ…๊ณผ ํ˜„์žฌ ๋‚ด๊ฐ€ ์“ฐ๊ณ  ์žˆ๋Š” ์Šคํ”„๋ง 3.x ๋ฒ„์ „์˜ ์„ธํŒ…์ด ์กฐ๊ธˆ ๋‹ค๋ฅด๋‹จ๊ฑธ ์•Œ์•˜๋‹ค. ๊ทธ๋ž˜์„œ ํ•ด๋‹น ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๋Š”๊ฒƒ๊ณผ ๋™์‹œ์— ๊ฐ๊ฐ์˜ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด์„œ ์กฐ๊ธˆ ์•Œ์•„๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ง€๋„๋ก ํ•˜๊ฒ ๋‹ค. QueryDSL JPA์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฐ์ฒด์ง€ํ–ฅ์ฟผ๋ฆฌ์ธ JPQL(Java Persistence Query Language)์„ ํ†ตํ•ด ๋™์  ์ฟผ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๊ต‰์žฅํžˆ ๋‚œ์žกํ•ด์ง„๋‹ค๋Š” ๊ฒƒ์„ ๋Š๋‚„ ์ˆ˜ ์žˆ๋‹ค. JPQL์€ ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋ฌธ์ž์—ด์„ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ด์–ด๋ถ™์ด๋Š” ํ˜•์‹์œผ๋กœ ๊ตฌ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ๋ฌธ์ž์—ด์ด๊ธฐ์— ์˜คํƒ€๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ ์—๋Ÿฌ๋ฅผ ์žก์•„์ฃผ์ง€ ๋ชปํ•œ๋‹ค.(๋‹ค๋งŒ, NamedQuery๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ€๋Šฅํ•˜๋‹ค) ๋˜ํ•œ ๋™์ ์ฟผ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ, ์ค‘๊ฐ„์ค‘๊ฐ„ if๋ฌธ์— ์˜ํ•ด ๋ฌธ..

2023. 11. 4. 15:47
โ—€ PREV [1] [2] NEXT โ–ถ