DataBase
-
ACID란?ACID는 데이터베이스 트랜잭션이 안전하게 처리되기 위해 반드시 지켜야 하는 4가지 속성이다.Atomicity (원자성)트랜잭션 내 모든 작업이 완전히 성공하거나 완전히 실패해야 한다.예시: 계좌이체 시 A계좌 출금과 B계좌 입금이 모두 성공하거나 모두 취소된다. 출금만 되고 입금 실패는 불가능하다.Consistency (일관성)트랜잭션 전후로 데이터베이스가 일관된 상태를 유지해야 한다.예시: 쇼핑몰에서 주문 시 "재고수량 ≥ 주문수량" 규칙이 있다면, 재고 10개인 상품을 15개 주문하려고 하면 트랜잭션 자체가 거부된다. 트랜잭션이 완료되면 반드시 재고가 충분히 남아있는 상태가 보장된다.Isolation (격리성)동시 실행되는 트랜잭션들이 서로 영향 없이 독립적으로 실행되어야 한다.예시: 콘..
DB - ACIDACID란?ACID는 데이터베이스 트랜잭션이 안전하게 처리되기 위해 반드시 지켜야 하는 4가지 속성이다.Atomicity (원자성)트랜잭션 내 모든 작업이 완전히 성공하거나 완전히 실패해야 한다.예시: 계좌이체 시 A계좌 출금과 B계좌 입금이 모두 성공하거나 모두 취소된다. 출금만 되고 입금 실패는 불가능하다.Consistency (일관성)트랜잭션 전후로 데이터베이스가 일관된 상태를 유지해야 한다.예시: 쇼핑몰에서 주문 시 "재고수량 ≥ 주문수량" 규칙이 있다면, 재고 10개인 상품을 15개 주문하려고 하면 트랜잭션 자체가 거부된다. 트랜잭션이 완료되면 반드시 재고가 충분히 남아있는 상태가 보장된다.Isolation (격리성)동시 실행되는 트랜잭션들이 서로 영향 없이 독립적으로 실행되어야 한다.예시: 콘..
2025.12.10 -
개요락(Lock)에 대해 찾아보다 Mysql이 "자동으로 비관적 락을 건다"는 말을 발견했는데 '그럼 내가 따로 코드를 짤 필요가 없는 건가?' 싶은 마음에 헷갈려서 정리해보았다.Mysql 자동 락의 역할Mysql(InnoDB)은 UPDATE나 DELETE 실행 시 자동으로 해당 행에 락을 건다.예시: 동시 수정 방지재고를 10으로 변경하는 A 요청과 20으로 변경하는 B 요청이 동시에 실행되는 상황이다.// A 요청UPDATE products SET stock = 10 WHERE id = 1;// B 요청 (거의 동시)UPDATE products SET stock = 20 WHERE id = 1;자동 락 덕분에:A의 UPDATE 실행 중 → B는 대기A 완료 → B 실행결과: stock = 20자동 락..
Mysql - 비관적 락(Pessimistic Lock)개요락(Lock)에 대해 찾아보다 Mysql이 "자동으로 비관적 락을 건다"는 말을 발견했는데 '그럼 내가 따로 코드를 짤 필요가 없는 건가?' 싶은 마음에 헷갈려서 정리해보았다.Mysql 자동 락의 역할Mysql(InnoDB)은 UPDATE나 DELETE 실행 시 자동으로 해당 행에 락을 건다.예시: 동시 수정 방지재고를 10으로 변경하는 A 요청과 20으로 변경하는 B 요청이 동시에 실행되는 상황이다.// A 요청UPDATE products SET stock = 10 WHERE id = 1;// B 요청 (거의 동시)UPDATE products SET stock = 20 WHERE id = 1;자동 락 덕분에:A의 UPDATE 실행 중 → B는 대기A 완료 → B 실행결과: stock = 20자동 락..
2025.12.10 -
개요개발을 하다보면 파티셔닝과 샤딩이라는 용어를 종종 듣게 된다. 찾아보니 둘 다 데이터를 분할한다는 공통점이 있지만, 작동 방식과 목적이 완전히 다르다는 것을 알게 되었다. 이에 대한 내용과 더불어 샤딩을 구현할 때 Laravel ORM에서 어떻게 특정 샤드를 찾아가는지에 대한 내용까지 정리해보았다.파티셔닝 (Partitioning)하나의 데이터베이스 서버 내에서 대용량 테이블을 물리적으로 여러 조각으로 분할하는 기술주요 특징:단일 서버, 단일 DB 인스턴스에서 동작쿼리 성능 향상 (필요한 파티션만 스캔)유지보수 용이 (파티션 단위 삭제/아카이빙)MariaDB는 RANGE, LIST, HASH, KEY 네 가지 파티셔닝을 지원한다.-- RANGE 파티셔닝 예시CREATE TABLE orders ( ..
DB - 파티셔닝과 샤딩개요개발을 하다보면 파티셔닝과 샤딩이라는 용어를 종종 듣게 된다. 찾아보니 둘 다 데이터를 분할한다는 공통점이 있지만, 작동 방식과 목적이 완전히 다르다는 것을 알게 되었다. 이에 대한 내용과 더불어 샤딩을 구현할 때 Laravel ORM에서 어떻게 특정 샤드를 찾아가는지에 대한 내용까지 정리해보았다.파티셔닝 (Partitioning)하나의 데이터베이스 서버 내에서 대용량 테이블을 물리적으로 여러 조각으로 분할하는 기술주요 특징:단일 서버, 단일 DB 인스턴스에서 동작쿼리 성능 향상 (필요한 파티션만 스캔)유지보수 용이 (파티션 단위 삭제/아카이빙)MariaDB는 RANGE, LIST, HASH, KEY 네 가지 파티셔닝을 지원한다.-- RANGE 파티셔닝 예시CREATE TABLE orders ( ..
2025.12.08 -
개요PostgreSQL db로 프로젝트를 진행하던 중 한글 컬럼을 기준으로 정렬을 했더니 정렬이 이상하게 되는걸 발견했다. 이를 해결하는 방법을 정리해본다.방법 1 - pg_database 업데이트첫 번째 방법은 데이터베이스의 collate 값을 업데이트하는 방식으로 간단하게 데이터베이스 전체에 로케일 변경이 가능하다.이 방법은 시스템에 ko_KR.utf8 로케일이 미설치된 경우 실패하므로, 해당 로케일이 설치되어 있는지 확인(명령어: locale -a | grep ko_)해야한다.select datname, datdba, encoding, datcollate, datctype from pg_database; -- 현재 데이터베이스 로케일 확인UPDATE pg_database SET datcollate ..
PostgreSQL - 한글 정렬개요PostgreSQL db로 프로젝트를 진행하던 중 한글 컬럼을 기준으로 정렬을 했더니 정렬이 이상하게 되는걸 발견했다. 이를 해결하는 방법을 정리해본다.방법 1 - pg_database 업데이트첫 번째 방법은 데이터베이스의 collate 값을 업데이트하는 방식으로 간단하게 데이터베이스 전체에 로케일 변경이 가능하다.이 방법은 시스템에 ko_KR.utf8 로케일이 미설치된 경우 실패하므로, 해당 로케일이 설치되어 있는지 확인(명령어: locale -a | grep ko_)해야한다.select datname, datdba, encoding, datcollate, datctype from pg_database; -- 현재 데이터베이스 로케일 확인UPDATE pg_database SET datcollate ..
2025.02.04 -
docker-compose.ymlversion: '3.8' # Docker Compose 파일 버전services: postgres: image: postgres:16 # PostgreSQL 최신 이미지 사용 container_name: postgresql-container # 컨테이너 이름을 'postgresql-container'로 지정 environment: POSTGRES_USER: postgres # 슈퍼유저 계정으로 'postgres' 사용 권장 POSTGRES_PASSWORD: 비밀번호 # DB 접속 비밀번호 설정 POSTGRES_DB: 데이터베이스 # 생성할 기본 데이터베이스 이름 설정 ports: - "5432:5432" # 호스..
PostgreSQL - docker compose 파일로 PostgreSQL 디비 실행하기docker-compose.ymlversion: '3.8' # Docker Compose 파일 버전services: postgres: image: postgres:16 # PostgreSQL 최신 이미지 사용 container_name: postgresql-container # 컨테이너 이름을 'postgresql-container'로 지정 environment: POSTGRES_USER: postgres # 슈퍼유저 계정으로 'postgres' 사용 권장 POSTGRES_PASSWORD: 비밀번호 # DB 접속 비밀번호 설정 POSTGRES_DB: 데이터베이스 # 생성할 기본 데이터베이스 이름 설정 ports: - "5432:5432" # 호스..
2024.08.15 -
docker-compose.ymlversion: '3.8'services: redis: image: redis:latest # 최신 Redis 이미지를 사용 container_name: redis-container # 컨테이너 이름을 'redis-container'로 지정 ports: - "6379:6379" # 로컬의 6379 포트를 Redis 컨테이너의 6379 포트에 매핑 volumes: - redis_data:/data # 로컬의 'redis_data' 볼륨을 컨테이너의 /data 디렉토리에 매핑하여 데이터 영속성 유지 environment: REDIS_PASSWORD: 비밀번호 # Redis 서버에 접근할 때 사용할 비밀번호 환경 ..
Redis - docker compose 파일로 redis 디비 실행하기docker-compose.ymlversion: '3.8'services: redis: image: redis:latest # 최신 Redis 이미지를 사용 container_name: redis-container # 컨테이너 이름을 'redis-container'로 지정 ports: - "6379:6379" # 로컬의 6379 포트를 Redis 컨테이너의 6379 포트에 매핑 volumes: - redis_data:/data # 로컬의 'redis_data' 볼륨을 컨테이너의 /data 디렉토리에 매핑하여 데이터 영속성 유지 environment: REDIS_PASSWORD: 비밀번호 # Redis 서버에 접근할 때 사용할 비밀번호 환경 ..
2024.08.15 -
DB 명령어-- 데이터베이스 생성createdb 데이터베이스명-- 데이터베이스 삭제dropdb 데이터베이스명-- PostgreSQL 클라이언트(psql) 실행 후 데이터베이스에 접속psql 데이터베이스명-- PostgreSQL 클라이언트(psql) 실행 후 데이터베이스 목록 보기\l-- 다른 데이터베이스로 전환\c 데이터베이스명테이블 명령어-- 데이터베이스에 접속한 후 실행-- 테이블 생성CREATE TABLE 테이블명 ( id SERIAL PRIMARY KEY, name VARCHAR(100), age INT);-- 테이블 구조 수정 (예: 열 추가)ALTER TABLE 테이블명 ADD COLUMN email VARCHAR(100);-- 테이블 삭제DROP TABLE 테이블명;-- 테이..
PostgreSQL - DB, 테이블, 데이터 CRUD 명령어DB 명령어-- 데이터베이스 생성createdb 데이터베이스명-- 데이터베이스 삭제dropdb 데이터베이스명-- PostgreSQL 클라이언트(psql) 실행 후 데이터베이스에 접속psql 데이터베이스명-- PostgreSQL 클라이언트(psql) 실행 후 데이터베이스 목록 보기\l-- 다른 데이터베이스로 전환\c 데이터베이스명테이블 명령어-- 데이터베이스에 접속한 후 실행-- 테이블 생성CREATE TABLE 테이블명 ( id SERIAL PRIMARY KEY, name VARCHAR(100), age INT);-- 테이블 구조 수정 (예: 열 추가)ALTER TABLE 테이블명 ADD COLUMN email VARCHAR(100);-- 테이블 삭제DROP TABLE 테이블명;-- 테이..
2024.07.11 -
개요Docker가 설치된 환경에서 docker image를 사용하여 PostgreSQL을 설치하는 과정.이미지를 변경하여 다른 버전의 pg(postgresql 약어)도 설치가 가능합니다.과정1. 이미지 다운로드docker pull postgres:16docker images # 다운로드 완료 확인2. 컨테이너 실행# docker run --name 컨테이너명 -e 환경변수키=환경변수값 -d -p 포트바인딩 이미지명docker run --name postgres -e POSTGRES_PASSWORD=내비밀번호 -d -p 5432:5432 postgres:16docker ps # 실행중인 컨테이너 확인3. 컨테이너 접속docker exec -it postgres bash4. db 접속# psql -h 호스트..
PostgreSQL - docker PostgreSQL 16 설치개요Docker가 설치된 환경에서 docker image를 사용하여 PostgreSQL을 설치하는 과정.이미지를 변경하여 다른 버전의 pg(postgresql 약어)도 설치가 가능합니다.과정1. 이미지 다운로드docker pull postgres:16docker images # 다운로드 완료 확인2. 컨테이너 실행# docker run --name 컨테이너명 -e 환경변수키=환경변수값 -d -p 포트바인딩 이미지명docker run --name postgres -e POSTGRES_PASSWORD=내비밀번호 -d -p 5432:5432 postgres:16docker ps # 실행중인 컨테이너 확인3. 컨테이너 접속docker exec -it postgres bash4. db 접속# psql -h 호스트..
2024.07.11