728x90
반응형
SMALL

IT/DB 11

[SQL] ORDER BY Ties: 하나의 데이터가 여러 Page에 조회되는 이유

제가 아는 tie 는 넥타이 뿐입니다.라고 하실 분들을 위해(저도 포함입니다), 용어부터 짚고 넘어가보겠습니다.# 영어에서, tie = 묶다 / 연결하다 / 동점 => 스포츠 경기 동점되면, “The game is tied” 라고 표현# DB에서, ORDER BY tie = 정렬 기준 같은 row 존재 => “ORDER BY tie 발생했다" 라고 표현# tie-breaker = 동점을 깨는 기준 데이터 조회 쿼리에서 페이지네이션을 구현할 때 마주친 ORDER BY Ties 버그를 소개합니다.실제로는 1개의 행만 존재하는데, 1페이지와 2페이지에 동일한 데이터가 나타나는 현상을 겪었고, 그 원인과 해결 방법을 정리했습니다.문제 유형: 데이터베이스 — LIMIT/OFFSET 페이지네이션 불안정성문제: 1..

IT/DB 2026.03.30

[Index] 복합 인덱스 적용기: 트리 구조 개념부터 실전 적용까지

오늘은, 데이터를 조회하는 쿼리에 복합 인덱스를 추가하면서,인덱스가 어떤 원리로 동작하는지 다시 한번 정리했습니다. 배경: 인덱스 없이 조회하면 어떻게 될까?아래 예시는 조회 쿼리의 WHERE 절입니다.WHERE (use_yn != 'N' OR created_at::date = CURRENT_DATE - 1) AND (created_at IS NULL OR created_at::date >= CURRENT_DATE - 1) 인덱스가 없으면 PostgreSQL은 Sequential Scan(Seq Scan) 을 수행합니다.테이블의 모든 행을 첫 줄부터 끝까지 읽으며 조건을 하나씩 확인하는 방식입니다.데이터가 100건이면 100번, 1만 건이면 1만 번 읽습니다.데이터가 적을 때는 문제없지만, 쌓일수록 ..

IT/DB 2026.03.25

[Supabase] DB 연결 실패? Connection Pool Size 부족 문제 해결하기

무료형 SaaS DB를 처음 써보는 것이기도 하고, 이렇게 작게 기본값이 되어 있을 줄 몰랐다. 문제 상황Supabase Postgres를 사용하던 중, Spring Boot 애플리케이션에서 간헐적으로 DB 명령문이 실행되지 않는 현상이 발생했다.❌ [ERROR] java.sql.SQLException: Cannot connect to databaseorg.postgresql.util.PSQLException: too many connections for role "user_account"검색해보니 Supabase의 기본 Connection Pool Size가 너무 작다는 것이 원인이었다.원인 분석Supabase는 Compute Size(사양)에 따라 기본 Pool Size가 결정된다.Comput..

IT/DB 2026.02.12

[DB] Flyway 마이그레이션 실패 원인: desc 컬럼의 함정

[DB] Flyway 마이그레이션 실패 원인: desc 컬럼의 함정 🚨 문제 상황Spring Boot + Flyway + PostgreSQL 환경에서컨테이너 기동 시 다음과 같은 에러가 발생했다.ERROR: syntax error at or near "desc"SQL State : 42601Location : db/migration/V2__insert_initial_data.sqlLine : 10Flyway 마이그레이션 도중 SQL 문법 오류로 인해컨테이너가 정상적으로 기동되지 않는 상황이었다.📄 에러가 발생한 SQL (문제 코드)INSERT INTO common_code (type, code, name, desc, created_at, updated_at) VALUES ..

IT/DB 2026.01.26

[Flyway] spring-boot-starter-flyway vs flyway-core 차이 정리

[Flyway] spring-boot-starter-flyway vs flyway-core 차이 정리📌 배경Spring Boot 3.x 프로젝트에서 Flyway를 사용해PostgreSQL 마이그레이션을 적용하던 중, 아래와 같은 의존성 구성이 문제가 되었다.implementation 'org.springframework.boot:spring-boot-starter-flyway'기존에는 문제없이 동작하던 설정이었지만,Spring Boot 3.x + PostgreSQL 환경에서는 버전 충돌 및 DB 인식 오류가 발생했다.결국 다음과 같이 의존성을 변경했다.// ❌ 제거됨implementation 'org.springframework.boot:spring-boot-starter-flyway'// ✅ 추가됨i..

IT/DB 2026.01.26

[Flyway] Spring Boot에서 PostgreSQL 마이그레이션 자동화

[Flyway] Spring Boot에서 PostgreSQL 마이그레이션 자동화📌 목차Flyway란?프로젝트 환경구현 과정주요 학습 포인트실행 및 검증결론Flyway란?정의Flyway는 데이터베이스 스키마 버전 관리 및 마이그레이션 자동화 도구입니다. Git처럼 SQL 스크립트의 버전을 관리하고, 애플리케이션 시작 시 자동으로 데이터베이스 스키마를 최신 상태로 유지합니다.필요성✅ 버전 관리: DB 스키마 변경 이력을 코드로 추적✅ 자동화: 수동 SQL 실행 불필요 → 휴먼 에러 감소✅ 일관성: 모든 팀원이 동일한 DB 상태 유지✅ 배포 단순화: CI/CD 파이프라인에 자동 포함✅ 개발 효율성: 새로운 팀원도 자동으로 DB 초기화장점항목설명자동 마이그레이션애플리케이션 시작 시 자동 실행버전 추적모든 변경..

IT/DB 2026.01.26

[DB] Supabase가 DBeaver에 연결되지 않는 경우 해결 방법

이와 함께 아래와 같은 안내 문구가 표시된다.Not IPv4 compatibleUse Session Pooler if on a IPv4 network or purchase IPv4 add-on처음에는 이 문구를 못봤어서 원인을 한참 헤맸다.문제 원인Direct connection은 IPv6 전용Supabase의 Direct connection 방식은 기본적으로 IPv6 환경에서만 동작한다.하지만 대부분의 개인 개발 환경은 다음과 같다.가정용 인터넷개인 PC일반 회사 네트워크➡️ 거의 대부분 IPv4-only 네트워크이 상태에서 Direct connection JDBC 주소를 그대로 사용하면DBeaver에서는 연결이 실패할 수밖에 없다.해결 방법 1: Session Pooler 사용 (권장)Supabase..

IT/DB 2026.01.15

[DB] BaaS형 postgres 툴 추천 (개인 프로젝트에 강추)

[DB] BaaS형 postgres 툴 추천 (개인 프로젝트에 강추) https://supabase.com/ Supabase | The Postgres Development Platform.Build production-grade applications with a Postgres database, Authentication, instant APIs, Realtime, Functions, Storage and Vector embeddings. Start for free.supabase.com 간략히 말해보자면,웹에서 DBeaver처럼 DB작업 가능하고, Connection String까지 제공해준다.개인 프로젝트에 제격인 셈, [DB] SaaS형 PostgreSQL 툴 추천 – Supabase개인..

IT/DB 2026.01.15

[Oracle] 행 제한 구문 활용 페이징 처리 SQL 쿼리

행 제한특정 조건에 따라 행 개수를 제한하기 위해 사용하는 SQLSELECT *FROM USER_MST UMWHERE 1=1ORDER BY UM.USER_ID ASC NULLS LASTOFFSET {스킵할 건수} ROWSFETCH FIRST {보여줄 건수} ROWS ONLY;  예제하나의 페이지에 5개의 행을 나타낼 수 있고3번째 페이지인, 11~15번째 행을 조회하고 싶다면?SELECT *FROM USER_MST UMWHERE 1=1ORDER BY UM.USER_ID ASC NULLS LASTOFFSET 10 ROWSFETCH FIRST 5 ROWS ONLY;  파라미터로 페이징 처리pageNum = 3fetchNum = 5SELECT *FROM USER_MST UMWHERE 1=1ORDER BY UM..

IT/DB 2024.08.07

[SQL] ORA-00955: 기존의 객체가 이름을 사용하고 있습니다.

DB툴인 Orange에서 다음의 에러가 발생했다. "ORA-00955: 기존의 객체가 이름을 사용하고 있습니다"     원인 :수동 커밋 설정에서CREATE TABLE 명렁어 실행 이후,Rollback Session 실행했더니 SELECT 도 안먹히고다시 CREATE TABLE 날려도 안먹히면서 위 에러가 발생.    PostgreSQL 에서는 DDL 문까지 롤백가능하지만오라클에서는 DDL 수행시 내부적으로 자동 COMMIT 을 수행 결국, Rollback 했더라도 테이블이 삭제되지 않은 상황.        해결 : DROP TABLE 테이블명; 테이블 드롭 후 재생성

IT/DB 2024.07.29
728x90
반응형
LIST