Back-end/Spring

Spring) 비즈니스 계층. 서비스(Service)란?

luana_eun 2022. 5. 2. 15:34
728x90

비즈니스 계층, 서비스는 컨트롤러와 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 순으로 데이터가 흐른다.

728x90