본문 바로가기
Java

자바 최대 절전 모드 (1) - ORM 및 기본 개념

by gentle-tiger 2025. 7. 10.
프로젝트 중 느낀 자바 기초의 부족함을 보완하고자 핵심 주제를 순차적으로 복습할 예정입니다.
자바 코어 → 자바 스레드 → 자바 OOP → 자바의 예외 → 자바의 컬렉션 → 최대 절전 모드 순으로 정리할 예정입니다. 

 

Hibernate (1) – ORM 및 기본 개념

  1. ORM이란 무엇입니까?
  2. ORM 수준은 무엇입니까?
  3. Hibernate란 무엇입니까? (최대 절전 모드란?)
  4. Hibernate 같은 ORM 도구가 필요한 이유는 무엇입니까?
  5. Entity Bean과 Hibernate의 주요 차이점은 무엇입니까?

 

ORM이란 무엇입니까?

ORM(Obhect-Relational Mapping)은 자바 객체의 필드와 관계형 데이터베이스 컬럼을 1대 1로 연결하여, 자바 코드만으로 CRUD를 수행하게 해주는 기술입니다. 개발자는 SQL문을 직접 다루지 않고도 데이터 접근 로직을 작성할 수 있어 생상성과 유지보수성이 크게 향상됩니다. 자바에서는 @Entity, @Column 같은 어노테이션이나 XML 설정으로 매핑 정보를 정의하고, 런타임에 이 메타데이터를 기반으로 엔티티-테이블 사전을 만들어 사용합니다. 다만 SQL을 프레임워크가 생성하기 때문에 실제 쿼리가 코드에 보이지 않아 성능 이슈를 추적하기 어렵고, 지연 로딩을 사용하면 N + 1 문제가 발생할 수 있으며, 복잡한 쿼리는 구현하기 어려워 JPQL이나 QueryDSL을 활용하기도 합니다. 

 

ORM 수준은 무엇입니까?

ORM 수준은 SQL 생성, 실행을 얼마나 추상화하는지에 따라 Level 0(직접 JDBC 사용) → Level 1(SQL 매퍼, 예:MyBatis) → Level 2(상태 관리 ORM, 예:Hibernate)로 구분합니다. Level 2는 1차 캐시, 더티체크, 지연 로딩으로 엔티티 상태를 프레임워크가 추적합니다. 같은 트랜잭션에서 동일한 엔티티를 다시 조회해도 DB에 재접근하지 않고 1차 캐시를 반환하며, 변경이 감지되면 필요한 SQL만 자동으로 플러시합니다. 대규모 트랜잭션에서 성능과 데이터 일관성을 모두 확보하려면, 현재 구현이 어떤 레벨에 맞춰져 있는지 정확히 이해하는 것이 좋습니다.

 

Hibernate란 무엇입니까? (최대 절전 모드란?)

Java의 ORM 도구인 Hibernate는 대표적인 Level 2 ORM 프레임워크이자 JPA(Jakarta Persistence) 사양의 레퍼런스 구현체입니다. 엔티티 매핑, 방언(Dialect), 캐시, 트랜잭션 관리 등을 제공해 다양한 DB를 동일한 코드로 처리할 수 있게 해줍니다. 

 

Hibernate 같은 ORM 도구가 필요한 이유는 무엇입니까?

SQL과 JDBC 보일러플레이트가 제거되어 코드가 간결해집니다. 또한 Dialect(DB 방언) 설정만 바꾸면 Oracle→PostgreSQL처럼 벤더를 갈아타도 대부분의 코드를 그대로 쓸 수 있습니다. 1차·2차 캐시와 JDBC 배치 처리로 쿼리 횟수와 네트워크 왕복을 줄여 DB 부하를 완화할 수 있어, 대용량 트래픽에도 안정적으로 버팁니다.

 

Entity Bean과 Hibernate의 주요 차이점은 무엇입니까?

EJB 2.x Entity Bean은 반드시 Entity Bean 같은 컨테이너 인터페이스를 구현해야 했고, 라이프사이클을 EJB 컨테이너가 전적으로 관리했습니다. 반면, Hibernat(JPA) 엔티티는 순수 POJO(plain Old Java Object)에 @Entity 같은 어노테이션만 사용해 의존성이 거의 없다는 장점이 있습니다. 프레임워크 의존성이 거의 없어 테스트 및 재사용이 쉽고, 트랜잭션 범위도 컨테이너 전역이 아니라 메서드 단위로 세분화할 수 있어 스프링의 @Transactional과 결합해 유연하게 사용할 수 있습니다.