본문 바로가기
Web developer/Spring

[Spring] DAO와 Mapper의 차이

by doongjun 2021. 4. 18.

2021.04.18 - [Java/Spring] - [Spring] MVC Model 2

 

[Spring] MVC Model 2

MVC Model : Model + View + Controller 웹 어플리케이션 개발에서 각 기능에 따라 분리하여 개발하는 웹 어플리케이션 모델을 MVC 모델이라고 한다. MVC 모델의 종류에는 모델1과 2가 있다. MVC Model1 비즈니스

doongjun.tistory.com

인턴으로 일하게 된 회사에서 주로 Spring을 사용하기에 처음으로 Spring Framework를 공부하기 시작했다.

이전 포스팅처럼 Spring MVC 구조를 공부했으나 실제로 구조가 조금 달랐다. 그 이유는 다른 것이 아니라 DAO대신 Mapper 인터페이스를 사용했기 때문이었다.


이전 포스팅에서는,

1) 클라이언트 - Controller - Service - DAO - mapper.xml 의 형식이었다.

DAO 대신 Mapper를 사용하면,

2) 클라이언트 - Controller - Service - Mapper.java - mapper.xml 의 구조 형식이다.

 

2) 구조에서 Mapper.java는 단순 인터페이스이다.

하지만 1) 구조에서 DAO는 인터페이스와 클래스의 결합된 형태이다.

 

 DAO(Data Access Object)란? 

Database의 데이터에 접근하는 트랜잭션 객체이다. 즉, DB에 접근하여 데이터를 조회, 조작하는 기능을 전담한다. 사용하는 이유는 효율적인 커넥션 관리와 보안성, 저수준의 로직과 고급 비즈니스 로직을 분리하고, Domain 로직으로부터 DB관련 mechanism을 숨기기 위해 사용한다. 

 

 Mapper 인터페이스란? 

MyBatis 매핑xml에 기재된 sql을 호출하기 위한 인터페이스이다.

 

Mapper인터페이스를 사용하지 않을 경우
  • SqlSession을 등록해줘야 한다.
  • DAO인터페이스와 인터페이스를 구현한 DAO클래스를 생성해줘야한다.
  • Mapper인터페이스를 사용하지 않았을 때는 네임스페이스 + “.” + SQL ID로 지정해서 SQL을 호출해야한다.(예를들면 sesseion.selectOne(“com.test.mapper.TimeMapper.getReplyer, bno ))
  • selectOne, insert, delete 등 제공하는 메소드를 사용해야 한다.
  • 문자열로 작성하기 때문에 버그가 생길 수 있다.
  • IDE에서 제공하는 code assist를 사용할 수 없다.
Mapper인터페이스를 사용하는 방법
  • Mapper인터페이스는 개발자가 직접 작성한다.
  • mapper 네임스페이스는 패키지명을 포함한 인터페이스 명으로 작성한다.
  • SQL id는 인터페이스에 정의된 메서드명과 동일하게 작성한다

 

위치카테고리를 조회하는 예시를 들었을 때 아래와 같다.

 

LocationCategoryController

 @RequestMapping(value = "shop.do", method = RequestMethod.GET)
    public ModelAndView shop_management(ModelAndView mav) {

    	List<LocationCategory> locationcategorys = LocationCategoryService.getLocationCategories();
    	mav.addObject("locationcategorys",locationcategorys);
 
    	return mav;
    }

LocationCategoryService

 public List<LocationCategory> getLocationCategories() {
    	return LocationCategoryMapper.getLocationCategories();
    }

LocationCategoryMapper

public List<LocationCategory> getLocationCategories();

LocationCategory.xml

<select id="getLocationCategories" resultType="com.mvc.portal.dongjun.domain.LocationCategory">
		/*getLocationCategories*/
		select * from location_category
</select>

 

1) 클라이언트 - Controller - Service - DAO - mapper.xml 의 구조를 사용하는 것보다  2) 클라이언트 - Controller - Service - Mapper.java - mapper.xml 의 구조를 사용하는 것이 더 편리하다. 

단, DB에 접근하는 Layer명을 Mapper로 할지 DAO로 할지는 개발자의 기호에 맞게 구조를 잡으면 된다.

 


참고:

twofootdog.github.io/Spring-DAO%EC%99%80-Mapper%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90/

 

[Spring]DAO와 Mapper의 차이점 | 두발로걷는개

두발로걷는개의 Blog

twofootdog.github.io

 

'Web developer > Spring' 카테고리의 다른 글

[Spring] Swagger를 사용하여 Web API 문서화 해보기  (0) 2021.08.02
[Spring] IoC & DI  (0) 2021.07.27
[Spring] Annotation @정리2  (0) 2021.04.18
[Spring] Annotation @정리1  (0) 2021.04.18
[Spring] MVC Model 2  (0) 2021.04.18

댓글