인터페이스 계층이 하는 일
인터페이스 계층은 화면이나 외부 시스템이 백엔드와 만나는 첫 지점이다.
문제는 이 계층이 종종 너무 많은 책임을 떠안는다는 점이다. 검증, 권한, 유스케이스 조합, 응답 가공이 한 군데에 뭉치면 금방 복잡해진다.
이번 프로젝트에서는 인터페이스 계층의 역할을 다음처럼 제한했다.
- 요청을 애플리케이션이 이해하는 입력으로 변환한다
- 인증과 인가를 통과시킨다
- 적절한 유스케이스를 호출한다
- 외부 계약에 맞는 응답 형태로 다시 조립한다
분리 기준
핵심은 "도메인 규칙이 인터페이스 계층에 새지 않게" 하는 것이었다.
- 입력 검증은 인터페이스 계층에서 처리하되
- 핵심 비즈니스 규칙은 애플리케이션/도메인 계층에서 최종 보장하고
- 감사 로그나 요청 맥락 같은 공통 관심사는 공통 가드로 묶었다
이렇게 하면 HTTP 형태가 바뀌어도 도메인 로직 전체를 흔들 필요가 없고, 반대로 내부 유스케이스가 조금 바뀌어도 외부 계약을 더 안정적으로 유지할 수 있다.
운영 관점에서의 장점
인터페이스 계층 분리는 코드 취향 문제가 아니라 운영 비용과도 연결됐다.
- 요청 단위 로깅 포인트를 일관되게 넣기 쉬웠고
- 인증/인가 실패와 도메인 실패를 구분해 추적하기 쉬웠으며
- 특정 화면 문제인지 특정 유스케이스 문제인지 더 빨리 좁힐 수 있었다
결과적으로 인터페이스 계층은 "얇지만 단단한 번역층"이 되어야 했고, 이번 설계는 그 목표에 맞춰 조정되었다.