본문 바로가기

직접 만든 소프트웨어, 두 가지 개발 기록

구현 구조와 적용 범위, 확인한 기능과 남은 한계를 함께 기록합니다.

전체 글179

Docker bind mount permission denied 해결: 경로·UID·GID·SELinux 점검 Docker 컨테이너에서 /app/data에 파일을 저장할 때 permission denied가 발생한다면 Docker 소켓 권한과 파일 마운트 권한을 먼저 구분하세요. 컨테이너가 이미 실행되고 앱의 파일 쓰기만 실패한다면 연결한 호스트 경로, 실제 프로세스의 사용자 ID, 읽기 전용 설정과 SELinux 정책을 차례로 확인하는 편이 좋습니다. 디렉터리 전체에 chmod 777을 적용하면 증거와 접근 범위를 함께 잃을 수 있습니다.1. 오류가 난 경로와 시점을 먼저 나누세요발생 상황확인할 대상docker.sock 접근에서 거부Docker 데몬 연결 권한·context컨테이너 생성 중 소스 경로 오류데몬 호스트의 실제 경로·경로 생성 권한앱이 마운트 파일을 열 때 거부프로세스 ID·파일 소유자·상위 경로·.. 2026. 10. 4.
Amazon SES와 SendGrid 비교: 인증·주문 메일 발송 비용과 운영 기준 회원가입 인증, 주문 확인, 비밀번호 재설정 메일을 앱에서 보내려면 Amazon SES와 Twilio SendGrid 같은 발송 서비스를 검토할 수 있습니다. AWS 구성에 맞춰 발송과 이벤트 처리를 연결하려면 SES를, Email API·SMTP 서비스의 기능과 운영 도구를 함께 비교하려면 SendGrid를 후보로 둘 수 있습니다. 결정할 때는 한 건의 단가와 함께 도메인 인증, 실패한 주소의 처리, 피크 시간의 발송 속도와 운영 인력을 확인해야 합니다.1. 직원용 메일함과 앱 발송 서비스는 역할이 다릅니다이 글은 직원이 로그인해 메일을 읽는 회사 메일함을 비교하지 않습니다. 앱의 이벤트에 따라 수신자에게 메시지를 보내는 트랜잭션 이메일을 대상으로 합니다. 주문 확인과 비밀번호 재설정은 내용·유효시간·.. 2026. 10. 4.
AWS EFS와 EBS 비교: 공유 파일·컨테이너 저장소 비용과 선택 기준 AWS에서 컨테이너를 여러 서버에 배치한 뒤 업로드 파일이 어느 서버에서는 보이고 다른 서버에서는 보이지 않는다면 저장소의 공유 방식부터 확인해야 합니다. 한 서버가 사용하는 디스크가 필요하면 EBS를, 여러 실행 환경이 같은 파일 경로를 읽고 써야 하면 EFS를 후보로 검토할 수 있습니다. 두 서비스는 용량 단가만으로 비교하기보다 애플리케이션이 블록 장치와 네트워크 파일 시스템 중 무엇을 요구하는지 먼저 구분해야 합니다.1. EBS는 블록 저장소, EFS는 공유 파일 저장소입니다Amazon EBS 공식 문서에서 EBS는 EC2에 연결하는 블록 장치로 설명합니다. 볼륨과 인스턴스는 같은 가용 영역(AZ)에 있어야 하며, 운영체제에서 파일 시스템을 구성해 디스크처럼 사용합니다. 한 인스턴스의 데이터 디렉터.. 2026. 10. 4.
Nginx 499 Client Closed Request 해결: 요청 취소·시간 제한·백엔드 지연 점검 Nginx access log에 499 Client Closed Request가 늘었다면 클라이언트 쪽 연결이 응답 완료 전에 닫혔다는 의미부터 확인해야 합니다. 사용자가 화면을 나갔을 수도 있고, 앱·앞단 프록시의 시간 제한보다 백엔드가 오래 걸렸을 수도 있습니다. Nginx의 시간 제한을 무조건 늘리는 것보다 누가 먼저 연결을 닫았고 어느 구간에서 기다렸는지를 같은 요청의 기록으로 비교해야 원인을 줄일 수 있습니다.1. 499와 504는 관찰한 위치가 다릅니다Cloudflare의 499 공식 설명은 Nginx가 요청을 처리하는 중 클라이언트가 연결을 닫은 상황을 설명합니다. 499는 Nginx에서 쓰는 비표준 값이며, 이미 연결을 끊은 이용자에게 정상적인 HTTP 499 응답이 전달됐다고 가정하면 안.. 2026. 10. 1.
Docker exec format error 해결: amd64·arm64·멀티플랫폼 이미지 점검 Mac에서 만든 Docker 이미지를 Linux 서버에 올렸더니 exec format error로 시작하지 않는다면 실행 파일의 CPU 아키텍처부터 확인하세요. Apple Silicon의 arm64와 일반적인 x86 서버의 amd64가 다를 수 있습니다. 다만 같은 오류가 시작 스크립트의 실행 형식에서도 생길 수 있으므로 “무조건 amd64로 설정”하는 해결법으로 끝내면 재발합니다. 이미지 플랫폼 → 실제 실행 파일 → ENTRYPOINT 순서로 점검하는 방법을 정리합니다.1. 오류가 난 실행 파일과 Docker 서버 위치를 확인하기먼저 오류에 나온 경로가 /bin/sh인지, 애플리케이션 바이너리인지, entrypoint.sh인지 기록합니다. Docker 명령을 실행하는 노트북과 실제 Docker 데몬의.. 2026. 10. 1.
Amazon MQ와 자체 RabbitMQ 비교: 메시지 브로커 비용·가용성·운영 책임 작업 큐나 서비스 간 메시지 전달에 RabbitMQ를 쓰려 할 때 Amazon MQ for RabbitMQ로 관리 부담을 줄일지, 직접 운영할지 고민하게 됩니다. 브로커를 관리할 인력이 부족하고 AWS 안의 애플리케이션과 연결하려면 관리형 구성을 먼저 검증할 수 있습니다. 반대로 필요한 버전·플러그인·세부 설정을 직접 통제해야 한다면 자체 운영도 후보입니다. 선택의 핵심은 서버 요금보다 장애 시 누가 무엇을 복구하며 메시지 재처리를 어떻게 다루는지입니다.1. 비교 대상은 RabbitMQ 기반의 같은 작업 흐름입니다이 글은 RabbitMQ 애플리케이션을 Amazon MQ for RabbitMQ와 자체 RabbitMQ에서 운영하는 상황을 비교합니다. Amazon MQ에는 다른 엔진도 있으므로 견적과 문서에서.. 2026. 10. 1.