๐ Entity ํด๋์ค
: DB ํ ์ด๋ธ์ด ์กด์ฌํ๋ Column(์ด)๋ค์ ํ๋๋ก ๊ฐ์ง๋ ๊ฐ์ฒด
Field(ํ๋)
: class ์ ์ ์, ํด๋์ค ์์ฑ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํด ์ ์ธํ๋ ๋ณ์@Entity
public class Post {
private String title;
private String content;
private String author;
}
๐ Post DB ํ
์ด๋ธ โ title, content, author ์ปฌ๋ผ ์์
๐ Post ํ
์ด๋ธ์ ๋์ํ๋ Entity class Post โ Post ํ
์ด๋ธ์ ์ปฌ๋ผ๋ค๋ง ํ๋๋ก ๊ฐ์ง
DB ํ ์ด๋ธ๊ณผ 1๋ 1๋ก ๋์ โญ๏ธ
DB ํ ์ด๋ธ์ ์๋ Column์ ํ๋๋ก ๊ฐ์ง๋ฉด โ๏ธ
๋ค๋ฅธ ํด๋์ค์ ์์ or ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด โ๏ธ
๋ด๋ถ์ ํ๋ โ @Column, @Id ์ด๋ ธํ ์ด์ ์ฌ์ฉ
์ธ๋ถ์์ ์ต๋ํ Entity์ Getter๋ฅผ ์ฌ์ฉํ์ง ์๋๋ก ๋ก์ง๊ตฌํ ๐จ
Entity์ Setter ๋ง๋๋๊ฒ ์ต๋ํ ์ง์ ๐จ
Builder ํจํด
์ฌ์ฉ ๊ถ์ฅ@Getter // Lombok ์ด๋
ธํ
์ด์
(class ๋ชจ๋ ํ๋ -> getter method ์์ฑ)
@Entity
@NoArgsConstructor // Lombok ์ด๋
ธํ
์ด์
(class ๊ธฐ๋ณธ์์ฑ์ ์๋์ถ๊ฐ)
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id; // PK
private String name;
private String email;
@Column(length = 13, nullable = false)
private String phoneNum;
// ์์ฑ์
@Builder
public Member(long id, String name, String email, String phoneNum) {
this.id = id;
this.name = name;
this.email = email;
this.phoneNum = phoneNum;
}
}
// Builder ํจํด ์ฌ์ฉ๋ฒ
Member member = new member.builder() // ๊ฐ์ฒด์ ๋น๋ํ๋ ๊ฐ๋
.name("๋ง๋์ด")
.email("mallang@mallang.com")
.phoneNum("010-1234-5678")
.build();
๐ DAO(Data Access Object)
: ์ค์ ๋ก DB์ ์ ๊ทผํ๋ ๊ฐ์ฒด
ํ๋ก์ ํธ์ Service ๋ชจ๋ธ๊ณผ, ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐ๊ฒฐํ๋ ์ญํ
JPA์์ DB์ ๋ฐ์ดํฐ๋ฅผ CRUD
ํ๋ Repository ๊ฐ์ฒด โ DAO
๐ DTO(Data Transfer Object)
: ๊ณ์ธต๊ฐ ๋ฐ์ดํฐ ๊ตํ ์ญํ ์ ํ๋ ๊ฐ์ฒด
DB์์ ๊บผ๋ธ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ Entity๋ฅผ ๊ฐ์ง๊ณ ๋ง๋๋ ์ผ์ข ์ Wrapper
Entity๋ฅผ Controller์ ๊ฐ์ ํด๋ผ์ด์ธํธ๋จ๊ณผ ์ง์ ๋ง์ฃผํ๋ ๊ณ์ธต์ ์ ๋ฌ โ
โก๏ธ DTO๋ฅผ ํตํ ๋ฐ์ดํฐ ๊ตํ โ
ํน๋ณํ ๋ก์ง์ ๊ฐ์ง์ง ์๋ ์์ํ ๋ฐ์ดํฐ๊ฐ์ฒด
DB์์ ๊บผ๋ธ ๊ฐ โ DTO์์ ์์๋ก ์กฐ์ํ ํ์๊ฐ ์์
Setter โ โ ์์ฑ์์์ ๊ฐ์ ํ ๋นํจ
Entity ํด๋์ค์์ ํ์ํ ๋ฐ์ดํฐ๋ง ์ ํ์ ์ผ๋ก DTO์ ๋ด์ ์์ฑํด ์ฌ์ฉ
โก๏ธ Entity ํด๋์ค ๊ฐ์ถ๋ฉฐ ๋ณดํธํ ์ ์์
@Getter
@NoArgsConstructor
public class AccountSignUpRequest { // User ์์ฒญ์ ๋ํ DTO
@NotBlank
@Email(message = "์ด๋ฉ์ผ ์์์ ์ง์ผ์ฃผ์ธ์")
private String email;
@NotBlank
private String name;
@NotBlank
private String password;
// Account Entity ์ปฌ๋ผ ๊ฐ : email, name, password
@Builder // Entity์ Setter ์์ฑ์ ํผํ๊ธฐ ์ํจ (์์ฑ์์ญํ )
public AccountSignUpRequest(String email, String name, String password) {
this.email = email;
this.name = name;
this.password = password;
}
public Account toEntity() { // Entity์ DTO ๋ณด๋
return Account.builder()
.email(email)
.name(name)
.password(Password.builder().password(this.password).build())
.build()
}
}
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED) // ๋ถ์์ ํ ๊ฐ์ฒด์์ฑ ๋ง์
public class AccountSignUpResponse {
private String email;
private String name;
@Builder
public AccountSignUpResponse(Account account) {
// ํ๋ผ๋ฏธํฐ account -> Entity to DTO
this.email = account.getEmail();
this.password = account.getPassword();
}
}
๐
AccountSignUp
DTO : Client์ Account save ์์ฒญ์ ๋ํ DTO
๐AccountSignUpResponse
: JPA๋ฅผ ํตํด Account Save ์์ ํ โ Client๋ก return๋๋ DTO
์์ฃผ ์ ์ตํ ๋ด์ฉ์ด๋ค์!