
Spring + MyBatis에 익숙한 상태에서 JSP/Servlet 프로젝트를 보면 DAO와 XML 파일의 역할이 헷갈릴 수 있다.
특히 MemoProject의 sql.xml은 SQL이 들어 있기 때문에 MyBatis의 Mapper XML과 비슷해 보인다.
평소 익숙했던 구조는 다음과 같다.
Controller
↓
Service
↓
Mapper
↓
Mapper.xml
↓
MyBatis
↓
DB
Mapper XML에는 단순 SQL뿐만 아니라 MyBatis가 SQL을 실행하고 결과를 객체로 매핑하기 위한 정보까지 들어간다.
<select id="userSelect" resultType="User">
SELECT ...
</select>
MyBatis가 JDBC의 많은 작업을 대신 처리해준다.
MemoProject에서는 다음과 같다.
Servlet
↓
Service
↓
DAO
↓
JDBC
↓
DB
그리고 SQL은 별도의 sql.xml에 저장해 두었다.
sql.xml
├─ userSelect
├─ memoListSelect
├─ memoDetail
├─ memoDelete
├─ insertUser
├─ memoCreate
└─ memoUpdate
즉 sql.xml은 DAO가 사용할 SQL을 모아놓은 파일이다.
예를 들어 sql.xml에:
<entry key="userSelect">
SELECT user_no, user_pw, user_name
FROM tb_users
WHERE user_id = ?
</entry>
가 있다면 DAO가 이 SQL을 가져와서 JDBC로 직접 실행한다.
sql.xml
↓
SQL 가져오기
↓
MemoDAOImpl
↓
Connection
↓
PreparedStatement
↓
?에 값 설정
↓
executeQuery()
↓
ResultSet
↓
User 객체 생성
따라서 DAO가 DB 접근의 실제 작업을 담당한다.
| Spring + MyBatis | JSP/Servlet MemoProject |
|---|---|
| Mapper | DAO |
| Mapper.xml | sql.xml |
| MyBatis | JDBC 코드 |
#{userId} | ? + setString() |
| MyBatis가 결과 매핑 | DAO가 ResultSet을 직접 처리 |
따라서 sql.xml을 DAO 그 자체로 보면 안 된다.
sql.xml= SQL을 저장해 놓은 곳
DAO= 그 SQL을 가져와 JDBC로 실제 DB 작업을 하는 곳
Spring + MyBatis에서는 개발자가 많은 JDBC 작업을 직접 하지 않는다.
Mapper
↓
MyBatis
↓
JDBC 처리
↓
DB
반면 MemoProject에서는:
DAO
↓
JDBC 직접 처리
↓
DB
이다.
그래서 이 프로젝트를 공부할 때는 sql.xml만 따로 보기보다는 MemoDAOImpl.java와 함께 보는 것이 중요하다.
MyBatis의 Mapper가 담당하던 DB 접근 작업을 MemoProject에서는 DAO + JDBC가 직접 담당하고,
sql.xml은 그 DAO가 사용할 SQL을 따로 저장해 놓은 파일이다.