The Debugging Chronicles : "코드의 미학"

[Spring] 서비스 레이어 나누기 본문

Spring

[Spring] 서비스 레이어 나누기

sweetseonah1004 2024. 10. 10. 10:53

 

생각1. DAO가 굳이 매개변수 자리에 있어야 하나?

- view에서 쓰지 않는데 굳이 인자로 삼아야할까?

생각2. 무언가를 인자로 삼으면, 결합도가 높아진다.

 

개발을 하면 가장 변동이 심한 것 중하나가 DBMS이다

예상 동시 이용 인원 <<< 실제 인원이 더 많다면 서버 다운...

DBMS 이관해야하면 DAO가 바뀐다.

MySQL BoradDAO

Oracle BoradOracleDAO

Maira MairaBoradDAO 

DAO를 인자로 작성하면 이관작업할 떄 마다

인자를 따라 다니면서 다 바꿔야한다. ==> 유지보수가 아주 불편한 상태이다

 

 1. DAO를 멤버변수로 위치 시킨다면??

=> 그래도 여전히 이관작업할 때 마다 코드를 변경해야함

     컴파일 >> 결합도가 여전히 높음

 

그럼 DAO 상위 객체를 찾아보자 바로 service이다

2. service 를 멤버 변수로 위치시킴

DAO를 멤버변수로 삼고 있다는 것이 특징!

이관 작업 시 contorller.java에 변경 사항적용 안됨

 

 

'

 

의존 주입 필요

@autowired


BoardController.java

package com.koreait.app.view.board;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.koreait.app.biz.board.BoardDTO;
import com.koreait.app.biz.board.BoardService;

@Controller
public class BoardController {
	@Autowired
	private BoardService boardService;
	
	@RequestMapping(value="/main.do")
	public String main(BoardDTO boardDTO, Model model) {
		List<BoardDTO> datas=boardService.selectAll(boardDTO);
		model.addAttribute("datas", datas);
		return "main";
	}
	
	@RequestMapping(value="/insertBoard.do", method=RequestMethod.GET)
	public String insertBoard() {
		return "insertBoard";
	}
	@RequestMapping(value="/insertBoard.do", method=RequestMethod.POST)
	public String insertBoard(BoardDTO boardDTO) {
		boolean flag=boardService.insert(boardDTO);
		System.out.println("insertBoard ["+flag+"]");
		return "redirect:main.do";
	}
}

 

loginController.java

package com.koreait.app.view.member;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.koreait.app.biz.member.MemberDAO;
import com.koreait.app.biz.member.MemberDTO;
import com.koreait.app.biz.member.MemberService;

import jakarta.servlet.http.HttpSession;

@Controller
public class LoginController {
	@Autowired
	private MemberService memberService;
	
	@RequestMapping(value="/login.do", method=RequestMethod.GET)
	public String login() {
		return "login";
	}
	@RequestMapping(value="/login.do", method=RequestMethod.POST)
	public String login(HttpSession session, MemberDAO memberDAO, MemberDTO memberDTO) {
																// 커맨드 객체
		memberDTO = memberService.selectOne(memberDTO);
		
		String viewName="redirect:login.do";
		if(memberDTO != null) {
			session.setAttribute("userID", memberDTO.getMid());
			viewName = "redirect:main.do";
		}
		return viewName;
	}	
	
	@RequestMapping("/logout.do")
	public String logout(HttpSession session) {
		session.removeAttribute("userID");
		return "redirect:login.do";
	}
}

 

BoardServiceImpl.java

package com.koreait.app.biz.board;

import java.util.List;

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

@Service("boardService")
public class BoardServiceImpl implements BoardService {
	@Autowired
	private BoardDAO boardDAO;

	@Override
	public List<BoardDTO> selectAll(BoardDTO boardDTO) {
		return boardDAO.selectAll(boardDTO);
	}

	@Override
	public BoardDTO selectOne(BoardDTO boardDTO) {
		return boardDAO.selectOne(boardDTO);
	}

	@Override
	public boolean insert(BoardDTO boardDTO) {
		return boardDAO.insert(boardDTO);
	}

	@Override
	public boolean update(BoardDTO boardDTO) {
		return boardDAO.update(boardDTO);
	}

	@Override
	public boolean delete(BoardDTO boardDTO) {
		return boardDAO.delete(boardDTO);
	}
}

 

BoardService.java

package com.koreait.app.biz.board;

import java.util.List;

public interface BoardService {
	List<BoardDTO> selectAll(BoardDTO boardDTO);
	BoardDTO selectOne(BoardDTO boardDTO);
	boolean insert(BoardDTO boardDTO);
	boolean update(BoardDTO boardDTO);
	boolean delete(BoardDTO boardDTO);
}

 

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
						http://www.springframework.org/schema/beans/spring-beans.xsd
						http://www.springframework.org/schema/context
						http://www.springframework.org/schema/context/spring-context-4.2.xsd">
	
	<context:component-scan base-package="com.koreait.app.view.member" />
	<context:component-scan base-package="com.koreait.app.view.board" />
	<context:component-scan base-package="com.koreait.app.biz.member" />
	<context:component-scan base-package="com.koreait.app.biz.board" />
	
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="viewResolver">
		<property name="prefix" value="./" />
		<property name="suffix" value=".jsp" />
	</bean>	
	
</beans>

'Spring' 카테고리의 다른 글

[Spring] 비동기 처리  (0) 2024.10.14
[Spring] 2-Layerd 아키텍처  (0) 2024.10.10
[Spring] 2주차 (9일) 과제 핵심 포인트  (0) 2024.10.10
[Spring] Command 객체  (0) 2024.10.08
[Spring] 어노테이션 Controller, RequestMapping  (0) 2024.10.08