Sveltekit Blog Engine
방명록
로그인

개발 노트: 밖에서 스마트폰으로 블로그 방문자나 좀 보려다가 생긴 일

dev-notes • 2026-11-05 AM6:57:47 (GMT+9) • 👀 3 •
#SKBE#Cloudflare#보안#모바일대시보드#외부 접속

밖에 돌아다니다가 문득 "오늘 블로그에 몇 명이나 왔나?" 궁금할 때가 있다. 스마트폰을 꺼내서 관리자 페이지 주소를 쳐봤자 화면엔 싸늘하게 403 Forbidden만 뜬다. 보안 챙긴다고 어드민 전체에 지정 IP(집/사무실) 아니면 틀어막아서 그리 나오도록 해놨으니 당연한 결과다.
그렇다고 기기 자체를 인식할 수 있게 하려고 하니 앱으로 출시해야하는 것도 있고 권한을 넘겨 받아야하는데 그건 내가 생각해도 찜찜해서 안하기로 했다.
근데 생각해보면 밖에서 폰으로 장문의 포스트를 쓸 것도 아니고, 댓글 관리를 할 것도 아니고 그냥 오늘 방문자 숫자랑 트래픽 그래프 쓱 보고 끄는 게 전부인데, 그거 하나 보자고 관리자 IP 제한을 통째로 풀 수는 없는 노릇이었다. '대시보드만 외부에서도 접근이 가능하게 할 순 없을까?' 고민하기 시작함.

1. "대시보드는 어차피 읽기뿐이잖아?"

따져보니까 블로그 관리자 기능 중에서 대시보드는 사실상 CUD(Create, Update, Delete)가 전혀 없다. D1에 차곡차곡 쌓여 있는 방문자 통계 스냅샷을 그냥 브라우저에 예쁘게 그려서 보여주는 '읽기 전용' 화면임. 서버 데이터를 날려 먹을 위험도 없고, 설정이 꼬일 일도 없다.
그렇다면 대시보드 라우트(/dashboard)만 예외적으로 외부 IP에서 열리게 열어두고, 글 쓰기나 회원 관리, 사이트 설정 같은 위험한 페이지들은 외부 IP에서 계속 403으로 틀어막으면 안전하겠다는 결론이 나왔다.

2. 단순하게 생각했다가 또 일이 꼬임

그냥 접속 열어주고 끝내면 될 줄 알았는데, 막상 코드를 열어보니 챙겨야 할 게 한두 개가 아니었다.

  • 메인 비밀번호는 좀 위험해 보임: 외부 공용 와이파이나 모바일 환경에서 최고 관리자 마스터 비밀번호를 직접 타이핑하는 건 보안상 찝찝했다. 그래서 사이트 설정에서 '대시보드 열람 전용 비밀번호'를 따로 등록하게 만들었다. 비밀번호를 비워두면 외부 접속이 자동으로 비활성화되고, 등록하면 SHA-256 해시로 D1에 박혀서 그것만 대조함.

  • 쿠키 권한 분리 (admin_session vs dashboard_session): 대시보드 비번을 치고 들어온 모바일 세션에게 메인 관리자 권한을 줄 수는 없음. 세션 쿠키를 물리적으로 분리해서, 대시보드 세션만 들고 있는 상태로 /posts나 /settings 주소를 직접 치고 들어가 봤자 가차 없이 403이 뜨게 격리시킴.

  • 데이터 내보내기(Export) API도 차단: 밖에서 폰으로 보는데 굳이 수백 일 치 엑셀/CSV 덤프를 내려받을 이유가 없음. 혹시라도 모바일 세션 털려서 통계 데이터가 대량으로 긁혀 나가는 꼴은 보기 싫어서, /api/analytics/export 요청도 외부 IP에선 403으로 차단하고 모바일 뷰어 화면에선 내보내기 버튼 자체를 지워버림.

  • 모바일 화면에 맞게 UI구성: 스마트폰 세로 화면으로 대시보드 보는데 현재 어드민은 모바일 모드를 지원안해서 사실상 좌측 사이드바만 보이는 상태. 외부 모바일로 들어왔을 땐 PC용 사이드바를 통째로 날려버리고, 상단에 'SKBE 통계' 타이틀이랑 '로그아웃' 버튼만 딱 달린 초경량 모바일 헤더로 대체하기로 함.

3. 일단 스스로는 만족스러울듯

어차피 하루에 방문자 몇 명 오지도 않는 한적한 개인 블로그. 근데 밖에서 폰으로 그 몇 안 되는 숫자를 실시간으로 확인하겠다고, IP 예외 라우팅을 짜고, 전용 비밀번호 인증을 분리하고, 모바일 뷰어 레이아웃까지 깎고 있다.
그래도 최소한 기본 컨셉은 따라가야하지 않겠나 싶어서 이렇게 됐다.
문제는 지금 위에 언급한 모든 사항을 적용시켜서 코드 수정을 했는데도 아직 제대로 작동을 하지 않는 다는 점이다.
아마도 내가 짜놨지만 지금은 내가 인지하지 못한 무언가가 또 코드를 이상하게 튕겨내고 있는게 아닐까 예상하고 있다.
오늘은 너무 피곤하니 내일이나 모레쯤 마저 수정하기로 하고 어드민은 이전 버전으로 살포시 롤백하고 쉬기로 한다.

소셜 네트워크로 글 공유하기

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...

정말 삭제하시겠습니까?

정말 이 댓글을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.

인기 태그

#1인개발#API Token#AdSense#CFA#CLI#CSV#Cloudflare#Cloudflare D1#Cloudflare Pages#CloudflareAnalytics
1 / 12

인기 포스트

  • CLI 환경에서 Cloudflare Wrangler 로그인 및 API 토큰 설정 상세 설명서
    2026-07-06 PM7:49:33 (GMT+9)
  • [개발 일지] 2026-07-08
    2026-07-08 PM11:00:14 (GMT+9)
  • 웹 폰트 설정법 및 로딩 성능 최적화 매뉴얼
    2026-07-07 PM3:36:18 (GMT+9)

인기 태그

#1인개발#API Token#AdSense#CFA#CLI#CSV#Cloudflare#Cloudflare D1#Cloudflare Pages#CloudflareAnalytics
1 / 12

후원

Github

카테고리 목록

  • 개발노트 (9)
  • 개발로그 (12)
  • 관리자 가이드 (5)
  • 사용자 가이드 (3)
  • 상세 메뉴얼 (4)
  • 통합 가이드 (3)

최신 포스트

  • 개발 노트: 밖에서 스마트폰으로 블로그 방문자나 좀 보려다가 생긴 일
    2026-11-05 AM6:57:47 (GMT+9)
  • 개발 노트: 애드센스 API 대신 Cloudflare Web Analytics를 메인으로 박은 이유
    2026-11-02 AM9:13:35 (GMT+9)
  • SKBE v1.0.1.3 업데이트: Cloudflare Web Analytics 대시보드 구축, 폐쇄형 동기화 Worker 및 멀티 계정 배포 파이프라인 해설
    2026-10-31 PM6:52:37 (GMT+9)

인기 포스트

  • CLI 환경에서 Cloudflare Wrangler 로그인 및 API 토큰 설정 상세 설명서
    2026-07-06 PM7:49:33 (GMT+9)
  • [개발 일지] 2026-07-08
    2026-07-08 PM11:00:14 (GMT+9)
  • 웹 폰트 설정법 및 로딩 성능 최적화 매뉴얼
    2026-07-07 PM3:36:18 (GMT+9)

프로젝트 후원하기 ☕

Github Link

소개개인정보 처리방침문의이용약관

© 2026 스벨트킷 블로그 엔진 · Powered by Sveltekit Blog Engine on Svelte 5

RSS SKBE v1.0.1.2 디자인 공유