[Spring] JDBC와 JPA

SCY·2023년 4월 9일
0
post-thumbnail

JDBC

: 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에 대해 알아보자.

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라는 것을 수업 과제를 통해 그래도 한 번 구현해 보았다는 것이 꽤나 큰 자부심으로 다가온다.

profile
성장 중독 | 서버, 데이터, 정보 보안을 공부합니다.

0개의 댓글