이 블로그는 셀프호스팅으로 여러 웹 서비스를 직접 기획, 개발, 운영하면서 겪은 문제들과 그 해결 과정을 기록하는 기술 트러블슈팅 블로그입니다. Oracle Cloud의 ARM 기반 인스턴스 위에 Docker Compose로 여러 컨테이너를 띄우고, 호스트 레벨의 nginx 리버스 프록시로 여러 서브도메인 서비스를 함께 운영하는 개인 인프라 환경을 꾸려가고 있습니다. 이 과정에서 발생하는 크고 작은 장애와 버그, 그리고 그것을 해결해나가는 과정을 최대한 솔직하고 자세하게 기록하는 것이 이 블로그의 목표입니다.
다루는 주제는 폭넓습니다. 워드프레스로 운영하는 블로그에서 사이트 전체 레이아웃이 갑자기 깨졌던 원인을 데이터베이스 옵션 값까지 파고들어 찾아낸 이야기, PostgreSQL에서 스키마 권한이 갑자기 막히거나 DBeaver 연결이 원인 모를 이유로 실패하던 문제를 진단한 과정, 직접 개발한 Python/FastAPI 기반 라이브 스트림 자동 녹화 도구(StreamRec)에서 발생한 상태 동기화 버그와 “정체 감지” 로직의 숨은 결함을 추적한 이야기, 1GB 남짓의 저사양 클라우드 인스턴스가 왜 이렇게 느려졌는지 I/O wait 수치부터 추적해 원인을 밝히고 SSH 보안까지 함께 강화한 기록, Let’s Encrypt 인증서 발급이나 nginx 설정 구조를 sites-enabled에서 conf.d로 옮기다 서비스가 통째로 죽어버렸던 경험 등이 대표적입니다.
이런 글들은 단순히 “이렇게 하면 해결됩니다”라는 결과만 던지지 않습니다. 어떤 증상이 왜 이상하게 느껴졌는지, 처음에 어떤 부분을 의심했다가 틀렸는지, 로그와 지표를 어떻게 하나씩 짚어가며 진짜 원인에 다가갔는지를 시간 순서대로 따라가듯 서술합니다. 그래서 같은 에러 메시지나 비슷한 증상을 검색해서 들어온 개발자, 서버 운영자, 셀프호스팅 취미러들이 “아, 이런 식으로 접근하면 되는구나” 하고 실질적인 힌트를 얻어갈 수 있도록 하는 데 초점을 맞추고 있습니다.
기술적으로는 Linux 서버 운영, Docker/Docker Compose, nginx, 워드프레스, 클라우드 인프라(특히 Oracle Cloud), 그리고 직접 만든 자체 개발 도구들의 운영 경험을 주로 다루며, 실제로 겪은 문제를 기반으로 하기 때문에 이론적인 설명보다는 현장감 있는 실전 기록에 가깝습니다. 앞으로도 서비스를 운영하며 마주치는 새로운 문제들을 꾸준히 기록해나갈 예정입니다.