
계층형 아키텍처에서 각 계층은 자가 바로 다음 계층에만 의존해야 한다는 제약이 있다
현대적인 엔터프라이즈 애플리케이션은 이 제약을 완화시킨 완화된 계층형 아키텍처(relaxed layered architecture)를 주로 사용한다
계층형 아키텍처의 목적은 시스템의 관심사를 분리(separation of concerns)하는 것이다
이를 통해 전체적인 결합도를 낮추고 인지 과부하를 방지해서 재사용성과 유지보수성을 높인다

도메인 로직을 가지고 있는 엔티티가 프레젠테이션 로직을 가진 어댑터(컨트롤러)로 유출되면 도메인 로직을 담은 메서드를 실행할 수 있는 문제가 있다
엔티티가 가진 정보 조회를 넘어선 엔티티 로직을 사용하므로 도메인 로직이 유출되는 문제는 엔티티에서만 발생하는 것이 아니다. DTO를 가지고도 얼마든지 컨트롤러에서 "도메인 로직"을 구현할 수 있다.
어차피 세컨더리 어댑터에서도(리포지토리 구현 어댑터, 메일 발송 어댑터)에도 엔티티가 전달되거나 생성되어 리턴된다.
근본적으로 리포지토리 어댑터에서 도메인 엔티티를 제거할 방법은 없다. 여기서 도메인 로직을 실행할 수 있는 것은 문제가 아닌가?
OSIV와 결합하면 컨트롤러에서 DB 변경이 일어날 수도 있다
OSIV가 적용됐다고 하더라도 애플리케이션에서 리턴할 때 트랜잭션이 종료된다 따라서 이후의 엔티티 변경사항은 DB에 커밋되지 않는다
DTO를 리턴하는 방식의 가장 큰 문제는 프레젠테이션 로직이 애플리케이션 레이어로 침투하는 것이다