읽는 사람은, JS 없이도 전부 읽을 수 있어요. 쓰는 사람에게는, 쓰는 맛이 좋은 섬(Composer)이 있고요. 빠른 페이지와 넉넉한 편집을 둘 다 챙기고 싶을 때의, 배치도 본보기가 이 동이에요.
"섬(islands)"이라는 말이, 이 관에서는 건축 용어예요. 클라이언트에서 도는 JS는 대화의 툇마루뿐이에요. 나머지는 전부 서버에서 짠 HTML이에요 — 조용한 독서실에, 필요한 곳에만 작은 섬이 떠 있어요.
볼거리
- main.ts는 Fresh의 fsRoutes에 더해, GraphQL Yoga 서버와 업로드 proxy까지 함께 두고, 입구에서 ActorSuspendedError/isActorBanned 문지기를 거쳐요
- web/db.ts의 postgres 풀은 max:20이에요 — "배달 큐 병렬 10보다 넓히지 않으면, 연합이 붐빌 때 연결이 굶는다"라는 주석이 붙어 있어요
- sitemaps.xml.ts나 robots.txt.ts까지, 복도(routes)의 일부로 파일로 놓여 있어요
경문 한 구절
export const postgres = postgresJs(DATABASE_URL, {
// The pool size needs to exceed the ParallelMessageQueue concurrency (10)
// to leave headroom for HTTP handlers and KV store queries. The default
// of 10 can cause connection starvation under federation load.
max: 20,
});
export const db: Database = drizzle({
relations,
client: postgres,
logger: getDatabaseLogger(),
});