[스프링SPRING]스프링 웹계층 : 서비스(비즈니스 로직), 컨트롤러(프레젠테이션)

[스프링SPRING]스프링 웹계층 : 서비스(비즈니스 로직), 컨트롤러(프레젠테이션)

스프링 웹계층

https://devlog-wjdrbs96.tistory.com/m/209

서비스 계층(비즈니스 계층)

  • 사용자의 요구사항을 일치시켜서 구현하는 계층
  • DAO와 Controller 사이를 연결
  • 고객마다 다르게 처리해야하는 부분을 처리
  • DB와 무관하게 처리할 수 있는 영역
  • 컨트롤러(외부호출)의 영속계층(persistence)종속을 막아준다.
  • 컨트롤러가 트렌젝션, 예외처리등을 모두 처리해야하지만 종속적인 상황을 벗어나면 컨트롤러는 컨트롤러의 역할만 할 수 있다.
  • @Service 의미 : 해당 클래스를 서비스 객체로 처리(스프링에서 인식할 수 있게 만듦)

https://dev.to/urunov/truly-there-is-no-difference-in-implementation-integrating-spring-with-jersey-and-integrating-jersey-with-spring-m2k




프리젠테이션 계층(컨트롤러)

  • 컨트롤러 + 뷰
  • 기능
    • 공통적인 URI경로, 각 기능별 URI 지정
    • 결과처리, 페이지 이동, 예외처리
  • 컨트롤러는 모듈로서 특정 메뉴, 기능묶음 단위로 생성한다.
  • URI를 어떤 방식으로 처리할 것인지에 대한 설계가 필요하다.
    • GET방식
      • 외부에서 접근해오는 페이지 (주로 입력페이지)
      • 정보를 조회하는 페이지
    • POST방식
      • 데이터를 처리해야하는 페이지




MemberService.java 인터페이스 생성

1
2
3
4
5
6
7
8
9
package com.itwillbs.service;

import com.itwillbs.domain.MemberVO;

public interface MemberService {
// 회원 가입 (일반회원가입테이블에 sns계정 컬럼 추가하기)
// 일반적으로는 DAO랑 같은 메소드명을 사용하여 일관성을 유지한다
public void insertMember(MemberVO vo);
}




MemberServiceImpl.java 클래스 생성

  • MemberService 인터페이스를 구현
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package com.itwillbs.service;

import javax.inject.Inject;

import org.springframework.stereotype.Service;

import com.itwillbs.domain.MemberVO;
import com.itwillbs.persistence.MemberDAO;

@Service
public class MemberServiceImpl implements MemberService {

//DB와 연결 (의존주입)
@Inject
private MemberDAO mdao;

@Override
public void insertMember(MemberVO vo) {
//컨트롤러 -> 서비스 호출 -> DAO 호출 -> Mapper -> DB
System.out.print("S : 회원가입동작");
if(vo == null) {
//처리
return;
}
mdao.insertMember(vo);
}
}




root-context.xml 코드추가

1
2
3
	<!-- 서비스패키지(com.itwillbs.service)와 연결  -->
<context:component-scan base-package="com.itwillbs.service" />
</beans>




MemberServiceTest.java 테스트 클래스 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package com.itwillbs.test;

import javax.inject.Inject;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.itwillbs.domain.MemberVO;
import com.itwillbs.service.MemberService;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration( locations = {"file:src/main/webapp/WEB-INF/spring/root-context.xml"})
public class MemberServiceTest {
//서비스객체를 직접 생성하지 않고 의존 주입
@Inject
private MemberService service;

@Test
public void insertServiceTest() throws Exception {
MemberVO vo = new MemberVO("uesrGang", "4321", "강조지", "jorge@com", null, null);
service.insertMember(vo);
}
}