발행일

"배포 전 SEO 설정"이라고 적고 src/app을 통째로 지웠다 — Next 12 옆에 남아 있던 App Router 뼈대

"배포 전 SEO 설정"이라고 적고 src/app을 통째로 지웠다

이 글은 2026년 9월에 당시 커밋 이력을 다시 보며 정리한 것입니다. 날짜는 작업한 날 기준입니다.

직짱건강 저장소의 첫 커밋은 2024년 2월 11일 팀원의 "Initial commit from Create Next App"입니다. 그날 저녁 팀원이 Next 버전을 12.3.4로 내렸고(451e9fb "next version 12 수정"), 저는 밤 10시에 README와 목업 JSON으로 첫 커밋을 올렸어요.

create-next-app은 그 시점 기본값대로 src/app 폴더를 만들어 놓았습니다. layout.tsx, page.tsx, globals.css, page.module.css, 파비콘. 열어 보면 이렇습니다.

export const metadata: Metadata = {
  title: "Create Next App",
  description: "Generated by create next app",
};

App Router는 Next 13에서 들어온 것이라 12.3.4에서는 이 폴더를 읽지 않습니다. 팀은 src/pages 아래에 화면을 짜고 있었고, src/app은 아무 데도 안 걸리는 뼈대로 보름 넘게 옆에 있었어요.

지운 날, 커밋 제목은 SEO

2월 28일 오후 95cef05 "[24-02-28] 배포 하기 전 seo 설정". 6개 파일, +2/−372.

 public/index.html       |   4 +-
 src/app/favicon.ico     | Bin 25931 -> 0 bytes
 src/app/globals.css     | 107 ----------------------
 src/app/layout.tsx      |  22 -----
 src/app/page.module.css | 230 ------------------------------------------------
 src/app/page.tsx        |  11 ---

372줄 삭제가 src/app이고, 커밋 제목이 말하는 SEO는 public/index.html의 네 줄 변경입니다.

     <title>직.짱.건.강</title>
+    <script src="https://developers.kakao.com/sdk/js/kakao.min.js"></script>
+    <script defer src="https://cdn.swygbro.com/public/widget/swyg-widget.js"></script>
 </head>
 <!-- public/index.html -->
-<script src="https://developers.kakao.com/sdk/js/kakao.min.js"></script>

카카오 SDK 스크립트를 head 안으로 옮기고, 스위그 위젯 스크립트를 하나 더 넣었습니다. 메타 태그도 OG 이미지도 없어요. "배포 전에 해야 할 것"을 한 커밋에 넣고 제목은 그중 하나로 붙인 건데, 제목만 읽으면 372줄이 어디서 나왔는지 알 수 없습니다.

그 index.html은 페이지가 아니었다

더 곤란한 건 public/index.html 자체입니다. 이 파일은 2월 25일에 제가 만들었어요(9e10b29). Next에서 public/은 정적 파일 폴더라 이 파일은 /index.html이라는 주소로 그냥 내려갈 뿐, 홈 화면(src/pages/index.tsx)의 HTML에 끼어들지 않습니다. head에 넣은 스크립트 두 줄은 어느 화면에서도 실행되지 않았어요.

카카오 SDK가 실제로 어디서 실렸는지를 찾아보면, src 쪽 커밋 둘(50e5037·b5acb95)이 같은 스크립트 주소를 만집니다. 화면 코드가 따로 불러 쓰고 있었던 거예요. public/index.html은 3월 12일에 스위그 위젯 줄이 빠진 채로 지금까지 남아 있습니다.

create-react-app에서는 public/index.html이 진짜 문서라, 거기에 스크립트를 넣던 버릇이 그대로 온 것으로 보입니다. 그렇다고 단정할 근거는 커밋에 없고, 그때 왜 그 파일을 만들었는지도 적혀 있지 않습니다.

검증

  • 그날 확인한 것: 빌드가 되고 배포된 화면이 뜨는 것. src/app을 지워도 아무것도 안 깨진 게 그 폴더가 안 읽히고 있었다는 증거였는데, 그렇게 연결해서 생각한 기록은 없습니다.
  • 이 글을 쓰며 확인한 것: git ls-tree 95cef05^ src/app src/pages로 두 폴더가 같이 있던 것, 95cef05^:package.json"next": "12.3.4", git log -- public/index.html로 파일을 만든 커밋이 2월 25일 제 것이라는 것.
  • git log -S'kakao.min.js' -- srcsrc 쪽에서 같은 스크립트를 다루는 커밋 둘을 찾았습니다. 정확히 어느 파일에서 어떻게 실었는지는 이 글에서 추적하지 않았습니다.
  • 스위그 위젯이 실제로 어느 화면에 떴는지는 확인하지 못했습니다.

남은 것 · 한계

  • 커밋 제목이 내용을 안 담습니다. 372줄 삭제를 "SEO 설정"이라고 불렀어요. 1년 뒤 TripTune에서도 "BFF"라고 적어 두고 msw를 지운 커밋을 올렸습니다. 제목에 하고 싶었던 일을 적고 실제로 한 일은 diff에만 남기는 버릇이 그때까지 이어졌어요.
  • public/index.html이 지금도 저장소에 있습니다. 아무 화면에도 안 쓰이는 파일을 만든 사람이 저인데, 지우지 않았습니다.
  • src/app을 왜 팀원이 아니라 제가 지웠는지, 그 전에 누가 알고 있었는지는 기록이 없습니다. 보름 동안 아무도 안 건드린 걸 보면 둘 다 그 폴더를 신경 쓰지 않았던 것 같은데, 이것도 추측입니다.
  • 이때 pages 라우터를 고른 이유는 팀원의 버전 다운그레이드 커밋에 적혀 있지 않습니다. 넉 달 뒤 TripTune은 App Router로 시작했고, 거기서는 루트 레이아웃에 'use client'가 붙는 다른 종류의 문제를 만났습니다.

관련 글: 직짱건강 — 백엔드를 기다리지 않고 설문 인터페이스를 먼저 완성한 방법 · "BFF"라고 적어 두고 msw를 지운 홈 화면 · 루트 레이아웃에 'use client'가 붙어 있었다