RLS(Row Level Security) — 테이블이 아니라 행에 거는 권한
RLS는 PostgreSQL이 행 단위로 접근을 제어하는 장치다. GRANT와 무엇이 다른지, 정책이 조건식으로 동작하는 방식, 그리고 "정책 없는 RLS"가 테이블 전체를 잠그는 자물쇠가 되는 원리까지 — 브라우저가 DB를 직접 호출하는 Supabase에서 RLS가 유일한 방어선인 이유를 이 블로그의 조회수 구현으로 정리한다.
21개의 글 · 1 / 3 페이지
RLS는 PostgreSQL이 행 단위로 접근을 제어하는 장치다. GRANT와 무엇이 다른지, 정책이 조건식으로 동작하는 방식, 그리고 "정책 없는 RLS"가 테이블 전체를 잠그는 자물쇠가 되는 원리까지 — 브라우저가 DB를 직접 호출하는 Supabase에서 RLS가 유일한 방어선인 이유를 이 블로그의 조회수 구현으로 정리한다.
시계열 데이터는 "언제"를 떼면 의미가 사라지는 데이터다. 덮어쓰지 않고 쌓이고, 최근일수록 뜨겁고, 범위 조회가 기본이라는 특성부터, 같은 시간축 위에서도 규칙적인 숫자(메트릭)와 불규칙한 사건(로그)으로 갈려 도구까지 달라지는 이유, 로그에서 메트릭을 뽑아내는 실전 예까지 정리한다.
사람이 보는 HTML만으로 검색엔진은 이 날짜가 발행일인지, 이 이름이 저자인지 추측해야 한다. JSON-LD 구조화 데이터는 그 추측을 없애는 크롤러 전용 명세다. schema.org BlogPosting을 Astro 블로그에 심는 실제 구현으로 형식과 필드를 뜯어보고, 그 보상인 리치 스니펫이 무엇이며 왜 자격이지 보장이 아닌지까지 정리한다.
정적 사이트에서 "3시간 전" 같은 상대 시각은 빌드 순간에 굳어 시간이 흐를수록 거짓이 된다. 원본 시각은 time 요소의 datetime 속성에 실어 보내고 표시는 보는 순간 클라이언트가 다시 계산하는 패턴 — 폴백을 남기는 progressive enhancement 방식과 트레이드오프까지, 이 블로그의 실제 구현으로 정리한다.
Astro에서 CSS는 컴포넌트 안에 그냥 쓰면 자동으로 격리되고, 출력은 순수 CSS로 남는다. scoped가 기본값이라는 철학, 전역으로 나가는 문(is:global·:global), define:vars로 서버 값을 스타일에 넘기는 법, 런타임 CSS-in-JS와 상성이 나쁜 이유, 그리고 번들 순서라는 함정까지 — Astro의 스타일링이 React 계열과 어떻게 다른지 정리한다.
GitHub Pages에 Astro로 직접 지은 블로그를 velog와 항목별로 비교했다. 직접 구축이 실제로 주는 것(디자인·읽기 경험·기능의 제어권)과 구조적으로 포기하는 것(독자 유입·통계·편의), 그리고 그 격차를 좁히는 현실적 보완책을 정리한다.
개발 블로그를 시작할 때 첫 결정은 글감이 아니라 플랫폼이다. velog·Tistory·Medium·GitHub Pages 네 갈래를 '제어권 vs 독자 유입'이라는 하나의 트레이드오프 축으로 놓고, 목적별로 무엇을 골라야 하는지 비교한다.
pm2 restart는 프로세스를 한꺼번에 죽였다 살려 그 사이 요청이 끊긴다. 클러스터 모드에서 reload는 프로세스를 하나씩 교체해 다운타임 없이 배포한다. restart와 reload의 차이, graceful shutdown 처리, 배포 흐름을 정리한다.
nginx를 앞단에 두면 HTTPS 처리를 거기서 끝낼 수 있다(SSL 종료). Let's Encrypt와 certbot으로 무료 인증서를 발급·자동 갱신하고, 80→443 리다이렉트까지 실제 설정으로 붙여본다.
RLS는 PostgreSQL이 행 단위로 접근을 제어하는 장치다. GRANT와 무엇이 다른지, 정책이 조건식으로 동작하는 방식, 그리고 "정책 없는 RLS"가 테이블 전체를 잠그는 자물쇠가 되는 원리까지 — 브라우저가 DB를 직접 호출하는 Supabase에서 RLS가 유일한 방어선인 이유를 이 블로그의 조회수 구현으로 정리한다.
시계열 데이터는 "언제"를 떼면 의미가 사라지는 데이터다. 덮어쓰지 않고 쌓이고, 최근일수록 뜨겁고, 범위 조회가 기본이라는 특성부터, 같은 시간축 위에서도 규칙적인 숫자(메트릭)와 불규칙한 사건(로그)으로 갈려 도구까지 달라지는 이유, 로그에서 메트릭을 뽑아내는 실전 예까지 정리한다.
사람이 보는 HTML만으로 검색엔진은 이 날짜가 발행일인지, 이 이름이 저자인지 추측해야 한다. JSON-LD 구조화 데이터는 그 추측을 없애는 크롤러 전용 명세다. schema.org BlogPosting을 Astro 블로그에 심는 실제 구현으로 형식과 필드를 뜯어보고, 그 보상인 리치 스니펫이 무엇이며 왜 자격이지 보장이 아닌지까지 정리한다.
정적 사이트에서 "3시간 전" 같은 상대 시각은 빌드 순간에 굳어 시간이 흐를수록 거짓이 된다. 원본 시각은 time 요소의 datetime 속성에 실어 보내고 표시는 보는 순간 클라이언트가 다시 계산하는 패턴 — 폴백을 남기는 progressive enhancement 방식과 트레이드오프까지, 이 블로그의 실제 구현으로 정리한다.
Astro에서 CSS는 컴포넌트 안에 그냥 쓰면 자동으로 격리되고, 출력은 순수 CSS로 남는다. scoped가 기본값이라는 철학, 전역으로 나가는 문(is:global·:global), define:vars로 서버 값을 스타일에 넘기는 법, 런타임 CSS-in-JS와 상성이 나쁜 이유, 그리고 번들 순서라는 함정까지 — Astro의 스타일링이 React 계열과 어떻게 다른지 정리한다.
GitHub Pages에 Astro로 직접 지은 블로그를 velog와 항목별로 비교했다. 직접 구축이 실제로 주는 것(디자인·읽기 경험·기능의 제어권)과 구조적으로 포기하는 것(독자 유입·통계·편의), 그리고 그 격차를 좁히는 현실적 보완책을 정리한다.
개발 블로그를 시작할 때 첫 결정은 글감이 아니라 플랫폼이다. velog·Tistory·Medium·GitHub Pages 네 갈래를 '제어권 vs 독자 유입'이라는 하나의 트레이드오프 축으로 놓고, 목적별로 무엇을 골라야 하는지 비교한다.
pm2 restart는 프로세스를 한꺼번에 죽였다 살려 그 사이 요청이 끊긴다. 클러스터 모드에서 reload는 프로세스를 하나씩 교체해 다운타임 없이 배포한다. restart와 reload의 차이, graceful shutdown 처리, 배포 흐름을 정리한다.
nginx를 앞단에 두면 HTTPS 처리를 거기서 끝낼 수 있다(SSL 종료). Let's Encrypt와 certbot으로 무료 인증서를 발급·자동 갱신하고, 80→443 리다이렉트까지 실제 설정으로 붙여본다.
비공개로 의견 보내기
작성자에게만 전달돼요. 이름·이메일을 비우면 완전 익명입니다.