[์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA] 5. ํ™•์žฅ ๊ธฐ๋Šฅ

2022. 9. 29. 13:20ใ†์ธํ”„๋Ÿฐ/์‹ค์ „! ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA

728x90

 

1๏ธโƒฃ ์‚ฌ์šฉ์ž ์ •์˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ตฌํ˜„ 

์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA  ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์ •์˜ํ•˜๊ณ  ๊ตฌํ˜„์ฒด๋Š” ์Šคํ”„๋ง์ด ์ž๋™ ์ƒ์„ฑํ•œ๋‹ค. 

๋”ฐ๋ผ์„œ ์ด์ œ ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๊ธฐ๋Šฅ๋“ค์ด ๋„ˆ๋ฌด ๋งŽ์•„ ๋‹ค ๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ํž˜๋“ค๋‹ค. 

 

๋‹ค์–‘ํ•œ ์ด์œ ๋กœ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด..??

- JPA ์ง์ ‘ ์‚ฌ์šฉ(EntityManager)
- ์Šคํ”„๋ง JDBC Template ์‚ฌ์šฉ 
- MyBatis ์‚ฌ์šฉ 
- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜ ์ง์ ‘ ์‚ฌ์šฉ ๋“ฑ๋“ฑ..
- Querydsl ์‚ฌ์šฉ 

 

์‚ฌ์šฉ์ž ์ •์˜ ์ธํ„ฐํŽ˜์ด์Šค

MemberRepositoryCustom

 

์‚ฌ์šฉ์ž ์ •์˜ ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ ํด๋ž˜์Šค 

MemberRepositoryImpl

 

์‚ฌ์šฉ์ž ์ •์˜ ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์†

MemberRepository

๊ทธ๋ฆฌ๊ณ  ์ด์ œ MemberRepository์—์„œ ์‚ฌ์šฉ์ž ์ •์˜ ์ธํ„ฐํŽ˜์ด์Šค์ธ MemberRepositoryCustom์„ ์ƒ์† ๋ฐ›์•„์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. 

 

 

์‚ฌ์šฉ์ž ์ •์˜ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ฝ”๋“œ

MemberRepositoryTest

 

 

โ— ์‚ฌ์šฉ์ž ์ •์˜ ๊ตฌํ˜„ ํด๋ž˜์Šค 

๊ทœ์น™: ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฆ„ + Impl

-> ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๊ฐ€ ์ธ์‹ํ•ด์„œ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋ก 

 

๐Ÿ˜Ž ์‚ฌ์šฉ์ž ์ •์˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ตฌํ˜„ ์ตœ์‹  ๋ฐฉ์‹ 

์Šคํ”„๋ง ๋ฐ์ดํ„ฐ 2.X ๋ถ€ํ„ฐ๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ๊ตฌํ˜„ ํด๋ž˜์Šค์— ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฆ„ + Impl ์„ ์ ์šฉํ•˜๋Š” ๋Œ€์‹ ์— 

์‚ฌ์šฉ์ž ์ •์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ช… + Impl๋ฐฉ์‹๋„ ์ง€์›ํ•œ๋‹ค. 

์˜ˆ๋ฅผ ๋“ค์–ด์„œ MemberRepositoryImpl ๋Œ€์‹ ์— MemberRepositoryCustomImpl ๋กœ ๊ฐ™์ด ๊ตฌํ˜„ํ•ด๋„ ๋œ๋‹ค. 

 

-> ๊ธฐ์กด ๋ฐฉ์‹๋ณด๋‹ค ์ด ๋ฐฉ์‹์ด ์‚ฌ์šฉ์ž ์ •์˜ ์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฆ„๊ณผ ๊ตฌํ˜„ ํด๋ž˜์Šค ์ด๋ฆ„์ด ๋น„์Šทํ•˜๋ฏ€๋กœ ๋” ์ง๊ด€์ ์ธ ํŽธ์ด๋‹ค.

์ถ”๊ฐ€๋กœ ์—ฌ๋Ÿฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กญ๊ฒŒ ๋ณ€๊ฒฝ๋œ ์‚ฌ์šฉ์ž ์ •์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ช… + Impl ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ๊ฒƒ์„ ๋” ๊ถŒ์žฅํ•œ๋‹ค. 

 

 

โญ ์ฐธ๊ณ 

์‹ค๋ฌด์—์„œ๋Š” ์ฃผ๋กœ QueryDSL์ด๋‚˜ SpringJdbcTemplate์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋•Œ ์‚ฌ์šฉ์ž ์ •์˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ธฐ๋Šฅ์„ ์ž์ฃผ ์‚ฌ์šฉํ•œ๋‹ค. 

 

 

โ— ์ฐธ๊ณ : ํ•ญ์ƒ ์‚ฌ์šฉ์ž ์ •์˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. 

๊ทธ๋ƒฅ ์ž„์˜์˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด๋„ ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด MemberQueryRepository๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์•„๋‹Œ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•ด์„œ ๊ทธ๋ƒฅ ์ง์ ‘ ์‚ฌ์šฉํ•ด๋„ ๋œ๋‹ค. ๋ฌผ๋ก  ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA์™€๋Š” ์•„๋ฌด๋Ÿฐ ๊ด€๊ณ„ ์—†์ด ๋ณ„๋„๋กœ ๋™์ž‘ํ•œ๋‹ค. 

 

 

 

2๏ธโƒฃ Auditing

 

โ“ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ณ€๊ฒฝํ•  ๋•Œ ๋ณ€๊ฒฝํ•œ ์‚ฌ๋žŒ๊ณผ ์‹œ๊ฐ„์„ ์ถ”์ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด? 

- ๋“ฑ๋ก์ผ 

- ์ˆ˜์ •์ผ 

- ๋“ฑ๋ก์ž

- ์ˆ˜์ •์ž 

 

 

์ˆœ์ˆ˜ JPA ์‚ฌ์šฉ 

: ๋“ฑ๋ก์ผ, ์ˆ˜์ •์ผ ์ ์šฉ 

JpaBaseEntity

๋“ฑ๋ก์ผ์ด๋‚˜ ์ˆ˜์ •์ผ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ๋ณดํ†ต ๋Œ€๋ถ€๋ถ„ ํ…Œ์ด๋ธ”์— ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์ด ์œ ์ง€๋ณด์ˆ˜์„ฑ์—๋„ ํ›จ์”ฌ ์ข‹๋‹ค.

์™œ๋ƒํ•˜๋ฉด ๋ˆ„๊ฐ€ ์–ธ์ œ ๋ณ€๊ฒฝํ–ˆ๊ฑฐ๋‚˜ ๋“ฑ๋กํ–ˆ๋Š”์ง€๋ฅผ ์•Œ์•„์•ผ์ง€ ๋ฌธ์ œ ํŒŒ์•…๋„ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

 

๊ทธ๋Ÿฌ๋ฏ€๋กœ ๊ณตํ†ต ๋ฐ์ดํ„ฐ๋ฅผ ๋”ฐ๋กœ ํด๋ž˜์Šค๋กœ ์ƒ์„ฑํ•ด์„œ @MappedSuperclass๋ฅผ ํ•˜๊ณ  ์ด ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์œผ๋ฉด ํ•ด๋‹น ์—”ํ‹ฐํ‹ฐ์— ์ด ๋ฐ์ดํ„ฐ๋“ค์„ ํฌํ•จํ•ด์„œ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•œ๋‹ค. 

์ฆ‰, BaseEntity๋Š” ํ…Œ์ด๋ธ”์ด ์•„๋‹ˆ๋ผ ๊ทธ๋ƒฅ ๊ณตํ†ต ๋ฐ์ดํ„ฐ์ด๋‹ค. 

 

 

Member

-> Member ์—”ํ‹ฐํ‹ฐ์— BaseEntity๋ฅผ ์ถ”๊ฐ€ํ•ด์คฌ๋‹ค. 

 

MemberTest

JPA ์ฃผ์š” ์ด๋ฒคํŠธ ์–ด๋…ธํ…Œ์ด์…˜ 

@PrePersist, @PostPersist 

@PreUpdate, @PostUpdate 

 

 

์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA ์‚ฌ์šฉ

-์„ค์ •

์Šคํ”„๋ง ๋ถ€ํŠธ ์„ค์ • ํด๋ž˜์Šค์— @EnableJpaAuditng์„ ์„ค์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค. 

-> ๊ทธ๋ฆฌ๊ณ  ์—”ํ‹ฐํ‹ฐ์— @EntityListeners(AuditingEntityListener.class)๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค. 

 

 

์‚ฌ์šฉ ์–ด๋…ธํ…Œ์ด์…˜

@CreatedDate

@LastModifiedDate

@CreatedBy

@LastModifiedBy

-> ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ Auditing ์ ์šฉ : ๋“ฑ๋ก์ผ, ์ˆ˜์ •์ผ, ๋“ฑ๋ก์ž, ์ˆ˜์ •์ž 

์ด๋•Œ ๋“ฑ๋ก์ผ๊ณผ ๋“ฑ๋ก์ž๋Š” ์ตœ์ดˆ ๋“ฑ๋ก์ผ์ด๋ž‘ ๋“ฑ๋ก์ž๋‹ˆ๊นŒ ํ˜น์‹œ ์ˆ˜์ •๋  ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ด์„œ @Column(updatable = false)๋กœ ์ง€์ •ํ•ด์ค€๋‹ค. 

 

๊ทธ๋ฆฌ๊ณ  ์ง€๊ธˆ ๋“ฑ๋ก์ž์™€ ์ˆ˜์ •์ž๋Š” ์•„์ด๋””๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— UUID๋กœ ๋žœ๋ค๊ฐ’์œผ๋กœ ๋“ฑ๋ก์ž์™€ ์ˆ˜์ •์ž๋ฅผ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” AuditorAware ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•ด์ค€๋‹ค.

 

โ— ์‹ค๋ฌด์—์„œ๋Š” ์„ธ์…˜ ์ •๋ณด๋‚˜, ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ ๋กœ๊ทธ์ธ ์ •๋ณด์—์„œ id ๋ฅผ ๋ฐ›์•„์„œ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค. 

 

MemberTest

 

โญ ์ฐธ๊ณ 

์‹ค๋ฌด์—์„œ ๋Œ€๋ถ€๋ถ„์˜ ์—”ํ‹ฐํ‹ฐ๋Š” ๋“ฑ๋ก์‹œ๊ฐ„, ์ˆ˜์ •์‹œ๊ฐ„์ด ํ•„์š”ํ•˜์ง€๋งŒ, ๋“ฑ๋ก์ž, ์ˆ˜์ •์ž๋Š” ์—†์„ ์ˆ˜๋„ ์žˆ๋‹ค. 

๊ทธ๋ž˜์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด Base ํƒ€์ž…์„ ๋ถ„๋ฆฌํ•˜๊ณ , ์›ํ•˜๋Š” ํƒ€์ž…์„ ์„ ํƒํ•ด์„œ ์ƒ์†ํ•œ๋‹ค. 

-> ์ด๋ ‡๊ฒŒ ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•ด๋‘” ๋‹ค์Œ์— ์ˆ˜์ •์ž, ๋“ฑ๋ก์ž๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์ด๊ฑธ ์ƒ์†ํ•ด์„œ ์‚ฌ์šฉํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 

 

 

โ— ์ฐธ๊ณ  

์ €์žฅ ์‹œ์ ์— ๋“ฑ๋ก์ผ, ๋“ฑ๋ก์ž๋Š” ๋ฌผ๋ก ์ด๊ณ , ์ˆ˜์ •์ผ, ์ˆ˜์ •์ž๋„ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋œ๋‹ค. 

๋ฐ์ดํ„ฐ๊ฐ€ ์ค‘๋ณต ์ €์žฅ๋˜๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ, ์ด๋ ‡๊ฒŒ ํ•ด๋‘๋ฉด ๋ณ€๊ฒฝ ์ปฌ๋Ÿผ๋งŒ ํ™•์ธํ•ด๋„ ๋งˆ์ง€๋ง‰์— ์—…๋ฐ์ดํŠธํ•œ ์œ ์ €๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์œ ์ง€๋ณด์ˆ˜ ๊ด€์ ์—์„œ ํŽธ๋ฆฌํ•˜๋‹ค. 

์ด๋ ‡๊ฒŒ ์•ˆํ•˜๋ฉด ๋ณ€๊ฒฝ ์ปฌ๋Ÿผ์ด null ์ผ ๋•Œ ๋“ฑ๋ก ์ปฌ๋Ÿผ์„ ๋˜ ์ฐพ์•„์•ผ ํ•œ๋‹ค. 

์ฐธ๊ณ ๋กœ ์ €์žฅ ์‹œ์ ์— ๊ทธ๋ƒฅ ์ €์žฅ ๋ฐ์ดํ„ฐ๋งŒ ์ž…๋ ฅํ•˜๊ณ  ์‹ถ์œผ๋ฉด @EnableAuditing(modifyOnCreate = false) ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. 

 

 

 

3๏ธโƒฃ Web ํ™•์žฅ - ๋„๋ฉ”์ธ ํด๋ž˜์Šค ์ปจ๋ฒ„ํ„ฐ

: HTTP ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜์–ด์˜จ ์—”ํ‹ฐํ‹ฐ์˜ ์•„์ด๋””๋กœ ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๋ฅผ ์ฐพ์•„์„œ ๋ฐ”์ธ๋”ฉ 

 

๋„๋ฉ”์ธ ํด๋ž˜์Šค ์ปจ๋ฒ„ํ„ฐ ์‚ฌ์šฉ ์ „

MemberController

 

๋„๋ฉ”์ธ ํด๋ž˜์Šค ์ปจ๋ฒ„ํ„ฐ ์‚ฌ์šฉ ์ „

MemberController

HTTP ์š”์ฒญ์€ ํšŒ์› id๋ฅผ ๋ฐ›์ง€๋งŒ, ๋„๋ฉ”์ธ ์ปจ๋ฒ„ํ„ฐ๊ฐ€ ์ค‘๊ฐ„์— ๋™์ž‘ํ•ด์„œ ํšŒ์› ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

memberRepository.find(Member.class, id) ์ด๋Ÿฐ ๊ฑฐ ์—†์–ด๋„ ์•Œ์•„์„œ ๋™์ž‘ํ•œ๋‹ค..!!

๋„๋ฉ”์ธ ํด๋ž˜์Šค ์ปจ๋ฒ„ํ„ฐ๋„ ๋ฆฌํŒŒ์ง€ํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ฐพ๊ธฐ๋Š” ํ•œ๋‹ค. 

 

โ— ์ฃผ์˜ 

๋„๋ฉ”์ธ ํด๋ž˜์Šค ์ปจ๋ฒ„ํ„ฐ๋กœ ์—”ํ‹ฐํ‹ฐ๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์œผ๋ฉด, ์ด ์—”ํ‹ฐํ‹ฐ๋Š” ๋‹จ์ˆœ ์กฐํšŒ์šฉ์œผ๋กœ๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค~!!!!!!

(ํŠธ๋žœ์žญ์…˜์ด ์—†๋Š” ๋ฒ”์œ„๋กœ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์กฐํšŒํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋ณ€๊ฒฝํ•ด๋„ DB์— ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.) 

๊ทธ๋ฆฌ๊ณ  ์ด๊ฑฐ ์‚ฌ์šฉ ๊ถŒ์žฅ ์•ˆํ•จ 

 

 

4๏ธโƒฃ Web ํ™•์žฅ - ํŽ˜์ด์ง•๊ณผ ์ •๋ ฌ 

: ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ํŽ˜์ด์ง•๊ณผ ์ •๋ ฌ ๊ธฐ๋Šฅ์„ ์Šคํ”„๋ง MVC์—์„œ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

ํŽ˜์ด์ง•๊ณผ ์ •๋ ฌ ์˜ˆ์ œ 

MemberController

ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ Pageable์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. 

Pageable ์€ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์‹ค์ œ๋Š” org.springframework.data.domain.PageRequest ๊ฐ์ฒด ์ƒ์„ฑ 

 

์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ 

์˜ˆ) /members?page=0&size=3&sort=username,desc 

page : ํ˜„์žฌ ํŽ˜์ด์ง€, 0๋ถ€ํ„ฐ ์‹œ์ž‘ 

size: ํ•œ ํŽ˜์ด์ง€์— ๋…ธ์ถœํ•  ๋ฐ์ดํ„ฐ ๊ฑด์ˆ˜

sort: ์ •๋ ฌ ์กฐ๊ฑด์„ ์ •์˜ํ•œ๋‹ค. ์˜ˆ) ์ •๋ ฌ ์†์„ฑ asc , ์ •๋ ฌ ๋ฐฉํ–ฅ์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์œผ๋ฉด sort ํŒŒ๋ผ๋ฏธํ„ฐ ์ถ”๊ฐ€ 

Pageable์ด ๊ธฐ๋ณธ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ

 

๊ธฐ๋ณธ ๊ฐ’ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•

- ๊ธ€๋กœ๋ฒŒ ์„ค์ • : ์Šคํ”„๋ง๋ถ€ํŠธ

default-page-size : ๊ธฐ๋ณธ ํŽ˜์ด์ง€ ์‚ฌ์ด์ฆˆ 

max-page-size : ์ตœ๋Œ€ ํŽ˜์ด์ง€ ์‚ฌ์ด์ฆˆ 

 

- ๊ฐœ๋ณ„ ์„ค์ • : @PageableDefault ์–ด๋…ธํ…Œ์ด์…˜ ์‚ฌ์šฉ 

 

 

Page ๋‚ด์šฉ์„ DTO๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ

์—”ํ‹ฐํ‹ฐ๋ฅผ API๋กœ ์ง์ ‘ ๋…ธ์ถœํ•˜๋Š” ๊ฑด ์ข‹์ง€ ์•Š๋‹ค. 

์™œ๋ƒํ•˜๋ฉด ์—”ํ‹ฐํ‹ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด API ์ŠคํŽ™์ด ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์ด๊ธฐ๋„ ํ•˜๊ณ , ์ „๋žต์ด ๋…ธ์ถœ๋˜๋Š” ๊ฒƒ?์ด๊ธฐ ๋•Œ๋ฌธ์— ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ง์ ‘ ๋…ธ์ถœํ•˜๋Š” ๊ฒƒ์€ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. 

-> ๊ทธ๋ž˜์„œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ๊ผญ DTO๋กœ ๋ณ€ํ™˜ํ•ด์„œ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค. 

Page๋Š” map()์„ ์ง€์›ํ•ด์„œ ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

MemberDto

 

 

โญ Page ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•  ์ ์œผ๋กœ๋Š” ์šฐ์„  ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ๋Š” Page๋ฅผ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค!! 

๋งŒ์•ฝ Page๋ฅผ 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด..?

 

1. Pageable, Page๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ์‘๋‹ต๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ์ง์ ‘ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค. 

๊ทธ๋ฆฌ๊ณ  ์ง์ ‘ PageRequest(Pageable ๊ตฌํ˜„์ฒด)๋ฅผ ์ƒ์„ฑํ•ด์„œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋„˜๊ธด๋‹ค. 

๋ฌผ๋ก  ์‘๋‹ต๊ฐ’๋„ Page ๋Œ€์‹ ์— ์ง์ ‘ ๋งŒ๋“ค์–ด์„œ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค. 

 

2. spring.data.web.pageable.one-indexed-parameters ๋ฅผ true๋กœ ์„ค์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 

๊ทผ๋ฐ ์ด ๋ฐฉ๋ฒ•์€ web์—์„œ page ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ -1ํ•  ๋ฟ์œผ๋กœ, ๋”ฐ๋ผ์„œ ์‘๋‹ต๊ฐ’์ธ Page์— ๋ชจ๋‘ 0 ํŽ˜์ด์ง€ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค. 

 

๊ทธ๋ƒฅ ์ œ์ผ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์žˆ๋Š”๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ... 

 

 

 

 

 

 

 

 

728x90