한창 스프링부트로 프로젝트 만들다가
과제 테스트에서 JDBC가 나와서 당황했다.
관련 내용들 다시한번 정리하고 감!
import java.sql.*;
public class JdbcExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase"; // DB 주소
String user = "root"; // DB 사용자명
String password = "password"; // DB 비밀번호
String query = "SELECT id, name FROM category";
try (
Connection conn = DriverManager.getConnection(url, user, password); // 1. DB 연결
Statement stmt = conn.createStatement(); // 2. SQL 실행 객체 생성
ResultSet rs = stmt.executeQuery(query) // 3. SQL 실행 및 결과 가져오기
) {
while (rs.next()) { // 4. 결과 반복 처리
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println("ID: " + id + ", Name: " + name);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
JDBC에서 데이터베이스 연결, SQL 실행, 결과 같은 리소스는
사용 후 반드시 close() 하지 않으면 메모리나 연결에서 문제가 생길 수 있다.
원래는 직접 각각 close() 해야하는데 이러면 다양한 문제가 생길 수 있음.
그래서 자바 7부터는 try-with-resources 를 통해 처리할 수 있음.
try ( // 여기에 적은 부분에 대해서 자동 close()
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "user", "password");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM category")
) {
while (rs.next()) {
System.out.println(rs.getString("name"));
}
} catch (SQLException e) {
e.printStackTrace();
}
그동안 프로젝트를 만들면서 생각없이, 당연하게 적용해왔던 JPA..

자바 객체를 데이터베이스와 매핑해서 다룰 수 있도록 정해진 표준 명세.
JPA 자체는 동작에 대한 명세이기에 단독으로 사용할 수 없고
JPA를 구현한 구현체, 프레임워크가 필요한데
그 중 가장 많이 사용되는 Hibernate.
Spring Data는 데이터 저장소(데이터베이스, NoSQL, 캐시 등)에 쉽게 접근할 수 있도록 도와주는 스프링의 데이터 접근 계층 프레임워크로 Hibernate를 쉽게 사용할 수 있도록 도와준다.
// CRUD 메서드 자동 구현
public interface UserRepository extends JpaRepository<User, Long> {
// 메서드 이름으로 쿼리 생성
List<User> findByName(String name);
// @Query 로 직접 쿼리 작성
@Query("SELECT u FROM User u WHERE u.email = :email")
User findByEmail(@Param("email") String email);
}
이것들을 가능하게 하는 것이 Spring Data JPA.
그래서 스프링부트에서는 Hibernate를 직접 쓰기보다 Spring Data JPA를 주로 사용.
사실 그동안 계속 직접 사용해왔던건 이쪽인 것이다.