Controller 계층은 프레젠테이션 계층으로 View 에 관한 로직을 갖는다. 서비스 계층에서 받아온 데이터를 사용자에게 전달하거나, 사용자에게 받은 데이터를 비즈니스 계층에게 준다. Controller 에서 다른 동작이 없도록 수정하였다.
스프링에서 값에 대한 검증을 도와주는 어노테이션이 있다. Spring Bean Validation 을 이용하여 값에 대한 검증을 간단하게 하였다.
dto 는 다른 계층에게 데이터를 전달하기 위한 객체이다. 비즈니스 로직을 가지지 않는다. 값을 전달하는 것 이외에 다른 역할이 있으면 안된다고 생각하여 도메인 객체를 받는 생성자에 대해 생각해보지 못했다. 도메인에서 dto 를 알고 있다면 문제가 되지만, dto 는 결국 도메인 객체에 저장된 값을 전달해준다. dto 에서 도메인에 대해 알고 있는 것이 괜찮다고 생각하여 생성자를 추가하였다.
Service 계층에서는 DB 에 접근하는 DAO 와 연결되어 있다. 하나의 기능을 처리하기 위해 여러개의 쿼리문을 실행할 수 있다. 앞의 쿼리문에서 실패할 경우 메서드의 기능은 실패했으므로 데이터에 영향이 있으면 안된다. 변경된 데이터를 ROLLBACK 시키기 위해 Service 계층에서는 @Transactional
을 붙여준다.
Controller 는 비즈니스 로직을 가지지 않으며 그저 자바 어플리케이션과 사용자를 연결하는 역할을 한다. 도메인 객체에 관해 수정사항이 발생하면 Controller 가 도메인을 활용하지 않아도 Controller 를 확인해야 한다. 각 역할에 맞는 객체에만 접근하도록 코드를 구성하면 수정사항이 발생해도 확인해야 하는 범위가 줄어들 수 있다.