Skip to content

refactor(content): portfolio 페이지 pages 컬렉션으로 이전#56

Merged
CaesiumY merged 4 commits into
mainfrom
refactor/portfolio-pages-collection
May 20, 2026
Merged

refactor(content): portfolio 페이지 pages 컬렉션으로 이전#56
CaesiumY merged 4 commits into
mainfrom
refactor/portfolio-pages-collection

Conversation

@CaesiumY
Copy link
Copy Markdown
Owner

Description

portfolio 페이지를 about과 동일한 pages 콘텐츠 컬렉션 구조로 이전하고, 편집 도구 설정 디렉토리를 .gitignore에 추가합니다.

배경about 페이지는 커밋 52588d2에서 옛 AstroPaper 파일 기반 라우트(src/pages/about.md)에서 pages 콘텐츠 컬렉션 방식으로 리팩토링됐으나 portfolio는 누락돼, 두 정적 페이지가 서로 다른 패턴으로 렌더링되는 불일치 상태였습니다. 이를 일원화합니다.

변경 내용

refactor(content) — portfolio 페이지 이전

  • src/pages/portfolio.mdcontents/pages/portfolio.md (git mv, 99% rename 추적으로 히스토리 보존)
  • frontmatter layout: 줄 제거 (컬렉션 방식에선 불필요)
  • src/pages/portfolio.astro 신규 생성 — about.astro와 동일한 getEntry("pages", …) 패턴
  • PortfolioLayout은 변경 없이 재사용 (Props가 pages 스키마와 일치)

chore — gitignore

  • contents/를 Obsidian vault로 편집할 때 생성되는 .obsidian/, .claudian/ 디렉토리 추적 제외

Types of changes

  • Bug Fix (non-breaking change which fixes an issue)
  • New Feature (non-breaking change which adds functionality)
  • Documentation Update (if none of the other choices apply)
  • Others — 리팩토링 / 저장소 관리

Checklist

  • I have added the necessary documentation (if appropriate) — 문서 변경 없음
  • Breaking Change — /portfolio URL·noindex 동작 모두 유지, 외부 동작 변화 없음

Further comments

pnpm build 프로덕션 빌드 후 dist/ 산출물로 검증 완료:

  • 빌드 통과 (164 페이지) — /portfolio 라우트 충돌·getEntry 실패 없음
  • /portfolio URL 불변, <meta name="robots" content="noindex, nofollow"> 보존
  • 본문(케이스 스터디)·<section id="portfolio">·PDF 다운로드 버튼 정상 렌더
  • sitemap에서 /portfolio 제외 유지, /about 회귀 없음

리뷰어 참고Layout.astro의 Person JSON-LD url/about로 하드코딩돼 /portfolio에도 적용되지만, 이는 이전 전부터 있던 동작으로 이번 변경의 회귀가 아닙니다 (portfolionoindex라 영향 미미). 별도 작업으로 분리를 권장합니다.

Related Issue

N/A

CaesiumY added 2 commits May 21, 2026 02:47
about과 동일하게 portfolio도 옛 파일 기반 라우트에서 pages 콘텐츠 컬렉션
방식으로 전환. 마크다운 원본을 contents/pages/로 모으고 라우트는 about.astro와
같은 getEntry 패턴 사용. /portfolio URL과 noindex 동작은 그대로 유지.
contents/를 Obsidian vault로 편집할 때 생성되는 .obsidian/, .claudian/
디렉토리를 .gitignore에 추가.
Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request updates the .gitignore to exclude editor-specific directories and refactors the portfolio page by moving layout handling from the Markdown frontmatter to a new Astro page that fetches and renders the content. A review comment suggests improving error handling for missing content by returning a 404 response instead of throwing an error, which would provide better flexibility for potential future server-side rendering.

Comment thread src/pages/portfolio.astro
@claude
Copy link
Copy Markdown

claude Bot commented May 20, 2026

Code Review

Overview

portfolio 페이지를 about과 동일한 pages 콘텐츠 컬렉션 패턴으로 이전하는 깔끔한 리팩토링입니다. 변경 범위가 명확하고, 두 정적 페이지 간의 렌더링 불일치를 해소합니다.


Code Quality ✅

src/pages/portfolio.astroabout.astro와 완벽히 동일한 패턴을 따릅니다.

  • 에러 핸들링 메시지가 구체적이어서 디버깅에 유용합니다.
  • PortfolioLayoutProps 인터페이스(title, description?, robots?)가 pages 컬렉션 스키마와 일치하므로 타입 안전성에 문제가 없습니다.
  • git mv를 활용해 99% rename 유사도로 파일 히스토리가 보존된 점이 좋습니다.

Suggestions

.gitignore.claudian/ 항목 확인 권장

.obsidian/은 잘 알려진 패턴이지만 .claudian/은 덜 일반적입니다. 실제로 생성되는 디렉토리 이름이 맞는지 확인 후 남겨두면 충분합니다. 팀원에게 이 도구가 낯설 수 있으므로, 주석에 간단한 부연("Claude for Obsidian 플러그인 설정" 등)을 달면 더 명확할 것 같습니다.

PR Description에서 언급된 기존 이슈 — Layout.astro Person JSON-LD url 하드코딩

PR description에서 잘 짚어두셨지만, portfolionoindex라 영향이 작더라도 별도 이슈/작업으로 등록해두면 추적하기 좋을 것 같습니다.

Potential Issues

없음. 빌드 검증(164페이지, /portfolio URL·noindex 보존)이 PR description에 포함되어 CLAUDE.md의 빌드 검증 가이드라인을 잘 따르고 있습니다.

Performance / Security

변경 사항이 없습니다 — 기존 SSG 파이프라인을 그대로 활용합니다.


결론: 변경이 최소화되어 있고, 기존 패턴을 정확히 따르며, 빌드 검증까지 완료된 깔끔한 리팩토링입니다. .claudian/ 항목만 확인되면 바로 머지 가능합니다. ✅

코드 리뷰 반영 — .claudian 이 Obsidian용 Claude 플러그인 설정임을 주석에 명시.
@claude
Copy link
Copy Markdown

claude Bot commented May 20, 2026

Code Review

Overview

about 페이지에 이미 적용된 pages 컬렉션 패턴을 portfolio 페이지에도 일관되게 적용하는 깔끔한 리팩토링입니다. 변경 범위가 최소화되어 있고, PR 설명이 배경·검증까지 충실히 담겨 있습니다.


Code Quality ✅

  • 패턴 일관성: portfolio.astroabout.astro와 구조적으로 동일합니다 (getEntry → null 체크 → render → Layout 주입). 두 정적 페이지가 이제 동일한 방식으로 렌더링됩니다.
  • 스키마 호환성: content.config.tspages 스키마(title, description?, robots?)가 이전된 frontmatter와 정확히 일치합니다. 타입 안전성 문제 없음.
  • frontmatter layout: 제거: 컬렉션 방식에서는 불필요한 필드이므로 올바른 제거입니다.
  • 에러 핸들링: 엔트리 미발견 시 명시적 throw로 조용한 실패를 방지하는 것은 좋은 방어적 코딩입니다.

.gitignore ✅

  • .obsidian/ 추가는 표준적인 제외 항목입니다.
  • .claudian/은 Obsidian용 Claude 플러그인 설정으로, 주석으로 맥락을 명시해 가독성을 높인 점이 좋습니다.

Suggestions (Minor)

  1. getEntry 선택: 현재 단일 엔트리를 직접 참조하는 방식이므로 getEntry 사용이 적합합니다. 향후 pages 컬렉션이 동적 라우팅으로 확장된다면 getStaticPaths + getCollection 패턴으로 이전할 시점을 검토하면 좋겠지만, 지금 두 페이지 규모에서는 현재 방식이 더 명확합니다.

  2. 후속 작업 메모 (PR 설명에서 이미 언급하셨지만): Layout.astro의 Person JSON-LD url/about으로 하드코딩된 부분은 별도 이슈로 추적하면 좋겠습니다. portfolionoindex라 실질적 영향은 없지만, 스키마 정합성 측면에서 향후 개선 가치가 있습니다.


Potential Issues: None

  • /portfolio URL 유지, noindex 보존, 빌드 통과 — PR 설명의 검증 항목이 모두 확인됩니다.
  • 회귀 위험 없음: 파일 이동이 git mv로 이루어져 히스토리가 보존됩니다.

Verdict

변경이 최소화되어 있고 기존 패턴을 정확히 따르며 빌드 검증까지 완료된 깔끔한 리팩토링입니다. 승인 권장합니다.

@CaesiumY CaesiumY merged commit 20d64ad into main May 20, 2026
5 checks passed
@CaesiumY CaesiumY deleted the refactor/portfolio-pages-collection branch May 20, 2026 18:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant