상세 컨텐츠

본문 제목

64일 - 트랜잭션 (Transaction. feat. 64일차 총 복습 메모)

수업 일지/Oracle DBMS

by NayC 2021. 5. 21. 15:26

본문

728x90

2개 문장 실행하는 경우가 있다. 

 

INSERT, UPDATE, DELETE 할 때 업무적으로 이름 잘 지은 분

or 쿼리를 2개 이상 실행하는 함수가 있는 분

-> 예시 보는 중

 

오라클 가서 보드 종속삭제하면 이렇게 하나하나 다 안지워줘도 다 지워진다고 함~ 

boardService가 있음에도 불구하고 Contoller에 상세하게 있는건 아니라고 함

-> boardService로 가지고 가기

 

서비스가 있으면 컨트롤러만 쓰는거고 / 그 컨트롤러는 여러 DAO들이 쓰는거고

 

지우는건 DAO가 책임진다고

 

아까 그 종속 삭제 안하면 DELETE 쿼리 4개를 써야 -> 오라클에서 종속 삭제 하자~~ 

- 근데 회계 장부같은건 조심히 다루기 ~ (이런건 한 번에 다 삭제하면 안되니) 

CASCADE?

 

DAO는 테이블과 1:1

그래서 테이블 수정, 삭제는 다 DAO를 통해서 한다고 함

 

DAO가 없어서 우리는 지금 SQL문을 직접 사용한다고... 


Transaction을 알아보자

 

수정을 한다고 했을 때

 

L 에 함수 새로

당연히 R에는 implements 하고 새로운 함수 만들어야겠지

 

R

뭘 클릭해서 자세한 페이지로 가면, 

들어가는 순간 조회수 +1 될 것

- hitUp() 함수가 필요할 것

- 좋아요 함수도 있을 것 

- 공유(share) 함수도 있을 것 

// 그간 그냥 페이지에서 큼직한 것만 뽑았는데... 사실 이런 것들도 있는 것

서비스한테 조회수 들어왔으니 up해줘, like 들어왔으니 up 해줘 등을 시켜야하는 것

 

Dao는 테이블과 연관

- db와 연결되어 있어서 가지고 있는 메소드가 이렇게 업무적이지 않음 

- hitUp을 하기 위해서도 update, likeUp을 할 때도 update

오른쪽이 Dao

cf) 바람직하지 않은 방식

ㅡㅡㅡㅡㅡ

* 파일 NoticeService * 

 

hipUp을 구현해보자

- update를 가질 수도 있지만 ~ hitUp이라고 전문화되게 써주는게 맞다 ~~ 

 

문제는 hitUp()에 맞게 쿼리를 작성해야하는데

up을 하려면 기존의 것을 알고 있어야 함

 

 

cf) L에서 16번째줄

- update를 한 번에 하는게 있다. 

- 이걸 이용해서 할 수도 있는데... Dao랑 헷갈... 

- 무튼 쓰려거든 


말은 '계좌이체'지만 

사실상은 update가 2개인 것 (아마 보내는쪽, 받는쪽? 이게 맞음

-> 하나의 명령어처럼 실행될 수 있어야 

 

2개 이상이 하나인것처럼 처리하는 것 = 트랜잭션

둘 다 실행되거나 둘 다 실행 안 되거나

 

commit;

rollback;

 

오라클에서는 rollback으로 해서 두 개 처리를 해주고 안해주고를 하는데... (commit 하기 전까지는 commit이 아니기에 이런 말이 나온듯) 

jdbc에서는 어떻게 할까~! 

 

// 

 

hitUp 함수를 보자

 

https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html

 

Using Transactions (The Java™ Tutorials > JDBC Database Access > JDBC Basics)

The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See Java Language Changes for a summary of updated

docs.oracle.com

https://mkyong.com/jdbc/jdbc-transaction-example/

 

JDBC Transaction example - Mkyong.com

- JDBC Transaction example

mkyong.com

 

https://ubermensch-with.tistory.com/364

 

64일 - 예외 처리

cf) 뷰에는 order by를 넣는게 아니다. 개발자도구에서 form에 어떤 데이터들이 담겨서 가는건지 header에서 확인 원래는 JdbcBookService bookService = new JdbcBookService(); 이렇게 썼었음 - 근데 인터페이..

ubermensch-with.tistory.com

(예외 처리 할 게 있어서, 아래부분에서 transition 배우다가 예외 처리를 더 배웠음) 

 

요지는 transaction 처리 시,

com.setAutoCommit... 하면 자동 commit 안된다는거 (문장들 많이 쓴게 다 올바르면 실행되도록~) 

-> com.commit(); 무조건 해줘야 한다는 점

+ 자원관리 할 때 try() 안에 넣어주면 close 해줄 필요가 없다는 점~! 

 

3가지 옵션을 더 봐야함

고립도에 따라서 성능에 영향을 준다고 한다.

 

// 이건 다음주 월요일에! 

 

 

 

 

cf) '자원 사용'이란

자원

- 운영 체제 자원

- db 자원

 

 

 

요지는 close들을 잘 해줘야 한다! 예외처리 기법에 try() 안에 넣어주면 저절로 close를 해준다는게 포함됐다는 것! 

 

* 오늘 정리 *

예외처리

- 예외란 무엇인가

- 예외를 던지거나 처리하는 방법

- checked 예외 -> 무조건 try-catch를 하든, 던지든

- unchecked 예외 -> 신경 안 쓰는거

 

transaction

- 기본적으로 자동 commit이라

  connection 객체에서 con.setAutoCommit(false) 처리를 해야함 (오토 커밋이 아니라 매뉴얼 커밋으로) 

  -> con.commit(); 해서 반드시 해줘야 한다. 

- close 하는 기능들 신경써야 한다. 

  (그래서 새로운 예외 처리 코드를 보게 된 것. 잠시 본 것. 자원 관리에 대해)

 

 

 

728x90
반응형

관련글 더보기