ํŠน์ง•

  • ๊ธฐ์กด์˜ ์ˆœ์ˆ˜ JPA์˜ ๋ฐ˜๋ณต์ ์ธ ๊ตฌํ˜„์ฒด๋“ค์„ ์ถ”์ƒํ™”ํ•จ
  • ์ธํ„ฐํŽ˜์ด์Šค ์„ ์–ธ๋งŒ์œผ๋กœ Spring JPA๊ฐ€ ์ž๋™์œผ๋กœ ๊ตฌํ˜„์ฒด๋“ค์„ ๋งŒ๋“ค์–ด์„œ ์ฃผ์ž…

  • ๊ตฌํ˜„์ฒด๊ฐ€ ์ฃผ์ž…๋˜๋Š” ๊ณผ์ • ( ์‹ค์ œ๋กœ ๊ฐ์ฒด๋ฅผ ์ฐ์–ด๋ณด๋ฉด Proxy )
  • Repository ์˜ ๋‘๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์–ด๋…ธํ…Œ์ด์…˜ ์ •์˜ ์—†์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    1. ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ๊ธฐ๋Šฅ
    2. JPA ์˜ˆ์™ธ๋ฅผ ์Šคํ”„๋ง ์˜ˆ์™ธ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ผ๊ด„์ ์ธ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ

์ฟผ๋ฆฌ ๋ฉ”์†Œ๋“œ

  • ๋ฉ”์†Œ๋“œ ์ด๋ฆ„์œผ๋กœ ์ฟผ๋ฆฌ ์ƒ์„ฑ ex) findByUsername

๋ฐ˜ํ™˜ ํƒ€์ž…

  • ์ปฌ๋ ‰์…˜ ์กฐํšŒ - ๋นˆ ์ปฌ๋ ‰์…˜ ๋ฐ˜ํ™˜ ( null ์•„๋‹˜! )
  • ๋‹จ๊ฑด ์กฐํšŒ - null ๋ฐ˜ํ™˜ โ†’ Optional ์‚ฌ์šฉํ•˜๊ธฐ

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

  • Total Count ํ•„์š”ํ•œ ๊ฒฝ์šฐ : Page
  • Total Count๊ฐ€ ํ•„์š” ์—†๋Š” ๊ฒฝ์šฐ : Slice ex) ์ธ์Šคํƒ€๊ทธ๋žจ, ๋ชจ๋ฐ”์ผ ๋” ๋ณด๊ธฐ ๊ธฐ๋Šฅ

์‰ฝ๊ฒŒ DTO๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฒ•

  • page.map(member โ†’ new MemberDto(member.getId, member.getUsername))

๋ฒŒํฌ์„ฑ ์ˆ˜์ • ์ฟผ๋ฆฌ

  • Bulk ์„ฑ ์ฟผ๋ฆฌ ์ดํ›„์— flush(), clear() ํ•˜๊ธฐ (์˜์†์„ฑ ์ปจํ…์ŠคํŠธ ํด๋ฆฌ์–ด)

์—”ํ‹ฐํ‹ฐ๊ทธ๋ž˜ํ”„

  • @EntityGraph(attributePaths = {โ€˜fetchJoin ํ•˜๊ณ ์‹ถ์€ ๋Œ€์ƒโ€™})

์‚ฌ์šฉ์ž์ •์˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ

Data Jpa Repository์— ๋ชจ๋“  ๋กœ์ง๋“ค์„ ์ž‘์„ฑํ•  ๊ฒฝ์šฐ ์‹ค์ œ ๋น„์ฆˆ๋‹ˆ์Šค์ ์ธ ๋กœ์ง์„ ๊ตฌ๋ถ„ํ•ด๋‚ด๊ธฐ ์‰ฝ์ง€ ์•Š์Œ

  1. CustomRepository ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์„ฑ
  2. ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„์ฒด์— ์‹ค์ œ ์ปค์Šคํ…€ ๋กœ์ง ์ž‘์„ฑ
  3. ๊ธฐ์กด Data Jpa Repository์— CustomRepository ์ถ”๊ฐ€ ์ƒ์†
  • (!์ฃผ์˜!) ๋„ˆ๋ฌด Data Jpa์— ์˜์กดํ•˜์ง€ ์•Š๊ณ , ํ™”๋ฉด์— ๋ฟŒ๋ฆฌ๊ธฐ ์œ„ํ•œ ์ฟผ๋ฆฌ๋“ค์ด๋‚˜ ๋ณต์žกํ•œ ํ†ต๊ณ„์„ฑ ์ฟผ๋ฆฌ๋“ค์€ ๋”ฐ๋กœ repository Class๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ๋ฐฉํ–ฅ

Auditing

  • JPA Event ๊ธฐ๋ฐ˜

    1. BaseEntity ์ƒ์„ฑ ( @MappedSuperClass)
    2. @PrePersist, @PreUpdate ์„ค์ •
  • Data Jpa ๊ธฐ๋ฐ˜

    1. BaseEntity ์ƒ์„ฑ ( @MappedSuperClass, @EntityListener(AuditingEntityListener.class) )
    2. @CreateDate, @LastModifiedDate, @CreatedBy, @LastModifiedBy
    3. Spring Main Run Class์— @EnableJpaAuditing ์ถ”๊ฐ€
  • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€ํ•ด ์ถ”ํ›„ ์‹œํ๋ฆฌํ‹ฐ, ์„ธ์…˜ ์ •๋ณด๋“ฑ์„ ๊ฐ€์ ธ์™€ ๋„ฃ์–ด์ฃผ๋ฉด ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ createdBy, LastModifiedBy ์— ์ž๋™์œผ๋กœ ๋„ฃ์„ ์ˆ˜ ์žˆ์Œ

@Bean  
public AuditorAware<String> auditorProvider() {  
   return () -> Optional.of(UUID.randomUUID().toString());  
}