그라가승훈
[유튜브-메타코딩] Spring Boot 개념정리 with JPA - JPA 개념잡기 본문
JPA란?
JPA에 대한 대표적인 개념 8개로 정리 해주셨다.
1. JPA는 Java Persistence API이다.
- API 개념
- API(Application Programming Interface) : 말 그대로 인터페이스를 통해서 프로그래밍을 하고 프로그램을 만드는 것이다.

- 인터페이스와 프로토콜의 차이점
- 인터페이스 : 프로그램을 개발한 개발자가 A데이터를 공유할때 사용할 방법을 제시 (상하관계가 존재하는 약속)
- 프로토콜 : www을 사용할때 프로토콜을 사용하는데 사용하는 방법을 같이 정함. (동등한 관계의 약속)
- JAP 개념
- persistence(영속성)란 : 데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성을 의미한다. 영속성은 파일시스템, 관계형 데이터베이스 혹은 개체 데이터베이스등을 활용.
- 간단하게 자바에 있는 데이터를 영구히 기록할수 있게 환경을 제공하는 API이다.
- 결론 , JPA란 Java Persostence Application Programming Interface : 자바프로그램을 할때 영구적으로 데이터를 저장하기 위해서 필요한 인터페이스
2. JPA는 ORM 기술이다.
- ORM이란?
- ORM(Object Relational Mapping) : Object를 데이터베이스에 연결하는 방법론.
- 기존방법과 차이점
- 기존에는 DB의 Table을 사용하여 자바에서 모델링을 했다.

- JPA 인터페이스를 사용하면 자바에서 클래스로 DB 테이블을 자동생성 할 수 있다. 이 기법을 ORM 기법이라고 한다.

3. JPA는 반복적인 CRUD 작업을 생략하게 해준다.
- 기존 방법과 차이점.
기존방법은 단순 노동이 많았다.
- 자바에서 DB 사용 요청
- DB 세션 오픈 후 자바 Connection
- 자바에서 쿼리 전송 후 DB data 반환
- DB data 타입을 자바 Object 타입으로 변경
JPA를 사용하면 위 모든 내용을 함수 하나로 제공하므로 반복적인 노동을 줄여준다.
4. JPA는 영속성 컨텍스트를 가지고 있다.
- 영속성 컨텍스트란?
- 영속성 : 데이터 → 영구적으로 저장! (DB)
- 컨텍스트(context) : 대상의 모든 정보.
- 영속성 컨텍스트는 자바가 데이터베이스에 데이터를 저장해야하는 모든것들을 알고 자동으로 처리해주는 것이다.
- 자바에서 데이터베이스, 데이터베이스에서 자바에 데이터를 전달할때 영속성 컨텍스트를 통해서 전달하면 작업들을 자동으로 전달한다.

5. JPA는 DB와 OOP의 불일치성을 해결하기 위한 방법론을 제공한다. (DB는 객체저장 불가능)
- DB에서는 Player 테이블을 조회할때 FK인 TeamId로 Team의 내용을 알려면 두번의 Select 혹은 조인을 사용해야 한다.

- OOP로 사용을 한다면 Player 클래스에 Team 객체를 넣어서 사용하면 Team의 클래스에 내용을 알 수 있다. 여기서 DB는 TeamId 데이터 타입이 Int고 Java는 데이터 타입이 오브젝트라 불일치성이 생긴다.
- 이것을 가능하게 해주는 기술이 ORM이다. JPA는 ORM기술.

6. JPA는 OOP 관점에서 모델링을 할 수 있게 해준다. (상속, 콤포지션, 연관관계)
- 상속과 콤포지션(결합)
- Car와 Engine이라는 클래스가 있으면 Engine은 Car의 부모가 될 수 없다.
- Car에서 Engine 객체를 사용하려면 콤포지션(결합)을 사용해야 한다.

- OOP관점에서 모델링
- 콤포지션 : Engine을 콤포지션 한 Car를 JPA로 테이블 자동생성을 하면 아래와 같이 Car와 Engine 데이터베이스 테이블이 생성된다.
- 상속 : EntityDate라는 클래스에 timestamp 로 시간데이터를 만들어 Car클래스에 extends 하고 테이블 자동생성을 하면 데이터베이스 테이블에도 상속받은 컬럼이 생성된다.

7. 방언 처리가 용이하여 Migration과 유지보수에 좋다.
- JPA를 사용할때 추상화 객체를 생성하면 그 안에 오라클, MySQL 등 여러 DBMS를 넣어도 문법처리를 자동으로 바꿔준다.

8. JPA는 쉽지만 어렵다.
- 위 내용을 보면 개발에 정말 많은 도움을 준다.
- 그만큼 사용하려면 기초 지식을 쌓고 사용해야 활용도가 좋을 것이다. JPA를 사용하면서도 기초를 꼭 공부해야겠다.
'Spring' 카테고리의 다른 글
[유튜브-메타코딩] - 스프링부트 동작원리 - 4. FrontController 패턴 (0) | 2022.08.02 |
---|---|
[유튜브-메타코딩] - 스프링부트 동작원리 - 3. web.xml (0) | 2022.08.01 |
[유튜브-메타코딩] - 스프링부트 동작원리 - 2. 서블릿 컨테이너 (0) | 2022.07.31 |
[유튜브-메타코딩] - 스프링부트 동작원리 - 1. 내장톰캣(소켓 통신, HTTP 통신, 웹 서버, 톰캣) (0) | 2022.07.31 |
[유튜브-메타코딩] Spring Boot 개념정리 with JPA - Spring이란? (0) | 2022.07.22 |