🚀 Spring Framework로 프로젝트를 진행하고자 해서 패키지 구조를 짜는 도중 의문점이 생겼다
이전 프로젝트에서 패키지 구조를 Controller.java / Service.java / Mapper.java / Mapper.xml 로 사용을 했다.
이 구조가 스프링 공부를 하고 첫 프로젝트의 구조였다.
다른 구조를 찾아봤더니 Controller.java / Service.java / DAO.java / Mapper.xml 로 짜여져 있었다.
육안으로만 확인하면 Mapper.java와 DAO.java만 바꾸면 된다 생각을 하지만
자세히 보면 Mapper.java는 인터페이스 형태이고 DAO.java는 인터페이스와 클래스가 결합이 된 형태이다.그 외 다른 점이 분명 있을 것이다.
두 가지를 비교해보자.
🚀 Mapper ?
Mybatis mappingxml에 기재 된 SQL문을 호출하기 위한 인터페이스이다.
- mapper 네임스페이스는 패키지명을 포함한 인터페이스 명으로 작성한다.
- SQL id는 인터페이스에 정의된 메시드명과 동일하게 작성
- mapper 인터페이스는 개발자가 직접 작성한다
🚀 DAO ?
Data Access Object의 약자로 DB에 접근 해 데이터를 조회, 조작하는 기능을 담당하는 객체
효율적인 보안성과 커넥션 관리때문에 효율적으로 사용이 된다.
- sqlSession을 등록해줘야 한다.
- DAO 인터페이스와 인터페이스를 구현한 DAO클래스를 생성한다.
- Mapper 인터페이스를 사용하지 않았을 때는 네임스페이스+"."+ SQL ID로 지정해서 SQL을 호출한다.
- session.selectOne(("com.pro.mapper.UserMapper.getReplyer, bno"))
- selectOne, insert, delete 등 제공하는 메서드를 사용해야 한다.
- 버그 확률이 높다
DAO와 Mapper가 다르단 점은 인지하고 있었지만, 실질적으로 차이점을 거의 몰랐다고 해도 무방하다.
개인적으로 mapper의 장단점이 확실 해 매력을 많이 느꼈다.
DB 설정 변경 시 수정해야 할 부분이 너무 많고, 특정 DB에 종속적이라는 점을 느꼈지만,
쿼리문을 짤 때 코드와 분리되어 있어서 보기도 편했고, 수정도 편했다.
'Backend > SPRING' 카테고리의 다른 글
[Spring] 테스트 주도 개발 (0) | 2023.02.07 |
---|---|
[Spring] Spring Security (0) | 2023.02.01 |
[Spring] GET POST 한글처리 (0) | 2023.01.31 |
[Spring] Model (0) | 2023.01.17 |
[Spring]MyBatis (0) | 2022.08.01 |