모든 포스트

Rust 실전 강좌 #2 에러 설계: anyhow와 thiserror, 죽는 방법을 설계한다
5 분 소요

Rust 실전 강좌 #2 에러 설계: anyhow와 thiserror, 죽는 방법을 설계한다

CLI 도구에서 에러 메시지는 사용자 인터페이스의 일부입니다. 애플리케이션 계층의 기본값인 anyhow(main이 anyhow::Result를 반환, context로 맥락 쌓기)와 라이브러리 계층의 thiserror(호출자가 종류로 분기할 수 있는 구체 에러 타입)의 역할 분담, 두 크레이트를 고르는 판단 기준, 그리고 종료 코드까지 loglens의 에러 경로를 설계하겠습니다.

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

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

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

파이썬 3.14 새 기능 정리: t-string, 지연 어노테이션, 프리스레딩 공식 지원
5 분 소요

파이썬 3.14 새 기능 정리: t-string, 지연 어노테이션, 프리스레딩 공식 지원

2025년 10월 릴리스된 파이썬 3.14의 실무 관점 변화를 정리합니다. f-string과 닮았지만 템플릿 객체를 만드는 t-string, 기본 동작이 된 어노테이션 지연 평가, 실험 딱지를 뗀 프리스레딩(GIL 제거) 빌드의 의미, 표준 라이브러리에 들어온 다중 인터프리터와 Zstandard 압축, 괄호 없는 except 문법, 원격 디버깅 인터페이스까지, 업그레이드 전에 알아둘 것들을 다룹니다.

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

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

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

Rust 실전 강좌 #1 프로젝트 설계와 clap: 서브커맨드 CLI의 뼈대 잡기
4 분 소요

Rust 실전 강좌 #1 프로젝트 설계와 clap: 서브커맨드 CLI의 뼈대 잡기

기초 강좌에서 배운 문법으로 실제 도구를 만드는 실전 8편을 시작합니다. 만들 것은 액세스 로그 분석 CLI인 loglens입니다. 왜 CLI 도구가 Rust의 대표 무대인지(단일 바이너리, 시작 속도), clap의 derive 방식으로 서브커맨드(stats, top, errors)를 열거형 하나로 선언하는 법, 자동 생성되는 --help, 그리고 8편 전체의 설계 지도까지 다루겠습니다.

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

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

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

파이썬 웹 앱 프로덕션 배포: gunicorn, uvicorn, systemd, Docker
5 분 소요

파이썬 웹 앱 프로덕션 배포: gunicorn, uvicorn, systemd, Docker

개발 서버를 그대로 운영에 쓰면 안 되는 이유부터, 프로덕션 배포의 표준 구성을 정리합니다. WSGI와 ASGI의 구분, gunicorn과 uvicorn 워커의 조합, 워커 수를 정하는 기준, systemd 서비스로 프로세스를 관리하는 법, nginx 리버스 프록시가 맡는 일, Docker 이미지로 배포할 때의 기본형, 로그와 헬스체크, graceful shutdown까지 체크리스트로 다룹니다.

Celery로 파이썬 비동기 작업 처리: 큐, 워커, 운영 체크리스트
5 분 소요

Celery로 파이썬 비동기 작업 처리: 큐, 워커, 운영 체크리스트

웹 요청 안에서 처리하면 안 되는 무거운 작업을 Celery로 분리하는 법을 정리합니다. 브로커·워커·결과 백엔드로 이루어진 작업 큐의 구조, 태스크 정의와 delay 호출, 재시도와 지수 백오프 설정, 최소 한 번 실행이라는 전제에서 나오는 멱등성 원칙, acks_late와 시간 제한 같은 운영 설정, Flower 모니터링, 그리고 FastAPI BackgroundTasks나 RQ로 충분한 경우의 구분까지 다룹니다.

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

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

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

Rust 기초 강좌 #9 수명과 모듈: lifetime 표기가 필요한 순간, 모듈과 크레이트까지
5 분 소요

Rust 기초 강좌 #9 수명과 모듈: lifetime 표기가 필요한 순간, 모듈과 크레이트까지

기초 강좌의 마지막 편입니다. 4편의 댕글링 참조 차단이 어떻게 작동했는지를 수명(lifetime)으로 설명하고, missing lifetime specifier 에러가 나는 순간과 수명 매개변수 표기의 진짜 의미(수명을 늘리는 것이 아니라 관계를 선언하는 것), 대부분 표기가 생략되는 이유를 다룹니다. 이어서 mod와 pub으로 코드를 나누는 모듈 시스템, crates.io에서 외부 크레이트를 쓰는 법, 그리고 강좌 이후의 학습 경로까지 정리하겠습니다.

테라폼 기초 강좌 #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로 전월 대비를 구하는 예까지 다루겠습니다.