본문 바로가기

전체 글182

[쿼리 튜닝] 컬럼에 함수를 사용하면 인덱스를 정말 못 쓰는가? MariaDB SARGABLE 개념 · EXPLAIN · Profiling 기반 검증해당 글은 저의 의문으로 시작해 AI를 활용하고 내용에 대한 검증을 위해 공식문서를 기준으로 찾아보고직접 테스트하면서 내용을 요약한 진행과정 사례입니다.들어가며개선을 진행하면서 정보들을 알아보니 이런 내용들을 보았다.“WHERE 절의 조건 기준 컬럼에 함수를 사용하면 인덱스를 타지 않는다.”이 문장은 MariaDB 공식 문서에 그대로 등장하는 표현은 아니다.하지만 검색을 하다 보면 여러 기술 글, Q&A, 블로그에서 반복적으로 등장하고,SARGABLE(Searh ARGument ABLE) 이라는 SQL 공통 개념과도 연결된다.그래서 자연스럽게 이런 의문이 들었다.정말로 함수를 사용하면 인덱스를 전혀 사용하지 못하는 걸까?.. 2026. 1. 8.
NestJS + TypeORM에서 대댓글 & 푸시 알림 트랜잭션 설계 정리 댓글에 대댓글이 달릴 때 원댓글 작성자에게 푸시 알림을 보내는 기능은 많은 서비스에서 자연스럽게 등장한다.문득 이런 생각이 들었다.“대댓글 생성과 푸시 알림을 어디까지 보장해야 할까?” 이 글에서는 나의 고민점들과 해법을 통한 비즈니스 중요도에 따른 2단계 설계 방식을 정리한다.또한 외부 API를 연동할 때 꼭 이런 고민을 고려해봐야 할 것 같다.내 고민외부 API를 연동하면서 로직을 고려할 때 봐야할 것은 대댓글과 푸시 알림이다. IF이 두개를 다 가져가려면? DB 저장에 성공했는데 푸시알림이 전송안되면? 외부 API 오류비동기 처리 즉, Bull queue라면 redis 오류나 Bull queue 자체의 오류등등DB 저장에 실패했는데 푸시알림이 전송되면?DB 장애로직적 오류등등푸시 알림이 실패되고 .. 2025. 12. 31.
트랜잭션 읽기와 격리 수준 (Isolation Level) 정리 ■ 트랜잭션 읽기와 격리 수준 (Isolation Level) 완벽 정리Dirty Read, Non-Repeatable Read, Phantom Read를 SQL로 직접 재현해보자1. 트랜잭션과 격리 수준이란?데이터베이스는 항상 동시에 여러 트랜잭션을 처리합니다.이때 각각의 트랜잭션이 혼자 실행되는 것처럼 보이게 하기 위한 개념이 바로 격리성(Isolation) 입니다.하지만 완벽한 격리는:락 증가성능 저하데드락 위험 증가▶ 그래서 DB는 정확성과 성능 사이의 타협안으로격리 수준(Isolation Level) 을 제공합니다.2. 트랜잭션 읽기(Read)의 의미트랜잭션에서의 “읽기”는 단순한 SELECT가 아닙니다.다른 트랜잭션이 변경 중인 데이터를어디까지 허용해서 볼 것인가?이를 단계별로 나눈 것이 격리.. 2025. 12. 29.
관계형 데이터베이스(RDB)란 무엇인가? 개발을 하다 보면 가장 먼저 접하게 되는 데이터베이스가 바로 **관계형 데이터베이스(Relational Database, RDB)**다.그런데 이름에 들어간 **‘관계형’**이라는 말은 정확히 무엇을 의미할까?이번 글에서는관계형 데이터베이스의 정의왜 ‘관계형’이라고 부르는지그 관계가 무엇이고 왜 중요한지어디에 쓰면 좋은지를 정리해본다.1. 관계형 데이터베이스란?관계형 데이터베이스란데이터를 테이블(표) 형태로 저장하고,테이블들 사이의 관계(Relation) 를 명확하게 정의하여 관리하는 데이터베이스다.각 테이블은 행(Row)과 열(Column)로 구성되며,엑셀 시트 여러 장을 규칙 있게 연결해서 관리하는 구조라고 생각하면 이해하기 쉽다.2. 왜 이름이 ‘관계형’일까?많이들 이렇게 생각한다.“테이블이 서로 .. 2025. 12. 29.