개발자 포트폴리오 사이트 만들기 2026
필수 섹션, 기술 스택, 배포, SEO, 면접관이 보는 포인트까지 포트폴리오 구축 가이드.
한 줄 요약: 2026년 개발자 포트폴리오의 기준이 바뀌었다. 면접관이 실제로 보는 것은 프로젝트 목록이 아니라 "이 사람이 실제로 문제를 해결할 수 있는가"다. Next.js + Vercel로 배포하고, GitHub 연동과 명확한 프로젝트 설명만 있어도 합격 라인의 포트폴리오는 만들 수 있다.
이 글은 포트폴리오 사이트를 처음 만드는 사람과 기존 것을 갱신하려는 사람 모두를 위해 쓰였다. 필수 섹션, 기술 스택 선택, SEO, 배포까지 실무 기준으로 정리했다. 디자인 감각보다 콘텐츠가 더 중요하다는 전제를 기억하며 읽어라.
면접관이 실제로 보는 것
10년 이상 개발자를 채용한 시니어 엔지니어와 테크 리드들이 공통적으로 말하는 포트폴리오 평가 기준은 아래 순서다.
- 실제로 동작하는 프로젝트가 있는가: 깃허브 스타 수나 프레임워크 목록이 아니라, 지금 URL을 열면 동작하는 서비스가 있는가.
- 문제 정의가 명확한가: "이 프로젝트를 왜 만들었는가, 어떤 문제를 해결하는가"가 1~2문장으로 설명되어 있는가.
- 기술적 결정에 이유가 있는가: "왜 이 스택을 선택했는가, 어떤 트레이드오프를 고려했는가"가 설명되어 있는가.
- 코드 품질: GitHub 링크에서 실제 코드를 보았을 때 일관성, 주석, 테스트 여부.
- 업데이트 이력: 마지막 커밋이 3년 전이라면 활발하게 개발하는 사람이라는 신호를 주기 어렵다.
면접관이 보지 않는 것
- 화려한 애니메이션과 커서 효과
- 사용 기술 목록의 길이 (React, Vue, Angular, Svelte... 전부 나열)
- 학교 과제 프로젝트 (설명 없이 링크만 있는 경우)
- 디자인 수준 (개발자 포트폴리오는 디자이너 포트폴리오가 아님)
필수 섹션 — 이것만 있으면 된다
포트폴리오 사이트에 있어야 할 섹션과 각 섹션에서 실제로 보여줘야 할 내용을 정리했다. 섹션이 많다고 좋은 포트폴리오가 되는 것이 아니다 — 각 섹션의 콘텐츠 밀도가 중요하다.
| 섹션 | 필수 내용 | 피해야 할 것 |
|---|---|---|
| 헤더/히어로 | 이름, 직무, 한 줄 포지셔닝 | "열정적인 개발자"같은 추상 문구 |
| 프로젝트 | 문제, 해결책, 기술, 라이브 링크 | 스크린샷만 있고 설명 없는 카드 |
| 기술 스택 | 실제로 써본 것만 자신 있게 | 로고 30개 나열 |
| 경험/이력 | 임팩트 중심 서술 (숫자 포함) | 업무 목록 나열 |
| 연락처 | 이메일, GitHub, LinkedIn | 폼만 있고 이메일 주소 없음 |
프로젝트 카드 작성법
각 프로젝트 카드는 아래 4가지 정보를 담아야 한다:
- 문제: 왜 만들었는가 (1문장)
- 해결: 어떻게 해결했는가 (2~3문장)
- 기술: 사용한 주요 기술 (3~5개)
- 링크: 라이브 데모 + GitHub 저장소
기술 스택 선택 — Next.js vs Gatsby vs Astro
포트폴리오 사이트에서 기술 스택 선택은 "내가 이 기술을 실제로 쓸 수 있다"를 보여주는 기회다. 동시에 과도한 복잡도는 오히려 마이너스다.
| 프레임워크 | 추천 대상 | 특징 |
|---|---|---|
| Next.js 15 | 풀스택 개발자, React 익숙한 사람 | 블로그 기능 추가 용이, Vercel 최적화 |
| Astro | 정적 콘텐츠 중심, 성능 최우선 | JS 최소화, Lighthouse 100점 달성 용이 |
| Remix | 웹 표준 중시, 풀스택 | Form 처리, 로더 패턴 보여주기 좋음 |
| 단순 HTML/CSS | 프론트엔드 기초 강조 목적 | 빠른 제작, SEO 기본 충족 |
결론: 백엔드나 풀스택 포지션을 노린다면 Next.js 15가 가장 무난하다. 프론트엔드 성능에 강점이 있음을 보여주고 싶다면 Astro가 효과적이다.
Next.js 포트폴리오 구조 — 실제 코드
아래는 실무에서 쓰는 Next.js 15 기반 포트폴리오의 디렉토리 구조와 핵심 코드다. MDX 기반 블로그 포스트 지원이 포함되어 있어 기술 블로그로 확장도 가능하다.
Next.js 15 포트폴리오 디렉토리 구조portfolio/ ├── app/ │ ├── layout.tsx # 루트 레이아웃 (메타데이터, 폰트) │ ├── page.tsx # 홈 (히어로 + 프로젝트 + 스킬) │ ├── projects/ │ │ └── [slug]/ │ │ └── page.tsx # 프로젝트 상세 (MDX) │ └── blog/ │ ├── page.tsx # 블로그 목록 │ └── [slug]/ │ └── page.tsx # 블로그 포스트 (MDX) ├── components/ │ ├── ProjectCard.tsx │ ├── SkillBadge.tsx │ └── ContactForm.tsx ├── content/ │ ├── projects/ # .mdx 파일 (프로젝트 설명) │ └── posts/ # .mdx 파일 (블로그 포스트) ├── lib/ │ └── mdx.ts # MDX 파싱 유틸리티 └── public/ └── og.png # OG 이미지
프로젝트 목록 페이지 핵심 코드 (app/page.tsx)// app/page.tsx import { getProjects } from '@/lib/mdx' import ProjectCard from '@/components/ProjectCard' export default async function Home() { const projects = await getProjects() return ( <main> <section className="hero"> <h1>이름</h1> <p>무엇을 만드는 개발자인지 한 줄로</p> <div className="links"> <a href="https://github.com/username">GitHub</a> <a href="/resume.pdf">이력서</a> </div> </section> <section className="projects"> <h2>프로젝트</h2> <div className="grid"> {projects.map((project) => ( <ProjectCard key={project.slug} project={project} /> ))} </div> </section> </main> ) } // MDX 프로젝트 파일 예시 (content/projects/my-saas.mdx) // --- // title: SaaS 프로젝트명 // description: 한 줄 요약 // tech: [Next.js, Supabase, Stripe] // demo: https://demo.example.com // github: https://github.com/username/repo // --- // // ## 문제 // 왜 이걸 만들었는지 // // ## 해결 방법 // 어떻게 구현했는지, 기술적 결정 이유
SEO 설정 — 검색에 노출되는 포트폴리오
포트폴리오 SEO의 목표는 "[이름] 개발자" 또는 "[기술스택] 개발자 포트폴리오" 검색에서 상위 노출이다. Next.js 15의 Metadata API를 사용하면 최소한의 코드로 핵심 SEO를 설정할 수 있다.
Next.js 15 메타데이터 + OG 이미지 설정// app/layout.tsx import type { Metadata } from 'next' export const metadata: Metadata = { title: { template: '%s | 이름 — 개발자', default: '이름 — 풀스택 개발자', }, description: 'Next.js, TypeScript, Supabase를 주로 사용하는 풀스택 개발자입니다. SaaS, 웹앱 프로젝트 경험이 있습니다.', openGraph: { type: 'website', locale: 'ko_KR', url: 'https://yourname.dev', siteName: '이름 포트폴리오', images: [{ url: '/og.png', width: 1200, height: 630 }], }, twitter: { card: 'summary_large_image', creator: '@twitter_handle', }, robots: { index: true, follow: true, }, }
Vercel 배포 — 10분 안에 완료
Next.js 포트폴리오를 Vercel에 배포하는 과정은 단순하다. GitHub 저장소 연결 후 Vercel이 자동으로 Next.js를 감지해 설정한다.
배포 체크리스트
- GitHub에 저장소 생성 후 코드 push
- vercel.com에서 "Import Project" 클릭
- GitHub 저장소 연결
- 환경변수 없으면 그대로 Deploy
- 커스텀 도메인 연결 (Vercel 대시보드 Domains 탭)
도메인 추천
| 형식 | 예시 | 연간 비용 |
|---|---|---|
| .dev | yourname.dev | $12~15 |
| .com | yourname.com | $12~15 |
| .io | yourname.io | $32~40 |
.dev 도메인은 HTTPS가 강제되고 개발자 포지션에 어울리면서 .com과 비용이 비슷해 최선의 선택이다.
피해야 할 실수 — 면접관이 이탈하는 포인트
수백 개의 포트폴리오를 검토한 면접관들이 공통적으로 언급하는 이탈 포인트다.
1. 라이브 데모가 없다: GitHub 링크만 있고 동작하는 URL이 없는 프로젝트는 면접관이 확인하지 않는다. 무료 플랜으로라도 배포하라.
2. "개발 중"인 프로젝트 표시: 완성되지 않은 프로젝트는 넣지 않는다. 차라리 완성도 높은 프로젝트 2개가 미완성 프로젝트 5개보다 낫다.
3. 연락처가 어렵다: 이메일 주소가 한 번 클릭으로 찾을 수 없으면 기회를 잃는다.
추가로 피해야 할 것들:
- 마지막 업데이트 날짜 표시: 2022년으로 적혀있으면 활동하지 않는 것처럼 보인다.
- 이력서와 포트폴리오 내용 불일치: 포트폴리오에 있는 프로젝트를 이력서에서 언급하지 않거나 반대 케이스.
- 로딩 3초 이상: 포트폴리오 사이트에 Lighthouse 성능 점수가 50 이하면 성능에 무관심한 개발자로 비친다.