turin's blog

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

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

1175published
8topics
kopractical notes

자주 다루는 주제

주제별로 빠르게 훑어보기

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

전체 글

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

서버 운영

관리자 업로드 API에 presigned URL을 붙일지 서버 프록시를 둘지 비교한 기준

이미지 업로드 경로를 설계할 때 presigned URL과 서버 프록시의 장단점을 권한, 용량, 관측성 기준으로 비교합니다.

·1분 읽기
Next.js1분 읽기

React 날짜 표시가 서버와 브라우저에서 달랐던 hydration 실수

서버 렌더링한 날짜가 브라우저에서 다른 문자열이 되어 hydration 경고가 난 상황에서, 시간대와 포맷 책임을 분리한 방법입니다.

계속 읽기 →
API1분 읽기

HTTP 캐시 헤더를 API와 HTML에 똑같이 두지 않은 비교 메모

HTML과 JSON 응답에 같은 Cache-Control 값을 적용했다가 관리자 화면 갱신이 늦어진 경험을 바탕으로, 응답 성격별 캐시 기준을 비교합니다.

계속 읽기 →
Next.js1분 읽기

Next.js 정적 페이지에 새 글이 404로 남았을 때 revalidate를 고친 기록

generateStaticParams를 쓴 글 페이지에서 새 게시물이 404로 남던 문제를 재현하고, 동적 파라미터와 재검증 기준을 분리해 해결한 기록입니다.

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

도메인 이전 날 DNS TTL보다 먼저 확인한 네 가지

도메인 이전에서 DNS 전파만 기다리지 않고 인증서, 원본 서버, 리다이렉트, 메일 레코드를 먼저 점검한 체크리스트입니다.

계속 읽기 →
CI/CD1분 읽기

GitHub Actions 의존성 캐시 키를 lockfile 하나로만 두지 않은 이유

모노레포에서 캐시가 오래된 의존성을 되살릴 때 cache-dependency-path와 키를 조정한 설정 노트입니다.

계속 읽기 →
Next.js1분 읽기

React 드롭다운에 키보드 포커스를 넣는 짧은 튜토리얼

마우스로만 열리던 React 드롭다운에 Escape, 방향키, 포커스 복귀를 추가한 작은 구현 과정을 소개합니다.

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

Linux 서버에서 Too many open files 뒤에 ulimit만 올리지 않은 기록

Node 서버의 파일 디스크립터 부족 오류를 만났을 때 limit을 올리기 전에 연결과 로그를 확인한 순서입니다.

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

NEXT_PUBLIC_를 붙인 환경 변수가 브라우저에 보였던 날

Next.js 환경 변수에 NEXT_PUBLIC_ 접두사를 붙이면 무엇이 달라지는지, 배포 전 확인 순서와 함께 정리했습니다.

계속 읽기 →
Next.js1분 읽기

기술 블로그 JSON-LD를 넣기 전에 확인한 검색 결과 데이터 체크리스트

구조화 데이터를 복사해 붙이기보다 실제 글 정보와 맞는지부터 확인한 SEO 체크리스트입니다.

계속 읽기 →
API1분 읽기

목록 API 페이지네이션에서 offset과 cursor를 고른 비교 메모

새 글이 계속 추가되는 목록에서 offset 방식이 만든 중복을 보고 cursor 기준으로 바꾼 비교 메모입니다.

계속 읽기 →
Git1분 읽기

사이드 프로젝트 릴리스 전 Git worktree로 핫픽스를 분리한 회고

배포 직전 작업과 긴급 수정을 한 브랜치에 섞지 않기 위해 Git worktree를 사용한 회고입니다.

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

UFW 규칙을 추가하기 전 현재 접속을 보존한 서버 설정 노트

VPS 방화벽 규칙을 정리하다 SSH 접속을 잃을 뻔한 뒤 적어 둔 안전한 적용 순서입니다.

계속 읽기 →
Next.js1분 읽기

React 글로벌 로딩 경계에서 늦게 온 응답을 막은 기준

늦게 도착한 검색 응답이 화면을 덮어쓴 현상에서 상태를 분리해 해결한 기록입니다.

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

초보 서비스의 백업은 pg_dump와 스냅샷 중 무엇부터 고를지 비교한 기준

작은 PostgreSQL 서비스에서 논리 백업과 서버 스냅샷의 차이, 그리고 복구 연습을 먼저 정한 비교 가이드입니다.

계속 읽기 →
Next.js1분 읽기

React 폼의 저장 버튼을 두 번 눌러 중복 요청을 만든 실수 정리

버튼 비활성화만 믿었다가 빠른 두 클릭을 막지 못한 경험에서 클라이언트와 서버의 역할을 나눠 정리했습니다.

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

systemd 환경 변수가 쉘과 다를 때 만든 Node 배포 설정 노트

SSH에서는 되는데 서비스로만 실패한 Node 앱의 환경 변수와 WorkingDirectory 설정 노트입니다.

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

작은 서비스에 헬스 체크를 붙인 뒤 배포 실패를 빨리 알아챈 회고

페이지는 열리지만 DB 연결이 끊긴 배포를 겪고, 헬스 체크의 기준을 바꾼 회고입니다.

계속 읽기 →
Next.js1분 읽기

Next.js 미들웨어 로그인 리다이렉트가 반복될 때 쿠키 경로부터 확인한 기록

로그인은 성공했는데 관리자와 로그인 화면을 왕복하던 문제를 쿠키 Path와 matcher 기준으로 좁힌 기록입니다.

계속 읽기 →
API1분 읽기

비밀번호 변경 API에 CSRF 확인을 추가하며 구분한 두 종류의 인증

쿠키 기반 로그인에서 비밀번호 변경 요청을 보호할 때, 인증과 CSRF 방어를 구분해 적용한 체크리스트.

계속 읽기 →
Next.js1분 읽기

logrotate를 넣고도 Node 로그 파일이 줄지 않았을 때 확인한 신호

logrotate가 파일을 회전했는데 디스크 사용량이 줄지 않았던 상황에서 프로세스의 열린 파일을 확인한 설정 노트.

계속 읽기 →
Docker1분 읽기

Docker 이미지 태그를 latest로만 배포하다 롤백이 느려진 회고

latest 태그 하나로 배포하다 장애 때 이전 버전을 찾느라 시간을 쓴 뒤, immutable 태그로 바꾼 회고.

계속 읽기 →
Next.js1분 읽기

React에서 이전 상태를 참조한 저장 알림이 사라지지 않았던 이유

저장 완료 토스트가 엉뚱한 시점에 꺼진 문제를 stale closure와 타이머 정리로 고친 짧은 디버깅 노트.

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

Nginx location 우선순위를 모르고 API 정적 파일을 가로챈 날

location / 설정 하나가 /api 요청까지 잡아버렸을 때, Nginx 매칭 순서를 확인해 해결한 기록.

계속 읽기 →