본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

Node.js 데모 참조

원문 보기 위키 갱신

이 페이지는 Node.js 딥다이브 데모 앱이 어떻게 구성되어 있는지 설명해 드려요. Node.js 데모 소스는 GitHub에 있어요. fly launch는 Dockerfile과 fly.toml 구성 파일을 제공해요. 앱을 변경한 뒤에는 npx @flydotio/dockerfile을 실행해 업데이트된 Dockerfile을 만들 수 있어요.

출처: 문서

본문

Node.js 데모 소스는 GitHub에 있어요. fly launch는 Dockerfile 과 fly.toml 구성 파일을 제공해요. 앱을 변경할 때는 npx @flydotio/dockerfile을 실행해 업데이트된 Dockerfile을 만들 수 있어요.

각 구성 요소가 어떻게 조합되는지 볼게요:

  • 원래 web-dictaphone 앱(HTML 제외)은 public 디렉토리에 있으며, 아이콘, 스크립트, 스타일, 웹 매니페스트를 포함하고 전부 정적 파일로 서빙돼요.
  • views/index.ejs에는 HTML 템플릿이 들어 있어요.
  • app.js는 Express.js 기반의 서버 구현을 담고 있어요. JavaScript 프레임워크는 정말 많지만, 이 프레임워크는 아마 가장 오래되고 미니멀한 편일 거예요.
  • pg 모듈은 PostgreSQL에 접근하는 데 사용돼요. 데이터베이스 접근은 DATABASE_URL 시크릿을 통해 이루어져요. 이 모듈은 저수준이라 이 데모에는 충분하지만, 대부분의 현대 Node.js 애플리케이션은 ORM을 사용해요.
  • AWS SDK for JavaScript는 Tigris에 접근하는 데 사용돼요. 연결을 설정할 때 사용되는 시크릿은 다음과 같아요: AWS_ACCESS_KEY_ID, AWS_ENDPOINT_URL_S3, AWS_REGION, AWS_SECRET_ACCESS_KEY, BUCKET_NAME.
  • express-ws 모듈은 WebSocket 지원에 사용돼요.
  • redis 모듈은 Redis에 접근하는 데 사용돼요. REDIS_URL 시크릿으로 데이터베이스에 접근해요.

로직의 핵심 포인트는 다음과 같아요:

  • public/scripts/app.js는 여러 지점에서 Fetch API를 사용해 서버 요청을 하도록 수정됐어요.
  • app.js는 인덱스 페이지 요청과 오디오 클립의 GET, PUT, DELETE에 대한 응답을 만드는 로직을 담고 있어요.
  • pubsub.js는 dictaphone:timestamp redis 큐를 구독하고, 업데이트를 모든 열린 웹소켓 연결로 전달하는 로직을 담고 있어요.
  • websocket.js는 웹소켓의 클라이언트 구현을 담고 있어요. 업데이트 알림을 받으면 인덱스 페이지를 다시 가져와 DOM 본문을 새 내용으로 교체해요.
  • WHISPER_URL 시크릿이 설정되어 있으면 PUT 요청이 오디오 클립을 Whisper 서버로 전달하고, 응답으로 PostgreSQL 데이터베이스를 업데이트해요. 이 코드는 app.js에 있어요.

더 알아보기 (Learn more)