부트캠프(67일차)

성준혁·2023년 2월 2일
post-thumbnail

오늘은 부트캠프 67일차이다. 오늘도 JPA 심화에 대해서 공부를 하였고, JPA 쿼리가 응답해주는 Page, Slice에 대한 설명과 Projection의 기능과 필드 사용방법, 구현체 정의방법,Transcation 의 Isolation 과 propagation 종류 및 차이점에 대해 공부를 해보았고 점점 공부를 하면 할 수록 더 많이 공부를 해야겠다라는 생각이 들었다. 일단 얇고 넓게 알아가고 내가 사용할 때 좀 더 깊이 찾아보고 알아가는 방법이 지금으로서 좋은 방법인 것 같다. 오후에는 복습을 하는 시간을 가졌다.

오늘 배운 것

1. JPA 쿼리가 응답해주는 Page, Slice에 대한 설명

1-1. Page는 기본적인 게시판에서 페이지 번호를 출력하고 다음으로 넘길 떄 사용
1-2. Slice는 스크롤을 아래로 내릴때 더보기 버튼을 누르거나 자동으로 게시글을 불러오고 싶을 때

  • slice는 카운트 쿼리가 나가지 않고 다음 slice가 존재하는지 여부만 확인할 수 있기 때문에, 데이터 양이 많으면 많을수록 slice를 사용하는 것이 성능상 유리하다.

2. Entity 의 일부필드만으로 생성 또는 업데이트 하는 방법

2-1. Projection의 기능

  • 원하는 필드만 지정해서 조회 가능
  • 여러필드 합쳐서 재정의 필드(Alias) 조회 가능(Nested 프로젝션)
  • 조회 필드 그룹을 인터페이스 또는 클래스로 만들어놓고 재사용 가능

2-2. Projection 필드 사용방법

2-2-1. get필드 () 메소드로 정의

  • 정의한 필드만 조회하기 때문에 Closed 프로젝션이라고 한다.
  • 쿼리를 줄이므로 최적화 할 수 있다.
  • 메소드 형태이기 때문에 Java 8의 메소드를 사용해서 연산을 할 수 있다.

2-2-2. @Value로 정의

  • 전체 필드를 조회할 수 밖에 없어서 Open 프로젝션이라고한다.
  • @Value(SpEL)을 사용해서 연산을 할 수 있다.
  • 스프링 빈 들의 메소드도 호출 가능하다.
  • 쿼리 최적화를 할 수 없다. SpEL을 엔티티 대상으로 사용하기 때문에

2-2-3. Projection 구현체 정의방법

  • 인터페이스 기반 Projection : Projection을 Interface 처럼 사용하는 방법
  • 클래스 기반 Projection : Projection을 DTO 클래스 처럼 사용하는 방법
  • 다이나믹 Projection : Projection 클래스를 동적으로 지정해서 사용하는 방법

3. Transcation 의 Isolation 과 propagation 종류 및 차이점에 대해 설명

3-1. @Transactional의 propagation 속성

  • REQUIRED : default propagation, 트랜잭션이 없으면 새로 생성하고, 이미 시작된 트랜잭션이 있으면 해당 트랜잭션을 사용함.
  • REQUIRES_NEW : 항상 새로운 트랜잭션을 시작, 즉, 이전에 시작되어 실행중인 트랜잭션에 상관없이 항상 트랜잭션을 만들어 시작시킴.
  • NOT_SUPPORTED : 현재 진행중인 트랜잭션이 있어도 사용 X, 무시함, 트랜잭션이 없으면 그냥 진행, 새로 생성 X.(여러 메서드 동작 시 특정 메서드만 트랜잭션 적용을 제외시키기 위함)

3-2. @Transaction의 isolation Level

  • READ_UNCOMMITED : 해당 트랜잭션에서 커밋되지 않은 데이터를 다른 트랜잭션이 접근할 수 있도록 허용함
  • READ_COMMITED : 해당 트랜잭션으로부터 커밋된 확장 데이터만 다른 트랜잭션에서 접근 허용(외부 트랜잭션에서 해당 데이터를 삭제, 수정할 경우 Non-Repeatable-Read를 막을 수 없음)
  • REPEATABLE_READ : 한 트랜잭션 내에서 실행되는 모든 같은 SELECT문의 결과가 같도록 조회할 수 있는 격리수준
  • SERIALIZABLE : 가장 엄격한 격리수준, 트랜잭션의 동시성이 떨어져 성능에 치명적일 수 있음
  • 격리 수준이 높을수록 성능은 떨어짐

3-3. 차이점

  • propagation은 로직 처리를 수행할 때 트랜잭션이 어떻게 수행되어야할지에 대한 설정이다. 이 설정을 통해서 트랜잭션을 필요에 따라 구분되어 사용할 수 있게 된다.
  • isolation level은 DBMS 데이터에 대해서 동시성 처리가 일어날 때 어떠한 전략을 사용할지 레벨을 설정하는 것이며, 다른 트랜잭션 하에서 데이터를 읽을 때 어떻게 데이터가 보이는지에 대한 설정이다.
  • 위와 같이 두 옵션을 적절히 이용하여 트랜잭션을 사용할 필요가 있다.

0개의 댓글