728x90
반응형
SMALL

IT/DB 12

[Supabase] 응답속도 70% 단축! Mumbai에서 Seoul로 DB 옮기며 겪은 일들

왜 DB 리전을 옮기게 됐을까?서비스를 처음 만들 때는 DB 리전을 크게 신경 쓰지 않았습니다. 가입 당시 기본으로 잡혀있던 인도(Mumbai) 리전에 그대로 DB를 생성했는데, 정작 애플리케이션 서버는 한국 리전(Oracle Cloud)에 있었습니다. 문제는 같은 요청인데도 응답이 1초가 걸릴 때도 있고 30초 가까이 걸릴 때도 있었습니다. 처음에는 쿼리 문제인 줄 알고 인덱스와 커넥션 풀 설정을 한참 들여다봤는데, 정작 DB 쿼리 자체는 50~90ms로 전혀 느리지 않았습니다. 진짜 원인은 한국 ↔ 인도 간 리전간 네트워크 왕복(RTT)이 요청마다 누적되는 것이었습니다.Supabase 리전 목록(https://supabase.com/docs/guides/platform/regions)을 보면 알 수 ..

IT/DB 2026.06.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
728x90
반응형
LIST