2026년 10월 31일 토요일
미단재

Impeccable 스킬 적용한 게시글 상세 화면 구조 개선

시리즈 Claude Code 워크플로 현재 위치 17 / 17
  1. git worktree로 AI 세션 여러 개를 동시에 돌리기: 브랜치 충돌과 stash 공유 사고를 피하는 운영 규칙
  2. AI에게 기억을 심는 법: 메모리 파일로 삽질 교훈을 세션 간에 유지하기
  3. 스킬로 반복 작업 자동화: 이슈 착수부터 종료까지 한 명령으로 묶은 dev-issue 사례
  4. 코드 그래프(graft)로 AI의 탐색 비용 줄이기: grep/read 대비 토큰 절감 체감
  5. AI 코드 리뷰를 규칙으로 고정하기
  6. 제품 하나 만들 때마다 반복한 일: 이슈 → worktree → PR → 정리
  7. 같은 요청을 여러 저장소에 반복하는 법: 한 줄 프롬프트 + 기준 문서 하나
  8. 이슈 하나를 한 줄로 개발 끝내는 법 — 내가 가장 많이 쓰는 Claude Code 스킬들
  9. 블로그 글을 스무 번 부탁하고 나서, 스킬로 만들었다
  10. 마라톤 세션이 토큰을 먹는 구조: 로그로 찾고, /compact와 서브에이전트로 줄이기
  11. 1인 개발자가 클로드코드로 SaaS 11개 만든 기록
  12. 이슈 하나에 30~60분, 어디서 새고 있었나: skill-creator로 dev-issue 스킬을 만든 과정
  13. 도면을 AI에게 읽히려다 AI를 뺀 이야기
  14. 스쿼시 머지 vs 머지 커밋: 1인 개발자의 PR 전략
  15. "난이도가 높아서 오래 걸리는 거야?" — AIFid 개발 기록으로 따져 본 소요 시간
  16. 엑셀 간편장부를 웹 ERP로 옮기기 (AICassa)
  17. Impeccable 스킬 적용한 게시글 상세 화면 구조 개선

시리즈 소개 보기

시리즈 블로그 기능 추가 현재 위치 11 / 11
  1. 블로그 기능을 하나씩 직접 만들기 ① 시리즈 내비게이션
  2. 블로그 글 목차(TOC)를 JS 70줄로 직접 만들기
  3. 블로그 기능을 하나씩 직접 만들기 3 — CodeIgniter 4로 RSS 피드 만들기
  4. 글마다 다른 OG 썸네일을 GD로 자동 생성하기 (CodeIgniter 4)
  5. 스캐너 IP 자동 차단: 404 3회 일배치와 즉시 차단, 오차단 방어까지
  6. 워드프레스 이관 후 깨진 이미지, 태그째 정리하기 (CodeIgniter 4)
  7. Groq로 글 태그·시리즈 자동 추천: 환각 필터와 호출 제한
  8. 테마 폴백으로 애드센스용 블로그 테마 4종과 자동광고 head 삽입 만들기
  9. 라이브러리 없이 마크다운 렌더러를 만들다 만난 XSS — 엔티티로 인코딩된 태그가 되살아났다
  10. 블로그 개선 10개를 이슈로 쪼개 병렬로 만들며 배운 것
  11. Impeccable 스킬 적용한 게시글 상세 화면 구조 개선

시리즈 소개 보기

요약: 게시글 상세 화면이 제목·공유 버튼·태그·메타가 한 카드에 뭉치고, 본문·이전/다음·관련 글·댓글이 전부 같은 카드 상자로 반복돼 위계가 없었다. Impeccable 스킬로 화면을 점검해 제목 28px 헤더 3분할, 카드 제거 후 구분선 구획, 아이콘 공유 버튼으로 바꿨다. 새 토큰 --fs-post-title 하나와 CSS 구획 클래스로 모든 테마에 공통 적용했다.

문제: 모든 것이 같은 상자였다

AICreo(CodeIgniter 4 기반 홈페이지 보일러플레이트)의 글 상세(board/view)는 Bootstrap card를 그대로 썼다. 제목 카드, 이전/다음 카드, 관련 글, 댓글 카드가 같은 회색 테두리 상자로 줄지어 있었다. 읽는 화면인데 눈이 어디서 시작해 어디로 가는지 알 수 없었다.

구체적으로 걸린 점은 이랬다.

  • 제목 크기가 메뉴와 같았다(--fs-board-title: var(--fs-nav)). 목록 화면 기준으로 맞춘 값이 상세에도 그대로 쓰였다.
  • 헤더에 제목, 분류 배지, 공유 버튼 4개(텍스트 포함), 태그, 작성자·날짜·조회가 한꺼번에 들어 있었다. 날짜는 2026-10-29 21:56:49 초 단위까지 나왔다.
  • 첨부 이미지와 파일이 각각
    로 나뉘어 본문 아래 구획이 불필요하게 많았다.
  • 댓글이 없을 때는 빈 목록만 보였고, 작성 폼 입력창이 -sm 크기로 작았다.

해결: 상자를 걷고 여백과 가는 선으로 구획

변경 전에는 카드 상자 5개가 반복되고, 변경 후에는 제목 블록·보조 영역·본문이 묶이고 하단은 구분선과 h2로 나뉜다.

방향은 하나였다. 카드 상자 대신 여백과 가는 구분선으로 구획한다. 마크업은

안에 세 덩어리를 두는 구조로 바꿨다.

 

 

1) 헤더 3분할

제목을 --fs-post-title: 1.75rem(모바일 22px)으로 키웠다. 상세 화면 제목은 읽기 화면의 최상위 위계라 메뉴보다 분명히 커야 한다고 봤다. 대신 목록·시리즈·태그 화면의 --fs-board-title은 그대로 둬서 영향 범위를 상세 화면으로 한정했다.

분류·작성자·날짜·조회는 배지와 아이콘을 걷어내고 가운데점으로 이은 한 줄로 만들었다. 가운데점은 마크업이 아니라 CSS로 넣는다.

.post-meta__item + .post-meta__item::before {
    content: "·";
    margin: 0 .5rem;
}

날짜는 2026.10.29 형태로 줄이고 으로 감쌌다. 태그는 헤더에서 본문 끝으로 옮겼다. 읽기 전에 볼 정보가 아니라 읽고 나서 이어 가는 정보이기 때문이다.

헤더가 글자 버튼과 태그가 섞인 한 상자에서, 제목과 메타 한 줄과 우측 공유 아이콘으로 정리됐다.

2) 공유 버튼은 아이콘만

공유 버튼 4개가 글자까지 달고 헤더 한 줄을 차지했다. 아이콘 원형 버튼(36px)으로 줄이고 메타 줄 오른쪽 끝(margin-left: auto)에 붙였다. 글자는 visually-hidden으로 남겨 스크린 리더 접근성은 유지하고 title로 툴팁을 줬다. 모바일(575px 이하)에서는 메타 아래 줄로 내려간다.

링크 복사 피드백도 바꿨다. 글자 대신 아이콘이 bi-link-45deg에서 bi-check2로 2초간 바뀐다. 숨겨 둔 라벨 텍스트도 '복사됨'으로 함께 바뀐다.

copyText(copyBtn.dataset.url).then(function () {
    label.textContent = '복사됨';
    icon.className = 'bi bi-check2';
    copyBtn.classList.add('is-copied');
    setTimeout(function () {
        label.textContent = '링크 복사';
        icon.className = 'bi bi-link-45deg';
        copyBtn.classList.remove('is-copied');
    }, 2000);
});

3) 본문 아래는 구분선 + h2

이전/다음, 이어 읽을 글, 댓글은 모두 .post-section 하나로 통일했다. 위쪽에 1px 구분선과 여백, 제목은 h2(.post-section__title)다.

.post-section {
    margin-top: 2.5rem;
    padding-top: 1.5rem;
    border-top: 1px solid var(--bs-border-color, #dee2e6);
}

첨부 이미지·파일은 본문 안 옅은 상자 하나(.post-files)로 합치고


를 없앴다. 좋아요 폼과 하단 광고, 수정/삭제 버튼도 본문 카드 밖으로 빼서 article 안에 순서대로 놓았다. 수정/삭제 버튼은 권한이 없으면 빈 줄이 생기던 것을 trim($postActions) !== '' 조건으로 막았다.

 

댓글은 비어 있을 때 "아직 댓글이 없습니다. 첫 댓글을 남겨 보세요."를 보여 주고, 작성 폼의 입력창을 -sm에서 기본 크기로, 비회원 필드 3개(이름·비밀번호·스팸 방지 계산)를 한 줄(col-sm-4)로 맞췄다.

남은 위험

  • 테마(ilgan, cobalt 등)가 .card를 따로 꾸몄다면 이 화면에서 그 스타일이 빠진다. 구획 CSS를 tokens.css에 두어 모든 테마 공통으로 적용했지만, 테마별 화면은 직접 확인하지 못했다.
  • 모바일 폭을 포함해 화면은 로컬에서 눈으로 확인하지 못한 상태로 PR을 올렸다. composer ci(626 테스트)만 통과했다.

배운 점

  • 목록 화면에서 정한 제목 크기 토큰을 상세 화면이 그대로 물려받고 있었다. 화면의 역할이 다르면 위계 토큰도 따로 둬야 한다. 목록용 토큰은 건드리지 않고 --fs-post-title만 추가해 영향 범위를 좁혔다.
  • 카드 상자는 구획을 쉽게 만들지만 모든 구획이 같은 무게가 된다. 구분선과 h2로 바꾸면 마크업 의미(article·nav·section)와 시각 위계가 함께 정리된다.
  • 아이콘만 남기는 변경은 visually-hidden 텍스트, title, 복사 성공 피드백까지 같이 챙겨야 접근성이 후퇴하지 않는다.

이어 읽을 글

댓글 0

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.