It's going to be one day 🍀

안녕하세요! 매일 매일 공부하려고 노력하는 백엔드 개발자 지망생의 공부 흔적입니다.

Back-End/Spring

[Spring] MyBatis 실습 / JPA 개념 (외부)

2jin2 2024. 3. 7. 22:37

MyBatis 실습 

MyBatis란?

: 자바의 관계형 데이터베이스 프로그래밍을 좀 더 쉽게 할 수 있게 도와주는 개발 프레임워크.

복잡한 jdbc보다 사용하기에 더 깔끔하다.


JPA : 자바에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스

인터페이스이므로 실제 사용을 위해서는 ORM 프레임워크를 추가로 선택해야함. ex) hibernate

 

hibernate : JPA 인터페이스를 구현한 구현체이자 자바용 ORM 프레임워크. 내부적으로는 JDBC API를 사용한다.

하이버네이트의 목표는 자바 객체를 통해 데이터베이스 종류에 상관없이 데이터베이스를 자유자재로 사용할 수 있게 하는것이다.

 

엔티티

엔티티(Entity)는 데이터베이스의 테이블과 매핑되는 객체를 말한다. 데이터베이스의 테이블과 직접 연결된다는 특별한 특징이 있다. 

 

엔티티 매니저

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

-> 예를 들어 회원 2명이 동시에 회원가입을 하려는 경우, 엔티티 매니저 팩토리가 회원1 요청과 회원2 요청에 대해 가입 처리할 엔티티 매니저를 만들어 다음과 같이 엄무를 처리함. 그리고 필요한 시점에 데이터베이스와 연결됨.

 

스프링 부트는 직접 엔티티 매니저 팩토리를 만들어서 관리하지는 않고, 내부에서 엔티티 매니저 팩토리를 하나만 생성하고 @PersistenceContext or @Autowired 어노테이션을 사용해서 엔티티 매니저를 사용한다.

@PersistenceContext
EntityManager em;    // 프록시 엔티티 매니저. 필요할 때 진짜 엔티티 매니저를 호출

-> 스프링 부트는 기본적으로 빈을 하나만 생성해서 공유하므로 동시성 문제가 발생할 수 있음. 그래서 실제로는 프록시(가짜) 엔티티 매니저를 사용함. 필요할 때 데이터베이스 트랙잭션과 관련된 실제 엔티티 매니저를 호출함. 스프링에서는 이 엔티티 매니저를 Spring Data JPA에서 관리하므로 개발자가 직접 생성, 관리할 필요가 없음!

 

영속성 컨텍스트

JPA의 중요한 특징 중 하나로, 엔티티를 관리하는 가상의 공간임. 이것이 있기 때문에 데이터베이스에서 효과적으로 데이터를 가져올 수 있고, 엔티티를 편하게 사용할 수 있음.

->

1차 캐시

동일성 보장 

쓰기 지연

변경 감지

지연 로딩