JPA
SPRING에서 데이터베이스의 데이터를 꺼내 사용하기 위해 DBMS에 접근하는 기술
DB 커넥터
프로그램과 DB간 상호작용을 가능하게 하는 구성요소.
통신을 관리하고 중재하는 핵심적인 역할.
다양한 DBMS(PostgreSQL, MySQL)등 과 연결을 표준화된 방식으로 처리한다.
커넥터는 보통 Query(질의)를 보내고 결과를 받아오며, 트랜잭션을 관리하는데 필요.
연결관리, 데이터 변환, 오류처리, 보안기능을 포함.
db와 연결을 효율적으로 사용하기 위해 커넥션 풀링을 지원
db커넥터는 크게 2가지 Driver와 Client Library로 나눈다.
*풀링(Pooling): 자원을 필요할 때마다 생성하는 대신 미리 자원을 할당해 놓고 필요한 시점에 꺼내서 사용하는 방법.
DB 커넥션 풀링 : 데이터 베이스와 연결을 미리 생성하여 필요할 때 할당해 사용 후 다시 풀에 반환하는 방식. 장점
- 데이터베이스 서버와의 빈번한 연결 및 해제를 방지하여 시스템의 성능을 향상
- 연결 수에 대한 제어를 통해 자원 고갈을 방지함으로써 안정성을 제공*
Driver
SQL 명령문을 전송하고 결과를 받아오는 역할을 수행한다.
Client Library
클라이언트 라이브러리는 드라이버를 추상화하여 개발자가 더 편리하게 사용할 수 있도록 제공.
JDBC
JDBC는 SQL 질의 실행, 데이터베이스 연결 관리, 트랜잭션 처리, 결과 집합(ResultSet) 처리 등 데이터베이스와 관련된 모든 작업을 Java 애플리케이션에서 직접 수행할 수 있도록 기능을 제공.
특정 데이터베이스 제품에 종속되지 않고 다양한 데이터베이스 시스템과 상호 운용이 가능하도록 설계되었다.
→ 여러 종류의 DB 사용가능
ORM
객체 지향 프로그래밍 언어의 객체와 관계형 데이터베이스의 테이블 간의 불일치를 해소하기 위한 방법
ORM은 객체 지향 시스템의 객체를 관계형 데이터베이스의 레코드와 매핑하는 과정을 자동화함.
불일치의 예시)
< 표 1 > 게시판 테이블
번호 이름
| 1 | 공지 사항 |
| 2 | 자유 게시판 |
< 표 2 > 게시글 테이블
번호 제목 내용 게시판 번호
| 1 | 첫 번째 공지사항 | 첫 공지입니다. 안녕하… | 1 |
| 2 | Spring은 즐거워요 | Spring이 이렇게… | 2 |
두 테이블의 join을 위해 게시글 테이블에 fk를 추가한 형태 이것을 스키마로 작성하면 다음과 같다.
create table boards(
board_id bigint not null primary key auto_increment,
name varchar(20) not null
);
create table posts(
post_id bigint not null primary key auto_increment,
title varchar(255) not null,
contents text,
board_id bigint not null,
foreign key (board_id) references boards(board_id)
);
만약 이 때 post에서 board_id만으로 작성된 게시판을 알고 싶을 때 문제가 발생한다.
db 입장에서는 문제없이 join으로 해결 가능하다.
select boards.name
, posts.*
from posts
left join boards
on boards.board_id = posts.board_id
;
하지만 java입장에서는 다음과 같이 post 만으로 board객체의 이름을 알 수 없는 문제가 발생한다.
@Getter
@Setter
public class Post {
private Long postId;
private String title;
private String content;
private Long boardId;
}
그렇기 때문에 Post는 Board의 모든 값을 알기 위해 객체를 직접 할당하여 정보를 사용한다. 이러한 상황에서 객체와 테이블간 패러다임 불일치가 발생하는 것이다.
@Getter
@Setter
public class Post {
private Long postId;
private String title;
private String content;
// private Long boardId;
private Board board; // <- 객체를 직접 할당
}
Java Persistence API(JPA)
자바에서 ORM을 표준화 하기 위해 정의된 일종의 인터페이스.
데이터 베이스와 테이블 간 매핑 설정을 하기위해 어노테이션 혹은 XML 기반의 메타데이터를 사용.
해당 메타데이터로 Entity, 필드와 컬럼 간 매핑, 객체 간의 연관 관계 등을 정의.
복잡한 쿼리나 대량의 데이터를 처리하는 경우, 자칫 잘못하면 여러 문제가 발생하여 성능상의 문제가 발생할 수 있다.
Data Persistence
데이터 영속성은 시스템에서 생성된 데이터가 프로그램 실행 종료가 된 후에도 사라지지 않고 유지하는 특성을 의미한다.
Hibernate
jpa를 구현한 프레임워크 중 하나.
객체 지향 프로그래밍의 객체와 관계형 db 테이블 간 매핑을 자동화 하여 데이터 지속성 관리 기능을 제공한다.
'Spring' 카테고리의 다른 글
| [오르미 백엔드7기](Spring 프록시객체, 지연로딩 ,즉시로딩, 영속성전이, N+1문제) (1) | 2024.11.25 |
|---|---|
| [오르미 백엔드 7기] (Spring Entity 개념, 연관관계, 공통속성정의) (0) | 2024.11.25 |
| [오르미 백엔드 7기] (Spring Controller, thymeleaf 실습) (1) | 2024.11.19 |
| [오르미 백엔드 7기](POJO, SPRING @Controller, Thymeleaf + CS지식(CSR, SSR)) (1) | 2024.11.18 |
| [오르미 백엔드7기] (Spring DI, IOC, AOP, Annotation) (0) | 2024.11.14 |