트랜잭션:
- 작업의 완전성을 보장해주기 위해 사용되는 개념
- 특정한 작업 전부 처리 or 전부 실패 => 데이터의 일관성을 보장해 주는 기술
왜 사용하는가?:
작업의 단위를 하나의 쿼리 종속 X => 하나의 작업 단위로 그룹화하여 처리
부분 업데이트(Partial Update)와 같은 상황을 방지하기 위해 트랜잭션(Transaction)이라는 개념을 도입
=> EX. 작업한 내역을 저장하는 로깅작업, 영화관의 예매 시스템, 은행의 결제 시스템 등 데이터의 일관성을 유지해야하는 다양한 상황에서 사용
- 트랜잭션(Transaction)을 이용 =>
- 사용자가 항상 프로그램 실행을 완료하도록 구성하고,
- 만약 실행을 중단할 만한 치명적인 오류가 발생하더라도,
=> DB에 피해가 가지않아 더욱 안전하게 구성할 수 있게 됩
트랜잭션의 특징(ACID):
데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 특징들을 나열해 놓은 개념
- 원자성(Atomicity)
- 일관성(Consistency)
- 격리성(Isolation)
- 지속성(Durability)
원자성(Atomicity):
트랜잭션 내에서 실행되는 명령들을 하나의 묶음으로 처리 =>
내부에서 실행된 명령들이 전부 성공하거나 or 모두 실패해야한다는 특징
가장 대표적인 특징
=> 실행되는 쿼리마다 하나의 작업 단위로 보지않고,
여러개의 작업들을 묶어 하나의 작업단위로 보게됨
일관성(Consistency):
트랜잭션 내부에서 처리되는 데이터의 일관성을 유지해야하는 특징
만약 작업이 성공할 경우 아무런 문제가 발생하지 않고,
실패하더라도 작업을 진행하던 도중 실패한 상태로 데이터를 방치하지 않는 특징
=> 트랜잭션 내의 데이터는 일관되어야하며, 에러가 발생하더라도 데이터의 문제가 발생하면 안된다는 특징
ROLLBACK
이 실행= 데이터 자체가 생성되지 않거나 / 모든 데이터가 생성되는 상황이 발생하여야 데이터 베이스로 작업 실행 가능
격리성(Isolation):
트랜잭션의 경우 실행 전이나 실행 후의 데이터를 외부에서 참조 가능
-> 트랜잭션을 수행하는 중간 상태를 보거나 변경할 수 없도록 구성
EX.
MySQL에서는 사용중인 DB 오브젝트에 락(Lock)
을 걸어 격리성을 구현하게 함
락(Lock)
:
DB에 접속한 또다른 클라이언트가 해당하는 DB 오브젝트를 읽거나, 사용할 수 없도록 만든다는 개념
동시성(Concurrency)과 격리 수준(Isolation Level)라는 개념이 나타남
동시성(Concurrency):
여러명의 클라이언트가 하나의 데이터를 동시에 사용및 공유
EX. 동시성 문제:
하나의 자원을 여러명이 사용하여 발생하는 문제
격리 수준(Isolation Level):
트랜잭션끼리 얼마나 서로 고립되어 있는지를 나타내는 수준
트랜잭션을 성공적으로 수행 -> 수정된 데이터를 시스템에 영구적으로 적용
트랜잭션의 중간 결과가 아니라 완성된 결과만 저장,
데이터베이스에 이상이 생기더라도 자동 복구
EX. DB가 재시작, 트랜잭션의 변경사항을 다시 반영
객체 지향:
- 책임과 권한을 가진 객체들 ->
서로 메시지를 주고받으며 협력해서 필요한 기능을 수행하도록 시스템을 개발하는 것
- 크고 복잡한 시스템을 효과적으로 분해하고 구성, 손쉽게 이해하고 효율적으로 다룰 수 있게 도와주는 방법
= 지금은 가장 인기 있는 프로그래밍 패러다임
장점:
단점:
조건:
1. 캡슐화, 다형성, 클래스 상속을 지원하는가?
2. 데이터 접근 제한을 걸 수 있는가?
캡슐화:
개념적이나 물리적으로 객체 내부의 세부적인 사항을 감추는 것
목적:
도메인:
EX. 판매 회사 -> 구매 및 조달, 제품설계, 물류 및 배달
아키텍처 패턴 (Architecture Pattern):
소프트웨어의 구조를 구성하기위한 가장 기본적인 토대를 제시
계층형 아키텍처 패턴 (Layered Architecture Pattern):
계층을 분리해서 관리하는 아키텍처 패턴,
현재 가장 흔하게 사용되고 있는 아키텍처 패턴 중 하나
Controller:
사용자의 요청을 처리한 후 지정된 뷰에 모델 객체를 넘겨주는 역할
Service:
비즈니스 로직을 수행. DB에 접근하는 DAO를 이용해서 결과값을 받아온다.
(DAO: Mysql 서버에 접근, SQL 문 실행 객체)
Repository Layer:
DB 구조 생성 후 CRUD를 어떻게 할 것인지 정의하는 계층