애플리케이션
- 객체 지향 언어 - [Java, Scalar, ...]
데이터베이스
- 관계형 DB - [Oracle, MySQL, ...]
DB는 SQL만 알아들을 수 있다.
→ 애플리케이션이 SQL로 떡칠이된다.
CRUD 지옥 - 단순 반복
- JdbcTemplate
- 쿼리 매퍼 - Mybatis 등이 도와 준다고 하더라도 결국 쿼리를 짜야됨
패러다임의 불일치
Object 🆚 Relation
객체지향의 특성 - 추상화, 캡슐화, 상속, 다형성을 RDB는 지원하지 않는다.
상속

→
Album을 하나 저장하자
query를 쪼개야 됨 ㅜ.ㅜ
Album을 하나 조회하자
join해서 필드를 다 채워넣어야됨 ㅜ.ㅜ
컬렉션이면?
list.add(album), list.get(albumId) 완전 쉽다!
연관관계
- 객체는 참조 - 단방향
- 테이블은 FK - 양방향
객체를 테이블 처럼 모델링
→
class Member { Long id; Long teamId; String username; } class Team{ Long id; String teamName; }
Member 저장
⇒ 참 쉽다!
이게 객체지향?
이거지
class Member { Long id; Team team; String username; } class Team{ Long id; String teamName; }
조회가 너무 빡새네..
객체 그래프 탐색

탐색범위가 SQL에 따라 정적으로 결정된다.
비교하기

컬렉션이라면?
당연히 같다
객체지향이랑 RDB를 함께 쓰려니까 너무 힘들어...
→ JPA - ORM
ORM
- Object-relational mapping(객체 관계 매핑)
- 객체는 객체대로 설계
- 관계형 데이터베이스는 관계형 데이터베이스대로 설계
- ORM 프레임워크가 중간에서 매핑
JPA는 애플리케이션과 JDBC사이에서 동작

JPA
- 엔티티를 분석해 SQL을 만들어줌
- JDBC API사용
- 영속성 컨텍스트를 통해 패러다임 불일치 해결