본문 바로가기

JAVA/Spring

2022.12.07 JPA 기초 ...ing

0. 어플리케이션에서 직접 데이터베이스를 다루면 번거롭다

 

테이블 생성, 쿼리 작성, jdbc 실행, 객체 생성 등등 직접 해줘야할 일이 많아진다

 

또한 SQL 의존적이라 변경에 취약하다. 쿼리문 수정, 객체에 값 삽입 등 일일히 추가 해줘야한다.

 

객체지향 모델과 관계형 데이터베이스의 패러다임의 불일치가 발생한다.

     

출처 : https://knoc-story.tistory.com/m/90                                                 

  객체 리렐이션
밀도 문제 다양한 크기의 객체를 만들 수 있음, 커스텀한 타입 만들기 쉬움 테이블, 기본 데이터 타입
서브타입 문제 상속, 다형성 구현 쉬움 상속 없음, 다형적인 관계 표현 불가
식별성 문제 레퍼런스 동일성, 인스턴스 동일성 오직 pk
관계 문제 서로간의 객체 참조를 통해 표현, 다대다 가능, 방향이 있다 다대다 x, 다대다를 맺어주는 테이블로 처리, 외래키가 있어서 바로 조회 가능(방향 없음)
데이터 네비게이션 문제 마음대로 레퍼런스타고 이동 가능 그러한 방식이 비효율적(매번 join, 그리고 다 가저오면 성능문제)
  1. 밀도 문제는 딱히 설명이 필요 없겠죠. 데이터베이스의 데이터가 더 정형화되어있고 까다롭습니다.
  2. 관계형 데이터 베이스에는 상속의 개념이 없습니다. 하지만 우리가 이미 배웠던 것처럼 상속은 객체의 역할과 구현을 분리해주기 위해 객체 지향 프로그래밍에서 가장 핵심적인 기능 중 하나입니다.
  3. 관계 문제와 데이터 네비게이션 문제는 설명이 조금 더 필요 할 것 같습니다.

01. ORM, JPA의 등장

위에서 언급한 패러다임 불일치에서 기인한 문제들과, 반복적이고 번거로운 어플리케이션 단에서의 쿼리작업을 줄여주기 위해 ORM(객체 관계 매핑) 기술들이 등장

*JPA: Java Persistence API 자바 ORM 기술에 대한 표준 명세

 

역할

  1. 쿼리를 자동으로 만들어 줍니다.
  2. 그리고 어플리케이션 계층에서 sql 의존성을 줄여서 번거로운 작업이 매우매우 단축됩니다.
  3. 패러다임의 불일치를 해결해줍니다. 이와 관련된 내용으로는 매우 다양한 예시가 있지만, 지금 모두 이야기하게는 너무 많은 것 같습니다.
  4. 특정한 상황을 제외하고는,성능도 챙겼습니다. 최적화를 위한 노력이 있었습니다..
  5. 방언도 지원해줍니다. 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