본문 바로가기

DATABASE

(9)
[AI로 글쓰기] PostgreSQL Advisory Lock을 이용한 분산 환경에서 안전하게 티켓 예매하기」 🎫 PostgreSQL Advisory Lock으로 분산 환경에서 안전하게 티켓 예매하기PostgreSQL Advisory Lock + Spring WebFlux + 동시성 테스트1. 문제 상황: 경쟁 상태 (Race Condition)대규모 트래픽이 몰리는 티켓 예매 시스템에서 발생 가능한 대표 문제는 같은 좌석이 중복으로 예매되는 상황입니다.시나리오 예시요청 A: DB 확인 → "예매 기록 없음"요청 B: DB 확인 → "예매 기록 없음"요청 A: 예매 기록 생성요청 B: 예매 기록 생성결과적으로 동일한 좌석에 두 개의 예매 기록이 생기는 race condition이 발생합니다[1][2].다이어그램사용자↓서버 A → DB 조회 (좌석 비어있음)↘서버 B → DB 조회 (좌석 비어있음)서버 A → 예..
IN 절 안에 있는 id 값 대로 데이터 정렬하기 보통 쿼리를 실행하면 아래와 같이 ASC로 정렬되어 결과가 조회된다. //쿼리 SELECT id, name FROM table WHERE id IN (1, 3, 2, 4, 5, 7, 6); //결과 id | name ---+------- 1 | Byeon 2 | John 3 | Jane 4 | Peter 5 | Mary 6 | David 7 | Susan 그래서 하고 싶은 게 뭔데? WHERE id IN (1, 3, 2, 4, 5, 7 ,6) 아래 IN 절에 기입된 ID 기준으로 정렬을 해서 보고 싶다. //쿼리 SELECT id, name FROM table WHERE id IN (1, 3, 2, 4, 5, 7, 6); ORDER BY array_position(ARRAY[1, 3, 2, 4, 5, 7..
psql 명령어를 사용하여 원격지 DataBase 복원해보기 먼저 psql 명령어 사용을 위해 postgresql 서버를 설치한다. (클라이언트 도구가 포함되어 있음 #psql) brew install postgresql리눅스 환경의 경우 클라이언트 도구를 설치 할 수 있음 sudo apt-get install postgresql-clientpsql을 사용하여 Database 복원을 하기위한 명령어 필요 psql -h -p -U -d -f 원격지 DB는 도커에서 실행 중인 postgresql DB로 가정한 명령어 psql -h localhost -p 5432 -U myuser -d mydatabase -f /path/to/backup.sql
Redis에서 Hash 타입 명령어 모음! Key 관련 명령어 HDEL: Hash 타입에서 하나 이상의 필드를 삭제합니다. HEXISTS: Hash 타입에 특정 필드가 존재하는지 확인합니다. HKEYS: Hash 타입의 모든 필드 이름을 반환합니다. HLEN: Hash 타입의 필드 개수를 반환합니다. HMGET: Hash 타입에서 하나 이상의 필드에 대한 값을 반환합니다. HMSET: Hash 타입에서 하나 이상의 필드에 대한 값을 저장합니다. HSET: Hash 타입에서 하나의 필드에 대한 값을 저장합니다. HSETNX: Hash 타입에서 필드가 존재하지 않을 때만 값을 저장합니다. HVALS: Hash 타입의 모든 값을 반환합니다. 값 관련 명령어 HGET: Hash 타입에서 하나의 필드에 대한 값을 반환합니다. HINCRBY: Hash 타입..
Excluded 명령어는 언제사용하는가? Excluded 명령어는 언제 사용하는가? 개발을 하다보면 INSERT, UPDATE를 동시에 하는 쿼리를 작성할 경우가 있는데요, PostgreSql에서는 ON CONFLICT (id) DO 라는 구문을 통해 ORACLE의 Merge와 같이 INSERT, UPDATE를 가능하게 합니다. 구문을 통해서 알아 보도록 하자 // 1. Update 구문제 그대로 메핑 INSERT INTO user (id, email) VALUES ('id', 'email') ON CONFLICT(id) DO UPDATE SET email = 'email' //2. excluded 사용 INSERT INTO user (id, email) VALUES ('id', 'email') ON CONFLICT(id) DO UPDATE S..
PostgreSQL 살펴보자 PostgerSQL 이란? postgreSQL은 캘리포니아 대학교 버클리 컴퓨터 공학과에서 개발된 POSTGRE 버전 4.2 기반으로 하는 객체 관계형 데이터베이스 관리 시스템 입니다. 많은 개발자들이 오픈 소스에 기여하고 있으며 무료 라이센스로 인해 개인, 상업 학술 모든 목적으로 누구나 무료로 사용할 수 있습니다. PostgreSQL 간략한 역사 The Berkeley POSTGRES Project Postgres95 PostgreSQL [아래에서 확인] https://www.postgresql.org/docs/14/history.html 2. A Brief History of PostgreSQL 2. A Brief History of PostgreSQL 2.1. The Berkeley POSTGRE..
Docker에서 Redis설치해서 바로 사용하기! Docker는 설치가 되어있다고 과정한다. Docker에 Redis 설치 docker pull redis Redis Network 구성 docker network create redis-net //redis cli를 같이 구동하기 위해 network 구성 Docker 실행 appendonly 옵션을 통해 데이터를 파일로 관리해서 전원이 종료 되어도 데이터가 사라지지 않도록 함 docker run --name whydda-redis \ -p 6379:6379 \ --network redis-net \ -v /Users/whydda/workspace/opensources/redis:/data \ -d redis redis-server --appendonly yes Redis cli로 접속 docker run..
MYSQL 값으로 정렬하기(mysql order by value)! 보통 최신의 값으로 정렬을 많이하지면 특이한 경우에는 특정 값으로 정렬이 필요한 경우가 생긴다. Oracle의 경우에는 decode 라는 함수를 써서 했던것으로 기억 하고 있었으나 오랜만에 Mysql을 사용하는 저로서는 조금 힘든 부분이 있었다. 다행이 Mysql 에도 FIELD 라는 예약어를 사용하여 정렬 하는 방법이 있었다. 어떻게 사용하나? 예를 들어 코인 거래소를 운영한다고 생각하자. 현재 코인 테이블 상태 SELECT * FROM my_coins ; 기본 정렬 순서 SELECT * FROM my_coins ORDER BY evaluation_amount DESC, bookmark ASC ; 요청 사항이 들어왔다고 가정하다 비트코인, 이더리움은 가지고 있지 않아도 표시 되어야하고 가장 상위에 노출..