스프링에서 추상화를 어디까지, 어떻게 해야하는지에 대해 학습한다.
아키텍처에 대해 조금 관심 있으신 분들이라면 레이어 아키텍처에서 지금 제시드린 코드가 클린 아키텍처 쪽으로 점점 변화해가고 있는 것을 확인하실 수 있을 겁니다.
혹시 이런 생각하셨나요? “서비스가 한번 생성돼서 영원히 같은 일을 해야 하는 것과 별개로, 요구사항에 따른 역할 분리를 위해 추상화 되는 것이 낫지 않나?”라는 생각이 드시나요? 그리고 “그러는 편이 컨트롤러를 테스트하기 편해지는 방향으로 가는 게 낫지 않겠느냐”라는 생각이 드셨다면?
너무 좋은 의견입니다. 사고가 점점 헥사고날 아키텍처를 향해 나아가고 계시네요!
interface PostRepository implements JpaRepository<PostEntity, Long> {
}
@Repository
class PostRepositoryImpl implements PostRepository {
// ...
}
네, 다수의 회사에서 이야기하신 방식에 따라 개발하고 있는 것으로 저도 알고 있습니다. 그리고 그렇게 하는 것이 마음에 드셨다면 그렇게 하셔도 됩니다. 사실 JpaRepository를 구현한다해도 이 부분은 얼마든지 fake로 대체할 수 있거든요. 이 또한 선택사항입니다. 다만 강의에서 추구하는 바가 Jpa조차 완전히 분리되어 도메인이 순수 자바로 구성되어있기를 원하기 때문입니다. 이는 클린 아키텍처의 방법론 중 하나인 헥사고날 아키텍처에서 포트 어댑터 패턴과 맥을 같이합니다. 참고하실만한 자료 같이 올려드립니다 : ) 참고 링크