Caddy가 스테이징 인증서를 물어오기 전에 컨테이너를 재시작해야 했다

공모전 시연용 AWS 환경을 거의 다 세우고 마지막으로 도메인과 HTTPS만 붙이면 되는 단계였다. api.example.com에 A레코드를 넣고 HTTPS 접속을 검증하는 스크립트를 돌렸는데 exit 35로 죽었다. 급한 마음에 컨테이너 로그부터 보려다 컨테이너 이름을 잘못 짐작해서 로그 확인 자체가 또 실패했다. 원인은 Caddy가…

비밀값을 확인하는 방법 자체가 유출 경로였다

AWS 인프라를 세우는 작업이었다. 첫 스크립트를 돌리자마자 자격증명이 없다는 에러로 막혔고, 뒤에서는 “비밀값은 세션에 남기지 말라”고 직접 원칙을 세워놓고도 그 값을 확인하는 명령으로 키를 대화 기록에 그대로 남기는 사고를 냈다. 원칙은 맞았는데 그 원칙을 지키는 방법이 틀렸던 경우다. 이 글은…

소규모 AWS 인프라를 세우며 상태 초록불을 믿지 않기로 했다

공모전 시연용으로 EC2 한 대에 Spring Boot 서비스 8개를 올리는 인프라를 처음부터 끝까지 세웠다. 네트워크와 RDS부터 도메인과 HTTPS까지, 사전에 짜둔 계획이 실행 단계에서 거의 그대로 들어맞았다. 그런데 한 곳에서 systemctl은 전부 active인데 실제로는 잘못된 인증서를 물어올 뻔한 상태가 있었다. 그때부터…

App Store 심사 제출을 막은 건 코드가 아니라 빈 필드였다

빌드는 이미 TestFlight에 올라가 있었다. 심사 제출은 그 빌드를 고르고 버튼만 누르면 될 줄 알았다. 그런데 “심사에 추가”를 누르자 두 개의 필드가 비어 있다며 막혔고, 그 앞단에는 App Privacy 설문·연령등급·수출 규정 같은 “답을 정해야 하는” 질문들이 줄지어 있었다. 심사 제출은…

Flutter 배포 자동화 파이프라인, 반쪽만 완성해도 안전하게 설계했다

취미(부업…)로 만든 Flutter 앱에 fastlane + GitHub Actions로 배포 자동화를 붙였다. 결과부터 말하면, Android는 실제로 Google Play internal 트랙 업로드까지 완주해 파이프라인이 로컬 기준으로 완전히 검증됐다. iOS는 아직 Apple Developer 계정(돈…ㅠㅠ) 확인 단계에서 멈춰 있어 문법 검증까지만 마친 상태다 한쪽은…

카프카 클러스터는 브로커·토픽·파티션 세 겹으로 이해한다

카프카를 처음 배울 때 가장 많이 헷갈리는 지점은 “토픽에 메시지를 넣었는데 왜 순서가 뒤죽박죽으로 나오지?”다. 답은 카프카의 저장 구조에 있다. 카프카 클러스터는 브로커라는 서버 위에, 토픽이라는 논리 단위를 두고, 그 안에 파티션이라는 물리 단위로 메시지를 나눠 저장한다. 이 세 겹을…

카프카는 데이터를 주고받는 중간다리, 메시지 브로커다

두 서버가 직접 데이터를 주고받게 만들면 언젠가 문제가 생긴다. 받는 쪽 서버가 잠깐 죽으면 보낸 요청은 그대로 사라지고, 응답을 기다리는 동안 보낸 쪽 서버의 성능도 같이 떨어진다. 아파치 카프카(Apache Kafka)는 이 문제를 “중간에 메시지를 대신 보관해 주는 저장소”를 두는 방식으로…

Claude Code 좋은 프롬프트는 내부 구조에서 나온다

–continue 옵션을 못 주면 지금까지 나눈 대화를 잃어버릴까 봐 불안해하는 사람이 많다. 세션이 끊기면 작업 맥락이 통째로 사라진다고 믿기 때문이다. 결론부터 말하면 그 불안은 대부분 근거가 없다. Claude Code를 실행할 때마다 모델은 사실상 새로 태어나며, “대화가 이어진다”는 감각은 착시에 가깝다.…