WTH는 JDBC, Spring JDBC, JPA, Hibernate, ORM, Spring Boot JPA

발행: (2026년 1월 19일 오후 05:49 GMT+9)
5 min read
원문: Dev.to

Source: Dev.to

Java에서 데이터베이스 접근의 진화

Database Access Evolution

이 글에서는 Java 데이터베이스 접근이 단계별로 어떻게 발전했는지 설명합니다:

JDBC → Spring JDBC → JPA → Hibernate → Spring Boot JPA

각 단계는 이전 단계의 문제점을 해결합니다.

1. JDBC (Java Database Connectivity)

개념

JDBC는 Java가 데이터베이스와 통신하기 위한 가장 기본적이고 최저 수준의 방법입니다. 모든 것을 직접 제어합니다.

특징

  • JDBC Driver (Java와 데이터베이스 사이의 다리)
  • Connection (데이터베이스에 연결을 엽니다)
  • Statement (SQL 쿼리를 실행합니다)
  • PreparedStatement (미리 컴파일된 SQL, 더 안전하고 빠름)
  • ResultSet (데이터베이스가 반환한 데이터를 보관)
  • SQL에 대한 완전한 제어
  • 다수의 데이터베이스와 호환

문제점

  • 중복 코드가 너무 많음
  • 연결을 직접 열고 닫아야 함
  • 오류 처리가 어려움
  • 비즈니스 로직에 SQL이 섞여 있음
  • 대규모 프로젝트 유지보수가 어려움

해결책

JDBC는 동작하지만 너무 저수준입니다. 더 간단한 방법이 필요합니다.


2. Spring JDBC

개념

Spring JDBC는 JDBC를 단순화합니다. Spring이 연결과 오류를 대신 관리해 줍니다.

특징

  • 보일러플레이트 코드 감소
  • 자동 자원 관리
  • 깔끔한 예외 처리
  • 여전히 SQL 사용
  • 순수 JDBC보다 사용이 쉬움

문제점

  • 여전히 SQL을 직접 작성해야 함
  • 행을 객체에 매핑하는 작업을 수동으로 해야 함
  • 데이터베이스 로직이 여전히 코드 곳곳에 드러남

해결책

개발자는 테이블이 아니라 객체와 작업하고 싶어 합니다. 이것이 ORM으로 이어집니다.

3. JPA (Java Persistence API)

개념

JPA는 ORM(Object‑Relational Mapping)을 위한 표준입니다. ORM이 어떻게 동작해야 하는지를 정의하지만, 구현 방법은 정의하지 않습니다.

특징

  • 테이블을 Java 객체에 매핑
  • 표준 API (어디서든 동일한 규칙)
  • SQL 사용량 감소
  • 데이터베이스 독립성 제공

문제점

  • JPA는 규칙일 뿐 실제 구현 코드는 아님
  • 단독으로 실행될 수 없음
  • 구현체가 필요함

해결책

Hibernate와 같은 JPA 구현체를 사용합니다.

4. Hibernate

개념

Hibernate는 JPA 구현체입니다. 실제 ORM 작업을 수행합니다.

특징

  • 자동 SQL 생성
  • 객체 기반 데이터베이스 접근
  • 캐싱 지원 (메모리에 데이터를 저장해 빠르게 접근)
  • 지연 로딩 (필요할 때만 데이터 로드)
  • 데이터베이스 독립성
  • 매우 강력하고 유연함

문제점

  • 설정이 복잡함
  • 초보자에게 어려움
  • 작은 프로젝트에 비해 설정이 과함
  • 잘못 사용하면 성능 문제가 발생할 수 있음

Hibernate 대안

  • EclipseLink (공식 JPA 레퍼런스 구현)
  • OpenJPA (Apache 프로젝트)
  • MyBatis (SQL 중심, 전체 ORM은 아님)

해결책

Hibernate는 강력하지만 단순화가 필요합니다. Spring Boot가 이를 해결합니다.

Hibernate vs. Others

5. Spring Boot JPA

개념

Spring Boot JPA는 Spring Boot + JPA + Hibernate를 결합하여 단순함과 속도에 초점을 맞춥니다.

특징

  • 자동 설정 (수동 설정 불필요)
  • 기본적으로 Hibernate 사용
  • 간편한 Repository 패턴 제공
  • 깔끔하고 가독성 높은 구조
  • 프로덕션 수준 준비 완료

문제점

  • 저수준 제어가 감소함
  • 일부 동작이 자동 설정에 의해 숨겨짐

해결책

현대 애플리케이션에 가장 적합한 선택입니다. 필요할 때만 낮은 수준을 직접 사용할 수 있습니다.

Back to Blog

관련 글

더 보기 »

Lazy vs. Eager 로딩 & JPA 관계

!Forem 로고https://media2.dev.to/dynamic/image/width=65,height=,fit=scale-down,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2...