간단한 어플리케이션 구성요소
Dispatcher Servlet -> 컨트롤러 -> 서비스 -> DAO
프론트 서블릿(Dispatcher Servlet)
요청 경로를 분석하여 알맞은 컨트롤러에 전달 합니다.
컨트롤러 + 뷰(JSP)
- 컨트롤러 : 클라이언트가 요구한 기능을 실행하고 응답결과를 생성하는데 필요한 모델생성과 응답결과를 생성할 뷰를 선택합니다.
- 뷰 : 응답 결과 생성 및 클라언트에게 전달합니다.
서비스
실질적인 기능의 로직을 구현합니다.
DAO
DB관련 데이터 CRUD를 수행합니다.
서비스의 구현
콘솔,윈도우,웹 등 상관없이 서비스는 동일한 로직을 수행합니다.
서비스 메소드는 트랜잭션 단위로 수행되며 실행도중 실패할 경우 롤백하고 모두 성공해야 커밋됩니다.
ex) 비밀번호 변경
- 비밀번호 변경할 데이터 구함
- 데이터 없으면 익셉션 발생
- 비밀번호 변경
- DB반영
한개의 서비스 클래스가 제공하는 기능의 개수는 개발자가 선택하여 개발합니다.
일반적으로 1개의 서비스는 1개의 기능을 제공하며 만약 기능들이 동일 데이터를 사용한다면 1개의 서비스에 구현할 수 있습니다.
서비스 객체의 기능 메소드는 파라미터를 전달 받아 사용하는데 변수로 받거나 VO객체(커맨드객체)로 받아 사용합니다.
커맨드 객체는 스프링 폼을 사용하기 위함입니다.
서비스 객체가 정상적으로 실행될 경우 결과 값을 리턴하고 그렇지 않을 경우 익셉션이 발생하게 됩니다.
서비스 객체에서 DAO메소드만 호출하는 경우 서비스 객체를 쓰지않고 컨트롤러에서 직접 사용하는 경우도 있습니다.
팀 단위 개발시 패키지 구성은 모두가 동일한 규칙에 따라 구성해야합니다.
도메인 주도 설계
업무 로직이 복잡해지면 컨트롤러 - 서비스 - DAO 가 복잡해지게 됩니다.
이 경우 UI - 서비스 - 도메인 - 인프라 영역으로 구성합니다.
UI는 컨트롤러 역할을 하고 인프라는 DAO 역할을 합니다.
주요 도메인 모델과 업무 로직이 도메인 영역에 위치하고 정해진 패턴에 따라 모델을 구현합니다.
이를 통해 업무가 복잡해져도 일정 수준 복잡도로 코드를 유지할 수 있습니다.
'학습(구) > Spring 요약' 카테고리의 다른 글
프로필과 프로퍼티 파일 (0) | 2020.11.30 |
---|---|
JSON 응답과 요청 처리 (0) | 2020.11.29 |
날짜 값 변환, @PathVariable, 익셉션 처리 (0) | 2020.11.29 |
세션, 인터셉터, 쿠키를 사용한 로그인 구현 (0) | 2020.11.23 |
Spring - 검증 객체와 에러코드 (0) | 2020.10.20 |