바로가기
실험실

hynu.blog

보고 읽은 걸 요약해 쌓아 두는 개인 기록 블로그

화면


01
홈
01홈

최근 글이 카테고리·태그와 함께 한 줄씩 깔립니다

글 상세
02글 상세

커버 위에 제목이 얹히고 목차가 본문을 따라 붙습니다

아카이브
03아카이브

쌓인 글 전부를 카테고리로 좁혀 가며 봅니다

실험실
04실험실

만든 프로젝트를 화면 표본처럼 네 장씩 늘어놓습니다

프로젝트 상세
05프로젝트 상세

원고 한 장이 섹션별 전용 화면으로 펼쳐집니다

글 관리
06글 관리

작성중인 글을 위에 두고 상태별로 훑습니다

에디터
07에디터

왼쪽에 마크다운, 오른쪽에 발행 화면과 똑같은 미리보기가 섭니다

실험실 관리
08실험실 관리

프로젝트를 발행 전에 감춰 두고 미리 봅니다

통계
09통계

어떤 글이 실제로 읽히는지 글별로 셉니다

기술 스택


02
Next.jsReactTypeScriptTailwind CSSSupabasePostgreSQLVercelGitHub Actions

데이터와 API


03
Supabase

글·프로젝트·조회수를 담고, 올린 이미지와 영상을 보관한다

YouTube

영상 글을 쓸 때 소제목마다 그 장면을 캡처해 본문에 넣는다

Vercel Analytics

어디서 들어와 어떤 기기로 보는지, 화면이 얼마나 빨리 뜨는지 본다

인터뷰


04

어떤 서비스인가요?

제가 보고 읽은 걸 요약해 쌓아 두는 개인 기록 블로그예요. 읽는 화면부터 어드민·에디터·통계까지 필요한 걸 직접 만들어 붙였습니다

어떤 계기로 만들게 됐나요?

처음엔 그냥 기록용 블로그가 갖고 싶었어요. 그런데 기존 블로그 플랫폼은 커뮤니티 기능이 대부분이라 저한테는 필요가 없더라고요. 어차피 안 쓸 기능에 화면을 맞추느니, 원하는 걸 원하는 대로 붙일 수 있는 사이트를 직접 세우는 게 낫겠다 싶었습니다

주로 어떤 분이 쓰나요?

쓰는 쪽은 저 혼자고, 읽는 쪽은 검색으로 들어오는 사람들이에요

만들면서 배운 게 있다면요?

글의 결을 잡아 주는 건 코드가 아니라 규약 문서였어요. 제목·문단·인용을 어떻게 쓸지 `POSTING.md` 한 장에 못 박아 두니, 편마다 흔들리던 결이 잡혔습니다. 지금도 코드보다 이 문서를 더 자주 고쳐요

지금도 쓰고 계신가요?

네, 계속 쓰고 계속 고치는 중입니다

구상


05
디자인 시안 아홉 장을 실제로 도는 화면으로 옮긴다
글을 DB에 두고 어드민에서 쓰고 고친다
영상·문서에서 인용할 자료와 장면을 모아 오는 일을 자동화한다
RSS·사이트맵·OG 이미지가 알아서 나온다
검색과 방문자 통계를 붙인다
글을 영어로 자동 번역해 /en 으로도 낸다

유저 플로우


06
  1. 01
    읽다가 링크를 붙여 넣는다

    영상이든 글이든, 남겨두고 싶은 게 보이면 주소만 복사해 둡니다.

    폰이나 태블릿어드민 화면노트북 앞바로 에디터
  2. 02
    인용할 자료를 뽑는다

    영상이면 소제목마다 그 시점의 장면을, 문서면 인용할 대목을 미리 챙겨 둡니다.

  3. 03
    에디터에서 쓴다

    왼쪽에서 마크다운을 고치면 오른쪽 미리보기가 발행 화면 그대로 따라옵니다.

    한 번에 끝난다제목·태그만 다듬는다더 손볼 게 남았다작성중으로 두고 다시 온다
  4. 04
    발행한다

    카테고리와 작성일을 정하고 내보냅니다.

구조


07
보내는 것되돌아오는 것

개발 과정


08
  1. 01

    화면부터 아홉 장 만들었어요

    디자인 시안을 아홉 장 먼저 잡아 놓고, 그걸 Next.js로 그대로 옮기는 것부터 했습니다. 데이터는 전부 파일에 박아 둔 가짜였어요. 어차피 나중에 갈아 끼울 거라, 초반엔 화면이 어떻게 생겼는지만 확정하고 싶었거든요.

    붙인 것
    Next.jsTailwind CSS
  2. 02

    가짜 데이터를 걷어내고 DB를 뒀어요

    글을 하나 고치겠다고 배포를 다시 하는 게 말이 안 됐어요. 파일 기반으로 갈까 하다가, 결국 폰에서도 글을 쓰고 싶어질 게 뻔해서 서버에 상태를 두기로 했습니다. 여기서부터 어드민이 생겼고, 마크다운 본문·이미지 업로드·카테고리 트리가 차례로 붙었어요.

    붙인 것
    SupabaseVercel
  3. 03

    오래 걸리는 작업을 화면에서 떼어냈어요

    글에 넣을 자료를 모으는 일 — 영상에서 장면을 뽑고, 이미지를 받아 다시 올리고 — 이 한 번에 몇 분씩 걸렸어요. 처음엔 어드민이 요청을 받은 자리에서 그대로 처리하게 했는데, 그동안 화면이 멈춰 있었습니다. 응답 시간 제한에도 걸렸고요.

    그래서 어드민은 작업 줄에 한 칸 적어 두기만 하고, 제 컴퓨터에서 도는 워커가 그 줄을 가져가 처리하도록 나눴습니다. 폰에서는 던져 놓고 닫아도 되고, 워커는 밖으로 나가는 접속만 쓰니 포트를 열 일도 없었어요. 작업 상태는 같은 테이블에 적히니, 어드민은 목록에서 진행중 표시만 보면 됐습니다.

  4. 04

    글이 쌓이니 읽는 쪽 장치가 필요했어요

    스무 편쯤 넘어가니까 제가 쓴 글을 제가 못 찾겠더라고요. 검색·태그·시리즈·연관 글 추천을 붙이고, 글별 조회수도 직접 세기 시작했습니다. 이 무렵 영어 자동 번역과 /en 라우팅도 만들어 뒀는데, 관리할 게 두 배로 늘어서 노출만 걷어내고 배선은 남겨 뒀어요.

    대신 회원가입도 좋아요도 댓글도 안 붙였습니다. 읽고 가는 자리라 거기까지는 안 가기로 했어요. 기존 블로그 플랫폼을 안 쓴 이유가 그 기능들이었으니까요.

  5. 05

    글쓰기 규약을 문서 한 장으로 못 박았어요

    편마다 결이 달랐어요. 어떤 편은 개조식이고 어떤 편은 번역투고, 소제목을 어디서 끊는지도 그때그때 달랐습니다. 제목·문단 길이·인용 표기·이미지 배치를 그때그때 감으로 정하니 그랬던 거였어요. 그래서 규약을 통째로 POSTING.md 한 장으로 빼 두고, 글을 쓸 때마다 그걸 기준으로 삼았습니다. 적재 스크립트도 같은 문서를 근거로 슬러그·메타를 검사하게 했어요. 지금은 코드보다 이 문서를 훨씬 자주 고칩니다.

  6. 06

    실험실을 포트폴리오 판으로 갈아엎었어요

    원래 실험실은 프로젝트 카드 몇 장이 전부였어요. 다른 레포에서 만든 것들을 여기 모으려니 매번 상세 화면을 새로 짜게 되더라고요. 그래서 원고 한 장의 ## 제목이 곧 렌더러가 되게 규약을 정했습니다. ## 화면이면 폰 목업 갤러리, ## 구조면 다이어그램 밴드, ## 시행착오면 스크롤 따라 펼쳐지는 부검 카드로요. 원고를 넘기면 화면이 알아서 나오니, 프로젝트를 하나 더 얹는 게 마크다운 한 장 쓰는 일이 됐어요.

  7. 07

    마지막에 검색 노출과 계측을 붙였어요

    만들어 두고 아무도 안 들어오면 의미가 없으니, 사이트맵·구조화 데이터·canonical을 정리하고 서치콘솔에 물렸습니다. 태그 표기가 대소문자·공백 때문에 갈라져 있던 것도 이때 하나로 합치고 옛 주소는 301로 넘겼어요.

    붙인 것
    VercelGitHub Actions

시행착오


09
증상다이어그램 말고 단계 카드나 수치 카드 같은 정보 그림을 본문에 넣고 싶었는데, 마크다운으로는 표현할 방법이 없었어요.
시도카드를 HTML/CSS로 만들어 두고, 글을 저장할 때 Playwright로 그 화면을 열어 PNG로 구운 뒤 이미지 주소로 바꿔치기했습니다. 처음엔 잘 돌았어요. 그런데 확대하면 글씨가 흐렸고, 다크 모드로 바꿔도 카드만 밝은 채로 남았고, 폰에서는 넓은 카드가 그대로 줄어들어 읽히지 않았습니다. 카드 스타일을 한 줄 고칠 때마다 이미 발행된 글의 그림을 전부 다시 구워야 하는 것도 문제였고요.
결론이미지로 만들 이유가 애초에 없었어요. 본문 렌더러가 이미 mermaid 블록을 컴포넌트로 그리고 있었으니, 카드도 같은 자리에서 React 컴포넌트로 그리면 됐습니다. 굽는 파이프라인과 Playwright 의존성, 렌더 전용 라우트를 전부 걷어냈어요. 지금은 카드 스타일을 고치면 옛날 글까지 같이 바뀝니다.
글 상세 맨 위에 커버 사진을 깔고 그 위에 제목을 얹었는데, 사진에 따라 제목이 아예 안 읽혔어요.
제목을 그대로 주소로 만들었더니, 어떤 글은 열리고 어떤 글은 404가 났어요. 어드민 목록에는 멀쩡히 있는데요.
영상 글을 쓸 때 소제목마다 그 시점의 장면을 넣으려고 했는데, 몇 장 뽑다 보면 다운로드가 멈췄어요.