홈페이지를 서버와 프론트로 나눈 이유

Spring Boot 4 API와 SvelteKit 웹으로 분리했습니다. 나중에 Tauri 관리자 앱이 같은 API를 쓰게 하려는 구조입니다.

처음 홈페이지는 Spring Boot 하나가 "안녕하세요" 문자열을 돌려주는 앱이었습니다. 기술블로그를 붙이면서 서버와 프론트를 나눴습니다.

구조

claudharmony-web SvelteKit 3 · pnpm 모노레포 apps/web 홈페이지 + 기술블로그 (SSR) apps/admin Tauri 관리자 앱 (예정) packages/ api-client web·admin 공용 ui theme.css claudharmony-api Spring Boot 4.1 · Java 25 interfaces PostController · ApiResponse application PostService · Assembler domain Post · PostRepository (포트) infrastructure MarkdownPostRepository 호출 포트 사용 구현 posts/ *.md · diagrams/*.svg src/main/resources 기동 시 로드 REST · http://api 나중: /api/admin (인증 필수) 브라우저 → web (SvelteKit SSR) → api (Spring Boot). 나중에 Tauri 관리자 앱도 같은 api 를 씁니다

저장소 기술 역할
claudharmony-api Java 25 LTS, Spring Boot 4.1 글 조회 API, OpenAPI 문서
claudharmony-web SvelteKit (TypeScript), pnpm 모노레포 홈페이지 + 기술블로그 (SSR)

왜 SvelteKit + Tauri인가

  • 같은 SvelteKit 코드를 웹에서는 SSR로, 앱에서는 정적 빌드로 Tauri에 넣을 수 있습니다.
  • 내부 관리자 페이지는 공개 URL 없이 데스크톱 앱(Tauri)으로 만들 계획입니다. 인터넷에 노출되지 않고, 로컬 도구(kubectl, terraform)와 연동하기도 쉽습니다.

API 서버 계층

interfaces → application → domain ← infrastructure 순서로 의존합니다 (위 그림 오른쪽). 글은 지금 markdown 파일로 관리합니다. Repository 인터페이스는 domain에 두고 구현은 infrastructure에 둡니다. 그래서 DB를 도입할 때 구현체 하나만 바꾸면 됩니다.

← 기술블로그 목록