5. SpringBoot - (1) JPA(Java Persistent API) 기초

한승록·2024년 1월 3일
0

스프링 부트 기초

목록 보기
5/6
post-thumbnail

1) 개념

1-1) ORM(Object Relational Mapping)

JPA의 본격적인 설명에 앞서 설명을 드려야 할 부분이 있습니다. JPAORM은 하나의 프레임워크로 Java 환경에서 구현하기 위한 표준 명세이기 때문입니다.
ORM(Object Relational Mapping)객체지향 언어DB 와의 연결 단순화하여 간편한 사용을 돕는 역할을 수행합니다.
기존의 DB와의 연결을 도와주는 역할은 주로 MyBatis가 수행했습니다만 전형적인 ORMJPAHibernate와는 다르게 SQL 구문을 직접 관리하였습니다.



1-2) JPA(Java Persistent API)

JPA(Java Persistent API)ORM 프레임워크의 일종으로 DBMS에서 받아오는 데이터와 Java 기반의 개발환경에서 객체 와 일치시켜 값을 받아오는 기능을 수행합니다.
즉, 인터페이스 역할을 수행하기 때문에 DAO 에서의 별다른 SQL 구문에 대한 관리가 필요하지 않게 된것입니다.




2) 장단점

2-1) 장점

  1. 유지보수
    • SQL구문이 따로 작성되지 않아 가독성이 좋고 간편하게 수정이 가능
    • 컬럼이 추가될 경우 해당 칼럼만 DTO 혹은 VO 에 추가
    • DBMS의 종류가 변경되더라도 SQL 구문의 수정이 필요없음

  2. 객체지향 프로그래밍
    • SQL이 중심이 아닌 객체가 중심이 되어 개발이 진행

  3. 생산성 향상
    • 객체만 전달하면 되므로 SQL 구문을 직접 작성하지 않아 프로그래밍의 생산성이 향상



2-2) 단점

  1. 성능문제
    • 필요 시점에만 데이터를 가져오기 위해 쿼리가 여러번 실행되어 해당 쿼리와 연관된 엔티티들을 가져오기 위해 DB 에 부담 발생
    • 규모가 커질 수록 메모리 소비가 높아질 수 있음

  2. 쿼리 작성
    • 특정 상황에서 기능을 지원하지 않을 수 있기 때문에 한계가 존재
    • 복잡한 쿼리 작성에 있어 직관적이지 않을 수 있음




3) 사용방식

3-1) Entity

Entity는 테이블과 매핑하여 데이터를 저장하는 클래스입니다.
Entity를 구성하기위해 사용되는 어노테이션은 아래와 같습니다.
  1. @Entity
  2. @Table
  3. @Column

또한 Entity는 다음과 같은 생명주기를 가지게 됩니다.
  1. 비영속 : 영속성 컨텍스트와 관계가 없는 상태
  2. 영속 : 영속성 컨텍스트에 저장된 상태
  3. 준영속 : 영속성 컨텍스트에 저장되었다가 분리된 상태
  4. 삭제 : 엔티티를 관련 메서드를 통해 데이터와 함께 삭제



3-2) Entity Manager

Entity ManagerEntityCRUD를 기반으로 하는 관리 역할을 수행합니다.

3-2-1) Create(생성)

EntityManager entityManager;

VelogEntity velogEntity = new VelogEntity();

velogEntity.setUserId("velog");
velogEntity.setUserPw("Qwer");

// 트랜잭션 시작
eintityManager.getTransaction().begin();

// 변경된 엔티티 데이터베이스 반여
eintityManager.merge(velogEntity);

// 트랜잭션 커밋
entityManager.getTransaction().commit();

3-2-2) Read(조회)

EntityManager entityManager;

// 엔티티 조회
VelogEntity velogEntity = entityManager.find(VelogEntity.class, entityId);

// 조회된 엔티티 사용
System.out.println(velogEntity.getUserId());
System.out.println(velogEntity.getUserPw());

3-2-3) Update(수정)

EntityManager entityManager;

// 엔티티 조회
VelogEntity velogEntity = entityManager.find(VelogEntity.class, entityId);

// 엔티티 속성 변경
velogEntity.setUserId("git");
velogEntity.setUserPw("github12");

// 트랜잭션 시작
velogEntity.getTransaction().begin();

// 변경된 엔티티를 데이터베이스에 반영
velogEntity.merge(velogEntity);

// 트랜잭션 커밋
velogEntity.getTransaction().commit();

3-2-4) Delete(삭제)

EntityManager entityManager;

// 엔티티 조회
VelogEntity velogEntity = entityManager.find(VelogEntity.class, entityId);

// 트랜잭션 시작
velogEntity.getTransaction().begin();

// 변경된 엔티티를 데이터베이스에 반영
velogEntity.remove(velogEntity);

// 트랜잭션 커밋
velogEntity.getTransaction().commit();
profile
개발 학습

0개의 댓글