본문 바로가기

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

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

전체 글179

systemd 203/EXEC 해결: 실행 경로·권한·shebang·noexec 점검 순서 status=203/EXEC는 systemd가 지정한 프로그램을 실제로 실행하는 단계에서 실패했다는 단서입니다. 애플리케이션 설정을 먼저 바꾸거나 재시작을 반복하기보다 journal의 오류 문구를 읽고 실행 경로, 접근 권한, 스크립트 인터프리터와 마운트 조건을 확인하세요. 파일이 존재하는 것만으로 실행 가능하다고 판단할 수 없습니다.자료 확인 기준일은 2026년 10월 13일입니다. 아래 예시는 공식 문서를 바탕으로 작성한 설계·점검 예이며, 이 글에서 실제 계정이나 서버에 실행한 시험 결과는 아닙니다.원인: 프로그램이 시작되기 전의 실패입니다systemd 매뉴얼은 203/EXIT_EXEC를 실제 프로세스 실행, 구체적으로 execve 호출의 실패로 설명합니다. 누락되거나 접근할 수 없는 실행 파일이 .. 2026. 10. 14.
GitHub Actions npm 캐시 복원 후 모듈이 없을 때: npm ci·lockfile·작업 경로 점검 setup-node의 npm 캐시가 복원돼도 node_modules가 설치됐다는 뜻은 아닙니다. 이 캐시는 패키지 관리자의 다운로드 데이터를 재사용하는 기능이므로 실제 프로젝트 폴더에서 npm ci 같은 설치 단계가 필요합니다. 캐시가 맞았다는 이유로 설치를 건너뛰었다면 먼저 그 조건을 제거하고, lockfile 위치와 명령 실행 경로를 맞추세요.자료 확인 기준일은 2026년 10월 13일입니다. 아래 예시는 공식 문서를 바탕으로 작성한 설계·점검 예이며, 이 글에서 실제 계정이나 서버에 실행한 시험 결과는 아닙니다.원인: 다운로드 캐시와 설치된 의존성 폴더를 혼동합니다setup-node 문서는 전역 패키지 데이터를 캐시하며 node_modules를 캐시하지 않는다고 설명합니다. 다운로드 캐시가 있다는 .. 2026. 10. 14.
Session Manager와 배스천 서버 비교: EC2 접속·SSH 키·감사 기록 선택 기준 EC2 관리 접속을 위해 배스천 서버와 SSH 키 운영을 줄이고 싶다면 Session Manager를 검토할 수 있습니다. 단, 에이전트·IAM 권한·AWS 서비스로 나가는 연결이 준비돼야 합니다. 또한 접속 요청을 기록하는 것과 세션의 명령 내용을 기록하는 것은 다릅니다. 특히 SSH와 포트 포워딩 세션의 내용은 Session Manager 세션 로깅 대상으로 볼 수 없습니다.자료 확인 기준일은 2026년 10월 13일입니다. 아래 예시는 공식 문서를 바탕으로 작성한 설계·점검 예이며, 이 글에서 실제 계정이나 서버에 실행한 시험 결과는 아닙니다.원인: 연결·권한·감사 기록을 하나의 기능으로 봅니다배스천을 통한 SSH에서는 배스천과 목적지의 경로, SSH 인증, 운영체제 권한을 구성합니다. Sessio.. 2026. 10. 14.
EventBridge Scheduler와 서버 cron 비교: 예약 작업 재시도·중복 실행·운영 비용 선택 서버 한 대의 로컬 배치를 관리한다면 cron이 단순할 수 있고, AWS 대상 API의 예약 호출·전달 재시도를 관리형 서비스에 맡기려면 EventBridge Scheduler를 검토할 수 있습니다. 다만 ‘예약이 저장됐다’, ‘대상 API 호출이 수락됐다’, ‘업무 결과가 만들어졌다’는 서로 다른 성공입니다. 관리형 서비스로 바꾸어도 작업의 중복 방지와 최종 완료 확인은 설계해야 합니다.자료 확인 기준일은 2026년 10월 13일입니다. 아래 예시는 공식 문서를 바탕으로 작성한 설계·점검 예이며, 이 글에서 실제 계정이나 서버에 실행한 시험 결과는 아닙니다.원인: 호출 성공과 업무 완료를 같은 상태로 취급합니다Scheduler는 정해진 일정에 대상 API를 호출하는 서비스이며 최소 한 번 전달 특성을 .. 2026. 10. 14.
GitHub Actions SSH Permission denied (publickey) 해결: 배포 서버와 저장소 인증 구분 GitHub Actions에서 Permission denied (publickey)가 나오면 먼저 실패한 접속의 목적지와 사용자를 확인하세요. 러너가 배포 서버에 들어가지 못한 경우와, 서버에 들어간 다음 git fetch가 GitHub에서 거부된 경우는 공개키 등록 위치가 다릅니다. 한 키를 여러 위치에 다시 붙여 넣는 방식보다 연결을 두 단계로 나누는 것이 먼저입니다.이 글은 OpenSSH 기반 Linux 배포 서버와 SSH GitHub 인증을 사용하는 흐름을 다룹니다. 서드파티 배포 Action마다 입력값 형식이 다르므로 해당 Action의 고정 버전 문서도 함께 확인해야 합니다. 문서 확인 기준일은 2026-10-10입니다. 실제 러너·서버에 접속하거나 개인키를 읽지 않았으며 명령은 진단 예시입니.. 2026. 10. 12.
Docker port is already allocated 해결: Compose 호스트 포트 충돌 점검 Docker 시작 과정의 port is already allocated는 먼저 오류에 표시된 호스트 포트를 누가 사용하는지 확인해야 합니다. 컨테이너 안의 앱 포트를 무작정 바꾸거나 서버를 재부팅하기 전에 Docker 컨테이너와 호스트 리슨 프로세스를 구분하세요. 다른 서비스가 정상 사용 중이면 새 서비스의 호스트 매핑을 변경하는 것이 가능한 해결책입니다.적용 범위는 Docker Engine·Docker Desktop과 Compose V2의 일반적인 bridge 포트 공개입니다. network_mode: host는 같은 ports 예제로 처리하지 않습니다. 명령은 2026-10-10 공식 문서 확인에 기반한 예시이며 실제 운영 서버에서 실행한 기록이 아닙니다. Linux의 ss와 macOS의 lsof는 .. 2026. 10. 12.