DAO와 sql.xml 파일의 해석

lee·2026년 8월 31일

Servlet/JSP

목록 보기
5/7

Spring + MyBatis에 익숙한 상태에서 JSP/Servlet 프로젝트를 보면 DAO와 XML 파일의 역할이 헷갈릴 수 있다.

특히 MemoProject의 sql.xml은 SQL이 들어 있기 때문에 MyBatis의 Mapper XML과 비슷해 보인다.


1. Spring + MyBatis 구조

평소 익숙했던 구조는 다음과 같다.

Controller
    ↓
Service
    ↓
Mapper
    ↓
Mapper.xml
    ↓
MyBatis
    ↓
DB

Mapper XML에는 단순 SQL뿐만 아니라 MyBatis가 SQL을 실행하고 결과를 객체로 매핑하기 위한 정보까지 들어간다.

<select id="userSelect" resultType="User">
    SELECT ...
</select>

MyBatis가 JDBC의 많은 작업을 대신 처리해준다.


2. JSP/Servlet 프로젝트의 구조

MemoProject에서는 다음과 같다.

Servlet
    ↓
Service
    ↓
DAO
    ↓
JDBC
    ↓
DB

그리고 SQL은 별도의 sql.xml에 저장해 두었다.

sql.xml
 ├─ userSelect
 ├─ memoListSelect
 ├─ memoDetail
 ├─ memoDelete
 ├─ insertUser
 ├─ memoCreate
 └─ memoUpdate

sql.xmlDAO가 사용할 SQL을 모아놓은 파일이다.


3. DAO가 실제로 하는 일

예를 들어 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 접근의 실제 작업을 담당한다.


4. MyBatis Mapper와 비교

Spring + MyBatisJSP/Servlet MemoProject
MapperDAO
Mapper.xmlsql.xml
MyBatisJDBC 코드
#{userId}? + setString()
MyBatis가 결과 매핑DAO가 ResultSet을 직접 처리

따라서 sql.xmlDAO 그 자체로 보면 안 된다.

sql.xml = SQL을 저장해 놓은 곳
DAO = 그 SQL을 가져와 JDBC로 실제 DB 작업을 하는 곳


5. 가장 중요한 차이

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을 따로 저장해 놓은 파일이다.

profile
반갑습니다

0개의 댓글