DAO 버전 업 : JDBC → Template 패턴으로 업그레이드하는 방법
1. 기존 JDBCUtil 방식 문제점
• 매번 conn 생성 → pstmt 생성 → 실행 → close 4단계를 직접 작성해야 함
• 코드 반복이 심하고, 실수 발생 가능성 높음
• 핵심 관심사(SQL 실행) 외에 부가 작업(conn 관리 등)에 코드가 낭비됨
• 유지보수성과 확장성이 떨어짐
2. Template 패턴 도입 이유
• 반복적, 복잡한 로직을 모듈화해서 코드 간결화
• 핵심 비즈니스 로직(SQL 실행)만 집중 가능
• Spring이 제공하는 JdbcTemplate 클래스를 활용해 4단계(conn, pstmt, close)를 자동 처리
• 유지보수성과 생산성 크게 향상
3. JdbcTemplate 설정 방법
1) DataSource 설정 (applicationContext.xml)
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
<property name="username" value="hr"/>
<property name="password" value="hr"/>
</bean>
2) JdbcTemplate 등록
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
• JdbcTemplate은 내부적으로 DataSource를 사용하므로, 반드시 setter 주입해줘야 함
4. DAO 클래스 작성 방법
1) JdbcTemplate 주입
@Repository
public class BoardDAO {
@Autowired
private JdbcTemplate jdbcTemplate;
}
• 주의 : 객체가 메모리에 없으면 DI 불가 → 메서드 실행도 불가
2) CUD 작업 (INSERT/UPDATE/DELETE)
public int insertBoard(BoardVO vo) {
String sql = "INSERT INTO BOARD (TITLE, CONTENT, WRITER) VALUES (?, ?, ?)";
Object[] args = {vo.getTitle(), vo.getContent(), vo.getWriter()};
return jdbcTemplate.update(sql, args);
}
3) 단건 조회 (SELECT ONE)
public BoardVO getBoard(int bid) {
String sql = "SELECT * FROM BOARD WHERE BID = ?";
Object[] args = {bid};
return jdbcTemplate.queryForObject(sql, new BoardRowMapper(), args);
}
4) 다건 조회 (SELECT ALL)
public List<BoardVO> getBoardList() {
String sql = "SELECT * FROM BOARD ORDER BY BID DESC";
return jdbcTemplate.query(sql, new BoardRowMapper());
}
5. RowMapper 클래스 작성
public class BoardRowMapper implements RowMapper<BoardVO> {
@Override
public BoardVO mapRow(ResultSet rs, int rowNum) throws SQLException {
BoardVO vo = new BoardVO();
vo.setBid(rs.getInt("BID"));
vo.setTitle(rs.getString("TITLE"));
vo.setContent(rs.getString("CONTENT"));
vo.setWriter(rs.getString("WRITER"));
vo.setRegdate(rs.getDate("REGDATE"));
return vo;
}
}
6. 요약
• JdbcTemplate은 JDBC 4단계 중 conn, pstmt, close를 자동으로 처리
• DAO는 SQL 작성과 파라미터 전달만 하면 됨
• DataSource를 applicationContext.xml에 등록하고, JdbcTemplate을 DI받아 사용해야 함
• Template 패턴은 반복 제거, 유지보수성 향상, 핵심로직 집중을 가능하게 함
• Spring 기본 개발 방식이므로 반드시 익숙해져야 함
JDBCUtil로 계속 코딩하는 것은 옛날 방식
Spring에서는 JdbcTemplate을 이용한 Template 패턴 기반 DAO가 기본!