비즈니스 계층, 서비스는 컨트롤러와 DAO사이에 위치해서 서로 의존성이 높아지는것을 방지하는 완충제 역할을 한다.
컨트롤러에서 DAO를 바로 호출할 수 있지만, 그러면 컨트롤러와 DAO가 종속되어버린다(강한결합).
그래서 컨트롤러와 DB의 다이렉트 연결을 한단계 떨어뜨려 종속되는것을 막는 것.
=> 외부 호출에 대한 영속계층(persistence) 종속성을 막는다.
종속성을 떨어뜨린다는건 매우쉽게 말하면 컨트롤러는 컨트롤러의 역할만 하게 하고, 그 외의 역할은 못하게 하는 것.
이렇게 하는 이유는 중간에 DB를 바꾼다거나 할때 바뀌는 부분만 갈아끼우기 형태로 바꿀 수 있기 때문이다.
종속이 되면 서로 강한결합이 되어있으니 모두 다 뜯어고쳐야 하는 상황이 발생하게된다.
1. 서비스 패키지 만들고 객체 등록하기
1) src/main/java 밑에 com.myspring.service 패키지를 만들고 인터페이스, 구현을 한다.
com.myspring.service/MemberService.java
com.myspring.service/MemberServiceImpl.java
2) root-context.xml 에 생성한 패키지를 등록한다.
이 파일에 패키지를 연결시키고 어노테이션을 붙이면 실제 객체로 인식된다.
<context:component-scan base-package="com.myspring.service" />
2. MemberService에 메서드 구현.
** DAO에 DB동작 메서드가 있어야한다.
1) MemberService.java에 추상메서드 만들기.
public interface MemberService {
// 시간정보를 가져오는 동작
public String getTimeS();
}
2) MemberServiceImpl.java에 구현하기
Service에서 값을 리턴하면 Service를 호출했던 컨트롤러로 값이 리턴된다.
@Service
public class MemberServiceImpl implements MemberService{
// 서비스는 dao, 컨트롤러의 중간단계이므로, dao객체가 필요하다.
@Inject
private MemberDAO dao;
@Override
public String getTimeS() {
String time = dao.getTime(); // DAO의 메서드 호출.
return time;
}
}
3. 컨트롤러에서 받은 값 저장하기
@Controller
@RequestMapping("/member/*")
public class MemberController {
@Inject
private MemberService service;
@RequestMapping(value="/dbTime", method=RequestMethod.GET)
public void timeCall(Model model) {
// DB의 시간정보를 가져와서 view에 출력하기.
String time = service.getTimeS();
model.addAttribute("time", time);
}
}
4. view에서 보여주기
Controller에 @RequestMapping("/member/*")을 해놔서 views/member/dbTime.jsp로 view페이지를 만들어야한다.
<body>
<h2>dbTime.jsp</h2>
전달받은 정보: ${time }
</body>
정리하자면
View → Controller → Service → DAO → DB → DAO → Service → Controller → View 순으로 데이터가 흐른다.
'Back-end > Spring' 카테고리의 다른 글
Spring) 로그인 동작 만들기(테스트 형태) (0) | 2022.04.29 |
---|---|
Spring) Contoller 리턴 타입에 따른 매핑 방법 (0) | 2022.04.27 |
Spring) 스프링 Controller 개념과 페이지 연결(주소매핑) (0) | 2022.04.27 |
Spring) DB연결 방법 3가지(직접, Bean객체, MyBatis) (0) | 2022.04.25 |
Spring) JUnit을 활용하여 테스트 코드 작성하기 (0) | 2022.04.23 |