digda/ ├── apps/ │ ├── client/ # SvelteKit 프론트엔드 │ │ ├── src/ │ │ │ ├── lib/ │ │ │ │ └── socket.js │ │ │ ├── routes/ │ │ │ │ ├── +layout.svelte │ │ │ │ └── +page.svelte │ │ │ └── app.css │ │ ├── package.json │ │ ├── svelte.config.js │ │ └── vite.config.js │ │ │ └── server/ # Node.js 백엔드 │ │ ├── lib/ │ │ │ └── server_socket.js │ ├── index.js │ └── package.json │ ├── packages/ # 공유 패키지 │ ├── eslint-config/ │ └── tsconfig/ │ ├── pnpm-workspace.yaml # 워크스페이스 설정 ├── package.json # 루트 패키지 └── turbo.json # Turborepo 설정
Turborepo는 모노레포 환경에서 여러 패키지와 애플리케이션을 효율적으로 관리하고 빌드할 수 있도록 도와주는 도구
apps는 현재 front / back 구분하여 관리 packages는 apps에서 공유해야할 파일을 관리하며, turbo를 이용하여 공유
apps 별로 경로를 지정하여 배포 가능 그럼에도 최상단 repo에서 관리하기 때문에 packages의 각종 컴포넌트나 util을 공유할 수 있어 독립성을 유지하며 쉬운 관리가 가능해짐
스벨트킷은 full-stack framework인데 node.js 서버를 추가로 고용한 것은 serverless 환경에서 배포 시 서버 유실문제를 방지하기 위해서였다. 처음엔 vite.config에 server를 두고 연결하였는데 이는 로컬과 배포 시 코드의 상이를 가져왔다.
svelteKit에서는 최신 기술을 이용하되 socket에 관하여서는 csr을 유지하고 필요시 restAPI와 route기능을 활용하기 위해 사용한다.
node.js 서버에 socket을 열고 sveltekit이 첫페이지를 로딩하는 순간 스벨트킷(sveltekit)에서 (onMount) connecting 한다.
다음은 웹소켓 연결편으로