Helmi

게시판 프로젝트 - 비즈니스 계층 ①비즈니스 계층의 설정 본문

SpringBoot

게시판 프로젝트 - 비즈니스 계층 ①비즈니스 계층의 설정

Helmi 2023. 5. 2. 12:18

비즈니스 계층 : 고객의 요구사항 반영하는 계층. 프레젠테이션 계층과 영속 계층의 중간 다리 역할 하게 됨.

영속 계층은 데이터베이스 기준으로 해서 설계 나눠 구현하나 비즈니스 계층은 로직 기준으로 해서 처리

 

일반적으로 비즈니스 영역에 있는 객체들은 '서비스(service)'라는 용어 많이 사용 함.


com.board.service 패키지 작성

설계시 각 계층 간 연결은 인터페이스 이용해 느슨한(loose) 연결(결합)을 함.

게시물은 BoardService 인터페이스인터페이스 구현한 BoardServiceImpl 클래스 선언

 

BoardService.java 인터페이스

package com.board.service;

import java.util.List;

import com.board.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();
}

BoardService 메서드 설계시 메서드 이름은 현실적 로직 이름 붙이는 것이 관례.

명백히 반환해야 할 데이터 있는 'select'해야 하는 메서드는 리턴 타입 지정 가능

게시물은 특정 게시물 가져오는 get() 메서드와 전체 리스트 구하는 getList() 경우 처음부터 메서드의 리턴 타입 결정해 진행 가능

 

BoardService 인터페이스를 구현하는 구현테는 BoardServiceImple 이라는 클래스로 작성

 

약간의 로그 기록 할 수 있는 정도 코드 작성

 

BoardServiceImpl.java 일부

package com.board.service;

import java.util.List;

import org.springframework.stereotype.Service;

import com.board.domain.BoardVO;
import com.board.mapper.BoardMapper;

import lombok.AllArgsConstructor;
import lombok.extern.log4j.Log4j;

@Log4j
@Service
@AllArgsConstructor
public class BoardServiceImpl implements BoardService{

	//spring 4.3이상에서 자동 처리
	private BoardMapper mapper;
	
	@Override
	public void register(BoardVO board) {}
  ......
}

BoardServiceImpl.java에 가장 중요한 부분은 @Service 어노테이션

@Service계층 구조상 주로 비즈니스 영역 담당하는 객체임을 표시하기 위해 사용

작성된 어노테이션은 패키지 읽어 들이는 동안 처리 됨

BoardServiceImpl가 정상적으로 동작하기 위해서는 BoardMapper 객체 필요

 

@Autowired같이 직접 설정해줄 수 있고, Setter 이용해 처리 가능. Lombok 이용시 아래와 같이 만들 수 있음

@Log4j
@Service
public class BoardServiceImpl implements BoardService{

	@Setter(onMethod_ = {@Autowired})
	private BoardMapper mapper;

스프링 4.3부터는 단일 파라미터 받는 생성자 경우 필요한 파라미터 자동으로 주입 가능

@AllArgsContructor모든 파라미터 이용하는 생성자를 만듬.


스프링의 서비스 객체 설정(root-context.xml)

비즈니스 계층 인터페이스와 구현 클래스 작성 되면, 스프링 빈으로 인식 위해 root-context.xml에 @Service 어노테이션 있는 com.borad.service 패키지 스캔(조사)하도록 추가

 

root-context.xml 추가

<context:component-scan base-package="com.board.service">
</context:component-scan>