ORM이란
Object Relation mapping으로 객체와 데이터베이스를 연결하는 프로그래밍 기법
ORM의 장점과 단점
장점
1. SQL을 직접 작성하지 않아도 됨
2. 비즈니스 로직에만 집중 가능
3. DB가 추상화 되어 있음으로 DBMS가 변경되더라도 추가적인 작업이 적음(DBMS에 대한 종속성이 줄어듬)
4. 매핑하는 정보가 명확하여 ERD에 대한 의존도를 낮출수 있음
단점
1. 프로젝트의 복잡성이 높아질수록 난이도가 올라감
2. 복잡하고 무거운 쿼리는 ORM으로 해결 불가능
3. 슬로우 쿼리가 발생시 원인 분석이 어려움
JPA와 하이버네이트
JPA는 RDBMS를 사용하는 방식을 정의한 인터페이스로 실제 사용을 위해서는 ORM 프레임워크가 필요함
하이버네이트는 JPA 인터페이스를 구현한 구현체이지 자바용 ORM 프레임워크임
내부적으로는 JDBC API를 사용함
Entity
DB의 테이블과 매핑되는 객체
Entity mamager
Entiry를 관리해 DB와 어플리케이션 사이의 객체를 생성, 수정, 삭제하는 역활
Entiry manager Factory는 Entiry manager를 만드는 곳
스프링부트 내부에서 Entiry manager factory하나만 생성해서 관리하고 @PersistenctContext 또는 @Autowired 애너테이션을 이용해서 Entiry manager 사용
//스프링 부트가 Entity manager 를 사용하는 방법 예시
@PersistenceContext
EntityManager em;
스프링 부트는 기본적으로 Bean 을 하나만 생성해서 공유함으로 동시성 문제가 발생 할 수 있음
그래서 실제로는 Entity manager가 아닌 프록시 entity manager를 사용함
Entity 상태
단계 | 상태 |
1 | 영속성 컨테스트가 관리 되지 않는 분리 상태(Detached) |
2 | 영속성 컨텍스트가 관리되는 상태(mamaged) |
3 | 영속성 컨텍스트와 전혀 관계가 없는 비영속 상태(transient) |
4 | 삭제된 상태(removed) |
public class EntityManagerTest {
@Autowired
EntityManager em;
public void example() {
// 엔티티가 처음 만들어지면 비영속상태가 됨
Member member = new Member(1L, "홍길동");
// 엔터티가 관리되는 상태
em.persist(member);
// 엔터티가 분리되는 상태
em.detach(member);
// 엔터티가 삭제되는 상태
em.remove(member);
}
}
스프링 데이터 JPA???
스프링 데이터 JPA는 스프링 데이터의 공통적인 기능에서 JPA의 유용한 기술이 추가된 기술
스프링 데이터 JPA를 이용하면 리포지토리 역활을 하는 인터페이스를 만들어 데이터베이스에 CRUD 작업을 할 수 있음
@Service
public class MemberService {
@Autowired
MemberRepository memberRepository;
public void test() {
//생성
memberRepository.save(new Member(1L, "A"));
//조회
Optional<Member> member = memberRepository.findById(1L); //ID가 1L만 조회
List<Member> allMembers = memberRepository.findAll(); // 전체 조회
memberRepository.deleteById(1L); //단건 삭제
}
}
이 글은 골든래빗 《스프링 부트 3 백엔드 개발자 되기 - 자바 편》의 5장 써머리입니다.
'Java' 카테고리의 다른 글
묘공단-스프링부트3 7장 (0) | 2023.10.23 |
---|---|
묘공단-스프링부트3 6장 (0) | 2023.10.10 |
묘공단-스프링부트3 4장 (0) | 2023.09.30 |
묘공단-스프링부트3 3장 (0) | 2023.09.28 |
묘공단-스프링부트3 2장 (0) | 2023.09.28 |