ํ๋์ฝ๋ฉ๊ณผ ์ค๋ณต์ ์ง์ํ๊ณ ์ @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);