turin's blog
만들고, 터지고,
기록합니다
풀스택, Flutter, 서버 운영, SEO, 배포 삽질을 실제 프로젝트 기준으로 정리합니다. 검색해서 들어온 사람이 바로 쓸 수 있는 체크리스트와 명령을 남기는 게 목표입니다.
자주 다루는 주제
주제별로 빠르게 훑어보기
전체 글
운영 중 부딪힌 문제를 검색 의도에 맞춰 정리
Nginx gzip 압축이 실제로 동작하는지 확인하기
gzip 설정을 켜도 실제로 압축되는지 확인해야 한다. curl로 응답 헤더를 보면 금방 알 수 있다.
Docker 배포 이미지에 날짜 태그를 붙이는 이유
배포 후 문제가 발생했을 때 어느 이미지 버전이 배포되었는지 빠르게 추적할 수 있다. 날짜 태그는 간단하지만 운영에서 매우 유용하다.
계속 읽기 →React에서 파생 상태를 계산 함수로 바꿔본 이유
useState에서 derived state를 따로 보관하면 동기화 문제가 생긴다. 렌더링할 때마다 계산하는 쪽이 더 안정적이다.
계속 읽기 →GitHub Actions Secret 이름 규칙 정하기
CI/CD 파이프라인에서 Secret을 사용할 때 이름을 일관되게 짓는 방법. 환경별로 구분하고 로그에서 추적하기 쉽게 하려면 처음부터 이름 규칙을 정해두는 것이 중요하다.
계속 읽기 →Next.js 블로그 메타데이터 디버깅 순서
검색 엔진이 제목을 제대로 읽고 있는지 확인하는 기본 절차. canonical 태그부터 확인하면 대부분의 SEO 문제를 빠르게 찾을 수 있다.
계속 읽기 →API pagination을 처음 설계할 때부터 고려하면 좋은 이유
처음부터 pagination을 고려해서 API를 만들면, 나중에 대량 데이터를 처리할 때 서버 부하를 줄일 수 있다.
계속 읽기 →TypeScript의 union type으로 상태를 더 명확히 표현하기
상태를 제대로 표현하면 런타임 버그를 많이 줄일 수 있고, 코드를 읽는 사람도 의도를 쉽게 이해한다.
계속 읽기 →Git의 origin 말고도 remote를 여러 개 써야 할 때가 있다
여러 리모트 저장소를 관리하면 코드 배포 전략과 백업이 훨씬 유연해진다.
계속 읽기 →서버를 재부팅한 후 서비스가 정말 다시 떴는지 확인하기
재부팅 후 자동 시작 설정이 제대로 작동했는지 확인하지 않으면, 한 시간 뒤에 서비스가 내려간 줄도 모르고 있을 수 있다.
계속 읽기 →Nginx에서 gzip을 켤 때 꼭 확인해야 할 것들
gzip 압축은 트래픽을 줄이지만, 설정을 잘못하면 성능이 떨어지거나 캐시가 깨질 수 있다.
계속 읽기 →Docker 이미지 태그는 latest에만 의존하면 안 된다
latest 태그는 편하지만, 어떤 버전인지 알 수 없어서 문제 추적이 어려워진다. 명시적인 버전 태그를 써야 운영이 수월하다.
계속 읽기 →React의 useMemo는 성능 최적화보다 의도 전달이 먼저다
useMemo를 쓸 때 성능 개선을 노리기보다는, 코드를 읽는 사람에게 '이 값은 비용이 드는 계산'임을 알려주는 것이 더 중요하다.
계속 읽기 →Next.js route handler는 항상 상태 코드를 명확히 해야 한다
HTTP 상태 코드를 제대로 주지 않으면 클라이언트에서 성공/실패를 판단할 수 없고, 캐싱 정책도 깨진다.
계속 읽기 →배포 후 로그를 1분만 지켜보면 문제를 조기에 잡을 수 있다
배포 직후 1분은 문제가 드러나는 골든타임이다. 그 짧은 시간을 지켜보는 것만으로 복구 시간을 대폭 줄일 수 있다.
계속 읽기 →새 프로젝트 검증은 로그인 흐름부터 본다
전체 기능을 다 테스트하기 전에 가장 기초적인 인증 흐름부터 확인하면 문제의 원인을 훨씬 빠르게 찾을 수 있다.
계속 읽기 →Markdown 미리보기는 저장 전에 꼭 눌러보기
메타데이터가 제대로 렌더링되는지 먼저 확인하면, 나중에 SEO 문제로 다시 수정할 일이 줄어든다.
계속 읽기 →관리자 버튼은 사용자 실수 방지가 최우선이다
버튼 하나가 시스템 전체에 미칠 영향을 생각하면, 실수 한 번에 들어갈 복구 시간이 절약된다.
계속 읽기 →Docker Compose에서 컨테이너 이름에 의존하지 않기
Docker Compose로 여러 컨테이너를 관리할 때, 이름 대신 서비스 이름으로 통신하는 방법을 정리했다.
계속 읽기 →TypeScript 타입을 마치 주석처럼 읽힐 수 있게 쓰기
TypeScript 타입 정의를 명확하고 이해하기 쉽게 작성하는 방법을 정리했다.
계속 읽기 →서버 도메인을 바꿀 때 RSS 주소도 함께 바꾸기
블로그 도메인을 변경할 때, RSS feed URL도 업데이트해야 기존 구독자를 잃지 않는 방법을 정리했다.
계속 읽기 →access log로 봇과 실제 사용자를 구분하기
웹 서버 access log를 분석해서 봇 트래픽을 식별하고, 실제 사용자의 접속 패턴을 파악하는 방법을 정리했다.
계속 읽기 →로딩 스피너보다 진행 상황을 설명하는 문구가 나을 때
사용자에게 진행 중 상태를 알릴 때, 단순한 로딩 스피너보다 문맥 있는 텍스트가 더 효과적인 경우를 정리했다.
계속 읽기 →lockfile 변경을 리뷰하는 습관 들이기
package-lock.json이나 yarn.lock 같은 lockfile 변경사항을 검토할 때 보면 좋은 항목들을 정리했다.
계속 읽기 →SSH 접속을 확인할 때 기존 터미널을 먼저 닫지 말기
SSH 설정을 바꾼 후 접속 테스트할 때 주의할 점을 정리했다.
계속 읽기 →