Database 7

안정성과 성능 최적화를 위한 Java와 데이터베이스에서의 Lock 전략

시스템이 복잡해질수록 동시에 여러 작업을 처리해야 할 필요가 늘어나게 됩니다. 이 때 동시에 접근하는 여러 작업 간의 충돌을 방지하기 위해 Lock이라는 개념을 사용하게 됩니다. 여기서 SQL DBMS에서의 Lock과 Java에서의 Lock을 알아보고, 이를 언제 어떻게 사용해야 하는지 살펴보겠습니다. Lock이란?Lock(락)은 특정 자원에 대해 여러 작업이 동시에 접근하는 것을 방지하기 위한 메커니즘입니다. Lock을 활용하지 않은 동시성 문제 예시동시성 문제로 하나 예를 들어보자면, A와 B라는 사람한테 화이트보드에 적혀있는 숫자를 하나씩 증가시켜 달라고 요청을 합니다. 그럼 A라는 사람이 화이트 보드에 있는 3이라는 값을 읽어서 머리속으로 계산을 합니다. 계산을 끝내고 화이트보드를 지우고 다시 적..

Database 2024.10.13

MySQL 8에서 인덱스 성능 극대화: 알고리즘과 실전 사례

MySQL 8 버전에서 사용되는 Index(인덱스) 기능에 대해 자세히 알아보겠습니다. 이 내용은 MySQL 8 버전을 기준으로 하며, InnoDB 스토리지 엔진을 주로 다룰 것입니다.  1. InnoDB의 Index 알고리즘은 B-Tree 알고리즘을 사용한다.InnoDB 스토리지 엔진에서는 기본적으로 B-Tree 알고리즘을 사용합니다. 이 알고리즘은 트리 형식으로 데이터를 정렬하며, 원하는 값을 찾을 때 상단부터 시작하여 작으면 왼쪽으로, 크면 오른쪽으로 이동하면서 탐색하는 방식입니다.  2. 인덱스 압축 기능을 비활성화 할 수 있다.InnoDB는 인덱스 페이지를 압축하여 디스크 공간을 절약하는 기능을 제공합니다. 그러나 이 기능은 CPU 리소스를 사용하기 때문에 추가, 변경, 삭제 작업이 많을 때 부..

Database 2023.12.26

데이터베이스 프로시저, 함수, 뷰: 각각의 역할과 사용법

프로시저와 함수 뷰의 차이점을 설명드리겠습니다. 1. 프로시저프로시저(Procedure)는 데이터베이스의 데이터에 대한 작업을 수행하기 위한 목적으로 사용됩니다. 이것은 데이터의 추가, 수정, 삭제, 검색 등과 같은 다양한 데이터 조작 작업을 수행하는 데 사용됩니다.비즈니스 룰 검증, 트랜잭션 관리, 보안 제어 등과 같은 데이터베이스 관리 작업에도 활용됩니다.프로시저는 무엇을 return하는 것 보다 데이터를 조작하기 위해 사용됩니다. 그런 이유로 리턴값이 없는 프로시저가 일반적입니다. 2. 함수함수(Function)는 주로 값을 계산하거나 가공하기 위해 사용됩니다.함수는 return 값으로 단일 값(숫자 또는 문자열)을 제공하는 것이 일반적입니다.함수는 입력 값을 받아서 계산하고, 그 결과 값을 반환합..

Database 2023.12.26

트랜잭션 격리 수준의 종류와 성능 최적화 전략

트랜잭션과 격리 수준 데이터베이스에서 트랜잭션과 격리 수준은 데이터의 무결성을 유지하고 동시성을 관리하는 중요한 개념입니다. 트랜잭션이란?트랜잭션은 데이터베이스의 상태를 변화시키기 위해 실행되는 프로그램의 단위 작업입니다. 트랜잭션은 다음과 같은 ACID 속성을 만족해야 합니다.A : Atomicity 원자성을 의미하며, 트랜잭션 내의 모든 연산은 하나의 작은 단위로 동작해야 합니다. 쉽게말해 모든 연산이 실패하거나, 모든 연산이 성공하거나 둘 중 하나만 처리되도록 해야합니다.C : Consistency 일관성을 의미하며, 트랜잭션은 데이터 일관성 상태에서 다른 일관된 상태로 전환해야 합니다. 예를 들면 "학생"이라는 데이터가 테이블에서 삭제된다면 "수강신청"이라는 학생에 Relation 되어있는 데이터..

Database 2023.09.02

Redis 트랜잭션: MULTI부터 EXEC까지 트랜잭션 처리 과정

Redis 트랜잭션 에 대하여 알아보겠습니다. 우선 트랜잭션이 이루어지는 순서는 다음과 같습니다.MULTI : 트랜잭션을 시작합니다. 이후에 실행되는 명령어는 모두 이 트랜잭션에 속합니다.명령어 저장 : MULTI 이후에 실행되는 멸영어들은 순차적으로 기록되어 트랜잭션 로그(명령어 큐)에 저장됩니다. 여기에 저장된 명령어들은 실행되지 않습니다.EXEC : 트랜잭션을 실행합니다. EXEC 명령어를 호출하면 트랜잭션 로그(명령어 큐)에 저장된 순서대로 명령어들을 실제로 실행합니다.트랜잭션 결과 : 만약 중간에 오류가 발생하거나, WATCH로 감시한 키가 변경되었다면, EXEC가 호출되기 전까지의 트랜잭션의 모든 명령어들은 취소되어 실행되지 않은 것처럼 처리됩니다. 트랜잭션의 주의사항Redis는 단일 스레드로..

Database 2023.08.04

Redis에서 데이터 영구 보존: 스냅샷과 AOF로 안전한 복구 시스템 구축

Redis는 메모리 기반 데이터베이스입니다. 하지만 데이터 소멸의 문제를 피하기 위해 영속성 기능을 제공합니다. Redis는 두가지 전략을 같이 사용하며 데이터를 Disk에 영속화 합니다. 1. 스냅샷(Snapshot) 방식 Redis는 주기적으로 또는 변경 사항이 있을 때마다 데이터를 스냅샷 파일(.rdb)로 저장합니다.  .rdb 파일은 Redis Database의 약자로 바이너리 형식이며 Redis 서버가 재시작될 때 또는 데이터를 복구할 때 사용합니다. 또한, Redis 스냅샷은 Redis 저장소 전체를 스냅샷하는 방법입니다. 스냅샷은 Redis 서버의 현재 상태를 모두 포함하는 것으로, 메모리에 있는 모든 데이터를 디스크에 저장합니다. 스냅샷은 Redis 데이터베이스의 모든 키-값 쌍을 포함하여..

Database 2023.08.04

Redis의 장점과 한계: 빠른 속도와 메모리 기반 데이터 처리

Redis(Remote Dictionary Server)는 인메모리 DB로서 고성능 key-value 데이터베이스입니다.Redis는 데이터를 디스크 기반이 아닌 메모리 기반 저장 방식을 채택하여 매우 빠른 응답 속도를 제공합니다. 이러한 특징은 데이터베이스에 자주 액세스해야하는 세션 캐싱, 메시징 기능 등에 이상적입니다.Redis 사용 목적 Reids를 사용하는 이유는 다음과 같습니다.속도 : 데이터를 디스크에 저장하는 대신 메모리에 저장하여 빠른 응답 속도를 제공합니다.간단한 구조 : Redis는 문자열, Hash, List, Set, SortedSet 등 과 같은 간단한 데이터 구조를 지원합니다.영속성 지원 : 인메모리 DB임에도 불구하고, 시스템의 전원이 차단되었을 때도 데이터가 증발하지 않습니다...

Database 2023.08.04