turin's blog
만들고, 터지고,
기록합니다
풀스택, Flutter, 서버 운영, SEO, 배포 삽질을 실제 프로젝트 기준으로 정리합니다. 검색해서 들어온 사람이 바로 쓸 수 있는 체크리스트와 명령을 남기는 게 목표입니다.
자주 다루는 주제
주제별로 빠르게 훑어보기
전체 글
운영 중 부딪힌 문제를 검색 의도에 맞춰 정리
관리자 업로드 API에 presigned URL을 붙일지 서버 프록시를 둘지 비교한 기준
이미지 업로드 경로를 설계할 때 presigned URL과 서버 프록시의 장단점을 권한, 용량, 관측성 기준으로 비교합니다.
React 날짜 표시가 서버와 브라우저에서 달랐던 hydration 실수
서버 렌더링한 날짜가 브라우저에서 다른 문자열이 되어 hydration 경고가 난 상황에서, 시간대와 포맷 책임을 분리한 방법입니다.
계속 읽기 →HTTP 캐시 헤더를 API와 HTML에 똑같이 두지 않은 비교 메모
HTML과 JSON 응답에 같은 Cache-Control 값을 적용했다가 관리자 화면 갱신이 늦어진 경험을 바탕으로, 응답 성격별 캐시 기준을 비교합니다.
계속 읽기 →Next.js 정적 페이지에 새 글이 404로 남았을 때 revalidate를 고친 기록
generateStaticParams를 쓴 글 페이지에서 새 게시물이 404로 남던 문제를 재현하고, 동적 파라미터와 재검증 기준을 분리해 해결한 기록입니다.
계속 읽기 →도메인 이전 날 DNS TTL보다 먼저 확인한 네 가지
도메인 이전에서 DNS 전파만 기다리지 않고 인증서, 원본 서버, 리다이렉트, 메일 레코드를 먼저 점검한 체크리스트입니다.
계속 읽기 →GitHub Actions 의존성 캐시 키를 lockfile 하나로만 두지 않은 이유
모노레포에서 캐시가 오래된 의존성을 되살릴 때 cache-dependency-path와 키를 조정한 설정 노트입니다.
계속 읽기 →React 드롭다운에 키보드 포커스를 넣는 짧은 튜토리얼
마우스로만 열리던 React 드롭다운에 Escape, 방향키, 포커스 복귀를 추가한 작은 구현 과정을 소개합니다.
계속 읽기 →Linux 서버에서 Too many open files 뒤에 ulimit만 올리지 않은 기록
Node 서버의 파일 디스크립터 부족 오류를 만났을 때 limit을 올리기 전에 연결과 로그를 확인한 순서입니다.
계속 읽기 →NEXT_PUBLIC_를 붙인 환경 변수가 브라우저에 보였던 날
Next.js 환경 변수에 NEXT_PUBLIC_ 접두사를 붙이면 무엇이 달라지는지, 배포 전 확인 순서와 함께 정리했습니다.
계속 읽기 →기술 블로그 JSON-LD를 넣기 전에 확인한 검색 결과 데이터 체크리스트
구조화 데이터를 복사해 붙이기보다 실제 글 정보와 맞는지부터 확인한 SEO 체크리스트입니다.
계속 읽기 →목록 API 페이지네이션에서 offset과 cursor를 고른 비교 메모
새 글이 계속 추가되는 목록에서 offset 방식이 만든 중복을 보고 cursor 기준으로 바꾼 비교 메모입니다.
계속 읽기 →사이드 프로젝트 릴리스 전 Git worktree로 핫픽스를 분리한 회고
배포 직전 작업과 긴급 수정을 한 브랜치에 섞지 않기 위해 Git worktree를 사용한 회고입니다.
계속 읽기 →UFW 규칙을 추가하기 전 현재 접속을 보존한 서버 설정 노트
VPS 방화벽 규칙을 정리하다 SSH 접속을 잃을 뻔한 뒤 적어 둔 안전한 적용 순서입니다.
계속 읽기 →React 글로벌 로딩 경계에서 늦게 온 응답을 막은 기준
늦게 도착한 검색 응답이 화면을 덮어쓴 현상에서 상태를 분리해 해결한 기록입니다.
계속 읽기 →초보 서비스의 백업은 pg_dump와 스냅샷 중 무엇부터 고를지 비교한 기준
작은 PostgreSQL 서비스에서 논리 백업과 서버 스냅샷의 차이, 그리고 복구 연습을 먼저 정한 비교 가이드입니다.
계속 읽기 →React 폼의 저장 버튼을 두 번 눌러 중복 요청을 만든 실수 정리
버튼 비활성화만 믿었다가 빠른 두 클릭을 막지 못한 경험에서 클라이언트와 서버의 역할을 나눠 정리했습니다.
계속 읽기 →systemd 환경 변수가 쉘과 다를 때 만든 Node 배포 설정 노트
SSH에서는 되는데 서비스로만 실패한 Node 앱의 환경 변수와 WorkingDirectory 설정 노트입니다.
계속 읽기 →작은 서비스에 헬스 체크를 붙인 뒤 배포 실패를 빨리 알아챈 회고
페이지는 열리지만 DB 연결이 끊긴 배포를 겪고, 헬스 체크의 기준을 바꾼 회고입니다.
계속 읽기 →Next.js 미들웨어 로그인 리다이렉트가 반복될 때 쿠키 경로부터 확인한 기록
로그인은 성공했는데 관리자와 로그인 화면을 왕복하던 문제를 쿠키 Path와 matcher 기준으로 좁힌 기록입니다.
계속 읽기 →비밀번호 변경 API에 CSRF 확인을 추가하며 구분한 두 종류의 인증
쿠키 기반 로그인에서 비밀번호 변경 요청을 보호할 때, 인증과 CSRF 방어를 구분해 적용한 체크리스트.
계속 읽기 →logrotate를 넣고도 Node 로그 파일이 줄지 않았을 때 확인한 신호
logrotate가 파일을 회전했는데 디스크 사용량이 줄지 않았던 상황에서 프로세스의 열린 파일을 확인한 설정 노트.
계속 읽기 →Docker 이미지 태그를 latest로만 배포하다 롤백이 느려진 회고
latest 태그 하나로 배포하다 장애 때 이전 버전을 찾느라 시간을 쓴 뒤, immutable 태그로 바꾼 회고.
계속 읽기 →React에서 이전 상태를 참조한 저장 알림이 사라지지 않았던 이유
저장 완료 토스트가 엉뚱한 시점에 꺼진 문제를 stale closure와 타이머 정리로 고친 짧은 디버깅 노트.
계속 읽기 →Nginx location 우선순위를 모르고 API 정적 파일을 가로챈 날
location / 설정 하나가 /api 요청까지 잡아버렸을 때, Nginx 매칭 순서를 확인해 해결한 기록.
계속 읽기 →