DAO

1. DAO란?

  • 데이터에 접근하기 위한 객체 (data access object)
  • DB에 저장된 데이터를 읽고, 쓰고, 삭제하고, 변경함 -> CRUD

2. 계층의 분리

  • DB테이블당 하나의 DAO를 작성해서 하나의 DAO가 하나의 DB 테이블의 CRUD를 담당함
  • 컨트롤러에서는 해당 DAO를 이용해서 요청을 수행함
  • 각 컨트롤러에서 중복되는 기능을 DAO로 묶어서 중복 코드를 제거함

DI와 AOP

1. Transaction

  • 더이상 나눌 수 없는 작업의 단위
  • 예를 들어 계좌 이체의 경우, 출금과 입금이 하나의 Transaction으로 묶여야 함
    모 아니면 도

2. Transaction의 속성 - ACID

  1. Atomicity 원자성 - 나눌 수 없는 하나의 작업으로 다루어져야 함
  2. Consistancy 일관성 - Tx수행 전과 수행 후가 일관된 상태를 유지해야 함
  3. Isolation 고립성 - 각 Tx는 독립적으로 수행되어야 함
  4. Durability - 성공한 Tx의 결과는 유지되어야 함 (DB)

3. 커밋과 롤백

  • 커밋 : 작업 내용을 DB에 영구적으로 저장
  • 롤백 : 최근 변경사항을 취소(마지막 커밋으로 복귀함)
  • 자동 커밋 : 명령 실행 후 자동으로 커밋, 롤백 불가, 기본 설정
  • 수동 커밋 : 커밋 버튼을 눌러야 커밋됨, 마지막으로 커밋 누른 곳으로 롤백 가능
    SET autocommit = 0;으로 설정해야함

4. Tx의 isolation level

  • 각 Tx를 고립시키는 정도. 아래로 갈수록 고립도 증가

  • READ UNCOMMITED - 커밋되지 않은 데이터도 읽기 가능
    다른 Tx에서 데이터를 수정하고 커밋하지 않아도 본 Tx에서 수정 사항이 반영된 데이터를 불러올 수 있음 (dirty read)

  • READ COMMITED - 커밋된 데이터만 읽기 가능
    다른 Tx에서 데이터를 수정해도 커밋하지 않으면 본 Tx에선 수정 전 데이터만 보여짐. 수정사항을 커밋하면 본 Tx에서 수정 사항이 반영된 데이터를 불러올 수 있음 (phantom read)

  • REPEATABLE READ - Tx이 시작된 이후 변경은 무시 (Default)
    다른 Tx에서 수정사항이 발생해도 본 Tx에서 불러오는 데이터는 수정 전의 데이터임

  • SERIALIZABLE - 한 번에 하나의 Tx만 독립적으로 수행
    한 번에 하나의 Tx만 독립적으로 수행됨. 다른 Tx와 동시에 수행되지 않고 데이터에 문제가 생길 확률이 가장 적음(절대 데이터에 문제가 생기면 안되는 경우에 사용)
    읽기 + 읽기는 가능

profile
안녕하세요. Chat JooPT입니다.

0개의 댓글