본문 바로가기
도서/프로그래밍

스프링 부트 3 백엔드 개발자 되기 (3) 데이터베이스 조작이 편해지는 ORM

by 신발사야지 2023. 5. 22.

05장 데이터베이스 조작이 편해지는 ORM

DBMS(database management system)

 

ORM(object-relation mapping) 자바의 객체와 데이터베이스를 연결하는 프로그래밍 기법

 

장점1. SQL을 직접 작성하지 않고 사용하는 언어로 데이터베이스에 접근할 수 있습니다.

장점2. 객체지향적으로 코드를 작성할 수 있기 때문에 비지니스 로직에만 집중할 수 있습니다.

장점3. 데이터베이스 시스템이 추상화되어 있기 때문에 MySQL에서 PostrgreSQL로 전환한다고 해도 추가로 드는 작업이 거의 없습니다. 즉, 데이터베이스 시스템에 대한 종속성이 줄어듭니다.

장점4. 매핑하는 정보가 명확하기 때문에 ERD에 대한 의존도를 낮출 수 있고 유지보수할 때 유리합니다.

 

단점1. 프로젝트의 복잡성이 커질수록 사용 난이도가 올라갑니다.

단점2. 복잡하고 무거운 쿼리는 ORM 으로 해결이 불가능한 경우가 있습니다.

5.3 JPA와 하이버네이트

DBMS에도 여로 종류가 있는 것처럼 ORM에도 여러 종류가 있습니다. 자바에서는 JPA 를 표준으로 사용합니다. JPA는 인터페이스이므로 실제 구현체가 필요한데 가장 대표적인게 하이버네이트이다.

5.3.1 엔티티 매니저란?

엔티티

데이터베이스의 테이블과 매핑되는 객체를 의미합니다. 엔티티는 본질적으로는 자바 객체이므로 일반 객체와 다르지 않습니다. 하지만 데이터베이스의 테이블과 직접 연결된다는 아주 특별한 특징이 있어 구분지어 부릅니다.

엔티티 매니저

엔티티를 관리해 데이터베이스와 어플리케이션 사이에서 객체를 생성, 수정, 삭제하는 등의 역할을 합니다. 그리고 이런 엔티티 매니저를 만드는 곳이 엔티티 매니저 팩토리입니다.

스프링 부트는 내부에서 엔티티 매니저 팩토리를 하나만 생성해서 관리하고 @PersistenceContext 또는 @Autowired 애너테이션을 사용해서 엔티티 매니저를 사용합니다.

그리고 스프링 부트는 기본적으로 빈은 하나만 생성해서 공유하므로 동시성 문제가 발생할 수 있습니다. 그래서 실제로는 엔티티 매니저가 아닌 실제 엔티티 매니저와 연결하는 프록시(가짜) 엔티티 매니저를 사용합니다.

엔티티의 상태

엔티티는 분리상태, 관리상태, 비영속상태, 삭제된 상태로 나눠집니다.

엔티티는 반드시 기본 생성자가 있어야 하고, 접근 제어자는 public 또는 protected여야 합니다.

스프링 데이터 JPA

JPA를 쓰기 편하게 만들어 놓은 모듈

 

 

연습문제 3번

객체와 데이터베이스를 연결하는 프로그래밍 기법을 무엇이라고 할까요?

 

책에는 1번 연결 풀링으로 되어 있는데, ORM 이라면서요,,