본문 바로가기

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

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

전체 글166

Kubernetes Service 연결 안 될 때: selector·EndpointSlice·targetPort·DNS 점검 Pod는 Running인데 Kubernetes Service로 접속하면 연결이 거부되거나 시간이 초과되나요? Service의 selector, EndpointSlice, 애플리케이션이 실제로 듣는 포트, DNS와 네트워크 정책을 순서대로 확인하면 원인을 좁힐 수 있습니다. 이 글은 selector로 Pod를 선택하는 일반적인 ClusterIP Service를 기준으로 설명합니다. ExternalName이나 selector가 없는 Service는 엔드포인트를 다루는 방식이 다르므로 같은 절차를 그대로 적용하지 마세요.1. 어느 클러스터·네임스페이스·주소에 접속하는지 확인먼저 현재 context와 Service의 네임스페이스를 확인합니다. 동일한 이름의 Service가 다른 네임스페이스에 있으면 짧은 이름으.. 2026. 10. 5.
Cannot connect to the Docker daemon 해결: Docker Desktop·context·서비스 점검 터미널에서 docker ps를 실행했는데 “Cannot connect to the Docker daemon” 오류가 나오나요? Docker 명령이 설치되어 있다는 사실만으로 컨테이너 엔진이 실행 중인 것은 아닙니다. 엔진이 멈췄거나, 명령줄 클라이언트가 다른 엔진 주소를 바라보는 경우부터 구분해야 합니다. 이 글은 Docker Desktop을 사용하는 macOS·Windows와 Docker Engine을 사용하는 Linux의 점검 순서를 나누어 설명합니다. 처음부터 재설치하거나 데이터를 초기화하기 전에 연결 대상과 서비스 상태를 확인하세요.1. 오류 메시지에서 연결 대상부터 읽기Docker 데몬 문제 해결 문서는 엔진이 실행 중인지와 클라이언트가 올바른 주소로 연결하는지를 나누어 확인하도록 안내합니다. .. 2026. 10. 5.
Grafana Cloud와 자체 Prometheus·Grafana 비교: 모니터링 비용·보존·운영 책임 Prometheus 지표와 Grafana 대시보드를 운영하려는데 저장 공간, 보존 기간, 장애 대응 부담이 커지고 있나요? 관리형 Grafana Cloud를 검토할 때는 서버 수만 적어 견적을 내기보다 활성 시계열 수와 수집 주기, 필요한 데이터 보존 범위를 먼저 확인해야 합니다. 자체 운영은 설정과 데이터 경로를 직접 통제할 수 있고, 관리형은 맡길 수 있는 운영 작업을 늘릴 수 있습니다. 어느 쪽이 항상 저렴한지는 같은 지표·보존·알림 조건을 맞춰 비교해야 판단할 수 있습니다.1. 대시보드와 지표 저장소를 구분하기이 글은 Prometheus 방식의 메트릭, 즉 시간에 따라 변하는 수치 지표를 중심으로 비교합니다. Grafana는 데이터를 조회하고 시각화하는 역할을 하고, 지표를 실제로 수집·저장하는 .. 2026. 10. 5.
AWS ALB와 Nginx 비교: 로드 밸런서 비용·TLS·운영 책임 선택 기준 AWS에서 웹 API를 운영할 때 Application Load Balancer(ALB)에 트래픽 분산을 맡길지, Nginx를 직접 운영할지 고민하게 됩니다. AWS의 가용 영역과 컨테이너 서비스에 맞춰 운영 부담을 줄이려면 ALB를 먼저 검토할 수 있습니다. 프록시 설정을 세밀하게 통제하거나 여러 실행 환경에서 같은 구성을 유지해야 한다면 자체 Nginx도 후보입니다. 선택할 때는 서버 한 대의 가격보다 필요한 가용성, TLS 처리, 장애 대응 책임을 같은 조건으로 비교해야 합니다.1. 관리형 서비스와 직접 운영하는 소프트웨어의 차이이 글의 비교 범위는 HTTP·HTTPS 웹 서비스의 요청 분산입니다. ALB는 AWS가 운영하는 관리형 로드 밸런서이고, Nginx Open Source는 설치한 서버나 .. 2026. 10. 5.
Nginx WebSocket 연결 실패 해결: Upgrade·101·경로·시간 제한 점검 웹페이지와 API는 정상인데 실시간 알림만 WebSocket connection failed로 끊긴다면 일반 HTTP 응답과 WebSocket 연결을 구분해 확인하세요. Nginx 앞뒤의 프로토콜 전환 헤더, 앱의 WebSocket 경로, 인증·Origin 검사, 유휴 시간 제한이 서로 맞아야 합니다. 먼저 연결 시작에 실패하는지, 시작 후 일정 시간이 지나 끊기는지 나누면 불필요한 설정 변경을 줄일 수 있습니다.1. 브라우저 오류 문구보다 실제 연결 요청을 확인하세요이 글은 일반적인 HTTP/1.1 Upgrade 방식으로 Nginx가 앱 서버에 WebSocket을 전달하는 구성을 설명합니다. MDN WebSocket 서버 안내의 핸드셰이크처럼 성공한 전환은 101 Switching Protocols 응.. 2026. 10. 4.
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.