: Java DataBase Connectivity
자바에서 데이터베이스를 다루기 위해 사용되는 API이다.
JDBC 코드를 살펴보자.
테이블에 행 하나 삽입하는 데에 아래와 같은 장황한 코드가 필요하다.
public Member save(Member member) {
String sql = "insert into member(name) values(?)";
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
conn = getConnection();
pstmt = conn.prepareStatement(sql,
Statement.RETURN_GENERATED_KEYS);
pstmt.setString(1, member.getName());
pstmt.executeUpdate();
rs = pstmt.getGeneratedKeys();
if (rs.next()) {
member.setId(rs.getLong(1));
} else {
throw new SQLException("id 조회 실패");
}
return member;
} catch (Exception e) {
throw new IllegalStateException(e);
} finally {
close(conn, pstmt, rs);
}
}
id로 행 하나 찾는 데에도 다음과 같이 아주 복잡한 코드가 필요하다.
public Optional<Member> findById(Long id) {
String sql = "select * from member where id = ?";
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
conn = getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setLong(1, id);
rs = pstmt.executeQuery();
if(rs.next()) {
Member member = new Member();
member.setId(rs.getLong("id"));
member.setName(rs.getString("name"));
return Optional.of(member);
} else {
return Optional.empty();
}
} catch (Exception e) {
throw new IllegalStateException(e);
} finally {
close(conn, pstmt, rs);
}
}
JDBC를 사용하면 프로그램을 개발하는 것보다 데이터 관리 코드를 작성하는 시간이 더 길어진다. 이를 보완하기 위해 JdbcTemplate, JPA 등이 등장했고 그 중 많이 사용되는 JPA에 대해 알아보자.
: Java Persisitence API
JPA는 기존의 반복적인 CRUD SQL을 간편하게 처리해준다. 개발자의 입장에서는 어떤 쿼리를 실행할지만 고민하면 된다. JPA를 통해서 우리는 SQL이 아닌 객체를 중심으로 개발할 수 있게 되었다. 이로 인해 개발 생산성을 크게 높일 수 있었고 유지 보수도 더욱 용이해졌다.
위에서 JDBC로 작성한 코드는 아래와 같이 단 두 줄로 작성할 수 있다.
public Member save(Member member) {
em.persist(member);
return member;
}
public Optional<Member> findById(Long id) {
Member member = em.find(Member.class, id);
return Optional.ofNullable(member);
}
작년 학교 수업을 통해 JDBC를 다룬 적이 있었다. 그때는 스프링도 써본 적 없고 RDBMS라는 존재를 안 지 얼마 되지도 않았을 적이었다. 교수님의 말씀과 교재에만 의존하여 무작정 코드를 구현했던 기억이 있다. JDBC가 무엇인지도, 왜 사용하는지도 모른 채 사용했었다.
이번 글을 작성하며 JDBC가 무엇인지, 현재는 왜 사용되지 않는지 알게 되었다. 현재 사용하지 않고 앞으로도 사용하지 않을 이 JDBC라는 것을 수업 과제를 통해 그래도 한 번 구현해 보았다는 것이 꽤나 큰 자부심으로 다가온다.