ohje.uk 디자인 회고: 제안서에서 구현까지

#design #frontend

배경

개인 블로그의 디자인 방향을 정하기 위해 leerob.com, antfu.me, yceffort.kr, Vercel blog 등 기술 블로그들을 분석하고, 2025 컬러/레이아웃 트렌드를 조사했다. 8가지 축(컬러, 타이포, 스페이싱, 레이아웃, 장식, 모션, 정보 밀도, 컬러 모드)으로 분석한 결과를 바탕으로 3가지 컨셉을 각각 브랜치에서 구현해봤다.


3가지 컨셉

A: Readable

레퍼런스: leerob.com — 극한 미니멀, 텍스트 중심

Light

Readable 랜딩 라이트

Dark

Readable 랜딩 다크
  • 순수 흑백 (neutral 계열), 액센트 컬러 없음
  • max-w-xl 좁은 폭, 장식 완전 제거, 모든 것이 텍스트 링크
  • 여백이 곧 디자인. 가장 글에 집중되지만 확장성이 제한적

B: Structured

레퍼런스: yceffort.kr, Vercel blog — 카드 그리드, 카테고리 필터

Light

Structured 랜딩 라이트

Dark

Structured 랜딩 다크
  • slate 계열 + blue 액센트, max-w-3xl 넓은 폭
  • 카드 그리드, sticky 헤더 + backdrop-blur, 태그 pill 필터링
  • 정보 밀도와 확장성이 가장 높지만 구현 복잡도도 높음

C: Warm

레퍼런스: 2025 Pantone (Mocha Mousse), joshwcomeau.com

Light

Warm 랜딩 라이트

Dark

Warm 랜딩 다크
  • stone 계열 + orange 액센트, max-w-2xl 중간 폭
  • 따뜻한 크림 배경, 연도별 그룹 리스트, font-light + bold 조합
  • A와 B 사이의 균형. 차가운 기술 블로그와 확실한 차별화

Warm을 선택한 이유

세 컨셉 모두 구현해보고 직접 비교한 결과, Warm(C)을 선택했다.

Readable은 너무 비었다. 글이 많지 않은 초기 블로그에서 극한 미니멀은 “미완성”으로 보일 수 있다. 포트폴리오나 프로젝트 페이지를 추가할 때 확장하기도 어렵다.

Structured는 과했다. 카드 그리드, 필터링, 멀티 컬럼 푸터까지 — 콘텐츠가 충분히 쌓이기 전에 이 정도 구조는 빈 서랍장을 보는 느낌이다. 구현 복잡도도 높아 유지보수 부담이 크다.

Warm은 딱 적당했다. 오렌지 액센트가 개성을 주면서도 과하지 않고, 리스트 기반 구조라 콘텐츠가 적을 때도 자연스럽다. 연도별 그룹이 시간 흐름을 보여주고, 나중에 카테고리나 시리즈로 확장하기에도 같은 패턴을 재활용할 수 있다.


제안서 vs 실제 구현: 달라진 것들

구현 과정에서 제안서의 계획과 꽤 달라진 부분이 있다. 실제로 써보면서 조정한 결과들이다.

헤더: “얇은 보더” → Direction-aware sticky

제안서에서는 Warm 헤더를 “얇은 하단 보더” 정도로 그렸다. 하지만 긴 글을 읽을 때 네비게이션 접근성이 떨어졌다.

결국 Structured 컨셉의 sticky 헤더를 가져왔는데, 단순 sticky가 아니라 스크롤 방향을 감지하는 패턴을 적용했다. 아래로 스크롤하면 헤더가 숨고, 위로 스크롤하면 다시 나타난다. Medium이나 dev.to에서 쓰는 방식이다. backdrop-blur도 함께 적용해서 콘텐츠 위에 자연스럽게 떠 있는 느낌을 줬다.

TOC: “인라인 목차” → 사이드바 sticky

제안서에서는 “글 상단 인라인 목차가 본문 흐름에 맞다”고 했는데, 긴 포스트에서는 현재 위치를 놓치기 쉬웠다. xl 이상 화면에서 사이드바 sticky TOC를 추가했다. h2-h3 수준 헤딩을 보여주고, 스크롤에 따라 현재 위치가 표시된다.

처음에는 max-hoverflow-y-auto로 스크롤 영역을 만들었는데, 답답한 느낌이라 제거하고 그냥 sticky로만 두었다. 목차가 길어도 자연스럽게 보인다.

Scroll-to-top: “선택적” → 플랫폼별 분리

제안서에서는 scroll-to-top을 “선택적”이라고 가볍게 넘겼는데, 실제로 긴 글에서는 필수였다.

문제는 모바일이었다. floating 버튼이 모바일에서 본문 위에 겹치면서 실수로 탭하는 일이 잦았다. 여러 UX 패턴을 리서치한 끝에 플랫폼별 분리 전략을 택했다:

  • 데스크톱: 우하단 floating 버튼 (400px 이상 스크롤 시 표시)
  • 모바일: 푸터에 “맨 위로 ↑” 텍스트 링크

max-md:!hidden으로 모바일에서 floating 버튼을 완전히 숨기고, 푸터 링크가 그 역할을 대신한다.

다크 모드: 색상 튜닝

제안서에서는 다크 배경을 stone-900 (#1c1917)로 계획했다. 하지만 실제로 보니 stone 특유의 따뜻한 톤이 다크 모드에서는 탁하게 느껴졌다. 결국 #1a1a1a로 변경해서 더 중립적인 다크 배경을 만들었다.

본문 텍스트도 stone-200에서 stone-100으로 올렸다. 회색 끼가 가독성을 떨어뜨렸기 때문이다.

포스트 목록: description 추가

제안서에서는 “제목 + 모노 날짜”만 보여주는 미니멀 리스트였다. 하지만 제목만으로는 글 내용을 예측하기 어려웠다. line-clamp-2로 설명 2줄을 추가했다. 날짜 옆 제목, 그 아래 설명이라는 구조가 자연스럽게 잡혔다.

도메인: 이중 도메인 → 단일 도메인

원래 ohje.uk (메인)과 blog.ohje.uk (블로그)를 분리할 계획이었지만, 실제로 메인 페이지에 별도 콘텐츠가 없었다. ohje.uk 하나로 통합하고, 기존 blog.ohje.uk 요청은 301 리다이렉트로 처리했다.

기타 세부 조정

  • scrollbar-gutter: stable: 페이지 간 이동 시 스크롤바 유무에 따른 레이아웃 시프트 방지
  • View Transitions: Astro 6의 ClientRouter를 사용해 200ms crossfade 적용. 다크 모드 상태가 페이지 전환 시 리셋되는 문제를 astro:before-swap 이벤트로 해결
  • max-width 통일: 헤더, 본문, 푸터 모두 max-w-2xl로 맞춰서 페이지 간 콘텐츠 정렬 불일치 제거

최종 디자인 시스템

구현이 완료된 현재 상태를 정리하면:

제안서
실제 구현
변경 이유
컬러
stone + orange-700/400
동일
다크 배경
stone-900 (#1c1917)
#1a1a1a
stone 톤이 다크에서 탁함
다크 텍스트
stone-200
stone-100
가독성 개선
헤더
얇은 보더
Direction-aware sticky + blur
긴 글에서 네비게이션 필요
TOC
인라인 (글 상단)
사이드바 sticky (xl+)
긴 글에서 현재 위치 파악
Scroll-to-top
선택적
Desktop: floating / Mobile: 푸터 링크
모바일 오탭 문제 해결
포스트 목록
제목 + 날짜
제목 + 날짜 + description
콘텐츠 예측 가능성
도메인
ohje.uk + blog.ohje.uk
ohje.uk 단일
메인 콘텐츠 부재

배운 것

제안서는 출발점이지 설계도가 아니다. 3가지 컨셉을 비교하는 건 방향을 잡는 데 도움이 됐지만, 실제 구현에서는 컨셉 간 경계가 흐려졌다. Warm을 선택했지만 헤더는 Structured에서 가져왔고, 스크롤 UX는 어떤 컨셉에서도 예상하지 못한 형태가 됐다.

써봐야 안다. 다크 모드 색상, 포스트 목록 구성, scroll-to-top 위치 — 스크린샷으로는 괜찮아 보였지만 실제로 쓰면서 전부 조정했다. 특히 모바일에서 직접 탭해보기 전까지 floating 버튼의 문제를 몰랐다.

과하지 않게 시작하는 게 맞았다. Structured의 카드 그리드와 필터링이 멋져 보였지만, 포스트가 적은 상태에서는 오히려 초라했을 것이다. 콘텐츠가 채워지면 그때 구조를 확장해도 늦지 않다.