포스트

Terraform을 운영 중인 AWS에 AI와 함께 도입하기
EC2 한 대에서 ECS로 옮기며 Terraform을 고른 이유, import부터 시작한 도입 과정, Terraform으로 관리하며 얻은 점과 감수한 점을 정리했다.

Cloudflare 이메일 라우팅 주소로 Gmail에서 답장하기
Cloudflare 이메일 라우팅은 받기만 한다. 같은 도메인 주소로 답장까지 보내려고 발신 서버와 Gmail 설정, DNS 변경을 정리했다.
조회 335 min read
외부 API 403의 원인이 된 User-Agent 버전 표기
외부 API가 403을 내는 동안 홈은 저장본을 보여 주며 조용히 낡아 갔다. 원인은 User-Agent 버전 표기였고, 운영 서버에서 고쳐졌는지까지 확인했다.
조회 333 min read
GPT-6 Astra로 만든 3D 결과물 공개 사례 읽기
Tom Krcha의 3D 주택, Pietro Schirano의 iPod Mac 앱, Matt Wolfe의 늑대 캐릭터. GPT-6 Astra로 만든 세 가지 결과물을 원본 영상과 함께 살펴봅니다.
조회 1097 min read
추천인 초대 코드의 DB 설계와 API 분리 기준
추천인 초대 코드를 설계하며 DB는 넓게, 로직은 좁게 잡았다. 코드 입력은 가입 API에 넣지 않고 별도 API로 뺀 이유를 정리했다.
조회 344 min read
Zendesk 메시징 위젯 연동 후 문의가 안 보인 이유
Zendesk 메시징 위젯을 '?' 버튼을 처음 누를 때 불러오게 붙였다. 배포 후 시험 문의가 목록에 안 보였는데, 원인은 AI 상담사 티켓이라는 별도 종류였다.
조회 314 min read
해외 예약 시간대 설계, 현지 시각을 보존하는 저장 기준
해외 예약 시스템을 설계할 때 구분해야 할 UTC 시점, 현지 날짜·시각, IANA 시간대를 정리합니다. PostgreSQL의 timestamptz 동작부터 정부의 시간대 규칙 변경에 대응하는 정책, 저장 방식과 검증 항목까지 살펴봅니다.
조회 8711 min read
Next.js 다국어 라우팅, 기본 언어는 접두사 없이
검색에 잡힌 한국어 주소는 그대로 두고 영어·일본어 페이지를 붙였다. app/[lang] 한 벌과 rewrites, 번역 누락을 타입으로 막는 사전, 다국어 404까지 정리했다.
조회 185 min read
IAM 정책 6,144자 한도와 배포 역할 분리 기준
공용 배포 역할에 웹마다 권한을 복제하다 보니 IAM 정책이 6,144자 한도 직전까지 찼다. 정책이 아니라 역할을 나누고, 목록 하나에서 생성하게 바꿨다.

Next.js를 Vercel에서 AWS ECS로 옮긴 과정
Vercel 의존성이 거의 없는 Next.js 앱을 ECS로 옮기고 Cloudflare를 앞에 세웠다. 오리진 잠금과 구글봇 차단 사고까지 정리했다.

Vercel·Supabase로 PR마다 웹과 DB를 나누는 구조
AWS에서는 개발 환경마다 서버·DB·배포 파이프라인을 직접 구성했다. Vercel과 Supabase Branching에서는 Git 브랜치와 PR이 웹과 DB가 격리된 테스트 환경을 만든다.

AI 리팩터링 전에 테스트로 API 응답부터 고정하기
AI에게 리팩터링을 맡기기 전에 특성 테스트로 현재 동작부터 고정했다. 리뷰에서 나온 진짜 버그도 동작을 바꾸면 이번 변경에서 뺐다.