Spring

[Spring] @PrePersist์™€ @PreUpdate

DAHLIA CHOI 2024. 3. 16. 04:18

 

ํ•˜๋“œ์ฝ”๋”ฉ๊ณผ ์ค‘๋ณต์„ ์ง€์–‘ํ•˜๊ณ ์ž @PrePersist, @PreUpdate ์‚ฌ์šฉ์„ ๋Š˜๋ฆฌ๊ณ  ์žˆ๋‹ค. 

 

๐ŸŒฑ @PrePersist ๋ž€?

JPA ์—”ํ‹ฐํ‹ฐ๊ฐ€ ๋น„์˜์† ์ƒํƒœ์—์„œ ์˜์† ์ƒํƒœ๊ฐ€ ๋˜๋Š” ์‹œ์ ์— ์‹คํ–‰๋œ๋‹ค. 

์ฆ‰, ์—”ํ‹ฐํ‹ฐ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋˜๊ธฐ ์ „์— JPA Provider์— ์˜ํ•ด ์ž๋™์ ์œผ๋กœ ํ˜ธ์ถœ๋œ๋‹ค.

 

 

๐ŸŒฑ @PreUpdate ๋ž€?

์˜์† ์ƒํƒœ์˜ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ด์ „์— ์‹คํ–‰๋œ๋‹ค.

์ฆ‰, ์—”ํ‹ฐํ‹ฐ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋™๊ธฐํ™”๋˜๊ธฐ ์ „์— JPA Provider์— ์˜ํ•ด ์ž๋™์ ์œผ๋กœ ํ˜ธ์ถœ๋œ๋‹ค.

 

 

๐Ÿซง ์‚ฌ์šฉ ์‹œ ์œ ์˜ํ•  ์ 

  • ์ ์ ˆํ•œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.
  • ๋กœ์ง์˜ ๋ณต์žก์„ฑ์„ ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.
    • ๋ณต์žกํ•œ ๋กœ์ง์€ @PrePersist, @PreUpdate ๋‚ด์—์„œ ํ”ผํ•œ๋‹ค.
  • ์™ธ๋ถ€ ์‹œ์Šคํ…œ๊ณผ์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ํ”ผํ•œ๋‹ค.
  • ์—”ํ‹ฐํ‹ฐ์˜ ์ƒํƒœ ๋ณ€ํ™”์— ์ฃผ์˜ํ•ด์•ผํ•œ๋‹ค.
  • ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์‹œ ์„ฑ๋Šฅ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

 

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ์‚ฌ์šฉ ์ฝ”๋“œ

 

๋‚˜ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ํšŒ์› ์—”ํ‹ฐํ‹ฐ์— ์‹ ๊ณ  ํšŸ์ˆ˜, ํƒˆํ‡ด ์—ฌ๋ถ€๋“ฑ์ด ํฌํ•จ๋˜์—ˆ์–ด์•ผ ํ–ˆ๋‹ค. 

๋”ฐ๋ผ์„œ ํšŒ์› ๊ฐ€์ž…์„ ํ•  ๋•Œ๋งˆ๋‹ค ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๋กœ ๊ฐ’์„ ์ง€์ •ํ•ด์„œ ๋„ฃ์—ˆ์—ˆ๋Š”๋ฐ, ์ด๊ฑธ @PrePersist๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋‹ค.

 

 

        Member member = Member.builder()
                .email(joinReqDto.getEmail())
                .password(joinReqDto.getPassword())
                .nickname(joinReqDto.getNickname())
                .isDeleted(false)
                .reportedCount(0)
                .build();

        memberRepository.save(member);

 

์ด๋Ÿฐ ์‹์œผ๋กœ ํ•˜๋“œ์ฝ”๋”ฉ์„ ํ•ด์„œ ์ž‘์„ฑ์„ ํ–ˆ์—ˆ๋‹ค. 

์ด๋ ‡๊ฒŒ ํ•œ ๋ฒˆ๋งŒ ๊ฐ€์ž…ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ดœ์ฐฎ๋‹ค๊ณ  ๋Š๋‚„ ์ˆ˜๋„ ์žˆ๊ฒ ์ง€๋งŒ, ์ˆ˜์ •ํ•  ๋•Œ ๋ฒˆ๊ฑฐ๋กญ๊ธฐ๋„ ํ•˜๋ฉฐ ๊ฒŒ์‹œ๊ธ€ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ์ƒ์„ฑ๊ณผ ์ˆ˜์ •์ด ๋นˆ๋ฒˆํ•œ๋ฐ ์ผ์ผ์ด ๋ชจ๋“  ๋กœ์ง์—์„œ ํ•˜๋“œ์ฝ”๋”ฉํ•˜๋Š” ๊ฒŒ ์ƒ์‚ฐ์ ์ด์ง€ ์•Š๋‹ค.

 

 

๋”ฐ๋ผ์„œ ์—”ํ‹ฐํ‹ฐ์— @PrePersist๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

    @PrePersist
    public void prePersist() {
        this.reportedCount = this.reportedCount == null ? 0 : this.reportedCount;
        this.isDeleted = this.isDeleted == null ? false : this.isDeleted;
    }

 

 

์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜๋ฉด ์„œ๋น„์Šค ๋กœ์ง์—์„œ ์•„๋ž˜ ์ฝ”๋“œ๋งŒ ์ž‘์„ฑํ•˜๋”๋ผ๋„ ์ž๋™์ ์œผ๋กœ reportCount๋Š” 0, isDeleted์—๋Š” false๊ฐ€ ์ €์žฅ๋œ๋‹ค.

        Member member = Member.builder()
                .email(joinReqDto.getEmail())
                .password(joinReqDto.getPassword())
                .nickname(joinReqDto.getNickname())
                .build();

        memberRepository.save(member);