[SW 직무역량 부트캠프] 6일차

WJ·2023년 7월 3일
post-thumbnail

2023-07-03 SW 직무역량 부트캠프 6일차 TIL

📙 이론

JPA (Java Persistence API)

  • Java에서의 ORM 기술 표준으로 사용하는 인터페이스 모음

    • ORM (Obeject-Realational Mapping) 이란?
      • 객체와 RDB(Realational DataBase)의 데이터를 자동으로 매핑해주는 도구
      • 즉, 객체를 RDB의 테이블에 자동으로 영속화 해주는 것
  • 인터페이스이기 때문에 구현체가 필요, 대표적으로 Hibernate가 있음

  • 영속성 컨텍스트 (Persistence Context)

    • 엔티티를 영구 저장하는 환경
    • entitiyManagerFactory에서 생성된 EntityManager를 통해 엔티티를 조회하거나 엔티티를 보관하고 관리
    • EntityManager 생성시 논리적인 개념의 영속성 컨텍스트가 하나 만들어짐
  • 영속성 컨텍스트 특징

  1. 1차 캐시

    • persist로 엔티티 영속시에 영속성 컨텍스트의 1차 캐시에 저장됨. 엔티티 접근 시 우선 1차 캐시에서 조회 후 없을 시 DB 조회를 진행함.
    • 특징
      • 같은 엔티티의 동일성 보장
  2. 쓰기 지연

    • persist로 엔티티를 영속시킬 시 바로 DB에 반영하지 않고 내부 저장소에 SQL를 저장해 두었다가 트랜잭션 커밋 시점에 한번에 처리

  3. 변경 감지(Dirty checking)

    • flush() 함수 호출시 저장된 엔티티의 스냅샷과 현재 엔티티를 비교하여 변경 사항이 있을 시 내부 저장소에 SQL을 저장해 두었다가 DB에 반영 후 커밋
  4. 지연 로딩, 즉시 로딩

    • 지연 로딩 : 연관관계가 매핑된 엔티티 조회시 해당 엔티티의 참조 객체를 사용하는 시점에 조회하는 방법

    • 즉시 로딩 : 연관관계가 매핑된 엔티티 조회시 해당 엔티티의 모든 객체를 조회하는 방법

JDBC (Java DataBase Connectivity)

  • DB 접근을 위해 Java에서 제공하는 API

Spring Data JPA

  • 스프링 프레임워크에서 JPA를 편리하게 사용할 수 있도록 지원하는 프로젝트

  • SQL이 아닌 객체 중심으로 개발 -> 생산성 증대, 유지보수 난이도 낮음

  • 기본적인 CRUD SQL를 작성하지 않아도 된다.

  • JpaRepository<Entity, ID 자료형> 와 같은 형태로 레포지토리에 상속받아 사용

  • Spring Data JPA의 작동구조는 다음과 같다.

📙 실습

Blog API 구축

Lombok 어노테이션 사용 및 JPA Auditing을 통한 자동 시간 매핑

# Article.java

@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@EntityListeners(AuditingEntityListener.class) // Auditing 기능 추가
@Entity
public class Article {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", updatable = false)
    private Long id;

    @Column(name = "title", nullable = false)
    private String title;

    @Column(name = "content", nullable = false)
    private String content;

    @CreatedDate
    @Column(name = "created_at")
    private LocalDateTime createAt;

    @LastModifiedDate
    @Column(name = "updated_at")
    private LocalDateTime updatedAt;

    @Builder
    public Article(String title, String content) {
        this.title = title;
        this.content = content;
    }

    public void update(String title, String content){
        this.title = title;
        this.content = content;
    }

}

main 함수에서 @EnableJpaAuditing 어노테이션을 붙여서 활성화를 시켜 주어야함.

# BeDay6Application.java

@EnableJpaAuditing
@SpringBootApplication
public class BeDay6Application {

    public static void main(String[] args) {
        SpringApplication.run(BeDay6Application.class, args);
    }

}
profile
주니어 개발자

0개의 댓글