본문 바로가기

반응형

백엔드·인프라

(5)
giscus·Disqus 대신 자체 D1 — 정적 블로그에 댓글·조회수·좋아요 직접 붙이기 (Cloudflare Pages Functions 따라하기) 정적 블로그(Next.js를 output: 'export'로 빌드한 사이트)에 댓글을 붙이려면 보통 giscus, Disqus, Utterances 같은 외부 위젯을 먼저 떠올려요. 저는 자체 D1을 골랐어요. 왜 그랬는지, 그리고 0부터 어떻게 붙이는지를 따라하기로 정리했어요.왜 giscus·Disqus가 아니었나giscus·Utterances는 댓글을 GitHub 이슈/디스커션에 저장해요. 그래서 독자가 댓글을 남기려면 GitHub 로그인을 해야 해요. 개발 블로그라도 일반 독자에겐 진입장벽이에요.Disqus 무료 플랜은 광고가 붙고, 제3자 추적 스크립트라 개인정보(PIPA) 관점에서 부담이 있어요.둘 다 댓글 전용이라 조회수·방문자·좋아요는 따로 못 줘요.자체 D1은 같은 Cloudflare 배포..
Supabase 새 테이블, RLS만 켜면 안 돼요 — 2026-05-30 GRANT 변경 Supabase에서 테이블을 만들고 RLS 정책까지 걸었는데, 클라이언트에서 조회하면 권한 오류가 나거나 테이블이 아예 안 보이는 경우가 있어요. 2026년 5월 30일부터 새 프로젝트의 기본 동작이 바뀌었거든요. 새로 만든 public 스키마 테이블은 권한을 명시하기 전에는 Data API에 노출되지 않아요.무엇이 바뀌었나요예전에는 public 스키마에 테이블을 만들면 자동으로 API에 노출됐어요. 이제는 역할별로 권한을 직접 줘야 보여요. 적용 일정은 이래요.2026-04-28 새 프로젝트에서 '자동 노출 끄기'를 선택할 수 있게 됨2026-05-30 새 프로젝트의 기본값으로 전환 (몇 주에 걸쳐 점진 적용)2026-10-30 기존 프로젝트 전체에 적용이미 만들어 둔 테이블은 기존 권한을 그대로..
유료 크레딧 차감을 안전하게 — SELECT FOR UPDATE와 단일 트랜잭션 유료 크레딧이나 포인트처럼 잔액을 깎는 기능은 동시성에서 사고가 나기 쉬워요. 두 요청이 거의 동시에 들어와 같은 잔액을 읽으면, 둘 다 "잔액 충분"이라고 판단하고 각자 차감해서 이중 차감이나 음수 잔액이 생길 수 있어요. 혼자 운영하다 보면 이런 건 사용자가 늘기 시작할 때 갑자기 터지더라고요.읽고 쓰는 사이의 틈문제는 "잔액을 읽는 시점"과 "차감해서 쓰는 시점" 사이의 틈이에요. 그 틈에 다른 요청이 끼어들면 둘 다 옛날 잔액을 기준으로 판단해요.요청 A: 잔액 10 읽음 → (틈) → 10 - 3 = 7로 씀요청 B: 잔액 10 읽음 → (틈) → 10 - 3 = 7로 씀결과: 두 번 차감했으니 4가 남아야 하는데 7이 남음 (한 번의 차감이 사라짐) 행을 잠그고 한 트랜잭션에서해결은 그 행을 ..
PlanetScale PlanetScale PlanetScale mysql과 호환(Compatible)되는 serverless 데이터베이스 플랫폼 serverless : 서버가 진짜 없는 것이 아닌 서버 유지를 본인이 하지 않아도 된다는 의미이다. 데이터베이스 플랫폼 : 말 그대로 데이터베이스를 제공해준다는 의미이다. scaling을 자동으로 해줌 ( + no vacumming, no rebalencing, no query planning, no downtime) Vitess 오픈소스를 통해 MySQL Scaling CLI를 통해 쉽게 데이터베이스를 다룰 수 있음 마치 Git처럼 메인 데이터베이스 이외에 Branch 데이터베이스를 사용할 수도 있음 이후 Merge를 하면 자동으로 배포가 됨 CLI 설치 https://gith..
Prisma 차세대 Node.js 및 TypeScript ORM(Object Relational Mapping) Prisma는 앱 개발자가 PostgreSQL, MySQL, SQL Server, SQLite 및 MongoDB(현재 프리뷰)용 오픈 소스 데이터베이스 도구를 사용하여 더 빠르게 빌드하고 오류를 줄이는 데 도움이 됩니다. Node.js and Typescript ORM(Object Relational Mapping) => JS or TS 와 데이터베이스 사이에 다리를 놓아줌 (기본적으로 번역기의 역할을 한다고 생각하면 됨) Prisma를 사용하기 위해서는 먼저 Prisma에게 DB가 어떻게 생겼는지, 데이터의 모양을 설명해줘야 함 => schema.prisma Prisma가 이런 타입에 관한 정보를 알고 ..

반응형