본문으로 건너뛰기
Advertisement

9.1 ORM과 JPA 개요

스프링 진영에서 데이터베이스를 다루는 가장 현대적이고 주류가 되는 기술이 바로 JPA (Java Persistence API) 입니다.

패러다임의 불일치

오랫동안 자바 개발자들은 객체 지향 프로그래밍(OOP)으로 비즈니스 로직을 멋지게 설계해 놓고도, 데이터를 저장할 때는 결국 관계형 데이터베이스(RDBMS)의 2차원 테이블 구조에 맞게 데이터를 분해해서 장문의 SQL 쿼리(INSERT INTO ...)를 일일이 작성해야 했습니다.

객체 모델관계형 데이터베이스 모델 간에는 상속, 연관관계, 방향성 등 구조적 차이(Paradigm Mismatch)가 큽니다. SQL 중심으로 개발하다 보면, 개발자는 자연스럽게 객체 중심이 아닌 테이블 중심으로 설계를 하게 됩니다.

ORM (Object-Relational Mapping)의 등장

이러한 문제를 해결하기 위해 ORM 기술이 등장했습니다. ORM은 애플리케이션의 "객체(Object)"와 데이터베이스의 "관계형 테이블(Relational)"을 자동으로 매핑(Mapping)해주는 도구입니다.

개발자는 객체를 자바 컬렉션(List, Map)에 넣듯이 저장(save) 메서드만 호출하면, ORM 프레임워크가 이를 분석하여 적절한 SQL 쿼리를 동적으로 생성해 데이터베이스에 날려줍니다.

JPA와 Hibernate 그리고 Spring Data JPA

세 가지 용어의 정리가 필수적입니다.

  1. JPA (Java Persistence API): 자바 진영에 ORM 기술에 대한 '표준 명세(인터페이스 모음)'입니다.
  2. Hibernate: JPA라는 인터페이스 명세를 실제로 구현한 가장 대중적이고 강력한 '구현체'입니다.
  3. Spring Data JPA: 스프링에서 JPA/Hibernate를 더더욱 쉽게 쓰기 위해 한 번 더 감싸놓은 '모듈'입니다. (Repository 인터페이스만 정의해도 쿼리가 나가는 마법의 주체)
// Spring Data JPA를 사용하면 메서드 이름만으로 쿼리 자동 생성
List<User> findByAgeGreaterThan(int age);

결론적으로 우리는 JPA 명세를 따르는 Hibernate 구현체를, Spring Data JPA라는 편리한 도구를 통하여 사용하게 됩니다. 이를 통해 단순하고 반복적인 CRUD 쿼리 작성에서 벗어나 핵심 비즈니스 로직에 집중할 수 있습니다.

Advertisement