Rails 데모 레퍼런스 (Rails demo reference)
이 페이지는 Fly.io의 Rails 데모 앱(rails-dictaphone)이 어떻게 구성되어 있는지 보여주는 레퍼런스예요. 각 구성 요소가 어디에 있고, 개발/프로덕션에서 어떤 기술을 사용하는지, 그리고 주요 로직이 어디에 담겨 있는지 설명해 드릴게요.
출처: 문서
본문
Rails 소스는 GitHub에 있어요.
fly launch는 Dockerfile
과 fly.toml 설정 파일을 제공해요. fly launch는
Rails가 제공하는 Dockerfile에서도 작동해요. 애플리케이션을 변경할 때는
bin/rails generate dockerfile을 실행해 업데이트된 Dockerfile을 생성할 수 있어요.
조각들이 어떻게 조합되는지:
- 앱 전체에 분산된 원본 web-dictaphone 앱:
app/javascript/controllers/main_controls_controller과app/javascript/controllers/sound_clip_controller은 Stimulus 컨트롤러로 구현된 JavaScript를 담고 있어요.app/assets/stylesheets/dictaphone.css에 스타일시트가 있어요.app/views/clips/index.html.erb에 HTML이 있어요.
- Active Record는 개발 모드에서 Sqlite3를 데이터베이스로 사용하고, 프로덕션에서는 PostgreSQL을 사용해서 실행돼요.
데이터베이스 접근은
DATABASE_URL시크릿을 통해 이루어져요. - Active Storage는 개발 환경에서는 파일 시스템에, 프로덕션에서는 Tigris에 기록하도록 구성돼요. 연결을 설정하는 데 다음 시크릿이 사용돼요:
AWS_ACCESS_KEY_ID,AWS_ENDPOINT_URL_S3,AWS_REGION,AWS_SECRET_ACCESS_KEY,BUCKET_NAME. - Action Cable은 개발에서는 Async 어댑터를, 프로덕션에서는 Redis 어댑터를 사용하도록 구성돼요.
핵심 로직 포인트:
app/controllers/clips_controller.rb에는 인덱스 페이지 요청에 대한 응답을 만들고 오디오 클립을 GET, PUT, DELETE하는 로직이 들어 있어요.- 실시간 구현 코드는 주로 ActionCable에 있으므로,
app/models/clip.rb에 한 줄과app/views/layouts/application.html.erb에 한 줄만 추가하면 돼요. WHISPER_URL시크릿이 설정되면PUT요청으로 오디오 클립이 Whisper 서버로 전달되고, 응답을 사용해 PostgreSQL 데이터베이스를 업데이트해요. 이 작업은 Active Job 과 Sidekiq을 사용해 이루어져요. 이 코드는app/jobs/whisper_transcribe_job.rb에 있어요.