개발 시, 도메인에 사용되는 용어를 코드에 반영하려고 하자
ex)
public OrderState {
STEP1, STEP2, STEP3
}
➡️ 이렇게 정의하면, 사용하는 곳에서 if (order.OrderState = STEP1) 라고 할텐데 이해가 쉽게 될까? 🙅🏻♀️
의미있고 알아보기 쉬운 용어를 사용하자

HTTP 요청을 Application Layer이 필요하는 형식으로 변환하고, Application Layer의 반환값을 HTTP 응답으로 변환해주는 역할
로직을 직접 수행한다기 보다는, 도메인 모델에 로직 수행을 위임한다
이게 진짜 중요하다.
보통 원래 코드를 보면, Controller - Service - Repository 이 세 계층만 사용하고 비즈니스 로직은 Controller에서 호출되는 Service에 다 밀어넣는 경우가 있다 (이전의 나도 그랬다)
➡️ Application Service의 메서드는 최소 5줄!(너무 길지 않아도 된다는 말) 비즈니스 로직은 Domain Service에서 수행해야 한다
도메인의 핵심 로직 구현
ex) 주문 도메인
RDBMS 연동 처리, Redis 등의 데이터 연동 처리, 메시징 큐에 메세지 전송/수신 기능 구현
상위 계층은 하위 계층으로만 의존한다
➡️ Presentation Layer은 Appliation Layer에 의존한다, 하지만 Infrastructure Layer는 Domain Layer에 의존하지 않는다
엄격한 계층구조라면 한 단계 하위 계층만 의존해야 하지만, 편리함을 위해 Application Layer가 바로 Infrastructure Layer를 의존할 수 있다
(의존이라는 건, 가져와서 쓰는 것)