| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- Kubernetes
- Java
- 성능 최적화
- netty
- GitOps
- 동시성제어
- NIO
- 성능최적화
- monitoring
- 트랜잭션
- helm
- redis
- 백엔드개발
- selector
- jvm
- 데이터베이스
- grafana
- prometheus
- mysql
- RDBMS
- Kotlin
- CloudNative
- webflux
- DevOps
- spring boot
- docker
- JPA
- SpringBoot
- kafka
- 백엔드
- Today
- Total
목록Database (9)
유성
DB를 선택할 때 보통 "MySQL은 웹 서비스에 좋고, PostgreSQL은 복잡한 데이터 분석에 유리하다"는 말을 듣곤 한다.물론 맞는 이야기다. 안정성을 위해 멀티 프로세스(PG)를 쓰는지, 속도를 위해 멀티 스레드(MySQL)을 쓰느냐의 차이도 있겠지만,이 글에서는 가장 결정적인 차이 Index와 MVCC를 구현하는 방식에 대해서 알아본다. 만약 MVCC가 무엇인지 궁금하다면, 아래 글을 참고하자. 데이터베이스 격리 수준과 동시성 제어의 실체REPEATABLE READ는 어떻게 구현되는가?부제: MySQL InnoDB의 MVCC와 Undo Log 해부 트랜잭션 격리 수준은 데이터베이스의 동시성 처리 성능과 데이터 무결성 사이의 트레이드오프를 결정하는 핵심 설정이다youseong.tistory.co..
REPEATABLE READ는 어떻게 구현되는가?부제: MySQL InnoDB의 MVCC와 Undo Log 해부 트랜잭션 격리 수준은 데이터베이스의 동시성 처리 성능과 데이터 무결성 사이의 트레이드오프를 결정하는 핵심 설정이다. 우리가 흔히 사용하는 RDBMS는 기본적으로 Read Committed 혹은 Repeatable Read 수준에서 동작한다.격리 수준을 높이기 위해서는 더 강력한 Lock이 필요하지만 모든 명령어를 직렬화 하는데에는 무리가 있다. 대표적으로 MySQL의 대표적인 엔진 InnoDB를 살펴보면, SELECT 쿼리를 날릴 때 Lock을 전혀 사용하지 않는다.하지만 락을 걸지 않는데 어떻게 다른 트랜잭션이 커밋한 데이터를 무시하고, 내 트랜잭션 시작 시점의 데이터를 계속 보여줄 수 있을..
시스템이 복잡해질수록 동시에 여러 작업을 처리해야 할 필요가 늘어나게 됩니다. 이 때 동시에 접근하는 여러 작업 간의 충돌을 방지하기 위해 Lock이라는 개념을 사용하게 됩니다. 여기서 SQL DBMS에서의 Lock과 Java에서의 Lock을 알아보고, 이를 언제 어떻게 사용해야 하는지 살펴보겠습니다. Lock이란?Lock(락)은 특정 자원에 대해 여러 작업이 동시에 접근하는 것을 방지하기 위한 메커니즘입니다. Lock을 활용하지 않은 동시성 문제 예시동시성 문제로 하나 예를 들어보자면, A와 B라는 사람한테 화이트보드에 적혀있는 숫자를 하나씩 증가시켜 달라고 요청을 합니다. 그럼 A라는 사람이 화이트 보드에 있는 3이라는 값을 읽어서 머리속으로 계산을 합니다. 계산을 끝내고 화이트보드를 지우고 다시 적..
MySQL 8 버전에서 사용되는 Index(인덱스) 기능에 대해 자세히 알아보겠습니다. 이 내용은 MySQL 8 버전을 기준으로 하며, InnoDB 스토리지 엔진을 주로 다룰 것입니다. 1. InnoDB의 Index 알고리즘은 B-Tree 알고리즘을 사용한다.InnoDB 스토리지 엔진에서는 기본적으로 B-Tree 알고리즘을 사용합니다. 이 알고리즘은 트리 형식으로 데이터를 정렬하며, 원하는 값을 찾을 때 상단부터 시작하여 작으면 왼쪽으로, 크면 오른쪽으로 이동하면서 탐색하는 방식입니다. 2. 인덱스 압축 기능을 비활성화 할 수 있다.InnoDB는 인덱스 페이지를 압축하여 디스크 공간을 절약하는 기능을 제공합니다. 그러나 이 기능은 CPU 리소스를 사용하기 때문에 추가, 변경, 삭제 작업이 많을 때 부..
프로시저와 함수 뷰의 차이점을 설명드리겠습니다. 1. 프로시저프로시저(Procedure)는 데이터베이스의 데이터에 대한 작업을 수행하기 위한 목적으로 사용됩니다. 이것은 데이터의 추가, 수정, 삭제, 검색 등과 같은 다양한 데이터 조작 작업을 수행하는 데 사용됩니다.비즈니스 룰 검증, 트랜잭션 관리, 보안 제어 등과 같은 데이터베이스 관리 작업에도 활용됩니다.프로시저는 무엇을 return하는 것 보다 데이터를 조작하기 위해 사용됩니다. 그런 이유로 리턴값이 없는 프로시저가 일반적입니다. 2. 함수함수(Function)는 주로 값을 계산하거나 가공하기 위해 사용됩니다.함수는 return 값으로 단일 값(숫자 또는 문자열)을 제공하는 것이 일반적입니다.함수는 입력 값을 받아서 계산하고, 그 결과 값을 반환합..
트랜잭션과 격리 수준 데이터베이스에서 트랜잭션과 격리 수준은 데이터의 무결성을 유지하고 동시성을 관리하는 중요한 개념입니다. 트랜잭션이란?트랜잭션은 데이터베이스의 상태를 변화시키기 위해 실행되는 프로그램의 단위 작업입니다. 트랜잭션은 다음과 같은 ACID 속성을 만족해야 합니다.A : Atomicity 원자성을 의미하며, 트랜잭션 내의 모든 연산은 하나의 작은 단위로 동작해야 합니다. 쉽게말해 모든 연산이 실패하거나, 모든 연산이 성공하거나 둘 중 하나만 처리되도록 해야합니다.C : Consistency 일관성을 의미하며, 트랜잭션은 데이터 일관성 상태에서 다른 일관된 상태로 전환해야 합니다. 예를 들면 "학생"이라는 데이터가 테이블에서 삭제된다면 "수강신청"이라는 학생에 Relation 되어있는 데이터..