다양한 계층이 존재하는데 과연 어떤 계층의 테스트 코드 부터 작성해야 할 것인가 하는 것이 고민이 되서 적어 봅니다.

개발을 할 때 나뉘는 주요 계층들은 보통 Spring MVC책에 나와있는 계층과 비슷할 것입니다.

사용자 삽입 이미지다른 모든 계층에서 사용될 수 있는 도메인 계층
JSP와 같이 사용자와 접촉을 하는 지점인 UI 계층
UI 계층과 Service 계층을 이어주고, 사용자의 입력을 바인딩, 검증 하는 등의 책임이 있는 Web 계층
Web 계층과 Persistence 계층을 이어주며 그 사이에서 데이터를 가지고 별도의 작업을 수행하는 Service 계층
데이터베이스에 쿼리를 날리는 Persistence 계층

이 중에서 어떤 순서대로 테스트를 작성해야 할지 고민이 됩니다. 테스트 작성이 곧 개발이기 때문에 이 질문은 다시 어떤 순서대로 개발을 해야 할지 고민하는 것이 됩니다.

도메인은 비즈니스 로직을 담고 있으며 모든 계층에서 사용해야 하기 때문에 즉 이말은 다시 모든 계층에서 필요로 하기 때문에 가장 먼저 개발 해야 할 것 같습니다.

그러나...사용자의 요구 사항을 바탕으로 비즈니스 로직을 구현하게 될 텐데 그 요구 사항이라는 것은 오히려 화면을 통해서 더 잘 뽑아 낼 수 있으니까 화면을 먼저 가장 먼저 개발 해야 할 것 같다는 생각도 듭니다.

하지만 DB가 역시 먼저 자리를 잡고 있어야 모든 계층을 구현할 때 안정적인 느낌이 들며  그래서 그런지 모르겠지만 항상 모델 -> DB만들기 -> DAO -> Service -> Controller -> JSP 순으로 보통 만들어 왔습니다.

이렇게 만들다 보면... DAO 계층에는 Service 계층에서 사용할 것들이 만들어져 있고 Service 계층에서는 Controller들에서 사용할 것들이 만들어져 있어야 할텐데 그러한 것들을 미리 예측해서 만들게 됩니다.

그러다 보면 결국 어떤 코드는 사용자의 요청 -> JSP -> Controller -> Service -> DAO 와 같이 이전과 완전히 반대 방향으로 구현이 진행되기도 합니다.

@.@

어떤 순서대로 구현해야 할까요;;;

잠정적인 결론
도메인 -> UI -> Controller -> Service -> DB 스키마 -> DAO

이때당시 이렇게 결론지은 이유.

UI가 꼭 최종 산출물인 JSP가 아니더라도, 손으로 그린 그림이든, HTML이나 PPT로 그린 프로토타입이 필요하다고 생각했습니다. 그걸 보고 컨트롤러에를 구성하고.. 쭈루룩.  내려가는 순이었는데. 막상 개발은 DAO부터 역행해서 하고 있었습니다. ㅋㅋ