ThinkGround 개발 일지 (2026-07-26): 프론트엔드 분리, API 서버 도입, SPA 전환까지

오늘은 ThinkGround를 조금 더 독립적이고 오래 운영할 수 있는 구조로 옮기기 위한 작업을 집중적으로 진행했다.
기존에는 워드프레스에 비교적 강하게 묶여 있는 형태였다면, 이제는 콘텐츠는 워드프레스에 두되 화면과 서비스 구조는 점차 분리해 나가는 방향으로 정리하고 있다.

이번 작업의 큰 축은 세 가지였다.
첫 번째는 프론트엔드와 백엔드의 역할 분리, 두 번째는 백엔드 배포 기반 정리, 세 번째는 콘텐츠 반영 방식을 다시 설계한 일이다.

우선 프로젝트 구조를 프론트엔드와 백엔드로 나눴다.
관리 단위도 thinkground-frontend, thinkground-backend 형태로 분리해서 가져가고 있고, 프론트엔드는 이후 확장성과 유지보수를 고려해 FSD / CDD 기반으로 정리할 수 있는 방향을 잡았다.
백엔드는 Spring Boot + Kotlin 조합으로 구성하고, layered architecture를 기준으로 책임을 분리하는 구조로 준비했다.

백엔드 쪽에서는 단순히 애플리케이션을 하나 만든 수준이 아니라, 실제 운영 환경에서 돌아갈 수 있도록 배포 파이프라인까지 함께 구성했다.
Lightsail 서버를 기준으로 GitHub Actions를 이용한 자동 배포 흐름을 만들었고, 서버 프로비저닝과 애플리케이션 재시작 과정도 배포 절차 안에 포함했다.
진행 중에는 Java 설치 이슈, Apache 설정 문제, 헬스체크 실패 같은 운영 이슈가 있었지만, 하나씩 원인을 확인하면서 수정했다.
덕분에 지금 구조에서 무엇이 실제 병목이 되고 어떤 부분을 더 안정화해야 하는지도 꽤 분명해졌다.

데이터 처리 방식도 바뀌었다.
초기에는 로컬 파일을 읽는 방식이 남아 있었지만, 현재 방향은 워드프레스 DB를 직접 조회하는 방식이다.
즉 워드프레스는 CMS와 원본 데이터 저장소 역할에 집중하고, 별도의 백엔드가 그 데이터를 읽어 프론트엔드에 전달하는 구조다.
이렇게 바꾸면 화면 구성과 서비스 흐름을 워드프레스 테마 구조에 묶지 않고 가져갈 수 있어서, 앞으로 프론트엔드 개선 작업을 훨씬 유연하게 할 수 있다.

오늘 작업 중에서 특히 방향이 크게 바뀐 부분은 프론트엔드의 콘텐츠 반영 방식이었다.
처음에는 정적 빌드 결과를 배포하는 구조를 유지하면서 백엔드 API를 사용하는 방식을 생각했지만, 이 경우 콘텐츠 형상이 바뀌지 않았는데도 새 글 반영을 위해 프론트엔드 재배포가 계속 발생하는 문제가 있었다.
운영 관점에서 이건 꽤 불편한 제약이라고 판단했고, 결국 프론트엔드는 정적 셸을 유지하되 실제 콘텐츠 목록과 글 상세는 백엔드 API를 실시간으로 조회하는 SPA 방식으로 전환하기로 했다.

이 전환으로 얻는 장점은 명확하다.
워드프레스에 글이 저장되면 프론트엔드 전체를 다시 빌드하지 않아도 최신 콘텐츠를 화면에 반영할 수 있는 기반이 생긴다.
즉 배포는 화면 구조나 코드가 바뀌었을 때만 수행하고, 콘텐츠 변경은 API 반영으로 흘려보내는 방향에 가까워졌다.
운영 부담을 줄이면서도 프론트엔드와 CMS의 경계를 더 분명하게 가져갈 수 있게 된 셈이다.

검색엔진 대응을 위해 sitemap도 함께 정리했다.
정적 파일 기반으로 sitemap을 다시 생성하는 방식 대신, 현재 공개된 글 목록을 기준으로 백엔드에서 sitemap.xml을 동적으로 만들어 제공하도록 구성했다.
이렇게 하면 별도 재배포 없이도 사이트맵이 현재 공개 상태를 따라가게 되고, 콘텐츠 반영 흐름도 더 자연스러워진다.

배포 이력 추적도 조금 더 명확하게 만들었다.
프론트엔드와 백엔드가 각각 배포 완료 시점에 Git 태그를 남기도록 정리해서, 어떤 커밋이 실제 운영 반영본인지 나중에 바로 확인할 수 있게 했다.
형식은 frontend-yyyymmdd-hhmm, backend-yyyymmdd-hhmm 기준으로 가져가고 있고, 같은 시각에 중복될 경우를 대비한 처리도 함께 넣었다.
작은 부분이지만 운영 기록을 남기는 데 꽤 유용할 것 같다.

콘텐츠 정리도 일부 시작했다.
로컬에 저장되어 있던 포스트 가운데 공개 아카이브로 유지하기에 다소 개인적인 성격이 강한 글은 다시 분류하기로 했고, 우선 한 건부터 제거했다.
앞으로는 기술 기록, 운영 기록, 공지성 글, 개인 메모의 성격을 조금 더 구분해서 관리할 생각이다.

아직 할 일은 많이 남아 있다.
프론트엔드의 사용자 경험을 더 다듬어야 하고, SPA 구조에 맞는 라우팅과 예외 처리도 좀 더 정리해야 한다.
백엔드 역시 API 응답 구조와 운영 안정성을 더 손봐야 한다.
그럼에도 오늘 작업을 통해 ThinkGround는 “워드프레스 위에 얹힌 블로그”에서 “워드프레스를 콘텐츠 저장소로 활용하는 분리형 구조”로 한 단계 더 이동한 느낌이 있다.

지금 단계에서 가장 의미 있는 변화는, 기술 스택이 바뀌었다는 사실 자체보다도 운영 관점에서 어떤 구조가 더 오래 가는지 조금 더 분명하게 판단할 수 있게 되었다는 점이다.
앞으로는 이 기반 위에서 화면 완성도와 사용 경험을 차근차근 다듬어 나갈 예정이다.

Leave a Reply