이 글을 읽기 전에 먼저 클린 아키텍처의 개념에 대해 인지하고 있어야 원활한 이해가 가능합니다. 따라서 아래 글을 읽어보고 오시는 것을 권장드립니다.
사이드 프로젝트를 진행하면서 서버 배포에 대한 고민을 끝내기 전, 개발을 미리 시작했고 가장 대중적인 MySql을 데이터베이스로 선택했습니다. 하지만 개발 도중, 배포할 클라우드를 OCI로 선택하게되면서, OCI에서 무료로 제공하는 Oracle Database으로 교체하게 되었습니다.
JPA라는 ORM을 사용 중이던 저는 당연히 기존 소스 코드에는 영향이 없을 줄 알았습니다. JPQL을 사용하지 않았기 때문에, 쿼리문이 소스 코드 내에 존재하지 않았으니까요. 그런데 웬걸, DB 교체 후 애플리케이션을 실행하니 DB 관련 몇 가지의 에러들이 터졌습니다.
주요 에러 중 한가지는 엔티티 클래스에 @Column 어노테이션의 속성 중, columnDefinition 을 사용하여 제한없는 문자열임을 선언했었는데, 이 속성 값이 MySql은 TEXT였는데, Oracle의 경우 CLOB라는 타입을 사용해야 했습니다. 또한 @ColumnDefault의 속성 값도 기존 flase 값은 사용할 수가 없었고 0 또는 1을 사용해야 했습니다.
그나마 ORM을 사용한 덕분에 큰 변동사항은 없었지만, 이 문제를 계기로 도메인 계층에 존재하는 규칙이나 비즈니스 로직들이 외부 영향을 받지 않도록 하여 비즈니스의 가치를 온전하게 보존할 수 있는 아키텍처를 경험해보고 싶다는 생각이 강하게 들었고, 클린아키텍처를 도입해보기로 했습니다.

위 그림을 다시보며, 저는 제가 이해하기 편하도록 아래와 같이 계층을 다시 정의했습니다.