#인프라

381 편의 글

PostgreSQL 실전 강좌 #3 성능 진단 루틴: pg_stat_statements로 느린 쿼리 찾기
4 분 소요

PostgreSQL 실전 강좌 #3 성능 진단 루틴: pg_stat_statements로 느린 쿼리 찾기

"DB가 느려요"에서 출발해 범인 쿼리까지 도달하는 표준 루틴을 만듭니다. 지금 무슨 일이 벌어지는지 보는 pg_stat_activity(활성 쿼리·대기·오래 걸리는 트랜잭션), 누적 통계로 비싼 쿼리를 찾는 pg_stat_statements의 설치와 핵심 컬럼(total_exec_time·mean_exec_time·calls), 총합 상위와 평균 상위의 다른 의미, 느린 쿼리 로그(log_min_duration_statement) 설정, 그리고 EXPLAIN으로 넘기는 연결까지 다루겠습니다.

SRE 실무 #1 SLI·SLO 설계: 무엇을 측정하고 몇 9를 약속할 것인가
6 분 소요

SRE 실무 #1 SLI·SLO 설계: 무엇을 측정하고 몇 9를 약속할 것인가

SRE 실무 시리즈의 첫 편으로 SLI와 SLO를 실제로 설계하는 과정을 다룹니다. 사용자 여정에서 측정 대상을 고르는 법, 좋은 SLI가 good/total 비율 형태인 이유, 로드밸런서·서버·클라이언트 중 어디서 측정할지의 트레이드오프, SLO 수치를 현재 성능에서 출발시켜야 하는 이유, 측정 창 선택, 그리고 SLO 명세 문서에 반드시 적어야 할 항목까지 다룹니다.

테라폼 기초 강좌 #4 데이터 소스와 표현식: 만들지 않고 읽어 오기, 조건식과 for
4 분 소요

테라폼 기초 강좌 #4 데이터 소스와 표현식: 만들지 않고 읽어 오기, 조건식과 for

테라폼이 만들지 않은 기존 리소스의 정보를 읽어 오는 data 블록을 최신 AMI 조회 예제로 다루고, 조건식으로 환경별 분기를 만들고 for 표현식과 스플랫으로 리스트와 맵을 가공하는 방법을 정리합니다. 자주 쓰는 내장 함수와 표현식 실험장인 terraform console까지 다루겠습니다.

PostgreSQL 실전 강좌 #2 커넥션 풀: max_connections의 오해와 PgBouncer
4 분 소요

PostgreSQL 실전 강좌 #2 커넥션 풀: max_connections의 오해와 PgBouncer

트래픽이 늘면 반드시 만나는 커넥션 문제를 다룹니다. PostgreSQL 커넥션이 프로세스 하나라서 비싼 이유, max_connections를 올리는 것이 답이 아닌 이유(많은 커넥션은 오히려 처리량을 떨어뜨립니다), 애플리케이션 풀과 PgBouncer 같은 외부 풀러의 역할 분담, PgBouncer transaction 모드의 효과와 제약(세션 상태 기능 사용 불가), 그리고 적정 풀 크기의 감각까지 다루겠습니다.

테라폼 기초 강좌 #3 변수·출력·로컬 값: 하드코딩을 걷어내는 세 가지 도구
4 분 소요

테라폼 기초 강좌 #3 변수·출력·로컬 값: 하드코딩을 걷어내는 세 가지 도구

variable 블록으로 값을 코드 밖으로 빼내는 방법과 tfvars 파일, -var 플래그, 환경 변수라는 네 가지 입력 경로의 우선순위를 정리합니다. validation으로 잘못된 값을 입구에서 막고, output으로 결과를 꺼내고, locals로 내부 계산에 이름을 붙이는 것까지, 같은 코드로 여러 환경을 만드는 기반을 다지겠습니다.

PostgreSQL 실전 강좌 #1 스키마 마이그레이션: 서비스 중단 없이 테이블 바꾸기
4 분 소요

PostgreSQL 실전 강좌 #1 스키마 마이그레이션: 서비스 중단 없이 테이블 바꾸기

실전 편의 시작은 운영 중인 테이블을 바꾸는 기술입니다. 마이그레이션을 코드로 관리해야 하는 이유(순서·재현성), DDL도 트랜잭션이 되는 PostgreSQL의 강점, 잠금을 오래 잡는 위험한 변경과 안전한 변경의 구분, NOT NULL 추가를 단계로 쪼개는 법, CREATE INDEX CONCURRENTLY, 그리고 컬럼 개명·타입 변경을 확장-이관-축소(expand-contract)로 푸는 전략까지 다루겠습니다.

테라폼 기초 강좌 #2 HCL 핵심 문법: 블록, 인수, 리소스 주소와 변경의 세 가지 모양
5 분 소요

테라폼 기초 강좌 #2 HCL 핵심 문법: 블록, 인수, 리소스 주소와 변경의 세 가지 모양

HCL의 뼈대인 블록과 인수의 구조, aws_s3_bucket.hello 같은 리소스 주소의 의미와 리소스끼리 참조하는 문법을 정리합니다. plan 출력의 기호를 읽으며 create, update, replace라는 변경의 세 가지 모양을 구분하고, fmt와 validate로 코드를 다듬는 습관까지 다루겠습니다.

PostgreSQL 기초 강좌 #9 롤·권한·백업 기초: 운영의 최소 규율
4 분 소요

PostgreSQL 기초 강좌 #9 롤·권한·백업 기초: 운영의 최소 규율

기초 강좌의 마무리로 운영에 필요한 최소 규율을 정리합니다. 롤(role) 하나로 사용자와 그룹을 통일한 PostgreSQL의 권한 모델, 애플리케이션에 superuser를 주지 않고 최소 권한 계정을 만드는 실전 순서(GRANT와 기본 권한), public 스키마의 주의점, pg_dump·pg_restore로 하는 논리 백업과 복원 리허설의 중요성, 그리고 기초 9편의 회고와 실전 편 예고까지 다루겠습니다.

테라폼 기초 강좌 #1 IaC와 테라폼: 콘솔 클릭 운영의 한계, 설치와 첫 apply
7 분 소요

테라폼 기초 강좌 #1 IaC와 테라폼: 콘솔 클릭 운영의 한계, 설치와 첫 apply

콘솔에서 클릭으로 만든 인프라가 재현 불가, 이력 부재, 리뷰 부재로 무너지는 과정을 짚고, 원하는 상태를 코드로 선언하는 IaC가 이 문제를 어떻게 푸는지 정리합니다. CloudFormation, CDK, Pulumi 사이에서 테라폼이 갖는 위치를 비교하고, 설치부터 S3 버킷 하나를 init, plan, apply로 만들었다가 destroy로 지우는 첫 사이클까지 다루겠습니다.

PostgreSQL 기초 강좌 #8 뷰·CTE·윈도 함수: 복잡한 쿼리를 읽기 쉽게
4 분 소요

PostgreSQL 기초 강좌 #8 뷰·CTE·윈도 함수: 복잡한 쿼리를 읽기 쉽게

커진 쿼리를 구조화하는 세 가지 도구를 다룹니다. 반복되는 쿼리에 이름을 붙이는 뷰와 물리 사본인 구체화 뷰의 구분, WITH 절(CTE)로 쿼리를 단계별로 서술하는 법, 윈도 함수의 기본 구조(OVER, PARTITION BY)와 ROW_NUMBER로 그룹별 상위 N건을 뽑는 대표 패턴, 집계 함수와 윈도 함수의 차이(행이 줄지 않음), LAG로 전월 대비를 구하는 예까지 다루겠습니다.

PostgreSQL 기초 강좌 #7 JSONB: 관계형 데이터베이스에 유연함 더하기
4 분 소요

PostgreSQL 기초 강좌 #7 JSONB: 관계형 데이터베이스에 유연함 더하기

PostgreSQL이 NoSQL의 자리까지 넘보게 만든 JSONB를 다룹니다. json과 jsonb의 차이(jsonb가 기본값인 이유), 값 꺼내기 연산자(->, ->>, #>>)와 존재·포함 연산자(?, @>)의 사용법, JSONB 검색을 받치는 GIN 인덱스, 갱신(jsonb_set)의 특성, 그리고 가장 중요한 "어디까지 컬럼으로 두고 어디부터 JSONB에 넣는가"의 설계 경계까지 다루겠습니다.

PostgreSQL 기초 강좌 #6 트랜잭션과 MVCC: 동시성의 기본 원리
4 분 소요

PostgreSQL 기초 강좌 #6 트랜잭션과 MVCC: 동시성의 기본 원리

여러 접속이 같은 데이터를 동시에 만질 때 PostgreSQL이 일관성을 지키는 방식을 다룹니다. BEGIN·COMMIT·ROLLBACK의 기본과 원자성, MVCC(다중 버전 동시성 제어)의 핵심인 "읽기는 쓰기를 막지 않는다", UPDATE가 실제로는 새 버전 행을 만든다는 사실과 dead tuple의 예고, 기본 격리 수준 Read Committed의 의미와 함정, Repeatable Read·Serializable을 올려 쓰는 경우까지 다루겠습니다.