본문 바로가기
개발입문/SPRING 게시판 만들기

[SPRING] 비즈니스 계층 생성

by 양히◡̈ 2022. 10. 12.

비즈니스계층

비즈니스계층은 고객의 요구사항을 반영하는 계층으로, 프레젠테이션 계층과 영속 계층의 중간다리 역할을 한다.
주로 'Service'로 표현된다.
비즈니스 계층을 만들 때는, service 인터페이스와 그 인터페이스를 상속 받는 Implements 클래스를 생성한다.

 

src/main/java > new InterFace > package: kr.icia.service / name: BoardService

package kr.icia.service;

import java.util.List;

import kr.icia.domain.BoardVO;

public interface BoardService {
	public void register(BoardVO board); //등록
	
	public BoardVO get(Long bno); //읽기
	
	public boolean modify(BoardVO board); //수정
	
	public boolean remove(Long bno); //삭제
	
	public List<BoardVO> getList(); //목록 불러오기
}

 

 

src/main/java > kr.icia.service > new Class > name: BoardServiceImp > Interfaces: BoardService

// BoardService를 implements 할 새로운 Class 생성 작업

이 클래스는 상속을 받았기 때문에, 부모의 메소드를 그대로 따오며 Override할 수 있다.

 

package kr.icia.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import kr.icia.domain.BoardVO;
import kr.icia.mapper.BoardMapper;
import lombok.AllArgsConstructor;
import lombok.Setter;
import lombok.extern.log4j.Log4j;

@Log4j	//lombok 로그 이용
@Service	//이 클래스가 서비스 계층을 맡는다고 알림
@AllArgsConstructor	//모든 매개변수에 대한 생성자 생성 (생성자 여러개 아님)
public class BoardServiceImp implements BoardService {
	@Setter(onMethod_ = @Autowired)
	private BoardMapper mapper;
	
	@Override
	public void register(BoardVO board) {
		log.info("register......" + board);
		mapper.insertSelectKey(board);
	}

	@Override
	public BoardVO get(Long bno) {
		log.info("get......" + bno);
		return mapper.read(bno);
	}

	@Override
	public boolean modify(BoardVO board) {
		log.info("modify......" + board);
		return mapper.update(board)==1;
	}

	@Override
	public boolean remove(Long bno) {
		log.info("remove......" + bno);
		return mapper.delete(bno)==1;
	}

	@Override
	public List<BoardVO> getList() {
		log.info("getList......");
		return mapper.getList();
	}

}

 

 

작성 후 아래 경로에서 root-context.xml 파일을 연다.

Namespaces 에서 context 를 체크한다. (이전에 했다면 생략 가능하다.)

<mybatis-spring:scan base-package="kr.icia.mapper" /> 아래에 코드를 추가한다.

	<context:component-scan
		base-package="kr.icia.service">
	</context:component-scan>

스캔하면 해당 패키지를 읽고 메모리에 자동으로 올려준다.

이제 테스트 클래스에서 테스트를 진행해볼 것이다.

src/test/java > new Class 생성 > package: kr.icia.service / name: BoardServiceTests

package kr.icia.service;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import kr.icia.domain.BoardVO;
import lombok.Setter;
import lombok.extern.log4j.Log4j;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j
public class BoardServiceTests {
	//어노테이션에 전달값이 여러개의 배열 형태라면 {} 이용
	@Setter(onMethod_ = {@Autowired})
	private BoardService service;
	
	@Test
	public void testRegister() {
		BoardVO board = new BoardVO();
		board.setTitle("새로 작성하는 글 0928");
		board.setContent("새로 작성하는 내용 0928");
		board.setWriter("새로운 작성자 0928");
		
		service.register(board);
		log.info("생성된 게시물 번호: " + board.getBno());
	}
}

새로운 게시글을 만들고 제목, 내용, 작성자를 부여하고, 시퀀스를 통해 잘 생성됐는지 확인하는 절차를 거쳤다.

테스트가 잘 이루어졌다.

 

 

 

댓글