turin's blog
만들고, 터지고,
기록합니다
풀스택, Flutter, 서버 운영, SEO, 배포 삽질을 실제 프로젝트 기준으로 정리합니다. 검색해서 들어온 사람이 바로 쓸 수 있는 체크리스트와 명령을 남기는 게 목표입니다.
자주 다루는 주제
주제별로 빠르게 훑어보기
전체 글
운영 중 부딪힌 문제를 검색 의도에 맞춰 정리
Next.js fetch 캐시를 끄지 못해 관리자 화면만 늦게 바뀐 기록
관리자에서 글을 수정했는데 공개 화면보다 관리자 미리보기만 더 늦게 바뀌던 문제를 fetch 캐시 기준으로 좁혀 본 기록이다.
Nginx에서 gzip을 켰는데 JSON 응답만 그대로였던 이유
gzip on만 보고 압축이 적용됐다고 착각했던 설정 문제를 짧게 정리했다.
계속 읽기 →React 폼에서 disabled 버튼만 믿었다가 중복 제출을 만든 실수
버튼 비활성화만으로 중복 제출을 막으려다 실패한 상황과 수정한 기준을 정리했다.
계속 읽기 →systemd timer로 바꿨더니 cron보다 로그 추적이 쉬웠다
매일 도는 작은 작업을 cron에서 systemd timer로 옮기며 느낀 장단점을 기록했다.
계속 읽기 →Next.js에서 metadataBase를 빼먹고 공유 이미지 URL이 깨진 기록
배포 후 OG 이미지가 상대 경로로 만들어진 원인과 확인 기준을 짧게 정리했다.
계속 읽기 →GitHub Actions 배포에서 SSH known_hosts 때문에 멈춘 날
CI에서는 서버 접속이 처음이라는 사실을 놓쳐 배포가 멈췄던 과정을 정리했다.
계속 읽기 →Docker Compose healthcheck를 믿고 배포했다가 늦게 발견한 문제
컨테이너가 healthy로 보였지만 실제 API는 준비되지 않았던 배포 경험을 healthcheck 기준과 함께 돌아봤다.
계속 읽기 →OG 이미지가 카카오톡에서만 예전 것으로 보였던 이유
메타 태그를 고쳤는데 링크 미리보기는 그대로였던 상황에서 HTML, 캐시, 크롤러 확인 순서를 정리했다.
계속 읽기 →SSH 포트를 바꿨는데 UFW에서 나를 잠글 뻔한 설정 노트
SSH 포트 변경 작업에서 방화벽 허용 순서를 잘못 잡으면 서버에 못 들어갈 수 있다는 점을 정리한 설정 노트다.
계속 읽기 →Next.js 미들웨어 인증에서 리다이렉트 루프를 만든 실수
로그인 보호 미들웨어를 추가한 뒤 로그인 페이지까지 보호해 버려 무한 리다이렉트가 난 상황을 정리했다.
계속 읽기 →pnpm lockfile 때문에 CI 빌드만 실패했을 때 확인한 순서
로컬 설치는 되는데 CI에서 frozen lockfile로 멈춘 상황을 package.json, lockfile, Node 버전 순서로 좁힌 기록이다.
계속 읽기 →Ubuntu 서버에서 디스크가 꽉 찼을 때 급하게 지우지 않은 이유
서버 디스크 100% 상황에서 원인 확인, 로그 정리, Docker 청소를 순서대로 진행한 체크리스트다.
계속 읽기 →React Query 캐시 시간을 무작정 늘리기 전에 본 것들
목록 화면이 오래된 데이터를 보여 준 원인을 staleTime, invalidation, queryKey 관점에서 비교했다.
계속 읽기 →SQLite WAL 파일을 모르고 백업했다가 복구가 어긋난 날
작은 서비스 DB를 파일 하나만 복사했다가 최근 데이터가 빠진 경험과 백업 기준을 정리했다.
계속 읽기 →로그인이 풀리는 문제를 쿠키 옵션부터 확인한 기록
HTTPS 배포 뒤 세션 쿠키가 저장되지 않던 문제를 SameSite, Secure, domain 순서로 점검했다.
계속 읽기 →Next.js 이미지 최적화가 외부 도메인에서만 실패한 원인
로컬에서는 잘 보이던 이미지를 배포 후 next/image로 바꾸면서 깨뜨린 과정을 정리했다.
계속 읽기 →SQLite에서 Postgres로 옮기기 전에 먼저 본 차이
작은 프로젝트 DB를 옮기기 전에 문법보다 운영 방식 차이를 먼저 확인했던 비교 기록이다.
계속 읽기 →robots.txt를 수정하고도 검색 노출이 그대로였던 실수들
robots.txt와 sitemap을 손본 뒤 검색 결과가 바로 바뀌지 않아 확인했던 실수 목록이다.
계속 읽기 →systemd 서비스에 WorkingDirectory를 적어야 했던 이유
systemd로 Node 앱을 띄울 때 상대 경로 파일을 못 찾아서 고친 설정 노트다.
계속 읽기 →작은 상태 페이지를 만들고 알림 기준을 줄인 회고
사이드 프로젝트에 상태 페이지를 붙이면서 알림을 많이 보내는 것보다 덜 시끄럽게 만드는 쪽이 더 중요하다고 느꼈다.
계속 읽기 →Next.js 서버 액션에서 FormData 값이 비어 보였던 이유
서버 액션으로 폼을 옮긴 뒤 값이 비어 보일 때 내가 실제로 확인한 순서와 수정 기준을 정리했다.
계속 읽기 →매일 도는 작업을 서버 cron에 둘지 GitHub Actions에 둘지 정한 기준
작업 대상이 서버 내부 또는 외부, 알림 방식, 권한 관리, 수동 재실행 필요 여부를 먼저 생각하면 선택이 명확해진다.
계속 읽기 →React useEffect에서 요청이 두 번 실행되는 현상을 잘못 고칠 뻔했다
개발 모드 StrictMode와 실제 버그를 구분하지 않고 우회 플래그로 감싸려다 올바른 취소 처리의 중요성을 깨달았다.
계속 읽기 →정적 파일과 HTML 파일의 캐시를 다르게 다루는 Nginx 설정
해시가 붙은 JS/CSS는 길게 캐시해도 안전하지만 HTML은 항상 재검증해야 한다는 구분이 필요했다.
계속 읽기 →