Entity(엔티티)는 데이터베이스에서 사용되는 데이터 모델을 나타내는 객체입니다. 주로 데이터베이스 테이블과 매핑되며, 어플리케이션의 핵심 비즈니스 논리를 표현합니다. 엔티티 클래스는 데이터베이스의 테이블과 1:1로 매핑되기 때문에 데이터베이스 스키마와 밀접한 관련이 있습니다.
Spring Boot에서 Entity를 사용하는 방법을 간단하게 알아보겠습니다.
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class User {
@Id
private Long id;
private String username;
private String email;
// getter, setter, constructor 등...
}
User 클래스를 만들고 @Entity 어노테이션을 지정해주면 JPA에 의해 Entity로 관리됩니다.
DTO(Data Transfer Object)는 엔티티로부터 클라이언트로 전송되는 데이터의 모델을 나타냅니다. 주로 엔티티의 일부 데이터를 가지고 있으며, 클라이언트와 서버 간의 효율적인 데이터 전송을 위해 사용됩니다. DTO는 엔티티로부터 필요한 정보만을 추출한 가벼운 객체입니다.
다음은 Spring Boot에서 DTO를 사용하는 방법을 간단하게 알아보겠습니다.
public class UserRequestDTO {
private String username;
private String email;
// getter, setter, constructor 등...
}
public class UserResponseDTO {
private Long id;
private String username;
private String email;
// getter, setter, constructor 등...
}
DTO는 클라이언트와의 데이터 교환을 위한 객체로 사용되므로 클라이언트에서 요청을 받는 RequestDTO, 요청에 대한 응답을 반환하는 ResponseDTO로 사용될 수 있습니다.
DTO와 Entity 간의 변환 작업은 주로 서비스 계층에서 이루어지는데 그 이유로는 여러가지가 있습니다.
변환 방법에는 ModelMapper나 MapStruct, Builder 패턴 등 다양한 방법이 있습니다.
이 포스팅에서는 ModelMapper를 이용해 변환하는 방법을 알아보겠습니다.
import org.modelmapper.ModelMapper;
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
@Autowired
private ModelMapper modelMapper;
public UserResponseDTO getUserById(Long id) {
User user = userRepository.findById(id).orElse(null);
if (user == null) {
// 예외 처리 등...
}
return modelMapper.map(user, UserResponseDTO.class);
}
public void createUser(UserRequestDTO userRequestDTO) {
User user = modelMapper.map(userRequestDTO, User.class);
userRepository.save(user);
}
}
ModelMapper 라이브러리를 사용하면 DTO <-> Entity간 변환을 자동으로 수행해줘 매우 간단하게 변환할 수 있습니다.
Entity는 주로 데이터베이스와의 상호 작용 및 비즈니스 로직을 처리하기 위한 모델로 사용되고, DTO는 클라이언트와 서버 간의 효율적인 데이터 전송을 위한 모델로 사용됩니다. DTO와 Entity 간의 변환은 주로 서비스 계층에서 이루어져야 하며, 이를 통해 응용프로그램의 유지보수성과 유연성을 향상시킬 수 있습니다.