최신 글

14페이지 중 10페이지
  1. 백엔드/Prisma

    Prisma N+1 쿼리 성능 문제 해결하기 (50% 속도 개선)

    API 응답이 느려서 쿼리 로그를 분석했더니 N+1 유사 패턴이 발견되었습니다. Prisma의 관계 중첩을 활용해 쿼리를 통합하고 50% 성능 개선을 달성한 방법을 소개합니다.

    10분 읽기
  2. 백엔드/Prisma

    Prisma Decimal to Number 변환 시 silent failure 방지하기

    API에서 계산 결과가 NaN으로 표시되는 버그를 발견했습니다. Prisma Decimal 타입을 Number()로 변환하면서 발생한 silent failure를 safeNumber 패턴으로 해결한 방법을 공유합니다.

    7분 읽기
  3. 백엔드/인증-보안

    Express 프록시 레이어에서 파일 다운로드 자동 암호화 구현하기

    http-proxy-middleware의 selfHandleResponse 옵션을 활용해 파일 다운로드 응답을 가로채고 AES-256-GCM으로 암호화하는 방법. 전략 패턴으로 사내 API 연동도 준비.

    13분 읽기
  4. 백엔드/인증-보안

    민감 데이터 접근 추적: Audit Logging 구현하기

    개인정보보호법과 GDPR 준수를 위해 민감 데이터 접근 이력을 추적해야 했습니다. Context 기반 감사 로깅과 Fire-and-forget 패턴으로 구현한 경험을 공유합니다.

    9분 읽기
  5. 인프라/네트워크

    Tailscale로 Oracle Cloud 서버 SSH 포트 완전 차단하기: Bastion 대신 VPN을 선택한 이유

    fail2ban으로 하루 250건의 SSH 공격을 막고 있었지만, Tailscale을 도입해 SSH 포트를 아예 닫아버렸습니다. Bastion Host 대신 Tailscale을 선택한 이유와, Oracle Cloud Security List, UFW, Termius 설정까지 완전한 가이드입니다.

    18분 읽기
  6. Ghost/설치-운영

    Ghost 셀프 호스팅 블로그 TTFB 3.7초 → 0.4초: Cloudflare Cache Rule로 87% 속도 개선

    Ghost CMS는 기본적으로 HTML에 max-age=0을 설정해서 Cloudflare 캐시가 작동하지 않습니다. Cache Rule 하나로 TTFB를 3.7초에서 0.4초로 줄인 방법을 공유합니다.

    21분 읽기
  7. AI/Claude Code

    Obsidian CLI 없이 플러그인 E2E 테스트하기: Electron CDP 활용법

    Obsidian CLI가 Early Access(v1.12+)라 사용할 수 없을 때, Electron의 Chrome DevTools Protocol을 활용해 플러그인 E2E 테스트를 구현한 경험을 공유합니다. 실제 버그 발견부터 11개 옵션 조합 테스트까지.

    14분 읽기
  8. AI/Claude Code

    claude-dashboard v1.10~v1.13: 테마, 성능 최적화, 그리고 셸 통합까지

    claude-dashboard v1.10부터 v1.13까지 6번의 릴리스에 담긴 변경사항을 정리합니다. 테마 시스템, Effort Level 표시, 성능 최적화, 그리고 터미널에서 바로 쓰는 check-ai 커맨드까지.

    16분 읽기
  9. Ghost/설치-운영

    Ghost 셀프 호스팅에서 Google AdSense ads.txt 설정하기 (NPM + Docker)

    Ghost는 정적 파일 서빙이 제한적이라 ads.txt를 직접 올릴 수 없습니다. NPM의 Advanced 설정에 location 블록을 추가해서 해결하는 방법을 정리했습니다.

    7분 읽기
  10. 프론트엔드/Next.js

    Next.js "Event handlers cannot be passed to Client Component" 에러 해결

    Next.js App Router에서 loading.tsx를 추가했더니 빌드 에러가 발생했습니다. 'use client' 컴포넌트의 prerendering 동작을 이해하고 Server/Client 분리 패턴으로 해결한 경험을 공유합니다.

    10분 읽기