MySQL 8.4でSELECT MAX(id) FOR UPDATEによるID採番を並列実行するとデッドロックが発生する事象を検証。原因はレコードロックとギャップロック(末尾supremumへのロック)の取得順序がセッション間で交差するため。対策としてAUTO_INCREMENT、シーケンステーブル、GET_LOCKによるアドバイザリーロック、UUID採番の4方式を比較し、AUTO_INCREMENTかMySQL公式シーケンスパターンを推奨している。
Go の context を使い、DBクエリのタイムアウトとクライアント切断のキャンセルをhandler/usecase/repositoryの3層に貫通させる方法を実験付きで解説。context なしでは接続断後もDBがクエリを実行し続けること、WithTimeoutでの期限管理、ctx.Err()による確実なタイムアウト判定、504返却の実装例までを扱う実践的なGo学習記事。
アソビューがGA(Google Analytics)のpurchaseイベント計測をフロントエンド依存から脱却させた事例。GTM経由の送信ではブラウザ環境やQR決済(PayPay/au PAY)特有のアプリ遷移で計測漏れが発生するため、Measurement Protocol APIを使いバックエンドから直接イベント送信する方式を導入。通常導線ではWorkerアプリが購入完了通知を非同期処理し、QR決済ではclient_idを事前にDBへ保存しておきポーリング自動完了時にも紐付けて送信することで、計測漏れを解消した。
学生がDMM Sprint Go(Go言語のバックエンド開発を学ぶ5日間のインターン)に参加した体験記。AIを使わずにYatterというSNSアプリのバックエンド実装に取り組み、オニオンアーキテクチャやcontextの扱い、CQRS等の設計判断を講師と議論しながら学んだ様子や、対面でのチーム開発・交流会を通じた学びが語られている。
TypeScriptだけでバックエンドを書ける新ツール「Typebase」の紹介。アプリ内のtypebase/フォルダにスキーマ・サーバーアクション・認証を定義すると、型付きサーバーとしてVercel/Cloudflare Workers/Deno Deployにデプロイできる。RLSのような暗黙的でSQL依存の認可ではなく、コード上で明示的に権限チェックを行う点を特徴として訴求している。
バックエンドエンジニア基礎学習連載の第15回。レイヤードアーキテクチャのうちrepository層の切り出しを扱い、データ出し入れ担当の役割・メソッド命名・エラーの返し方・書いてはいけない処理など設計上の勘所を解説する