0. 어플리케이션에서 직접 데이터베이스를 다루면 번거롭다
테이블 생성, 쿼리 작성, jdbc 실행, 객체 생성 등등 직접 해줘야할 일이 많아진다
또한 SQL 의존적이라 변경에 취약하다. 쿼리문 수정, 객체에 값 삽입 등 일일히 추가 해줘야한다.
객체지향 모델과 관계형 데이터베이스의 패러다임의 불일치가 발생한다.
출처 : https://knoc-story.tistory.com/m/90
| 객체 | 리렐이션 | |
| 밀도 문제 | 다양한 크기의 객체를 만들 수 있음, 커스텀한 타입 만들기 쉬움 | 테이블, 기본 데이터 타입 |
| 서브타입 문제 | 상속, 다형성 구현 쉬움 | 상속 없음, 다형적인 관계 표현 불가 |
| 식별성 문제 | 레퍼런스 동일성, 인스턴스 동일성 | 오직 pk |
| 관계 문제 | 서로간의 객체 참조를 통해 표현, 다대다 가능, 방향이 있다 | 다대다 x, 다대다를 맺어주는 테이블로 처리, 외래키가 있어서 바로 조회 가능(방향 없음) |
| 데이터 네비게이션 문제 | 마음대로 레퍼런스타고 이동 가능 | 그러한 방식이 비효율적(매번 join, 그리고 다 가저오면 성능문제) |
- 밀도 문제는 딱히 설명이 필요 없겠죠. 데이터베이스의 데이터가 더 정형화되어있고 까다롭습니다.
- 관계형 데이터 베이스에는 상속의 개념이 없습니다. 하지만 우리가 이미 배웠던 것처럼 상속은 객체의 역할과 구현을 분리해주기 위해 객체 지향 프로그래밍에서 가장 핵심적인 기능 중 하나입니다.
- 관계 문제와 데이터 네비게이션 문제는 설명이 조금 더 필요 할 것 같습니다.
01. ORM, JPA의 등장

위에서 언급한 패러다임 불일치에서 기인한 문제들과, 반복적이고 번거로운 어플리케이션 단에서의 쿼리작업을 줄여주기 위해 ORM(객체 관계 매핑) 기술들이 등장
*JPA: Java Persistence API 자바 ORM 기술에 대한 표준 명세
역할
- 쿼리를 자동으로 만들어 줍니다.
- 그리고 어플리케이션 계층에서 sql 의존성을 줄여서 번거로운 작업이 매우매우 단축됩니다.
- 패러다임의 불일치를 해결해줍니다. 이와 관련된 내용으로는 매우 다양한 예시가 있지만, 지금 모두 이야기하게는 너무 많은 것 같습니다.
- 특정한 상황을 제외하고는,성능도 챙겼습니다. 최적화를 위한 노력이 있었습니다..
- 방언도 지원해줍니다. h2 Databse를 붙여도, mySql, oracle 뭘 붙여도 코드의 변경은 없습니다, 관계형 db이자 표준을 준수한 sql을 지원한다면, jpa가 방언들도 알아서 처리해줍니다.
Q. 그럼 ORM기술 특히 자바의 JPA가 다 해주는데, 왜 지난시간에 귀찮게 데이터베이스와 쿼리를 공부했죠?
A. 일단 해당 쿼리를 발생시키는 개발자가 쿼리에 대하여 정확하게 이해하고 있어야 최적화-성능 등 다양한 이슈에 대응 할 수 있으며, 간혹 발생하는 실시간 처리 목표가 아닌 쿼리의 경우 쿼리를 직접 내셔야 합니다! 그리고 DB설계등 다양한 지식은 꾸준히 공부하셔야 하는 주제입니다.
Q. 컴퓨터는 용빼는 재주가 없다고 하시지 않으셨나요? 어떻게 이렇게 많은 것들을 할 수 있나요?
A. 내부 동작을 더 공부해보면 이해가 가실 겁니다. 이부분이 특히 더 궁금하시거나, 아직 JPA와 같은 ORM이 미심쩍으신 분들은 “영속성 컨텍스트”를 더 집중해서 공부해보시면 좋을 것 같습니다.
샘플과 DB연관관계등은 추후 작성 예정
'JAVA > Spring' 카테고리의 다른 글
| 2023.01.02 Spring Security...ing (0) | 2023.01.02 |
|---|---|
| 2022.12.21 Lombok (0) | 2022.12.22 |
| 2022.12.08 JPA 2 (0) | 2022.12.08 |
| 2022.12.06 Database와 SQL (0) | 2022.12.06 |
| 2022.12.05 웹 동작방식의 이해 (0) | 2022.12.05 |