Spring 입문 2주차 (2)

신성훈·2024년 5월 21일

TIL

목록 보기
21/162
post-thumbnail

오늘의 학습 키워드

  • Entity
  • 영속성 컨텍스트
  • JPA의 트랜잭션

Entity

  • JPA에서 관리되는 클래스 즉, 객체를 의미

  • Entity 클래스는 DB의 테이블과 매핑되어 JPA에 의해 관리

  • @Entity(name = "클래스명") : JPA가 관리할 수 있는 Entity 클래스로 지정 (default: 클래스명)
    -Entity 클래스 이름을 지정할 수 있다.
    -JPA가 Entity 클래스를 인스턴스화 할 때 기본 생성자를 사용하기 때문에 반드시 현재 Entity 클래스에서 기본 생성자가 생성되고 있는지 확인해야 한다.

  • @Table(name = "Entity") : 매핑할 테이블을 지정
    -매핑할 테이블의 이름을 지정할 수 있다. (default: Entity 명)

  • @Column
    -(name = "username") 필드와 매핑할 테이블의 컬럼을 지정할 수 있다. (default: 객체의 필드명)
    -(nullable = false) 데이터의 null 값 허용 여부를 지정할 수 있다. (default: true)
    -(unique = true) 데이터의 중복 값 허용 여부를 지정할 수 있다. (default: false)
    -(length = 500)데이터 값(문자)의 길이에 제약조건을 걸 수 있다. (default: 255)

  • @Id : 테이블의 기본 키를 지정
    -기본 키는 영속성 컨텍스트에서 Entity를 구분하고 관리할 때 사용되는 식별자 역할을 수행
    -식별자 값을 넣어주지 않고 저장하면 오류가 발생
    -옵션만 설정하면 기본 키 값을 개발자가 직접 확인하고 넣어줘야 하는 불편함이 발생

  • @GeneratedValue 옵션을 추가하면 기본 키 생성을 DB에 위임

  • @GeneratedValue(strategy = GenerationType.IDENTITY)
    ->id bigint not null auto_increment : auto_increment 조건이 추가된 것을 확인할 수 있다.
    ->해당 옵션을 추가해주면 개발자가 직접 id 값을 넣어주지 않아도 자동으로 순서에 맞게 기본 키가 추가됨

영속성 컨텍스트

  • Persistence -> 영속성, 지속성 이라는 뜻

  • Entity 객체를 효율적으로 쉽게 관리하기 위해 만들어진 공간

  • 직접 SQL을 작성하지 않아도 JPA를 사용하여 DB에 데이터를 저장하거나 조회, 수정, 삭제 가능

  • EntityManager
    -영속성 컨텍스트에 접근하여 Entity 객체들을 조작하기 위해서는 EntityManager가 필요
    -EntityManager를 사용해서 Entity를 저장, 조회, 수정, 삭제
    -EntityManagerFactory를 통해 생성하여 사용

  • EntityManagerFactory

    -일반적으로 DB 하나에 하나만 생성되어 애플리케이션이 동작하는 동안 사용
    -만들기 위해서는 DB에 대한 정보를 전달해야 한다.
    ->정보를 전달하기 위해서는 /resources/META-INF/ 위치에 persistence.xml 파일을 만들어 정보를 넣어두면 된다.

JPA의 트랜잭션

  • 트랜잭션이란
    -DB 데이터들의 무결성과 정합성을 유지하기 위한 하나의 논리적 개념
    (DB의 데이터들을 안전하게 관리하기 위해서 생겨난 개념)
    -가장 큰 특징은 여러 개의 SQL이 하나의 트랜잭션에 포함
    -모든 SQL이 성공적으로 수행이 되면 DB에 영구적으로 변경을 반영하지만 SQL 중 단 하나라도 실패한다면 모든 변경을 되돌린다.

  • JPA 트랜잭션
    -JPA는 DB의 트랜잭션 개념을 사용하여 효율적으로 Entity를 관리
    -영속성 컨텍스트에 Entity 객체들을 저장했다고 해서 DB에 바로 반영 되지는 않는다.
    -DB에서 하나의 트랜잭션에 여러 개의 SQL을 포함하고 있다가 마지막에 영구적으로 변경을 반영하는 것 처럼 JPA에서도 영속성 컨텍스트로 관리하고 있는 변경이 발생한 객체들의 정보를 "쓰기 지연 저장소"에 전부 가지고 있다가 마지막에 SQL을 한번에 DB에 요청해 변경을 반영
    -적용하기 위해서는 EntityManager에서 EntityTransaction을 가져와 트랜잭션을 적용

    • EntityTransaction et = em.getTransaction();
    • 해당 코드를 호출하여 EntityTransaction을 가져와 트랜잭션을 관리
    • et.begin(); -> 트랜잭션을 시작하는 명령어
    • et.commit(); -> 트랜잭션의 작업들을 영구적으로 DB에 반영하는 명령어
    • et.rollback(); -> 오류가 발생했을 때 트랜잭션의 작업을 모두 취소하고, 이전 상태로
                            되돌리는 명령어

📝오늘의 회고

아직 갈 길이 멀다~!!
오늘도! 쳐지지 말고 포기하지말고 힘내서 가보자고~~~

profile
조급해하지 말고, 흐름을 만들고, 기록하면서 쌓아가자.

0개의 댓글