[지금 무료] 스프링부트 개념정리(이론) | 최주호 - 인프런
최주호 | 스프링부트를 공부하며 헷갈리는 개념이 많았던 분 스프링부트에 대해 공부하고 싶었던 모든 분, 스프링부트의 핵심은확실한 개념으로부터! 스프링부트 너무 어려운데 어떻게 시작하
www.inflearn.com
JPA
- JPA란 ?
Java Persistence API이다. 여기서 Persistence란 영속성을 의미한다. 메모리는 휘발성 데이터를 저장함으로 컴퓨터 종료시 데이터가 사라진다. 따라서 메모리의 데이터를 비휘발성 데이터인 하드디스크에 저장한다. 이러한 것을 영속성 이라고 한다. JPA는 자바의 데이터를 영구적으로 기록할 수 있는 환경을 제공하는 API이다.
* API 란? Application Programming Interface로 인터페이스를 통해 프로그램을 프로그래밍 할 수 있게 하는 것이다.
JPA의 특징
- ORM 기술
ORM이란 ?
Object Relational Mapping으로 객체를 데이터베이스에 연결하는 방법론으로 자바에서 데이터베이스로 입출력할때 서로의 데이터 타입이 다르기 때문에 클래스를 사용하여 모델링 하는데 클래스를 선언하면 데이터베이스의 테이블을 자동으로 생성해주는 기능을 ORM이라 한다.
- 반복적인 CRUD 작업 생략
┌ C ┐ ┌ R ┐ ┌ U ┐ ┌ D ┐
INSERT, SELECT, SELECT ALL, UPDATE, DELETE 등 반복적으로 일어나는 CRUE작업을 할때는 자바에서 데이터베이스에게 커넥션을 요청하고 데이터베이스에서는 요청자의 신원을 확인 후 세션을 열어준다. 이렇게 되면 연결이되어 자바에서는 connection을 얻게되고 쿼리를 전송하여 데이터베이스에서 필요한 데이터를 요청한다. 이때 데이터베이스에서는 데이터베이스의 데이터 타입을 자바 데이터 타입으로 변환을 하는데 이 데이터는 JSON형식이다. 이 작업은 단순 반복 작업인데 이 작업을 줄일 수 있는게 JPA의 역할이다. JPA에선 위의 모든 작업을 함수 한가지로 제공해준다.
- 영속성 컨텍스트를 가짐
영속성은 데이터를 데이터베이스에 영구적으로 저장하는 것이고 영속성 컨텍스트는 자바가 데이터베이스에 데이터를 저장해야하는 모든 것을 알고 있는 것이다. 자바에서 데이터베이스에 저장하고 데이터를 가져오는 일련의 모든 정보를 영속성 컨텍스트로 확인할 수 있다. 자바는 항상 영속성 컨텍스트를 통해서 데이터베이스에 데이터를 저장하고 데이터베이스에 있는 데이터도 영속성 컨텍스트를 통해서 전달된다. 영속성 컨텍스트에서 일어나는 모든 작업은 자동으로 처리된다.
- DB와 OOP의 불일치성을 해결을 위한 방법론 제공
데이터베이스에서는 객체 저장이 불가능하지만 자바에서는 객체 저장이 가능하기 때문에 자바에서 프로그래밍할때는 객체를 사용하고 이것을 데이터베이스에 저장할 때는 JPA가 자동으로 저장해준다.
-OOP의 관점에서 모델링할 수 있게 해줌 상속 컴포지션 연관관계
OOP란?
Object-Oriented Programming으로 객체의 관점에서 프로그래밍 하는 객체 지향 프로그래밍 이다. 상속, 컴포지션(결합), 연관관계 등이 이에 해당된다.
- 방언 처리가 용이하여 Migration하기 좋음
스프링에서 JPA를 통해 데이터베이스에 데이터를 저장할 때, 만약 JPA가 MySQL만을 지원한다면 데이터베이스로 MySQL만을 사용할 수 있을 것이다. 하지만 JPA는 수많은 방언(dialect)이 있다. oracle, MySQL, MS SQL, Maria DB, PostgreSQL등 수많은 방언을 사용할 수 있다. 추상화 객체를 두어 본인이 원하는 방언을 설정하여 연결하면 된다. 각각의 데이터베이스는 기본 문법은 전반적으로 동일하나 데이터베이스별로 지원하는 함수들이 다르기 때문에 DB변경시 코드를 수정해야하는 번거로움이 있다. 하지만 JPA에서 자동으로 변경해준다. 유지보수에 이점이 있다.
'Web > Spring Boot' 카테고리의 다른 글
| Spring Boot 라이브러리 (0) | 2024.04.02 |
|---|---|
| Spring Boot 파일 구조 (0) | 2024.04.01 |
| Spring Boot 프로젝트 생성 (0) | 2024.04.01 |
| Spring Boot 동작 원리 (0) | 2024.03.30 |
| Spring Boot 개념 (0) | 2024.03.28 |