[Flask] - TIL. step 3

이영주·2020년 12월 24일
0

Flask

목록 보기
3/4
post-thumbnail

시스템 로직 구현

  1. service > user_id로 데이터 받아오기
    model에 의존적이기 때문에 인자로 user_dao를 받는다.

  2. view > endpoint 정의하기
    service에 의존적이기 때문에 인자로 service를 받는다.

Jsonify

✔ 사용자가 json data를 내보내도록 제공하는 flask의 함수이다.
✔ jsonify()는 json response를 보내기 위해 이미 content-type header가 'application/json'로 되어 있는 flask.Response() 객체를 리턴한다.

  1. 유저생성 post 메소드

DB transaction

데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위이다.
하나의 트랜잭션은 Commit되거나 Rollback된다.

✔ Commit 이란 하나의 트랜잭션이 끝났다라는 것을 알려주기위해 사용한다.
✔ Rollback 이란 하나의 트랜잭션 처리가 비정상적으로 종료된 경우 다시 시작/취소 시킨다.

  • 사용 목적
    데이터를 안전하게 관리하기 위해서이다.
  • 특징

    1. Atomicity (원자성)
    트랜잭션의 연산(Commit, Rollback)은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않아야 한다.
    트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 한다.

    2. Consistency(일관성)
    트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환한다.
    시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 한다.

    3. Isolation(독립성,격리성)
    둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행중에 다른 트랜잭션의 연산이 끼어들 수 없다.
    수행중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다.

    4. Durablility(영속성,지속성)
    성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다.

  • 예시

✔ 은행에서 A가 B에게 송금하던 중 서버의 접속이 끊기는 상황이 생긴다면
A의 잔고만 사라지고 B의 잔고에는 변화가 없을 수 있다.
✔ 트랜잭션을 사용한다면 B의 잔고에 변화가 성공적으로 끝나지 못했을 경우
(어떤 한 작업 단계에서라도 오류가 발생하면) 트랜잭션이 시작되기 이전 상태로 유지된다.

Session

데이터베이스 접속시작에서 여러작업을 수행한 후 접속종료까지의 전체기간을 의미한다.
세션 내부에는 하나 이상의 트랜잭션이 존재한다.

  • 읽기 일관성(Read Consistency)

✔ 특정 세션이 테이블 데이터를 변경중일때 그 외 나머지 세션에서는 현재 진행중인 변경과 무관한 본래 데이터를 보여주는 특성을 의미한다.
✔ 단, 아직 커밋하지 않은 동일 세션에서는 해당 데이터를 확인할 수 있다. 해당 세션 안에서는 유효한 상태로 존재하는데 그 이유는 Undo(=Rollback) segment에 저장해놓기 때문이다. 이 상태에서 Rollback 하게되면 Undosegment 내의 데이터를 파기한다.

  • LOCK

✔ 특정 세션에서 조작 중인 데이터는 트랜잭션이 완료(= 커밋, 롤백)되기 전까지는 다른 세션에서 조작할 수 없는 상태가 된다. 이 상태를 LOCK이라고 한다.
✔ row lock 또는 table lock이 있다.

Exception handling

프로그램의 비정상 종료를 막고 정상적인 실행상태를 유지하기 위해 발생할 수 있는 예외에 대비한 코드를 작성하는 것을 말한다.

  1. Try - Except

  2. Finally

  3. Exception

  4. "as" 문을 써서 해당 exception의 객체를 받아서 정보 얻기

  5. try 문에서 else를 사용

0개의 댓글