이 프로젝트를 시작하며 단순하게 결과물을 띡 보여주는게 아니라 설계와 개발 과정 전체를 보여주는 것을 목표로 시작했다.
기존 포트폴리오는 "무엇을 만들었는가"에 집중 했다면, 나는 "어떻게 생각하고 만들었는가"를 보여주는 것 이다.
프로젝트는 다음과 같은 구조를 기반으로 설계했다.
app/ -> UI레이어
lib/ -> 데이터 처리 및 비즈니스 로직
content/ -> Markdown 기반 데이터
각 역할을 명확하게 분리하는 것이 목표 였다.
이 구조를 통해 유지보수성과 확장성을 확보하고자 했다.
Json 으로 데이터를 관리하는것과 Markdown 또는 MDX방식으로의 데이터 관리를 고민했다.
일단 백엔드서버 없이 운영하는 것을 생각했기에 따로 DB는 생각하지 않았고, 로컬 파일로 관리하는것이 시작이었다.
그중 굳이 Markdown을 선택한 이유는
title: "포트폴리오 프로젝트"
summary: "Next.js 기반 포트폴리오"
tags: ["Next.js, "TDD"]
status: "published"
createAt: "2026-03-26"
## 프로젝트 설명
이렇게 단순한 데이터 포맷이 아니라 콘텐츠를 포함한 데이터 구조라서 선택했다.
slug는 별도로 관리하지 않고, 파일명을 기반으로 생성하도록 설계했다.
my-first-project.md -> my-first-project
이렇게 한 이유는:
Markdown 파일
-> 파일 읽기
-> frontmatter 파싱
-> projectMapper
-> Project 객체
-> UI
이렇게 단계를 정했다.
데이터 타입은 두가지로 나누어서 설계 했다.
interface RawFrontmatter = {
//* 백그라운드에서 동작 하는 필드
thumbnail?: string;
size?: number[];
status?: "draft" | "published";
//* 상단에 있는 필드
title?: string;
tags?: string[];
createdAt?: string;
publishedAt?: string;
githubLink?: string;
velogLink?: string;
summary?: string;
}
interface Project = {
slug: string;
thumbnail: string;
size: number[];
status: "draft" | "published";
title: string;
tags: string[];
createdAt: string;
publishedAt: string;
githubLink: string;
velogLink: string;
summary: string;
contents: string;
}
불완전한 RawFrontmatter 와 정제된 Project 이렇게 두가지 타입을 나눴다.
이렇게 나눈게 적절한가에 대한 고민은 답을 내지는 못했지만, 추후에 변경될 가능성이 있다.
현재까지의 구현은
즉 데이터 -> UI 직전 단계 까진 구현이 되어 있다.
원래는 전체를 TDD방식으로 구현 하면서 하나하나 Test 먼저 하려고 했지만, TDD로 진행하는 것이 처음 이기도 하고
사용법자체에 익숙하지 않아서 구현 먼저 진행하게 되었다.
중요 로직들은 TDD로 해놓은 것도 있지만, 방식 자체의 효용성에 대해 생각해 보게 된다.
아직 TDD 자체에 대한 이해도가 너무 낮은것 같다...
강의만 듣다가 혼자 설계해서 서비스를 만드는게 처음이라 구현자체보다는 그 외에 설계등에 더 많은 시간을 할애하게 되고
막막한 기분이 든다.
서비스를 만드는건 구현보다 그 외에 더 많은 작업이 있는 것 같다.
그래도 모든걸 잘 마무리 하고 싶다.