hackers.pub 관

열람실(web)

ja· en· ko
처음 오신 분께hackers.pub에서, 브라우저에 보이는 화면 부분이에요.

읽는 사람은, 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(),
});
web/db.ts L14-L24— 못의 넓이를, 배달의 병렬 정도에 맞춰 파요

배치도

web/main.ts
Fresh 기동. Yoga 동거, 문지기 딸림
web/routes/@[username]
프로필 샛길(글/팔로워/게시물의 방)
web/islands/Composer.tsx
대화의 툇마루를 대표하는 섬 — 게시물을 쓰는 섬
web/federation.ts
설계도(builder)에 숨을 불어넣는 곳

옆방

바깥 링크