트랜잭션 특성 - Consistency(일관성)
·
Database & Data/기초지식
설명 트랜잭션의 실행 전과 후에 데이터베이스가 정의된 비즈니스 규칙과 제약 조건을 계속해서 충족하도록 보장하는 속성 내용 구분 설명 비고 데이터의 일관성 데이터가 일관된 상태를 유지하는 것을 의미 사용자에 의해 정의, 참조 무결성(외래키) 원자성, 고립성(격리 레벨에 따라 달라짐) 읽기의 일관성 데이터를 읽을 때 사용자가 항상 최신의 일관된 데이터를 보게 되는 것 데이터의 변경 사항이 다른 트랜잭션에 어떻게 즉시 반영되는지는 격리 레벨에 따라 달라짐 이는 관계형 및 비관계형 데이터베이스 모두에 적용되며, 참조 무결성을 포함한 일관성을 보장하는 데 필수적 데이터의 일관성 예시 pictures 테이블 ID(PK) title LIKES 1 Sunset 2 2 Mountain View 1 picture_like..
트랜잭션 특성 - Isolation(고립성)
·
Database & Data/기초지식
설명 같은 데이터를 쓰고 읽기 위해 다중 트랜잭션의 동시성이 발생할 수 있는 가능성이 있는데 이것이 고립의 시작이며, 격리 레벨에 따른 읽기 현상이 발생한다. 내용 트랜잭션 격리 레벨(Transaction Isolation Level) [MySQL] 트랜잭션 격리 수준(간단한 정리) READ UNCOMMITTED 정의 다른 트랜잭션에서 아직 커밋되지 않은 데이터도 조회할 수 있다. 부정합 '더티 리드(Dirty Reads)'가 발생할 수 있다. 아직 확정되지 않은 데이터를 읽어서 그 트랜잭션이 롤백되 zambbon.tistory.com 읽기 현상(Read Phenomena) 구분 설명 Dirty Reads 아직 커밋되지 않은(즉, 최종 확정되지 않은) 데이터를 읽는 현상 Non-Repeatable Rea..
트랜잭션 특성 - Atomicity(원자성)
·
Database & Data/기초지식
설명 트랜잭션의 모든 쿼리들은 성공해야만 한다. 하나의 쿼리가 실패한다면, 트랜잭션의 이전 성공한 쿼리들은 즉시 롤백 트랜잭션의 커밋 이전에 데이터베이스가 다운된다면, 트랜잭션의 이전 성공한 쿼리들은 즉시 롤백 내용 원자성을 구현하는 방법에는 여러 가지가 있다. 가장 일반적인 방법은 로깅과 체크포인트를 사용하는 것이다. 구분 설명 Logging 트랜잭션과 관련된 모든 변경 사항을 로그에 기록한다. 트랜잭션이 실패할 경우, 로그를 사용하여 변경 사항을 롤백하고 데이터베이스를 이전 상태로 복원할 수 있다. Checkpoints 주기적으로 또는 특정 조건에서 데이터베이스의 현재 상태를 안전한 저장 위치에 기록한다. 시스템 장애 발생 시, 최근 체크포인트부터 복구 과정을 시작하여 시간과 자원을 절약할 수 있다...
트랜잭션(Transaction) 소개
·
Database & Data/기초지식
트랜잭션 이란? A Collection Of Queries(쿼리 모음) One Unit Of Work(하나의 작업 단위) 예시) 은행 거래(SELECT, UPDATE, INSERT) 트랜잭션 수명(Transaction Lifespan) 구분 설명 Begin 트랜잭션 시작 Execution 트랜잭션 실행 Validation 트랜잭션 검증 / 결정 Commit or Rollback 트랜잭션 커밋(디스크에 입력) or 트랜잭션 롤백(메모리에 있는것을 되돌리기) Unexpected Ending 예상치 못한 상황(=Rollback) ex) Crash, Bug 트랜잭션 특성(Nature of Transactions) 데이터베이스 트랜잭션이 안전하고 신뢰할 수 있도록 만드는 규칙 세트 구분 설명 Atomicity(원..
[MySQL] 트랜잭션 격리 수준(간단한 정리)
·
Database & Data/MySQL
READ UNCOMMITTED정의다른 트랜잭션에서 아직 커밋되지 않은 데이터도 조회할 수 있다.부정합'더티 리드(Dirty Reads)'가 발생할 수 있다. 아직 확정되지 않은 데이터를 읽어서 그 트랜잭션이 롤백되었을 경우 잘못된 정보를 기반으로 작업을 수행할 위험이 있다.상황 설명:도서관에서 책을 읽기 시작했다.다른 사람이 책에 메모를 하고 있지만, 아직 메모를 완성하지 않았다.READ UNCOMMITTED 상황에서는, 본인이 그 미완성 메모를 읽을 수 있다.즉, 작성자가 아직 메모를 확정하지 않았음에도 불구하고, 그 내용을 볼 수 있다.READ UNCOMMITTED는 다른 사람이 최종적으로 확정하지 않은 정보에 접근할 수 있다.이는 메모가 나중에 변경되거나 삭제될 수 있음을 의미하며, 이로 인해 잘못..
[MySQL] 쿼리 개선 기록 - 날짜 범위, 중복 제거
·
Database & Data/MySQL
날짜로 필터링을 하거나 데이터 중복을 제거할 때 인덱스에서 데이터를 찾는지 또는 추가적인 작업을 하는지는 쿼리 속도에 영향을 준다. 이 간단한 작업으로도 큰 효과를 가져올 수 있었다. 당시 회사내 쿼리 개선 된 결과) 분류 쿼리 속도 행 수 기존 쿼리 약 26401ms 약1800만건 개선 된 쿼리 약 190ms 약6만8천건 가정 예를 들어 이런 쿼리가 있다고 가정해 보자.(날짜에 파티션은 제외하고 가정) SELECT student, count(DISTINCT class_uid) as total FROM school.class1 WHERE date_format(plan_dt, '%Y%m') = '202307' GROUP BY student; 1. class1에는 plan_dt에 인덱스가 생성되어 있다. 2..
Local MySQL로 DB 서버 만들기(외부 IP에서 접속)
·
Database & Data/MySQL
집에 남는 Window 노트북을 어떻게 활용할까 생각을 하다가 DB로 사용하면 좋겠다고 생각했다. 그래서 이 노트북에 MySQL Workbench와 서버 설치부터 외부 IP로 접속하는 방법까지 순차적으로 정리해보려고 한다. DB 컴퓨터: Window 11(사양 구림..) 버전: MySQL 8 Version 접속 컴퓨터: MacOS MySQL Workbench와 Server 설치하기 먼저, Window 컴퓨터에 MySQL Workbench와 Server를 설치하는 것이 필요하다. 설치 링크 : MySQL 공식 사이트 MySQL Workbench와 Server를 다운로드하고 설치할 수 있다. Workbench는 MySQL Server8.0과 호환이 되기 때문에 8.1이 아닌 8.xx 버전을 다운로드하자 새로..
로컬 DB 공유기 포트 포워딩 하는 방법(방화벽 설정 포함)
·
Database & Data/MySQL
로컬 DB를 외부에서 사용하기 위해 포트포워딩이 꼭 필요했다. 그래서 까먹지 않게 방법을 정리해보려고 한다. 하려고 하는 공유기는 SK브로드밴드이지만 Iptime이든 타 공유기도 비슷하지 않을까 싶다. 컴퓨터: Window 11 공유기: SK브로드밴드(RUSH-337AC) 공유기 관리자 페이지에 접속하기 먼저, 관리자 페이지에 접속하기 위해서는 해당 공유기의 IP 주소를 알아야 한다. IP 주소 알아보기 (Windows) 1. 시작 메뉴를 클릭하고 cmd 혹은 명령 프롬프트를 입력하여 프로그램을 실행시킨다. 2. 명령 프롬프트에 ipconfig를 입력하고 엔터를 누른다. 이때 본인이 노트북과 공유기가 어떻게 연결했는지에 따라 다르게 보면 된다. 본인은 Wi-Fi로 연결했기 때문에 Wi-Fi 쪽만 확인하면..
MySQL CASE 구문에서 OR과 IN의 가독성 차이(개인적 견해)
·
Database & Data/MySQL
기본적으로 CASE 문에서는 복수의 조건을 테스트할 때 OR를 사용하곤 한다. 그러나, 같은 컬럼의 값이 특정 집합에 속하는지를 검사하려면 IN 연산자를 사용하는 것이 더 간결하고 읽기 쉬웠다. 예를 들어, lm.subj_nm 값이 '국어' 또는 '국어선택학습'인지를 검사하려면 다음과 같이 OR를 사용할 수 있다: when lm.subj_nm = '국어' or lm.subj_nm = '국어선택학습' then '1' 그러나 이것은 IN을 사용하면 더 간결하게 표현할 수 있다: WHEN lm.subj_nm IN ('국어', '국어선택학습') THEN '1' 두 쿼리는 완전히 동일한 결과를 내지만, 후자는 명확성과 가독성 면에서 더 우수하다고 생각한다. 특히 조건이 많아질수록 IN 연산자를 사용하는 것이 코드..
MySQL --login-path 옵션 이해하기
·
Database & Data/MySQL
MySQL의 --login-path 옵션은 MySQL 5.6.6. 버전부터 추가된 옵션으로, 서버에 로그인하기 위한 사용자 이름, 패스워드, 그리고 기타 연결 매개변수를 설정 파일에 저장하고, 이를 불러올 수 있게 해주는 매우 유용한 기능이다. MySQL --login-path의 중요성 MySQL에 접속할 때 일반적으로 사용자 이름과 패스워드를 직접 입력하는 방식을 사용한다. 그러나 이런 방식은 다음과 같은 문제점이 있다. 보안 문제 : 패스워드를 직접 입력하는 방식은 보안에 취약해진다. 특히, 스크립트나 명령 히스토리에서 패스워드가 노출될 수 있다. 편의성 문제 : 빈번하게 MySQL에 접속해야 할 경우 매번 패스워드를 입력하는 것은 매우 번거로울 수 있다. 그래서 문제점을 보완하기 위해 mysql_c..