들어가며분산 락을 구현하는 방법은 Zookeeper, Redis 등 여러가지 방법들이 있습니다. 다만, Zookeeper나 Redis를 이용하여 분산 락을 구현하게 되면 인프라 구축에 대한 비용도 무시할 수 없습니다. 하지만 MySQL에서는 분산 환경에서의 락을 구현하기 위한 자체 락을 제공합니다. 이는 네임드 락(Named Lock)이라고 불리며, MySQL에서만 지원되는 락입니다. 분산 락의 사용량이 추가적인 비용을 들일만큼 크지 않다면 MySQL이 제공하는 락을 사용하는게 적절하다고 생각합니다.Named Lock 살펴보기MySQL이 제공하는 네임드 락을 사용하기 위해서는 관련 함수를 사용해야 합니다. 함수의 종류와 설명은 다음과 같습니다.GET_LOCK(String, timeout)입력받은 이름(S..
커넥션 풀(Connection Pool)이란? 커넥션 풀은 데이터베이스와 연결된 커넥션을 미리 만들어 놓고 이를 pool로 관리하는 것입니다. 즉, 필요할 때마다 풀의 커넥션을 꺼내 사용하고 반환하는 기법입니다. 이처럼 미리 만들어 놓은 커넥션을 이용하면 Connection에 필요한 비용을 줄일 수 있기 때문에 DB에 빠르게 접근할 수 있습니다. 또한 커넥션 풀을 사용하면 커넥션 수를 제한할 수도 있어서 과도한 접속으로 인한 서버 자원 고갈을 방지할 수 있습니다. HikariCP란? SpringBoot를 사용해본 사람이라면 한 번쯤은 이름을 들어보셨을텐데요. HikariCP는 가벼운 용량과 빠른 속도를 가지는 JDBC 커넥션 풀 프레임워크입니다. SpringBoot는 커넥션 풀 관리를 위해 기본적으로 H..
서론 트랜잭션은 작업의 완전성을 보장해주는 것이다. 즉 요청을 모두 완벽하게 처리하거나, 처리하지 못한 경우는 요청을 처리하기 전 상태로 되돌려서 요청의 일부만 적용되는 현상(Partial update)이 발생하지 않게 만들어준다. 잠금(Lock)과 트랜잭션은 서로 비슷한 개념 같지만, 잠금은 동시성을 제어하기 위한 기능이고 트랜잭션은 데이터의 정합성을 보장하기 위한 기능이다. 만약 하나의 데이터에 여러 개의 요청이 동시에 처리된다면 해당 데이터 값은 예측할 수 없는 상태가 된다. 잠금은 여러 커넥션에서 동시에 동일한 자원을 요청할 경우 순서대로 한 시점에는 하나의 커넥션만 변경할 수 있게 해주는 역할을 한다. 격리 수준이라는 것은 하나의 트랜잭션 내에서 또는 여러 트랜잭션 간의 작업 내용을 어떻게 공유..
MySQL에서 손과 발의 역할을 담당하는 스토리지 엔진은 핸들러 API만 만족한다면 스토리지 엔진을 구현해서 누구나 MySQL 서버에 사용할 수 있다. 이번 글에서는 MySQL 엔진과 MySQL 서버에서 기본적으로 제공하는 InnoDB와 MyISAM 스토리지 엔진을 구분해서 알아보자. MySQL 엔진 아키텍쳐 MySQL 서버는 다른 DBMS에 비해서 구조가 독특하다. 그 이유가 무엇일까? MySQL 엔진 아키텍처가 다른 DBMS에 비해 독특한 이유는 아래와 같다. 다중 스레드 아키텍처를 사용한다. 이는 데이터베이스 서버가 여러 개의 작업을 동시에 수행할 수 있도록 하며, 따라서 처리 속도를 향상시킨다. InnoDB와 같은 트랜잭션 지원 스토리지 엔진을 사용한다. 이를 통해 MySQL은 데이터 무결성을 보..
데이터베이스가 crash(손상)되었을 때 어떻게 해야 서비스를 다운시키지 않고 계속 운영할 수 있을까? 현재 가장 많이 사용하는 방법은 replication(복제)이다. 하지만 데이터베이스에 크래쉬가 일어났을 때 어느 정도의 데이터 로스(data loss)를 허용할지에 따라 방침이 변한다. 전형적인 장애 시나리오 장애 대책을 세워놓기 위해서는 어떤 장애가 일어날 수 있는지를 먼저 알아야 한다. 대표적인 장애 패턴을 알아보자 소프트웨어 장애 데이터베이스 프로그램의 폭주와 충돌처럼 소프트웨어 주변의 결함으로 인해 서비스를 제공할 수 없는 유형의 장애다. 문제의 심각성에 따라서 데이터 자체가 파괴되어 다시 시작되지 않는 등 치명적인 유효타를 받을 수 있다. 소프트웨어 장애는 그 소프트웨어의 품질이 장애 빈도와..
이번 포스팅에서는 우리가 많이 사용하지만, 어쩌면 잘 모를 수 있는 레디스에 관련해서 기술하려고 한다. 레디스는 요즘 거의 모든 서버에서 사용하다시피 핫한 인 메모리 데이터베이스다. 참고로 2023년 1월 db-engines.com 통계자료에서 Redis가 key-value DBMS에서 1위를 차지하고 있다. 많은 개발자들이 사용하는 만큼, 우리도 레디스가 뭔지 알아야하지 않겠는가!? 우선 레디스가 뭔지부터 간단하게 알아보자. 레디스(Redis)란? 레디스란 키(key)와 값(value)를 가진 NoSQL에 속하는 데이터베이스이다. 주로 비정형 데이터를 다루며 비관계형 데이터베이스다. 비정형 데이터? 식별 가능한 구조나 아키텍처가 없는 데이터 key, value 구조이기 때문에 쿼리를 사용할 필요가 없다..