[Spring Boot] Controller, Service, DAO, Mapper란?

메리·2023년 3월 20일
1

스프링 부트

목록 보기
4/5

다음은 MVC(Model, View, Controller) 구조이다.

전체적인 데이터 흐름은 Web Browser(웹 브라우저)가 데이터를 요청하면 DB(데이터베이스)에서 데이터를 반환하여 웹 브라우저가 최종적으로 데이터를 받는다.

1. Controller

Controller는 웹 브라우저의 요청을 전담하여 처리한다. 다음 Service를 호출한다.

2. Service

Service는 비즈니스 로직을 수행한다. DB에 접근하는 DAO를 이용해 결과값을 받는다.

3. DAO

DAO는 DB에 접속하여 비즈니스 로직 실행에 필요한 쿼리를 호출한다.

4. DB

DB에서 쿼리를 실행하고 결과값을 반환한다.

5. DTO

각 계층이 데이터를 주고받을 때 사용하는 객체를 말한다. 각 계층이란 View, Controller, Service, DAO, DB를 말한다.

DTO

데이터를 주고받을 때 사용하는 객체이다.

[BoardDto.java]
package board.board.dto;

import lombok.Data;

@Data
public class BoardDto {
	
	private int boardIdx;
	
	private String title;
	
	private String contents;
	
	private int hitCnt;
	
	private String creatorId;
	
	private String createdDatetime;
	
	private String updaterId;
	
	private String updatedDatetime;
}
 

Controller

[BoardController.java]
@Controller // 해당 클래스를 컨트롤러로 동작하게 한다.
public class BoardController {
	
	@Autowired
	private BoardService boardService;
	
	@RequestMapping("/apple")    // 이 주소로 접속하면 이 메서드를 호출한다.(매핑한다.)
	public ModelAndView openBoardList() throws Exception{
		ModelAndView mv = new ModelAndView("/apple/boardList");
		
        // 서비스를 호출한다.
		List<BoardDto> list = boardService.selectBoardList();
		mv.addObject("list",list);
		
		return mv;
	}
}

@Controller
해당 클래스가 컨트롤러 클래스라는 것을 알려준다. 사용자 요청이 들어오면 해당 컨트롤러가 호출된다.

@RequestMapping("/apple")
baseurl/apple로 접속하면 해당 어노테이션을 가진 메서드로 매핑된다.

Service

인터페이스와 인터페이스를 구현한 클래스를 만든다.

[BoardService.java]
package board.board.service;
import board.board.dto.BoardDto;
import java.util.List;

public interface BoardService {
	List<BoardDto> selectBoardList() throws Exception;
}
[BoardServiceImpl.java]
package board.board.service;
import board.board.dto.BoardDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import board.board.mapper.BoardMapper;

import java.util.List;

@Service
public class BoardServicelmpl implements BoardService {
	
	@Autowired
	private BoardMapper boardMapper;
	
	@Override
	public List<BoardDto> selectBoardList() throws Exception {
		// 서비스가 매퍼를 호출한다.
        return boardMapper.selectBoardList();
	}
}

@Service
해당 클래스가 서비스 클래스라는 것을 알려준다.

Service는 DAO를 호출한다. (여기서는 Mapper를 호출한다.)

Mapper

Mybatis(마이바티스)는 매퍼 인터페이스를 제공한다.
Mapper를 사용하면 일일이 DAO를 만들지 않고 인터페이스만을 이용해 더 편하게 개발 가능하다. 자바 코드와 SQL문(*.xml 형식)을 분리하여 편리하게 관리하도록 한다.

[BoardMapper.java]
package board.board.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import board.board.dto.BoardDto;

@Mapper
public interface BoardMapper {
	// SQL문을 호출한다.
	List<BoardDto> selectBoardList() throws Exception;
}

@Mapper
해당 인터페이스를 매퍼 인터페이스로 인식한다.

[sql.xml]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
   
<mapper namespace="board.board.mapper.BoardMapper">
  <select id="selectBoardList" resultType="board.board.dto.BoardDto">
     <![CDATA[
     	SELECT board_idx
     		 , title
     		 , hit_cnt
     		 , created_datetime
     	FROM t_board
       WHERE deleted_yn = 'N'
       ORDER BY board_idx DESC
     ]]>
  </select>
</mapper>
  • namespace: 매퍼의 전체 경로를 지정한다.
  • id: 매퍼 인터페이스와 해당 파일을 매칭 시키기 위해 매퍼 인터페이스의 메서드명과 동일하게 작성한다.
  • resultType: 결과값 형식 지정한다.

출처:
Spring boot - Controller, Service, DAO, Mapper

profile
하이루

0개의 댓글