DOWHAT
부킹엔진 Next.js 마이그레이션


각 호텔별로 메타태그를 변경할 수 있도록 기존 SPA 부킹엔진을 Next.js로 마이그레이션하였습니다.
- Role
- 유저 페이지 Next.js 마이그레이션, 결제 모듈 연동, 코딩 컨벤션 · AI 마이그레이션 Skill 수립
SPA로 만들어진 레거시 부킹엔진을 Next.js로 마이그레이션하였습니다. AI를 적극적으로 활용하여 기획자, 디자이너 없이 빠르게 개발하였고, AI 개발로 확보한 리소스를 QA에 집중하여 기존 프로젝트 대비 낮은 결함률을 이뤄냈습니다. 회고 포스팅
Problem & Solution
호텔별 메타태그 노출 문제 해결
- Problem
- 많은 호텔들이 예약을 공유할 때 객실 이미지 및 호텔 설명이 보여지길 바랬습니다. 하지만 기존 부킹엔진은 SPA로 개발되어, 어느 호텔로 접속해도 같은 메타태그를 노출할 수 밖에 없었습니다.
- Solution
- 호텔명을 바탕으로 동적 라우팅을 설계하고, 레이아웃의 generateMetadata에서 호텔 정보를 조회해 메타태그를 5분 간격으로 서버에서 생성하도록 했습니다.
// 호텔 정보는 자주 바뀌지 않으니 5분간 ISR 캐시.
async function fetchHotelInfo(hotelCode: string) {
const res = await fetch(
`${apiUrl}/api/hotel?hotel_code=${hotelCode}`,
{ next: { revalidate: 300 } }
);
if (!res.ok) return null;
return ((await res.json()) as ApiResponse<HotelRaw>).data;
}
export async function generateMetadata({ params }: Props) {
const hotelCode = resolveHotelName(params.hotelName);
if (!hotelCode) return {};
const hotel = await fetchHotelInfo(hotelCode);
if (!hotel) return {};
...
return {
title,
description,
openGraph: { title, description, images: image ? [image] : undefined },
};
}AI SKILL을 사용한 점진적 마이그레이션
- Problem
- 이 프로젝트는 자바스크립트 SPA를 타입스크립트 Next.js로 마이그레이션 하는 것과 동시에, 서버도 함께 전반적인 리뉴얼 하는 작업이었습니다. 때문에 서버 작업에 맞춰 점진적으로 수정이 필요했습니다.
- Solution
- 원본 반영 절차를 mirror-from-reference Skill로 정리했습니다. 원본은 읽기 전용으로 두고 같은 경로의 파일을 기준으로 삼아, 그대로 복사할 부분과 새로운 구조에 맞게 치환할 부분을 먼저 구분합니다.
원본 저장소
원본 · Vite SPA(CSR) · 읽기 전용
호텔 전용 저장소
포크 버전 · Next.js App Router(SSR)
- 1
대상 파일 식별
요청에서 건드릴 파일을 특정합니다. 경로가 불확실하면 이 프로젝트에서 먼저 검색합니다.
- 2
원본의 같은 경로 파일 읽기
원본은 읽기 전용있으면 그 구조를 기준선으로 삼고, 없으면 가장 비슷한 페이지·컴포넌트를 찾아 참고합니다. 원본이 쓰는 공용 컴포넌트·훅·스토어까지 함께 읽습니다.
- 3
이 프로젝트의 현재 상태 확인
같은 경로의 파일을 읽어 이미 들어간 호텔 전용 커스터마이징을 파악합니다. 이 변경을 지우지 않는 것이 목표입니다.
- 4
차이 설계
원본에서 옮길 때 두 가지로 나눕니다.
그대로 복사
- ·UI 구조 · 레이아웃 · 컴포넌트 호출
- ·상태 관리 흐름 · 훅 사용
- ·라우팅 로직
Next.js 구조에 맞춰 치환
- ·API 호출 → docs 스펙 기준
- ·테마 · 컬러 변수 → 기존 코드 사용
- ·이미지 · 아이콘 → 사용자에게 요청
- 5
API 스펙 검증
API가 포함된 작업이면 원본이 아니라 문서를 기준으로 봅니다. 요청 · 응답이 원본과 다르면 문서를 따르고, 추측해서 구현하지 않습니다.
- 6
리뷰
차이만 반영하고 원본의 구조·네이밍을 유지합니다. 기준으로 삼은 원본 파일, 수정한 파일, 치환한 항목, API 문서 확인 결과를 한 줄씩 보고합니다.












