데이터는 어떠한 필요에 의해 수집했지만 특정 목적을 위해 평가하거나 정제하지 않은 값이나 사실 또는 자료 자체를 의미한다. 그리고 수집한 데이터를 어떠한 목적을 위해 분석하거나 가공하여 가치를 추가하거나, 새로운 의미를 이끌어 낼 수 있는 결과로 정보가 생성된다. 즉, 잘 수집된 데이터를 분석하고 가공하면 새로운 가치를 만들어 낼 수 있는 정보를 얻을 수 있는 것이다.
만일 데이터가 누락 또는 중복된다면 정확한 분석을 기대할 수 없고, 시간과 비용을 낭비하게 된다. 효율적인 데이터 관리가 가능하며 특정 목적을 위해 여러 사람이 공유하여 사용할 수 있고, 효율적 관리와 검색을 위해 구조화한 데이터의 집합을 데이터베이스라 한다.
(<오라클로 배우는 데이터베이스 입문> 발췌)
JDBC
JDBC(Java Database Connectivity)는 자바 언어를 사용하여 데이터베이스와 상호작용하기 위한 자바 API이다. JDBC를 사용하면 자바 애플리케이션에서 데이터베이스에 접근하여 데이터를 등록하거나 변경할 수 있다.
JDBC로 데이터에 접근하려면 드라이버를 통해 데이터베이스에 연결하고 sql 쿼리를 실행하여 필요한 결과를 얻는 과정이 필요하다.
아래 코드는 JDBC를 이용해 DB에 데이터를 저장하고 수정하는 메서드다.
public Member save(Member member) throws SQLException {
String sql = "insert into member(member_id, money) values(?, ?)";
Connection con = null;
PreparedStatement pstmt = null;
try {
con = getConnection();
pstmt = con.prepareStatement(sql);
pstmt.setString(1, member.getMemberId());
pstmt.setInt(2, member.getMoney());
pstmt.executeUpdate();
return member;
} catch (SQLException e) {
log.error("db error [{}]", e);
throw e;
} finally {
close(con, pstmt, null);
}
}
public void update(String memberId, int money) throws SQLException {
String sql = "update member set money = ? where member_id = ?";
Connection con = null;
PreparedStatement pstmt = null;
try {
con = getConnection();
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, money);
pstmt.setString(2, memberId);
int result = pstmt.executeUpdate();
log.info("resultSize={}", result);
} catch (SQLException e) {
log.error("db error [{}]", e);
throw e;
} finally {
close(con, pstmt, null);
}
}
이처럼 매번 복잡하고 비슷한 코드를 반복해서 작성해야 하고, 트랜잭션 처리도 번거롭다. 만약 사용하고 있는 DB를 변경해야 한다면 그 일도 쉽지 않다. 이러한 여러 가지 단점들을 극복하기 위해 새로운 기술들이 등장하게 되었다.
데이터 접근 기술의 종류
데이터에 접근하고 다루는 기술은 다음 5개로 볼 수 있다.
JdbcTemplate
MyBatis
JPA, Hibernate
Spring Data JPA
Querydsl
이 기술들은 다시 2가지로 분류할 수 있다.
SQLMapper
JdbcTemplate
MyBatis
ORM 관련
JPA, Hibernate
Spring Data JPA
Querydsl
SQLMapper는 sql을 직접 작성하고 매핑하는 방식으로 동작하며, JDBC를 직접 사용할 때 발생하는 중복을 제거할 수 있다.
비교적 사용 방법이 간단하고 여러 가지 편리한 기능을 제공한다.
JdbcTemplate: 스프링에서 제공하는 JDBC 기반의 DB 접근을 단순화하는 클래스
MyBatis: sql 기반의 DB 접근을 위한 오픈 소스 프레임워크로 DB와 자바 객체 간 매핑을 xml 파일로 정의함
ORM(Object-Relational Mappping)은 객체와 관계형 데이터베이스 간의 매핑을 자동으로 처리하는 기술이다.
sql 쿼리를 직접 작성하지 않고, 객체 지향적인 코드로 데이터베이스 조작이 가능하다.
JPA: 자바에서 관계형 데이터베이스를 다루기 위한 표준 인터페이스
Hibernate: JPA의 구현체 중 하나
Spring Data JPA: 스프링에서 JPA를 편리하게 사용할 수 있도록 도와주는 프로젝트
Querydsl: 쿼리 생성에 도움을 주는 라이브러리로 Spring Data JPA와 함께 사용되어 더 편리한 쿼리 작성이 가능
이처럼 각각의 기술에 특징이 있으니 프로젝트의 요구사항에 가장 적합한 방법을 선택하여 사용하도록 한다.