이전 챕터에서는 데이터베이스와 테이블을 연결하고 더미 데이터를 입력했습니다. 이번 챕터에서는 스프링을 활용해 데이터베이스의 데이터를 조회·추가·수정·삭제하는 방법을 다뤄보겠습니다.
3.1 하이버네이트 기술
두 세계의 조우: 객체와 테이블의 간극을 해결하자!

3.1.1 근본적인 불일치: 철학의 차이
소프트웨어를 개발할 때 우리는 서로 다른 철학을 가진 두 개의 세상을 동시에 마주합니다. 바로 데이터의 정합성을 중시하는 관계형 데이터베이스(RDB)와 현실 세계의 복잡성을 표현하는 객체지향 언어(Java)입니다.
DB 세상 (관계형 모델): "값과 관계 중심"
데이터베이스는 데이터를 안전하게 보관하고 효율적으로 조회하는 것이 목표입니다.
- 구조: 행(Row)과 열(Column)로 이루어진 평면적인 테이블 구조입니다.
- 연결: 다른 테이블을 참조하려면 오직 **외래 키(Foreign Key)**라는 '값'을 공유해야 합니다.
- 한계: 테이블 안에 또 다른 테이블이나 객체 구조를 통째로 담을 수 없습니다.
자바 세상 (객체 모델): "상태와 행위 중심"
자바는 현실 세계의 사물을 객체로 추상화하여 관리합니다.
- 구조: 필드(상태)와 메서드(행위)를 가지며, 객체 간의 관계를 자유롭게 설계합니다.
- 연결: 객체 안에 다른 객체를 필드로 가지는 참조(Reference) 방식을 사용합니다.
- 유연성: 상속, 다형성, 추상화 등 데이터를 표현하는 방법이 매우 풍부합니다.
3.1.2 데이터의 평면 세계(DB) vs 입체 세계(Java)
우리가 개발을 할 때 마주하는 두 세계는 데이터를 다루는 방식이 근본적으로 다릅니다. 이 차이를 이해하는 것이 하이버네이트(Hibernate) 기술의 출발점입니다.
1. 구조의 차이: 테이블 vs 객체