날아라쩡글이의 블로그입니다.

트랜잭션, 에러찾기 tip,select문 tip 본문

중앙 HTA (2106기) story/JDBC story

트랜잭션, 에러찾기 tip,select문 tip

날아라쩡글이 2021. 11. 2. 20:16
반응형
  • 논리적인 작업 단위를 구성하는 데이터 조작 명령문의 모음
  • 중요한 개념으로 APP개발시 중요하다. 
  • 트랜잭션의 처리 대상
    • 데이터 조작어 (DML)
    • 데이터베이스 테이블에 데이터를 추가, 갱신 또는 삭제할 때 사용하는 명령어 
    • INSERT, UPDATE, DELETE 명령문에서 사용된다. 
  • 작업들을 논리적인 작업 단위로 묶는것을 의미한다. 
  • 예제 -- 이체하기 
    1. 내 계좌의 잔액 감소  --UPDATE
    2. 상대방의 잔액이 증가  --UPDATE
    3. 내 계좌에 이체 발송 내역 추가  --INSERT
    4. 상대방 계좌에 이체 수신 내용 추가 --INSERT
  • 이체하기는 4번의 DML작업으로 구성된다. 
  • 이 부분이 논리적인 작업단위이다. 
  • 예제 -- 구매하기 
    1. 구매 정보 저장 --INSERT
    2. 배송 정보 저장 --INSERT
    3. 결제 정보 저장--INSERT
    4. 상품 재고 감소 --UPDATE
    5. 상품 판매 지수 증가 --UPDATE
    6. 고객의 포인트 증가--UPDATE
  • 구매하기는 6번의 DML 작업으로 구성된다. 
  • 트랜잭션이란 중간에 에러가 날 경우 취소가 될 수있게 만드는 것이다. 
    • 이체하기에서 중간에 에러로 내 계좌에서 잔액만 감소가 되면 화가 날 것이다. 
    • 그러면 매우 화가 날 것이다. 그것을 방지해준다. 
    • 구매하기의 경우 쇼핑을 하면 모든게 취소되고 구매정보 처음부터 다시 작성해야하는 경우가 
      종종 있다. 그럴 때 ROLLBACK현상이 일어났다고 할 수 있다. 

목적

  • 트랜잭션 내의 명령문 하나라도 실행되지 못하면 나머지 명령문도 모두 데이터 베이스 반영이 취소가 되어야한다. 
    • 논리적인 작업단위 중에 하나라도 오류가 발생되면 발생전까지의 작업이 취소된다.
  • 트랜잭션 내의 명령문이 모두 성공적으로 실행되면 데이터 베이스에 영구적으로 실행결과를 영구적으로 반영시킨다. 
    • 모두 성공이 되면 전체적인 COMMIT을 통하여 DB에 반영되는 것을 의미한다. 
  • 데이터의 일관성이 깨지지 않도록 하는 것이 목적이다. 

트랜잭션의 처리 명령어 

  • COMMIT
    • 트랜잭션 내의 DML실행 결과를 데이터 베이스에 반영한다. 
  • ROLLBACK
    • 트랜잭션내의 DML실행 결과의 데이터 베이스에 반영을 전부 취소한다. 
  • 트랜잭션의 시작과 종료 
    • 시작
      • 첫번째 DML명령이 실행될 때 새 트랜잭션이 자동으로 실행된다.
    • 종료
      • COMMIT 또는 ROLLBACK명령이 실행될 때 기존 트랜잭션이 종료된다. 
      • 트랜잭션이 종료되면 새로운 트랜잭션이 자동으로 시작된다. 
      • SQL명령어 편집툴을 종료할 떄 기존 트랜잭션이 종료된다. 
      • 시스템에 장애가 발생할 때 기존 트랜잭션이 종료된다. 
  • COMMIT과 ROLLBACK의 이해 
    • COMMIT/ROLLBACK실행 이전 
      • 현재사용자는 SELECT문을 사용해서 DML작업결과를 검토할 수 있다. 
      • 현재 사용자의 DML작업결과를 COMMIT/ROLLBACK전에는  다른 사용자는 볼 수 없다. 
      • 현재 사용자가 작업하는 관련행은 LOCK이 걸려있기 때문에 
        행잠금으로 인하여 다른 사용자가 관련행의 데이터를 변경할 수 없다. 
        • SELECT문은 조회기 때문에 데이터 변동과 상관없어 확인 할 수 있다.
        • 수정전의 SELECT문을 조회가능
      • 데이터를 이전 상태로 되돌릴 수 있다. 
    • COMMIT실행 후 
      • DML작업 결과가 데이터 베이스에 영구적으로 저장된다.
      • 모든 사용자가 작업 결과를 볼 수 있다. 
      • 관련행의 행잠금이 해제되어 다른 사용자가 행을 조작할 수 있다. 
    • ROLLBACK실행 후 
      • DML작업 결과가 반영 취소가 된다. 
      • 데이터가 이전상태로 복구된다. 
      • 관련행의 행잠금이 해제 된다. 
  • 트랜잭션의 성질
    • 원자성(Atomicity)
      • 트랜잭션과 관련된 작업들은 부분적인 성공을 허용하지 않는다. 
      • 취소하면 전체적인 취소, 성공이면 전체적인 성공
    • 일관성 (Consistency)
      • 트랜잭션이 종료되면 언제나 데이터는 일관성을 유지하는 상태가 된다. 
    • 고립성(Isolation)
      • 트랜잭션 수행 시 다른 트랜잭션이 끼어들지 못한다.
    • 지속성(Durability)
      • 성공적으로 수행된 트랜잭션은 데이터베이스에 영구적으로 반영된다.
  • 자바에서는 외래키의 경우 vo에 객체로 만들어서 입력을 해주어야한다. 
  • table의 외래키 참조는 -->객체에서 참조한 주소값을 갖고 있기 때문에 클래스로 정의하는 것이 맞다. 
    • 카테고리의 번호를 넣을 때 번호만 넣지 않고 카테고리의 객체가 필요하다.
  • 이클립스는 자동commit이 활성화 되어있기 때문에 해제를 시켜주어야한다. 
  • connection = ConnectionUtil.getConnection(); //자바의 커넥션은 기본커넥션, 자동커밋이다.
    connection.setAutoCommit(false);//자동커밋을 종료시킴 새로운 트랜잭션 시작
    • 오류확인시 
    • vo객체에 toString을 재정의 후 확인하는 작업이 필요하다.
    • break point를 걸어놓고 디버깅을 이용한다. debug App -> 실행 -> 디버그모드 허용 perspective ->ok->오른쪽 변수 ->stepover클릭
  • select 문의 join, 인라인 뷰등은 SQL Developer에서 되는지 호가인후 가져오면 좋다.
반응형
Comments