DAO는 DB 데이터에 접근하기 위한 객체로 직접 DB에 접근하여 데이터를 삽입, 삭제, 조회를 조작할 수 있는 기능을 수행하여 MVC 패턴의 Model이 DAO 같은 일을 수행한다.
DTO는 계층간 데이터 교환을 위한 Java Beans를 의미하여 로직을 가지지 않는 데이터 객체로 Getter/Setter 메소드만 가진 클래스를 의미한다.
DTO와 달리 VO는 Read-Only 속성을 의미하는 값이다. 우리가 Color.RED 객체를 사용할 때 수정이 아니고 읽기만 하는 것처럼 Getter만 존재하는 것이라고 할 수 있다.
우리가 계층간 데이터를 접근하는 과정에서 각 필요한 Annotation이 존재한다.
@Entity
@Table
@Getter
@Setter
class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String name;
public User() {}
}
@Repository
interface UserRepository extends JpaRepository <User, Interger> {
}
interface UserService {
public void saveUser(User user);
}
@Service
class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
@Override
public void saveUser(User user) {
userRepository.save(user);
}
}
코드 상에서 데이터 계층을 관리하는 측면에서 @Component를 쓰는 것보다는 @Repository, @Service, @Controller를 구분해 사용하는 것이 편하다.