TIL(22.12.27(화))

allnight5·2022년 12월 27일
0

TIL

목록 보기
25/55
  1. 영속성 컨텍스트
    JPA는 객체지향 언어인 JAVA와 Database 사이의 패러다임 불일치를 해결하기위해서 사용되는데 이 JPA가 사용하는것이 영속성 컨텍스트(Persistence Context)인데 뜻 자체는 영구 저장하는 환경으로
    순서로는
    1.즉 처음에 객체가 생성된 상태 -> 비영속
    2.영속성 컨텍스트에 데이터가 저장된 상태 -> 영속
    3.영속성 컨텍스트에 저장된 데이터가 분리된 상태 -> 준영속
    4.마지막으로 삭제된 상태 -> 삭제
    1차 캐시는 Map<Key(primary key), Value(Entity)> 형태로 저장합니다.
    존재하지 않을시에 DB에 조회해서 캐시에 저장하며 저장되어있다면 빠른 조회가 가능하다
    1차 캐시 순서
    1.1차캐시에서 데이터를 찾습니다
    2.1차 캐시에 없으면 디비에서 조회합니다
    3.가져온 데이터를 1차캐시에 저장 하고 반환합니다

  2. 스프링 @Transcational 어노테이션
    @Transactional어노테이션은 일반적으로 DB에서 데이터를 조회, 생성, 삭제, 수정 을 하는경우 메소드 상단에 @Transactional어노테이션을 붙이고 설정값은 readOnly정도만 사용하지만 대용량 동기화, 배치등을할때 트랜잭션 설정값을 사용해야 한다고 한다.

3.트랜잭션이란 무엇인가와 격리성과 연관된 3가지문제와 격리수준 지정으로 인한 해결
트랜잭션의 4가지 특징(ACID)
1.원자성(Atomicity).2.일관성(Consistency) 3.격리성(Isolation)4.영속성(Durability)

격리성으로 인하여 발생하는 문제 3가지
1.Dirty Read
한 트랜잭션(T1)이 데이타에 접근하여 값을 'A'에서 'B'로 변경을 하려했는데 실패하고 종료된다면 T2가 읽으려는 데이터는 B였는데 아니라 T2의 데이터는 의미없는데이터가 된다.
2.Non-Repeatable Read
한 트랜잭션(T1)이 데이타를 Read 하고 있다. 이때 다른 트랜잭션(T2)가 트랜잭션(T1)이 Read하기 전에 데이타에 접근하여 값을 변경 또는, 데이타를 삭제하게 된다면 T1은 잘못된 데이터를 같거나 찾을수없게된다.
3.Phantom Read
트랜잭션(T1) 중에 특정 조건으로 데이타를 검색하여 결과를 얻었는데 한번더 들어가려하는데 그전에 다른 트랜잭션(T2)가 접근해 해당 조건의 데이타 일부를 삭제 또는 추가 한다면 T1은 다른 데이터를 가지고 가거나 T2가 롤백을 해버리면 T1의 데이터는 무의미한 데이터가 되버리고 만다.

트랜잭션 격리수준
1단계 (1) Read Uncommitted
한 트랜잭션에서 커밋하지 않은 데이타에 다른 트랜잭션이 접근 가능하다. 즉, 커밋하지 않은 데이타를 읽을 수 있다.
발생 문제점 : Dirty Read, Non-Repeatable Read, Phantom Read
2단계 (2) Read Committed
커밋이 완료된 데이타만 읽을 수 있다.
발생 문제점 : Non-Repeatable Read, Phantom Read
3단계 (3) Repeatable Read
트랜잭션 내에서 한번 조회한 데이타를 반복해서 조회해도 같은 데이타가 조회 된다
발생 문제점 : Phantom Read
4단계 (4) Serializable
트랜잭션 내에서 쿼리를 두 번 이상 수행할 때, 첫 번째 쿼리에 있던 레코드가 사라지거나 값이 바뀌지 않음은 물론 새로운 레코드가 나타나지도 않도록 하는 설정입니다.
위 3가지 문제점을 모두 커버 가능하다. 하지만 동시 처리 성능은 급격히 떨어질 수 있다.

프록시랑, Lazy Loding의 경우.. 오후부터 찾아보면서 봐봤는데 전혀 소스코드사용을 이해를 못해서 작성을 못했다. 다다음주 월요일부터 DB들으면서 다시 도전해보려한다.

profile
공부기록하기

0개의 댓글