Rails Flutter Iap Unimplemented Features Audit

Rails + Flutter 앱 미구현 항목 점검 및 인앱 결제(IAP) 연동 기록

음성 메시지 기반 소셜 앱을 출시 준비하면서 미구현 항목을 전수 점검했다. route는 있는데 controller action이 없거나, Flutter UI는 완성됐는데 결제 로직이 // TODO 로 막혀 있는 경우들이 꽤 있었다. 정리하고 하나씩 구현한 기록. 미구현 항목 점검 방법 백엔드 점검 가장 빠른 방법은 routes.rb와 실제 controller를 비교하는 것이다. bundle exec rails routes | grep -v "^ #" route가 있는데 controller에 해당 action이 없으면 런타임에 ActionController::MethodNotImplemented 에러가 난다. 미리 찾아내는 게 낫다. 프론트엔드 점검 Flutter는 // TODO, SnackBar(content: Text('기능 준비 중')) 패턴을 검색하면 빠르다. ...

2026-01-30 · 5분 소요 · Seunghan
Crypto Exchange Api Integration Lessons

5개 암호화폐 거래소 API 연동하면서 겪은 삽질 모음

Ruby on Rails로 여러 암호화폐 거래소의 펀딩레이트(funding rate)를 수집하는 기능을 만들면서 겪은 문제들을 정리한다. 5개 거래소를 붙이면서 각 거래소마다 API 동작 방식이 달랐고, 공식 문서와 실제 동작이 다른 경우도 있었다. 거래소 API의 공통 기반 클라이언트 만들기 여러 거래소를 붙이기 전에 공통 HTTP 클라이언트를 먼저 만들었다. Faraday를 사용했고, 재시도와 Circuit Breaker를 여기에 몰아 넣었다. Faraday + faraday-retry 설정 # Gemfile gem "faraday" gem "faraday-retry" def connection @connection ||= Faraday.new(url: base_url) do |f| f.request :retry, { max: 3, interval: 0.5, backoff_factor: 2, interval_randomness: 0.5, # jitter retry_statuses: [429, 503, 504], retry_block: -> (env, options, retries, exc) { Rails.logger.warn("[#{exchange_name}] Retrying... #{retries} left. Status: #{env.status}") } } f.adapter Faraday.default_adapter f.options.timeout = 10 f.options.open_timeout = 5 end end backoff_factor: 2와 interval_randomness: 0.5(jitter)를 조합하면 재시도 간격이 0.5초 → 1초 → 2초로 지수 증가하면서 약간의 무작위성이 붙는다. 거래소 API가 Rate Limit(429)을 돌려줄 때 모든 클라이언트가 동시에 재시도하는 “thundering herd” 문제를 막아준다. ...

2025-12-06 · 6분 소요 · Seunghan
Rails Api Token Not Null Constraint

Rails API 토큰 생성: NOT NULL 컬럼 누락으로 발생하는 오류

Rails API 서버에서 소셜 로그인(SSO) 후 토큰을 발급하는 로직을 작성하다가 발생한 문제를 정리한다. 상황 Apple Sign In / Google Sign In 후 서버에서 access token과 refresh token을 발급해 클라이언트에 반환해야 한다. 컨트롤러에서 아래와 같이 직접 생성을 시도했다. token = user.api_tokens.create!( token_type: "bearer", expires_at: 1.hour.from_now ) 오류 ActiveRecord::NotNullViolation: PG::NotNullViolation: ERROR: null value in column "token_digest" violates not-null constraint 원인 api_tokens 테이블의 실제 스키마를 확인해보니 아래 컬럼들이 NOT NULL로 정의되어 있었다. # db/schema.rb create_table "api_tokens" do |t| t.string "token_digest", null: false # SHA-256 해시값 t.string "refresh_token_digest", null: false # refresh token 해시값 t.datetime "refresh_expires_at", null: false # refresh 만료 시각 t.string "jti", null: false # JWT ID (중복 방지) # ... end 직접 create!를 호출하면 이 컬럼들에 값이 자동으로 채워지지 않는다. ...

2025-06-22 · 2분 소요 · Seunghan
개인정보처리방침 문의