인프라

테라폼 실전 강좌 #8 ECS Fargate 배포: 태스크 정의, 서비스, ALB 뒤에서의 전환
4 분 소요

테라폼 실전 강좌 #8 ECS Fargate 배포: 태스크 정의, 서비스, ALB 뒤에서의 전환

user_data 방식의 한계를 짚고 컴퓨팅 계층을 컨테이너로 세대교체합니다. ECS 클러스터와 Fargate 태스크 정의, 실행 역할과 태스크 역할의 구분, ip 타입 대상 그룹을 가진 서비스를 만들고, 같은 ALB 뒤에서 EC2와 컨테이너를 나란히 돌리다 리스너 전환으로 갈아타는 과정까지 코드로 진행하겠습니다.

timestamptz 함정 모음: PostgreSQL 시간 처리에서 틀리기 쉬운 것들
5 분 소요

timestamptz 함정 모음: PostgreSQL 시간 처리에서 틀리기 쉬운 것들

PostgreSQL 시간 처리의 실전 함정을 모았습니다. timestamptz가 시간대를 저장한다는 오해, 결과가 세션 TimeZone에 따라 달라 보이는 원리, AT TIME ZONE이 타입에 따라 반대로 동작하는 이중성, date_trunc·날짜 그룹핑이 자정 기준을 어디에 두느냐로 달라지는 문제, 미래 일정은 timestamptz만으로 부족한 이유(시간대 규칙 변경), now()와 clock_timestamp()의 차이까지 다루겠습니다.

테라폼 실전 강좌 #7 IAM 코드화: 인스턴스 역할, 최소 권한, GitHub Actions OIDC
4 분 소요

테라폼 실전 강좌 #7 IAM 코드화: 인스턴스 역할, 최소 권한, GitHub Actions OIDC

aws_iam_policy_document 데이터 소스로 신뢰 정책과 권한 정책을 작성하고, 인스턴스 프로파일로 EC2에 역할을 부여해 SSM Session Manager 접속과 시크릿 읽기를 완성합니다. 최소 권한을 리소스 ARN 단위로 좁히는 방법과, GitHub Actions가 액세스 키 없이 AWS 역할을 맡는 OIDC 연동까지 코드로 만들겠습니다.

UUID vs bigint 기본 키: 성능 차이의 실체와 uuidv7
4 분 소요

UUID vs bigint 기본 키: 성능 차이의 실체와 uuidv7

기본 키 논쟁의 단골 주제인 UUID vs bigint를 실측 가능한 근거로 정리합니다. bigint가 기본값인 이유(크기·삽입 지역성·조인 비용), UUID v4가 인덱스에 무작위로 삽입되어 쓰기와 캐시 효율을 떨어뜨리는 원리, 시간순 정렬로 그 문제를 대부분 해소한 uuidv7과 PostgreSQL 18 내장 함수, uuidv7의 남는 트레이드오프(생성 시각 노출·16바이트), 그리고 내부 bigint + 외부 UUID 병행 설계까지 다루겠습니다.

테라폼 실전 강좌 #6 시크릿 관리: SSM vs Secrets Manager, write-only 인수
4 분 소요

테라폼 실전 강좌 #6 시크릿 관리: SSM vs Secrets Manager, write-only 인수

시크릿 보관소로 SSM Parameter Store와 Secrets Manager를 비용과 기능으로 비교해 선택 기준을 세우고, 테라폼 1.11의 ephemeral 리소스와 write-only 인수로 DB 비밀번호가 plan과 state 어디에도 남지 않는 구성을 만듭니다. 애플리케이션이 시크릿을 런타임에 읽는 경로까지 설계해 지난 편의 평문 문제를 구조적으로 풀겠습니다.

N+1 쿼리 문제: 증상, 탐지, 해결까지
4 분 소요

N+1 쿼리 문제: 증상, 탐지, 해결까지

ORM을 사용하는 서비스가 느려지는 가장 흔한 원인인 N+1 쿼리를 다룹니다. 목록 하나에 쿼리가 101번 나가는 구조가 만들어지는 원리(지연 로딩), 애플리케이션 로그와 pg_stat_statements의 calls로 탐지하는 법, JOIN·IN 일괄 로딩·ORM의 즉시 로딩 옵션이라는 세 가지 해법, 그리고 "화면이 필요로 하는 데이터를 쿼리 수가 아니라 모양으로 설계한다"는 예방 원칙까지 다루겠습니다.

테라폼 실전 강좌 #5 RDS와 S3: 데이터 계층 코드화와 안전장치
4 분 소요

테라폼 실전 강좌 #5 RDS와 S3: 데이터 계층 코드화와 안전장치

DB 서브넷 그룹과 보안 그룹 체이닝으로 격리된 PostgreSQL RDS를 프라이빗 서브넷에 만들고, gp3 스토리지와 백업, prevent_destroy 안전장치까지 설정합니다. 정적 자산용 S3 버킷을 퍼블릭 차단과 함께 구성하고, 임시로 변수에 둔 DB 비밀번호가 state에 평문으로 남는 문제를 확인해 다음 편의 과제로 넘기겠습니다.

PostgreSQL upsert 정석: ON CONFLICT 사용법과 함정
4 분 소요

PostgreSQL upsert 정석: ON CONFLICT 사용법과 함정

"있으면 갱신, 없으면 삽입"을 경쟁 조건 없이 처리하는 ON CONFLICT를 다룹니다. SELECT 후 INSERT 방식이 동시성에서 깨지는 이유, DO NOTHING과 DO UPDATE의 사용법, EXCLUDED로 새 값을 참조하는 법, 충돌 판정 대상(유니크 제약)을 명시해야 하는 이유, 갱신이 필요 없을 때도 행이 잠기는 비용, MERGE와의 관계, 그리고 시퀀스가 건너뛰는 현상까지 다루겠습니다.

테라폼 실전 강좌 #4 ALB와 Auto Scaling: launch template, 대상 그룹, 스케일링 정책
4 분 소요

테라폼 실전 강좌 #4 ALB와 Auto Scaling: launch template, 대상 그룹, 스케일링 정책

단일 EC2 인스턴스를 로드밸런서 뒤의 Auto Scaling 그룹으로 승격합니다. 인스턴스 정의를 launch template으로 옮기고, ALB와 대상 그룹, 리스너를 연결한 뒤 CPU 타깃 추적 스케일링 정책까지 겁니다. 검증용 단일 인스턴스를 코드에서 지워 IaC의 리소스 제거 흐름을 확인하고, 브라우저로 첫 응답을 받아보겠습니다.

pgvector 실전: PostgreSQL로 벡터 검색을 운영할 때 알아야 할 것
4 분 소요

pgvector 실전: PostgreSQL로 벡터 검색을 운영할 때 알아야 할 것

임베딩 검색을 별도 벡터 DB 없이 PostgreSQL로 운영하는 실전 가이드입니다. vector 타입과 거리 연산자, HNSW 인덱스가 기본값인 이유와 IVFFlat과의 비교, 필터 조건과 함께 쓸 때의 과소 검색 문제와 반복 인덱스 스캔(0.8.0), halfvec으로 저장 크기를 절반으로 줄이고 최대 4000차원을 다루는 방법, 그리고 "전용 벡터 DB가 필요한 시점은 언제인가"의 판단 기준까지 다루겠습니다.

테라폼 실전 강좌 #3 EC2와 보안 그룹: SG 체이닝 설계와 user_data 부팅
4 분 소요

테라폼 실전 강좌 #3 EC2와 보안 그룹: SG 체이닝 설계와 user_data 부팅

보안 그룹을 CIDR가 아니라 보안 그룹 참조로 연결하는 체이닝 설계를 ALB, EC2 2계층으로 구성하고, 최신 AL2023 AMI를 데이터 소스로 조회해 user_data로 웹 서버까지 부팅되는 EC2 인스턴스를 프라이빗 서브넷에 올립니다. SSH 포트를 열지 않는 이유와 Session Manager 접속 계획까지 정리하겠습니다.

PostgreSQL vs MySQL: 2026년에 새 프로젝트라면 어느 쪽인가
4 분 소요

PostgreSQL vs MySQL: 2026년에 새 프로젝트라면 어느 쪽인가

두 오픈소스 RDBMS의 선택 기준을 정리합니다. 결론은 "새 프로젝트는 특별한 이유가 없으면 PostgreSQL, MySQL 생태계에 이미 서 있다면 MySQL 유지"입니다. MySQL 8.0 지원 종료(2026-04)와 8.4 LTS 전환 시점, 기능 폭(JSONB·윈도 함수·확장)과 MVCC 구현 차이, 복제 생태계의 성숙도 차이, 그리고 어느 쪽을 골라도 되는 경우까지 판단 기준을 다루겠습니다.