ํ์๊ฐ์ DTO ๋ง๋ค๊ธฐ
User Join DTO(Data transfer Object) ์์ฑ
ํ์๊ฐ์ ์ ํ์ํ DTO๋ฅผ ๋ง๋ค์ด ํ์ ๋ฑ๋ก์ ํด๋ณด์.
DTO(Data transfer Object)
DTO๋ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ฐ์ฒด์ด๋ค.
DAO(Data Access Object)์๋ ๋ค๋ฅด๊ฒ ์์
์ ์ ๋ดํ๋ ๋ฉ์๋๋ฅผ ๋ง๋ค์ง ์๊ธฐ ๋๋ฌธ์, Getter/Setter์ ์์ฑ์ ์ธ์๋ ๋ณ๋์ ๋ฉ์๋๋ฅผ ์ ์ํ์ง ์๋๋ค.
Entity ๊ฐ์ฒด
๋ค์๊ณผ ๊ฐ์ Entity ๋ชจ๋ธ์ด ์๋ค๊ณ ํ์.
import lombok.*;
import javax.persistence.*;
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Builder
@Entity
public class User extends CreateDateEntity{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, length = 100, unique = true)
private String username;
@Column(nullable = false, length = 100)
private String nickname;
@Column(nullable = false, length = 50)
private String email;
@Column(nullable = false, length = 100)
private String password;
@Enumerated(EnumType.STRING)
private RoleType role;
public void update(String password, String nickname, String email){
this.password = password;
this.nickname = nickname;
this.email=email;
}
}
ํ์๊ฐ์
์ ์ํด์ ํด๋ผ์ด์ธํธ์๊ฒ ํ์๊ฐ์
์ ํ์ํ ์ ๋ณด๋ฅผ ๋ฐ๊ณ ์ด ์ ๋ณด๋ฅผ ์ด์ฉํด์ ํ์ ์ ๋ณด๋ฅผ DB์ ์ ์ฅํด ์ค ๋ค ํด๋ผ์ด์ธํธ์๊ฒ ์๋ต์ ํด์ค์ผ ํ๋ค.
์ด๋, ํด๋ผ์ด์ธํธ์ ๋ํ ์์ฒญ๊ณผ ์๋ต์ Entit ๊ฐ์ฒด์ธ User.java๋ฅผ ์ฌ์ฉํ๋ฉด ์ ๋๋ค.
Entity ๊ฐ์ฒด๋ DB์ ๋ง๋ฟ์ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ํด๋์ค์ ์ํฅ์ ์ค ์ ์๊ธฐ ๋๋ฌธ์ ๋น๋ฒํ ์ ๋ณด ๋ฑ๋ก๊ณผ ์์ ์ ํ๊ธฐ ์ํด์ DTO๋ฅผ ๋ง๋ค์ด์ค์ ์ญํ ์ ๋ถ๋ฆฌํด ์ฃผ๋๋ก ํ์.
UserJoinDto
import com.vividswan.studymate.model.RoleType;
import com.vividswan.studymate.model.User;
import lombok.*;
@Data
@NoArgsConstructor
public class UserJoinDto {
private String username;
private String password;
private String email;
private String nickname;
private RoleType role;
@Builder
public UserJoinDto(String username, String password, String email, String nickname, RoleType role){
this.username = username;
this.password = password;
this.email = email;
this.nickname = nickname;
this.role = role;
}
public User toEntity(){
return User.builder()
.username(username)
.password(password)
.email(email)
.nickname(nickname)
.role(role)
.build();
}
}
ํ์๊ฐ์ ์์ ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ DTO๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ง๋ค๊ณ ์ฝ๋๋ฅผ ์ดํด๋ณด์.
private String username;
private String password;
private String email;
private String nickname;
private RoleType role;
User์๊ฒ ์ง์ ๋ฐ๋ ์ ๋ณด๋ฅผ ์์ฑ์ผ๋ก ์ ์ธํ๋ค.
@Builder
public UserJoinDto(String username, String password, String email, String nickname, RoleType role){
this.username = username;
this.password = password;
this.email = email;
this.nickname = nickname;
this.role = role;
}
Builder
ํจํด์ ์ด์ฉํ์ฌ Dto๋ฅผ ์์ฑํ ์ ์๋ ์์ฑ์๋ฅผ ๋ง๋ค์ด์ค๋ค.
public User toEntity(){
return User.builder()
.username(username)
.password(password)
.email(email)
.nickname(nickname)
.role(role)
.build();
}
User์๊ฒ ๋ฐ์ ์ ๋ณด์ Builder ์์ฑ์๋ฅผ ์ด์ฉํ์ฌ Dto ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ , ์ด๋ฅผ ์ด์ฉํ์ฌ DB์ ์ฝ์ ํ Entity ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ๋ฆฌํดํด์ฃผ๋ toEntity ๋ฉ์๋์ด๋ค.
Dto๋ฅผ ์ด์ฉํ ํ์๊ฐ์
@Transactional
public boolean join(UserJoinDto userJoinDto) {
String rawPassword = userJoinDto.getPassword();
String encPassword = bCryptPasswordEncoder.encode(rawPassword);
userJoinDto.setPassword(encPassword);
userJoinDto.setRole(RoleType.USER);
userRepository.save(userJoinDto.toEntity());
return true;
}
Service ์ธต์์ ๊ฐ์
ํ ํ์์ ๋ณด๋ฅผ Repository ์ธต์ ์ ๋ฌํด ์ค๋ค.
ํธ๋์ญ์
์ฒ๋ฆฌ๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํด @Transactional
์ด๋
ธํ
์ด์
์ ์ฌ์ฉํด์ผ ํ๋ค.
ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋์ด์จ dto์์ ๋น๋ฐ๋ฒํธ์ ํด์ ์ํธํ๋ฅผ ํด์ฃผ๊ณ , User์ Role์ ์ง์ ํ ๋ค, toEntity๋ก Dto์ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์์ฑ๋ Entity ๊ฐ์ฒด๋ฅผ ๋ฆฌํด ๋ฐ์ ๋ค, Repository ์ธต์์ DB์ ํ์์ ๋ณด๋ฅผ ์ ์ฅํด ์ค๋ค.