데이터베이스

Redis(이하 레디스)는 Key-Value 형태의 데이터를 저장할 수 있는 일종의 NoSQL 데이터베이스 중 하나이다. 레디스는 특히 일반적인 DBMS 시스템과 다르게 디스크가 아닌 메모리에 데이터를 저장하기 때문에 데이터 조회 성능에서 매우 빠른 성능을 보인다. 또한, 레디스 내부에서 값 삽입을 비롯한 Operation 자체를 모두 싱글 스레드로 처리하기 때문에 동일 자원에 대한 레이스 컨디션으로 발생할 수 있는 문제를 원천적으로 예방해준다. (이것이 가능한 이유는 역시나 레디스가 메모리 기반으로 데이터를 관리해 빠른 속도를 보장하기 때문일 것이다.) 이러한 특징 때문에 레디스는 캐싱의 용도로 많이 사용되며, 그 밖에도 동시성 이슈가 우려되는 자원에 대한 락을 구현하기 위해서도 많이 사용된다. 그러..
서론 서버 성능 향상을 위해 쿼리를 튜닝할 일이 잦아지면서, 최근에는 아무리 간단해보이는 쿼리라도 explain을 통해 실행 계획을 반드시 살펴보는 습관이 생겼다. 실행 계획에서 확인할 수 있는 정보는 매우 다양한데, 그 중 Extra 컬럼에 나오는 Using temporary와 Using filesort은 가능한 제거할 수 있도록 해야한다는 말을 동료 및 선임 개발자분들에게 많이 들었다. 해당 키워드가 대략적으로 무엇을 의미하는지는 느낌적으로 이해하고 있었지만, 왜 발생하는지 그리고 정확하게 무엇을 의미하는지 정리해보고자 한다. MySQL의 정렬 방식 Using Temporary와 Using filesort는 모두 MySQL의 데이터 정렬 방식과 연관이 있다. MySQL이 조회한 데이터를 정렬하는 방식..
서론 사내 레거시 시스템 문제로 인해 DBCP(HikariCP)를 사용하는 프로젝트에서 잦은 오류 및 경고 메시지가 발생했던 적이 있다. 경고 메시지는 대부분 아래와 같았다. Failed to validate connection... Possibly consider using a shorter maxlifetime value. 해당 문제의 원인 파악을 위해 많은 서치를 했었고 결국엔 해결했었는데, 최근에 동료 개발자분께 동일한 문제가 발생하여 원인 및 해결책을 설명해줬다. 생각난김에 해당 내용을 다시 정리해보고자 한다. 해당 내용은 Spring Boot에서 HikariCP를 사용해 MySQL 서버와의 커넥션을 맺는 상황을 전제로 작성된다. HikariCP의 connection max lifetime H..
우리가 SELECT 쿼리를 실행시킬 때, 해당 쿼리는 FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY 으로 나뉘어져 정해진 순서에 따라서 실행된다. 순서는 아래 그림과 다음과 같다. 1. FROM 먼저, FROM절을 바탕으로 데이터를 읽어올 테이블을 설정한다. 만약 FROM절에 JOIN이 포함되어있다면, 가상 테이블에 JOIN으로 합쳐진 데이터를 결합한다. 2. WHERE FROM절로 가져온 데이터에 대하여 WHERE절에 명시된 필터링을 실행한다. 3. GROUP BY 1, 2 단계를 거쳐 추출된 데이터들을 GROUP BY에 명시된 컬럼을 기준으로 그룹핑한다. 4. HAVING 그룹핑된 데이터에 대하여 HAVING절에 명시된 필터링을 실행한다. 주의점은 WHERE절과..
트랜잭션이란? 트랜잭션은 은행 ATM이나 데이터베이스등의 시스템에서 사용되는 더 이상 쪼갤 수 없는 업무 처리의 최소 단위이다. 예를 들어 A가 B의 계좌로 1000원을 입금하는 행위가 발생할 때, "A의 계좌에서 1000원이 빠진다." 와 "B의 계좌에 1000원이 더해진다."는 더 이상 쪼갤 수 없는 최소 단위라고 할 수 있다. 이는 즉, A가 돈을 지불하는 행위와 B가 돈을 받는 행위가 분리될 수 없으며 하나의 작업으로 묶여야한다는 것을 의미한다. 트랜잭션의 특징 → 데이터베이스 작업에서 오류가 발생할 경우 데이터를 복구하는 단위가 된다. → 데이터베이스에서 한 번에 여러가지 작업이 일어날 때, 이것들을 분리해주는 작업 단위가 된다. → 트랜잭션은 묶인 작업이 모두 실행되거나 모두 실행되지 않아야한..
SeongOnion
'데이터베이스' 카테고리의 글 목록