티스토리 뷰
1. SQL 중심적인 개발의 문제점
- 비슷한 SQL문을 무한 반복해서 개발해야 된다. ( 지루한 코드 )
- 작은 변화가 있으면, 쿼리나 VO/DTO부터 다 고쳐야 한다.
- SQL에 의존하는 개발을 하게 된다.
- 애플리케이션은 객체 지향적 언어로 개발을 하지만, SQL은 관계형 데이터 베이스이기에 패러다임의 불일치가 일어난다.
- + 객체 지향 프로그래밍은 추상화, 캡슐화, 정보은닉, 상속, 다형성 등 시스템의 복잡성을 제어할 수 있는 다양한 장치들을 제공하지만, 관계형 데이터 베이스에서는 제공하지 않는다.
2. 객체와 관계형 데이터 베이스의 차이
- [1] 상속
- - 객체 : 상속 관계
- + 객체에서는 자바 컬렉션을 활용하여 쉽게 저장할 수 있다. ( ex. list.add(하위); )
- + 객체에서는 조회 또한 쉽게 조회할 수 있다. ( ex. list.get(하위); )
- - 관계형 데이터 베이스 : 슈퍼타입과 서브타입의 관계 :
- + 관계형 데이터 베이스에서 상속관계로 저장하기 위해서는 객체를 분리한 후에, 각각의 테이블에 따로 SQL문을 작성하여 저장해야 한다.
- + 관계형 데이터 베이스에서는 객체와 다르게 하위(서브타입)을 조회하기 위해서는 상위(슈퍼타입)와 조인을 통해 조회해야 한다. 이렇게 되면 복잡성이 높아지기에 DB에서 저장할 객체는 상속관계를 잘 사용하지 않는다.
- [2] 연관관계
- - 객체 : 참조 ( ex. 상위.getId() )
- - 관계형 데이터 베이스 : 테이블에서 외래키(FK)를 사용 ( ex. JOIN ON 상위.ID = 하위.ID )
- + 객체 지향적으로 프로그래밍을 하기 위해서는 참조를 통해야 한다.
- + 즉, JOIN을 통해 두 테이블을 합쳐 객체 모델링을 저장하는 것이 아니라, 참조를 통해 하위객체에서 get을 통해 상위객체로 가서 필드를 가저와야 한다.
- + 관계형 데이터 베이스를 객체 지향적으로 바꿀 수는 있지만 복잡성이 매우 높아진다.
3. JPA란?
- Java Persistence API
- 자바 진영의 ORM 기술의 표준이다.
- + ORM이란 Object Relational Mapping(객체 관계 매핑)으로 객체는 객체대로 설계하고, 관계형 데이터베이스는 관계형 데이터 베이스대로 설계한 후 ORM 프레임워크가 중간에서 매핑해주는 기능을 한다.
- JPA는 Java 어플리케이션과 Java가 DB와 통신하기 위한 JDBC API 사이에서 동작한다.
- JPA는 패러다임의 불일치를 해결해 준다.
- JPA는 인터페이스의 모음이다.
4. JPA를 왜 사용해야 하는가?
- SQL 중심적인 개발에서 객체 중심적인 개발을 할 수 있다.
- 쿼리가 자동으로 만들어지기에 생산성이 향상된다. (**)
- + ex. 저장( jpa.perisit(member) ), 조회( jpa.find(memberId), 수정( member.setName("변경할 이름") ), 삭제( jpa.remove(member) )
- 패러다임의 불일치 해결
- JPA에서는 성능 최적화 기능을 제공한다.
- (1) 같은 트랜잭션 안에서는 같은 엔티티를 반환하여 조회 성능을 향상한다.
- (2) 트랜잭션을 commit할 때까지 INSERT SQL을 모아, JDBC BATCH SQL 기능을 사용해서 한번에 SQL을 전송한다.
728x90
'[스터디] 김영한]' 카테고리의 다른 글
05. 데이터베이스 스키마 자동 생성 (0) | 2022.12.15 |
---|---|
04. 엔티티 매핑 ( 1 ) - 엔티티 매핑의 종류 (0) | 2022.12.14 |
03. 영속성 관리 (0) | 2022.11.30 |
02. Hello JPA 프로젝트 - JPA 연습 (0) | 2022.11.21 |
댓글