Skip to content
오늘을살자
Go back

Astro Markdown 코드블록에 파일명과 복사 버튼을 붙이면 글이 읽기 쉬워진다

Edit page

기술 블로그에서 코드블록은 본문만큼 중요하다.

하지만 그냥 코드만 던져두면 독자는 금방 헷갈린다.

이 코드는 어느 파일에 넣는 거지?
전체 교체인가, 일부 수정인가?
복사해서 바로 써도 되나?

그래서 Astro 블로그에서는 코드블록에 파일명과 복사 버튼을 붙이는 것만으로도 읽기 경험이 꽤 좋아진다.

Astro Markdown 코드블록 복사 버튼 삽화

파일명이 있으면 맥락이 보인다

예를 들어 같은 CSS 코드라도 위치가 중요하다.

@utility app-layout {
  @apply mx-auto w-full max-w-6xl px-4 sm:px-6;
}

이 코드만 보면 어디에 넣어야 하는지 알기 어렵다.

하지만 파일명이 붙으면 훨씬 분명해진다.

@utility app-layout {
  @apply mx-auto w-full max-w-6xl px-4 sm:px-6;
}

기술 글은 코드 자체보다 코드의 위치가 더 중요할 때가 많다.

복사 버튼은 반복 작업을 줄인다

독자는 코드블록을 직접 드래그해서 복사할 수도 있다.

하지만 코드가 길거나 모바일에서 읽을 때는 불편하다.

복사 버튼이 있으면 이런 작은 마찰이 줄어든다.

읽기
→ 복사
→ 붙여넣기
→ 실행

튜토리얼형 글에서는 이 흐름이 중요하다.

Astro에서는 렌더링 뒤에 붙이는 방식이 단순하다

Markdown이 HTML로 렌더링된 뒤,
pre 요소를 찾아 복사 버튼을 붙이는 방식이 가장 단순하다.

흐름은 이렇다.

page load
→ pre 요소 찾기
→ wrapper 생성
→ copy button 추가
→ clipboard API 연결

Astro의 페이지 전환을 쓰고 있다면 astro:page-load 이벤트도 같이 고려해야 한다.

document.addEventListener("astro:page-load", attachCopyButtons);

페이지 전환 후에도 새 글의 코드블록에 버튼이 붙어야 하기 때문이다.

중복 부착을 막아야 한다

페이지 전환이나 재실행이 들어가면 같은 코드블록에 버튼이 여러 개 붙을 수 있다.

그래서 wrapper가 이미 있는지 확인하는 게 좋다.

if (codeBlock.closest(".code-wrapper")) return;

이 한 줄이 없으면 버튼이 중복으로 생기고,
레이아웃도 어색해진다.

파일명은 transformer로 처리하는 편이 깔끔하다

코드블록 파일명은 markdown fence의 meta 정보를 활용할 수 있다.

예를 들어:

```ts filename="src/content.config.ts"
export const collections = { blog };
```

이 정보를 rehype나 shiki transformer에서 읽어
렌더링 결과에 표시하면 된다.

장점은 본문 작성자가 자연스럽게 파일명을 남길 수 있다는 점이다.

버튼 위치는 코드와 겹치면 안 된다

복사 버튼은 작아 보여도 레이아웃에 영향을 준다.

특히 파일명 영역과 복사 버튼이 겹치면 지저분하다.

체크할 것:

버튼이 코드 내용을 가리면 기능은 있어도 사용성은 나빠진다.

복사 실패는 조용히 처리해도 된다

대부분의 브라우저에서는 navigator.clipboard.writeText()가 잘 동작한다.

하지만 보안 컨텍스트나 권한에 따라 실패할 수 있다.

블로그에서는 실패를 크게 터뜨리기보다,
버튼 상태만 유지하는 정도로도 충분하다.

try {
  await navigator.clipboard.writeText(text);
  button.innerText = "Copied";
} catch {
  button.innerText = "Copy";
}

오늘 포인트

Astro Markdown 코드블록 개선은 화려한 기능이 아니다.

하지만 기술 블로그에서는 효과가 크다.

작은 편의 기능이지만 글의 완성도를 꽤 올려준다.

한 줄 요약

Astro 기술 블로그의 코드블록에는 파일명과 복사 버튼을 붙여야 독자가 코드 위치와 사용 흐름을 더 빨리 이해한다.


Edit page
Share this post on:

Previous Post
Astro RSS와 sitemap 체크리스트, 글을 써도 검색엔진이 못 찾으면 소용없다
Next Post
Astro Tailwind 레이아웃에서 오른쪽 여백이 남을 때 확인할 것