turin's blog

만들고, 터지고, 기록합니다

풀스택, Flutter, 서버 운영, SEO, 배포 삽질을 실제 프로젝트 기준으로 정리합니다. 검색해서 들어온 사람이 바로 쓸 수 있는 체크리스트와 명령을 남기는 게 목표입니다.

1175published
8topics
kopractical notes

자주 다루는 주제

주제별로 빠르게 훑어보기

웹 개발350Next.js283서버 운영165Docker110API80TypeScript58DB50Flutter39

전체 글

운영 중 부딪힌 문제를 검색 의도에 맞춰 정리

Next.js

Next.js fetch 캐시를 끄지 못해 관리자 화면만 늦게 바뀐 기록

관리자에서 글을 수정했는데 공개 화면보다 관리자 미리보기만 더 늦게 바뀌던 문제를 fetch 캐시 기준으로 좁혀 본 기록이다.

·1분 읽기
서버 운영1분 읽기

Nginx에서 gzip을 켰는데 JSON 응답만 그대로였던 이유

gzip on만 보고 압축이 적용됐다고 착각했던 설정 문제를 짧게 정리했다.

계속 읽기 →
Next.js1분 읽기

React 폼에서 disabled 버튼만 믿었다가 중복 제출을 만든 실수

버튼 비활성화만으로 중복 제출을 막으려다 실패한 상황과 수정한 기준을 정리했다.

계속 읽기 →
Next.js1분 읽기

systemd timer로 바꿨더니 cron보다 로그 추적이 쉬웠다

매일 도는 작은 작업을 cron에서 systemd timer로 옮기며 느낀 장단점을 기록했다.

계속 읽기 →
Docker1분 읽기

Next.js에서 metadataBase를 빼먹고 공유 이미지 URL이 깨진 기록

배포 후 OG 이미지가 상대 경로로 만들어진 원인과 확인 기준을 짧게 정리했다.

계속 읽기 →
CI/CD2분 읽기

GitHub Actions 배포에서 SSH known_hosts 때문에 멈춘 날

CI에서는 서버 접속이 처음이라는 사실을 놓쳐 배포가 멈췄던 과정을 정리했다.

계속 읽기 →
Docker1분 읽기

Docker Compose healthcheck를 믿고 배포했다가 늦게 발견한 문제

컨테이너가 healthy로 보였지만 실제 API는 준비되지 않았던 배포 경험을 healthcheck 기준과 함께 돌아봤다.

계속 읽기 →
Docker1분 읽기

OG 이미지가 카카오톡에서만 예전 것으로 보였던 이유

메타 태그를 고쳤는데 링크 미리보기는 그대로였던 상황에서 HTML, 캐시, 크롤러 확인 순서를 정리했다.

계속 읽기 →
웹 개발1분 읽기

SSH 포트를 바꿨는데 UFW에서 나를 잠글 뻔한 설정 노트

SSH 포트 변경 작업에서 방화벽 허용 순서를 잘못 잡으면 서버에 못 들어갈 수 있다는 점을 정리한 설정 노트다.

계속 읽기 →
Next.js1분 읽기

Next.js 미들웨어 인증에서 리다이렉트 루프를 만든 실수

로그인 보호 미들웨어를 추가한 뒤 로그인 페이지까지 보호해 버려 무한 리다이렉트가 난 상황을 정리했다.

계속 읽기 →
CI/CD1분 읽기

pnpm lockfile 때문에 CI 빌드만 실패했을 때 확인한 순서

로컬 설치는 되는데 CI에서 frozen lockfile로 멈춘 상황을 package.json, lockfile, Node 버전 순서로 좁힌 기록이다.

계속 읽기 →
서버 운영2분 읽기

Ubuntu 서버에서 디스크가 꽉 찼을 때 급하게 지우지 않은 이유

서버 디스크 100% 상황에서 원인 확인, 로그 정리, Docker 청소를 순서대로 진행한 체크리스트다.

계속 읽기 →
Next.js2분 읽기

React Query 캐시 시간을 무작정 늘리기 전에 본 것들

목록 화면이 오래된 데이터를 보여 준 원인을 staleTime, invalidation, queryKey 관점에서 비교했다.

계속 읽기 →
DB1분 읽기

SQLite WAL 파일을 모르고 백업했다가 복구가 어긋난 날

작은 서비스 DB를 파일 하나만 복사했다가 최근 데이터가 빠진 경험과 백업 기준을 정리했다.

계속 읽기 →
Next.js1분 읽기

로그인이 풀리는 문제를 쿠키 옵션부터 확인한 기록

HTTPS 배포 뒤 세션 쿠키가 저장되지 않던 문제를 SameSite, Secure, domain 순서로 점검했다.

계속 읽기 →
Docker1분 읽기

Next.js 이미지 최적화가 외부 도메인에서만 실패한 원인

로컬에서는 잘 보이던 이미지를 배포 후 next/image로 바꾸면서 깨뜨린 과정을 정리했다.

계속 읽기 →
DB1분 읽기

SQLite에서 Postgres로 옮기기 전에 먼저 본 차이

작은 프로젝트 DB를 옮기기 전에 문법보다 운영 방식 차이를 먼저 확인했던 비교 기록이다.

계속 읽기 →
웹 개발1분 읽기

robots.txt를 수정하고도 검색 노출이 그대로였던 실수들

robots.txt와 sitemap을 손본 뒤 검색 결과가 바로 바뀌지 않아 확인했던 실수 목록이다.

계속 읽기 →
웹 개발1분 읽기

systemd 서비스에 WorkingDirectory를 적어야 했던 이유

systemd로 Node 앱을 띄울 때 상대 경로 파일을 못 찾아서 고친 설정 노트다.

계속 읽기 →
웹 개발1분 읽기

작은 상태 페이지를 만들고 알림 기준을 줄인 회고

사이드 프로젝트에 상태 페이지를 붙이면서 알림을 많이 보내는 것보다 덜 시끄럽게 만드는 쪽이 더 중요하다고 느꼈다.

계속 읽기 →
Next.js1분 읽기

Next.js 서버 액션에서 FormData 값이 비어 보였던 이유

서버 액션으로 폼을 옮긴 뒤 값이 비어 보일 때 내가 실제로 확인한 순서와 수정 기준을 정리했다.

계속 읽기 →
CI/CD1분 읽기

매일 도는 작업을 서버 cron에 둘지 GitHub Actions에 둘지 정한 기준

작업 대상이 서버 내부 또는 외부, 알림 방식, 권한 관리, 수동 재실행 필요 여부를 먼저 생각하면 선택이 명확해진다.

계속 읽기 →
Next.js1분 읽기

React useEffect에서 요청이 두 번 실행되는 현상을 잘못 고칠 뻔했다

개발 모드 StrictMode와 실제 버그를 구분하지 않고 우회 플래그로 감싸려다 올바른 취소 처리의 중요성을 깨달았다.

계속 읽기 →
서버 운영1분 읽기

정적 파일과 HTML 파일의 캐시를 다르게 다루는 Nginx 설정

해시가 붙은 JS/CSS는 길게 캐시해도 안전하지만 HTML은 항상 재검증해야 한다는 구분이 필요했다.

계속 읽기 →