turin's blog

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

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

1175published
8topics
kopractical notes

자주 다루는 주제

주제별로 빠르게 훑어보기

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

전체 글

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

웹 개발

웹훅 재시도와 사용자 재클릭을 구분하지 못한 주문 처리 실수 정리

같은 주문이 두 번 처리된 원인을 웹훅 재전송과 사용자 재클릭으로 나눠 식별자를 분리한 기록이다.

·1분 읽기
DB1분 읽기

PostgreSQL 락 대기 때문에 마이그레이션이 멈춘 뒤 statement_timeout을 정한 회고

운영 마이그레이션이 멈춘 원인을 느린 SQL이 아닌 열린 트랜잭션에서 찾고 제한 시간을 정한 회고다.

계속 읽기 →
Next.js1분 읽기

Next.js 정적 빌드에서 useSearchParams 경고를 Suspense로 분리한 기록

검색 페이지를 정적으로 빌드할 때 나타난 useSearchParams 경고를 컴포넌트 경계와 fallback으로 나눠 해결한 과정이다.

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

Ubuntu 임시 업로드 파일이 쌓인 뒤 tmpfiles로 정리한 설정 노트

처리 후 지우지 못한 임시 업로드 파일을 무작정 cron으로 삭제하지 않고 systemd-tmpfiles로 정리한 방법이다.

계속 읽기 →
Next.js1분 읽기

React 파일 입력을 같은 파일로 다시 선택할 수 없었던 문제 해결 기록

파일을 지운 뒤 같은 파일을 다시 고르지 못했던 React 화면을 이벤트와 input 초기화 기준으로 고친 기록이다.

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

웹 폰트 하나로 레이아웃이 흔들린 뒤 CLS를 측정해 고친 짧은 튜토리얼

폰트가 늦게 도착할 때 버튼 위치가 움직이던 화면을 측정하고 고정한 방법을 간단히 기록한다.

계속 읽기 →
DB1분 읽기

PostgreSQL 마이그레이션을 되돌릴 때 데이터까지 복구된다고 착각한 실수 정리

스키마 롤백과 데이터 복구를 같은 것으로 취급했던 배포 실수에서 안전한 순서를 정리했다.

계속 읽기 →
Docker1분 읽기

Docker 빌드가 느려졌을 때 레이어 순서를 바꿔 캐시를 되살린 비교 노트

소스 한 줄을 고칠 때마다 의존성을 다시 설치하던 Dockerfile을 단계별 캐시 관점에서 비교했다.

계속 읽기 →
Next.js1분 읽기

Next.js 서버 환경변수와 브라우저 공개 값을 나눈 설정 체크리스트

배포 후 브라우저 번들에서 내부 주소가 보였던 일을 계기로 환경변수의 경계를 점검한 목록이다.

계속 읽기 →
Next.js1분 읽기

React 검색창에서 이전 응답이 덮어쓴 결과를 AbortController로 막은 기록

빠르게 검색어를 바꿀 때 늦게 도착한 응답이 화면을 망가뜨린 원인과 취소 기준을 정리했다.

계속 읽기 →
Next.js1분 읽기

검색 결과에서 날짜가 엉뚱하게 보인 뒤 UTC와 KST를 분리한 체크리스트

발행일이 자정 근처에서 하루 밀려 보인 문제를 저장 형식, 렌더링, 구조화 데이터로 나눠 점검한 SEO 체크리스트입니다.

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

TLS 인증서 갱신 뒤 일부 도메인만 경고를 낸 실수 정리

인증서 갱신은 성공했는데 오래된 서브도메인에서 경고가 계속 나온 이유를 체인과 Nginx 설정 관점에서 정리했습니다.

계속 읽기 →
API1분 읽기

REST 목록 API에 페이지네이션을 붙이며 cursor와 offset을 비교한 노트

게시글 목록이 늘어난 뒤 페이지가 밀리던 문제를 재현하고 offset과 cursor의 선택 기준을 정리했습니다.

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

Node 프로세스가 재시작될 때만 사라진 환경변수를 추적한 배포 회고

수동 실행에서는 동작하지만 서비스 재시작 뒤 설정값이 비어 있던 배포를 환경 파일과 실행 사용자 관점에서 되짚었습니다.

계속 읽기 →
Docker1분 읽기

Next.js 이미지 최적화가 느려진 원인을 원본 크기부터 확인한 기록

썸네일은 가벼운데 상세 페이지가 느려진 문제를 원본 이미지 크기와 loader 설정으로 나눈 기록입니다.

계속 읽기 →
Git1분 읽기

공개 전 저장소에서 비밀키를 찾는 보안 체크리스트

사이드 프로젝트 공개 직전에 테스트용 토큰이 커밋된 것을 발견한 뒤 만든 저장소 공개 전 점검 순서입니다.

계속 읽기 →
Docker1분 읽기

Nginx gzip과 Brotli를 이미지 응답에 켠 뒤 되돌린 비교 노트

텍스트 압축은 효과가 있었지만 이미지까지 압축해 CPU만 늘린 경험을 바탕으로 Nginx 압축 대상을 비교했습니다.

계속 읽기 →
Git2분 읽기

Git rebase 중 충돌을 줄인 세 가지 커밋 분리 기준

기능 코드와 포맷 변경을 한 커밋에 섞어 충돌을 키웠던 경험을 돌아보고, 초보자도 적용할 수 있는 커밋 분리 기준을 정리했습니다.

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

SSH 배포가 성공했는데 새 파일이 읽히지 않았던 umask 실수

배포 로그는 성공인데 애플리케이션이 새 설정 파일을 읽지 못했던 이유를 umask와 실행 사용자 관점에서 점검했습니다.

계속 읽기 →
Next.js1분 읽기

React hydration 경고를 시간 표시 하나로 재현하고 고친 기록

서버와 브라우저의 시간이 달라서 발생한 React hydration 경고를 작은 재현 코드로 좁힌 과정과 수정 기준을 적었습니다.

계속 읽기 →
API1분 읽기

Cloudflare 캐시에서 사용자 API와 정적 파일을 분리한 비교 기록

오래된 통계 응답이 보인 뒤 CDN 캐시 대상을 공개 콘텐츠와 개인 API로 나눈 기준

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

Ubuntu systemd 서비스가 재부팅 뒤 종료된 이유를 찾은 설정 노트

수동 실행은 되지만 부팅 뒤 죽던 Node 서비스를 작업 디렉터리와 환경 파일로 고친 기록

계속 읽기 →
Next.js1분 읽기

React 저장 폼의 중복 요청을 멱등 키로 막은 짧은 튜토리얼

버튼 disabled만으로 막지 못한 중복 생성을 멱등 키와 DB 유니크 제약으로 해결한 방법

계속 읽기 →
Docker1분 읽기

Docker Compose 컨테이너 로그가 디스크를 채운 뒤 적용한 회전 설정

컨테이너의 json 로그가 디스크를 가득 채운 장애를 확인하고 로그 회전을 설정한 운영 노트

계속 읽기 →