✅ Spring

DAO 버전 업 : JDBC → Template 패턴으로 업그레이드하는 방법

Joyfullyever 2025. 4. 28. 20:47

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가 기본!