분류 전체보기(301)
-
[SQL Server] 동시성(Concurrency)
동시성 제어(Concurrency Control) DBMS는 다수의 사용자를 가정한다. 따라서 동시에 작동하는 다중 트랜잭션의 상호 간섭 작용에서 데이터베이스를 보호할 수 있어야 한다. 동시성을 제어하기 위해 Lock 기능을 사용한다. 여러 사용자가 데이터를 동시에 액세스하는 것처럼 보이지만 내부적으로는 하나씩 실행되도록 트랜잭션을 직렬화하는 것이다. 또한 set transacion 명령어를 써서 트랜잭션 격리성 수준을 조정할 수 있다. SQL Server의 경우 👉 기본 트랜잭션 격리성 수준인 Read Committed 상태에선 레코드를 읽고 다음 레코드로 이동하자마자 공유 Lock을 해제 👉 Repeatable Read에서는 트랜잭션을 커밋할 때까지 공유 Lock 유지 동시성 제어가 어려운 이유 👉 ..
2022.02.12 -
[SQL Server] Transaction
트랜잭션(Transaction) - 업무 처리를 위한 논리적인 업무 단위 - 데이터를 일관성있게 처리하기 위해 여러 개의 갱신 연산이 하나의 작업처럼 전부 처리되거나 아예 하나도 처리되지 않도록(All or Nothing) 동시 실행 구현 1. 트랜잭션의 특징 🔮 원자성(Atomicity) 트랜잭션은 분해가 불가능한 업무의 최소단위이므로 전부 처리되거나 아예 하나도 처리되지 않아야 한다. 🔮 일관성(Consistency) 일관된 상태의 데이터베이스에서 하나의 트랜잭션을 성공적으로 완료하면 그 데이터베이스는 여전히 일관된 상태여야 한다. 즉 트랜잭션 실행의 결과로 데이터베이스 상태가 모순되지 않아야 한다. 🔮 격리성(Isolation) 실행 중인 트랜잭션의 중간결과를 다른 트랜잭션이 접근할 수 없다. 🔮 ..
2022.02.12 -
[SQL Server] Lock
1. Lock 기본 🔥 Lock이란? 같은 자원을 액세스하려는 다중 트랜잭션 환경에서 데이터베이스의 일관성과 무결성을 유지하려면 트랜잭션의 순차적 진행을 보장할 수 있는 직렬화(Serialization) 장치가 필요하다. 이런 직렬화를 가능하게 하려고 모든 DBMS가 공통적으로 사용하는 매커니즘이 바로 Lock이다. 🔥 공유 Lock과 배타적 Lock 공유 Lock - 읽기 모드로 데이터 읽을 때 사용 - 다른 공유 Lock과는 호환되지만 배타적 Lock과는 호환 X 배타적 Lock - 쓰기 모드로 데이터를 변경할 때 사용 - 트랜잭션이 완료될 때까지 유지 - Lock이 해제될 때까지 다른 트랜잭션은 해당 리소스에 접근 불가 🔥블로킹과 교착 상태 ① 블로킹(Blocking) Lock 경합이 발생해 특정 ..
2022.02.08 -
[객체지향] 객체지향의 사실과 오해(토끼책) Ch4 ~ 7 정리
04.역할, 책임, 협력 최후통첩 게임을 통해서 인간은 절대적으로 이기적이고 합릭적인 존재로 사는 것이 아니라, 문맥에 따라 본연의 특성을 배제하고 자신의 이익을 최소화하는 불합리한 선택을 하기도 한다. 객체 세계에서도 협력이라는 문맥이 객체의 행동 방식을 결정한다. 책임 객체 지향의 세계에서는 어떤 객체가 어떤 요청에 대해 대답해줄 수 있거나, 적절한 행동을 할 의무가 있는 경우 = 책임 책임은 객체지향 설계의 가장 중요한 재료로서, 소프트웨어 객체에 책임을 적절하게 할당해야 한다. 책임은 객체의 공용 인터페이스(public interface)를 구성하고, 이는 캡슐화로 이어진다. 역할 역할을 통해 협력을 단순화할 수 있다. 다양한 객체들이 동일한 협력에 참여할 수 있기 때문에 재사용성이 높아진다. 역..
2022.02.06 -
[객체지향] 객체지향의 사실과 오해(토끼책) Ch1 ~ 3 정리
01. 협력하는 객체들의 공동체 흔히 객체 지향이 실세계의 투영이며, 객체란 현실 세계에 존재하는 사물에 대한 추상화라고 한다. 그러나 객체 지향의 목표는 실세계를 모방하는 것이 아니다. 오히려 새로운 세계를 창조하는 것이다. 객체 세계 현실 세계 효과 객체 스스로 생각하고 스스로 결정하는 현실세계의 생명체 캡슐화(Encapsulation)하는 소프트웨어 객체(Autonomous)의 자율성 설명 협력 현실 세계의 사람들이 암묵적인 약속과 명시적인 계약을 기반으로 협력하며 목표를 달성하는 과정 메시지를 주고 받으며 공동의 목표를 달성하기 위해 협력하는 객체들의 관계 설명 협력을 위해 특정한 역할을 맡고 역할에 적합한 책임을 수행한다. 협력의 개념 여러 사람이 동일한 역할을 수행할 수 있다. 역할은 대체 가..
2022.02.05 -
SQL Server로 Index 실습
회사에서 과제로 SQL Server를 학습해야해서 개인적으로 퇴근 후 실습을 수행하였다. 다만 SQL Server가 Mac용으로 릴리스되지 않아서 대체재로 Docker의 Azure SQL로 데이터베이스 서버 역할을 수행하도록 하였다. 1. 데이터베이스 만들기 --- 새 데이터베이스 만들기 IF NOT EXISTS ( SELECT name FROM sys.databases WHERE name = N'TutorialDB' ) CREATE DATABASE [TutorialDB] GO --- 쿼리 저장소 기능 사용 ALTER DATABASE [TutorialDB] SET QUERY_STORE=ON GO 그 결과 아래 데이터베이스가 생성된 것을 확인할 수 있었다. 이전에 데이터베이스에 대해 열심히 공부하지 않았을..
2022.01.30