みなさん開発は捗っていますか?ソフトウェア開発をはじめとして様々な開発にはインフラというソフトウェアの基盤は非常に大事です.スマートフォンでSNSを開いたとき,私たちが目にするのは写真や動画,そしてそれに付けられた「いいね」の数だけですよね.しかし,その裏では膨大なデータ処理が行われている.写真のアップロード,フィルター処理,いいねの集計,フォロワーへの通知など,すべての処理を担うのが 「バックエンド」 である.この 「バックエンド」 は,現代のデジタルサービスの心臓部であり,AWSのようなクラウドサービスと組み合わせることで,より強力な機能を実現できます.このシリーズでは密接に関係あるサーバーサイドの役割をAWSサービスを紹介しつつインフラとは何なのかを紹介する.まず第1回としてクラウドコンピューティングの概念とソフトウェアバックエンド開発の役割の関係性について紹介する.
シリーズ IAM AWS User クラウドサービスをフル活用しよう!
Part2 クラウドとは? & ネットワーク編その1(VPC・サブネット・インターネットゲートウェイ・ルートテーブル・NATゲートウェイ・VPCエンドポイント)
番外編1 PrivateSubnet上のRDSに踏み台EC2のSSHトンネル経由でローカルからアクセスする方法
番外編2 VPC作成時にCIDRブロックを指定するのはなんで?
他のシリーズ記事
TypeScriptで学ぶプログラミングの世界
プログラミング言語を根本的に理解するシリーズです.
〇〇チートシート
様々な言語,フレームワーク,ライブラリなど開発技術の使用方法,基本事項,応用事例を網羅し,手引書として記載したシリーズです.
git/gh,lazygit,docker,vim,go/gorm,typescript,SQL,プルリクエスト/マークダウン,ステータスコード,ファイル操作のチートシートがあります.以下の記事に遷移した後,各種チートシートのリンクがあります.
情報処理技術者試験合格への道 [IP・SG・FE・AP]
情報処理技術者試験の単語集です.
ソフトウェアのバックエンド開発とは何をするのか?
「バックエンド」 という言葉を聞いたことはあるだろうか?
この記事を読む方はバックエンドの役割はよく知っていると思いますが...
Webサイトやスマートフォンアプリを使用するとき,私たちが目にするのは美しいデザインや使いやすいボタン,きれいな写真などの 「フロントエンド」 と呼ばれる部分である.しかし,その裏側では,データを保存し,処理を実行し,セキュリティを確保する 「バックエンド」 と呼ばれるシステムが稼働している.
まずはじめに,この 「バックエンド」 が具体的に何をしているのか,なぜそれが必要なのか,そしてどのように実現されているのかを,身近な例を交えながら解説していく.
1. バックエンドとは
バックエンドは,ユーザーからは見えない 「裏側」 で動作するシステムの総称である.例えば,SNSで写真を投稿するとき,私たちは単にボタンをタップするだけだが,その裏では以下のような複雑な処理が実行されている:
- 写真データの受信と圧縮
- 位置情報やタグなどの情報の抽出
- データベースへの保存
- フォロワーへの通知送信
- タイムラインの更新
これらすべての処理を担当するのがバックエンドシステムである.
2. なぜバックエンドが必要か
スマートフォンやパソコン単体では,以下のような理由で複雑なサービスを実現することができない:
- データの永続化:
- スマートフォンのストレージは限られている
- 端末の紛失や故障時にデータが失われる
- 複数の端末間でデータを同期できない
- 処理能力の限界:
- 高度な画像処理や動画処理には大きな計算能力が必要
- 複数ユーザーのデータを集計・分析する必要がある
- AIや機械学習による予測・推薦が求められる
- セキュリティの確保:
- 個人情報や決済情報を安全に保管する必要がある
- 不正アクセスを防ぐ必要がある
- データの暗号化や認証が必要
このような理由から,強力なサーバーで構成されるバックエンドシステムが不可欠となる.
3.バックエンド開発者の主な責務
a. システム設計
現代のWebサービスでは,ユーザー数やデータ量が継続的に増加する.そのため,拡張性と保守性を考慮したシステム設計が不可欠である.適切な設計により,将来的な機能追加やパフォーマンスチューニングが容易になる.
アーキテクチャの選択
モノリシックアーキテクチャ
すべての機能を1つのアプリケーションとして実装する方式である.
-
メリット:
- 開発が容易
- デプロイが簡単
- トランザクション管理が容易
- デメリット:
- スケーリングが難しい
- 部分的な更新が困難
- 技術スタックの制約
マイクロサービスアーキテクチャ
機能ごとに独立したサービスとして実装する方式だ.
-
メリット:
- 柔軟なスケーリング
- 技術スタックの自由な選択
- 部分的な更新が容易
-
デメリット:
- 複雑な運用管理
- サービス間通信のオーバーヘッド
- 分散トランザクションの難しさ
技術スタックの選択
プログラミング言語
- サービスの要件に適した言語の選択
- 開発チームの習熟度の考慮
- エコシステムの充実度
フレームワーク
- 開発効率の向上
- セキュリティ機能の活用
- 保守性の確保
インフラストラクチャ
- クラウドサービスの選択
- コンテナ化の検討
- CI/CDパイプラインの構築
パフォーマンス最適化
キャッシュ戦略
- CDNの活用
- アプリケーションキャッシュ
- データベースキャッシュ
非同期処理
- バックグラウンドジョブ
- メッセージキュー
- イベント駆動アーキテクチャ
b. データモデリング
適切なデータモデリングは,アプリケーションのパフォーマンスと保守性に直接的な影響を与える.効率的なデータの格納と取り出しを実現するために,以下の要素を考慮する必要がある.
データベース設計
スキーマ設計
- 正規化レベルの決定
- リレーションシップの定義
- 制約の設定
インデックス設計
- クエリパターンの分析
- 複合インデックスの検討
- カバリングインデックスの活用
データアクセスパターン
読み取りパターン
- 頻繁にアクセスされるデータの特定
- キャッシュ戦略の策定
- インデックスの最適化
書き込みパターン
- データ更新の頻度分析
- ロック戦略の検討
- バッチ処理の活用
c. API設計と実装
APIは,フロントエンドとバックエンドを接続する重要なインターフェースである.適切なAPI設計により,クライアントとサーバー間の効率的な通信が実現できる.
API設計原則
RESTful設計
- リソース指向の設計
- HTTPメソッドの適切な使用
- URIの階層構造化
レスポンス設計
- 一貫性のある形式
- 適切なステータスコード
- エラーメッセージの標準化
APIドキュメンテーション
API仕様書
- OpenAPI/Swaggerの活用
- エンドポイントの詳細説明
- リクエスト/レスポンス例の提供
バージョン管理
- APIバージョニング戦略
- 下位互換性の維持
- 非推奨化のプロセス
d. セキュリティ対策
Webサービスにおいて,セキュリティは最も重要な要素の一つである.適切なセキュリティ対策により,ユーザーデータの保護と,サービスの信頼性確保が可能になる.
認証と認可
認証システム
- パスワードハッシュ化
- 多要素認証
- OAuth/OpenID Connectの活用
アクセス制御
- ロールベースのアクセス制御
- リソースベースの認可
- セッション管理
セキュリティ対策
通信セキュリティ
- TLS/SSLの適用
- 証明書管理
- HTTPSの強制
脆弱性対策
- SQLインジェクション対策
- XSS対策
- CSRFトークンの実装
e. スケーリング
現代のWebサービスでは,アクセス数が予測不可能なほど急激に増加することがある.例えば,あるSNSで投稿が「バズる」(viral:爆発的に拡散される)と,通常の100倍以上のアクセスが殺到することも珍しくない.また,Eコマースサイトでは,セール開始時に一時的に膨大なトラフィックが発生する.バックエンドは,このような急激な負荷の変動に対しても,安定したサービスを提供し続ける必要がある.
スケーリングの種類と特徴
垂直スケーリング(スケールアップ)
サーバーのスペックを上げることで対応する方法だ.例えば,CPUのコア数を増やしたり,メモリを増設したりする.
-
メリット:
- 設定が比較的単純
- アプリケーションの変更が不要
-
デメリット:
- ハードウェアに上限がある
- コストが指数関数的に増加
- スケールダウンが難しい
スケールアップに対してサーバーのスペックを下げることをスケールダウンという.
水平スケーリング(スケールアウト)
サーバーの数を増やすことで対応する方法である.
-
メリット:
- 理論上無制限に拡張可能
- コストが線形に増加
- 柔軟なスケールダウンが可能
-
デメリット:
- アプリケーションの設計が複雑
- データの整合性維持が難しい
- ロードバランサーが必要
スケールアウトに対してサーバーの数を減らすことをスケールインという.
自動スケーリングの実装
バックエンドでは,負荷に応じて自動的にスケーリングを行う仕組みが不可欠である.以下のような指標に基づいて,システムは自動的にリソースを増減する:
負荷ベースのスケーリング
- CPU使用率
- メモリ使用率
- リクエスト数
- レスポンス時間
時間ベースのスケーリング
- 曜日や時間帯に応じた調整
- イベントスケジュールに基づく調整
- セール期間中の事前増強
4.バックエンド開発の重要性
現代のデジタルサービスにおいて,バックエンド開発は以下の理由で極めて重要である:
- サービスの信頼性:
- 24時間365日の安定稼働
- データの確実な保護
- 高速なレスポンス
- ビジネスの成長:
- トラフィック増加への対応
- 新機能の迅速な追加
- コストの最適化
- ユーザー体験:
- シームレスなデータ同期
- パーソナライズされた体験
- 高度な機能の提供
バックエンド開発は,現代のデジタルサービスを支える重要な基盤である.ユーザーには見えない部分で,データの処理・保存,セキュリティの確保,システムの安定運用など,多岐にわたる責務を担っている.
5.バックエンドの責務とAWSサービスの関係性
クラウドコンピューティングの発展により,バックエンド開発はより効率的に,より高度なサービスを実現できるようになってきている.ここからは,具体的なバックエンドの責務と,AWSを活用したクラウドサービスの構築方法について解説していく.
a. データの処理と保存
バックエンドは,アプリケーションの中枢としてすべてのデータを管理する重要な役割を担っている.例えば,SNSで写真を投稿する際,表面上は単純な操作に見えるが,バックエンドでは複雑な処理が行われている.まず,アップロードされた写真は,様々なデバイスで適切に表示できるよう,複数のサイズに変換される.同時に,位置情報やタグなどのメタデータが抽出され,データベースに保存される.
また,Eコマースサイトでは,商品の在庫数,価格,注文履歴など,膨大なデータをリアルタイムで処理している.ユーザーが商品を購入するたびに,在庫数を更新し,注文情報を記録し,関連する商品のレコメンデーション情報を生成する.これらすべての処理をバックエンドが担当している.
さらに,データの永続化も重要な役割だ.バックエンドは,すべての情報を適切なデータベースに保存し,必要なときにすぐに取り出せるよう管理している.また,データのバックアップや,障害時の復旧なども担当する.
関連するAWSサービス
Amazon S3(Simple Storage Service)
Amazon S3は,スケーラブルで高耐久性のオブジェクトストレージサービス.大量のデータを安全に保存し、管理できる
- 大容量ファイルの保存に最適
- 99.999999999%の耐久性を誇る
- 静的ウェブサイトのホスティングも可能
- バージョニング機能でファイルの変更履歴を管理
Amazon RDS(Relational Database Service)
Amazon RDSは,リレーショナルデータベースを簡単に構築・運用するためのマネージドサービス.複数のデータベースエンジンに対応している.
- リレーショナルデータベースを簡単に構築・運用
- 自動バックアップとパッチ適用
- 高可用性を実現するマルチAZ配置
- パフォーマンスインサイトで性能監視
Amazon DynamoDBは,フルマネージドのNoSQLデータベースサービスで,高速かつ柔軟なデータストレージを提供する.
- NoSQLデータベースで柔軟なデータ構造
- ミリ秒単位の応答性能
- 自動スケーリングでトラフィック変動に対応
- グローバルテーブルで世界規模の展開が可能
b. ビジネスロジックの実装
バックエンドは,アプリケーションの「頭脳」として,すべてのビジネスロジックを実装する.例えば,銀行のオンラインバンキングシステムでは,送金処理を行う際,口座残高のチェック,取引限度額の確認,不正アクセスの検知など,多岐にわたる検証を行う必要がある.これらすべての論理的な処理をバックエンドが担当する.
SNSアプリケーションでは,新しい投稿があった際に,その投稿を適切なユーザーのタイムラインに表示する処理や,ハッシュタグの抽出,メンションされたユーザーへの通知など,複雑な処理フローを管理する.また,コンテンツの不適切性チェックや,スパム対策なども重要なビジネスロジックの一部だ.
Eコマースサイトでは,商品の在庫管理,価格計算,割引適用,配送料の計算など,様々な業務ロジックを実装する必要がある.特に,決済処理では,クレジットカードの有効性確認,残高チェック,不正利用の検知など,高度なセキュリティを要する処理も含まれる.
関連するAWSサービス
AWS EC2 (Elastic Compute Cloud)
EC2は,スケーラブルな仮想サーバーを提供するサービス.ユーザーは自分の仮想マシンを設定・管理できるため、高度なカスタマイズが可能.
- オペレーティングシステムやソフトウェアのインストール・設定が自由
- 需要に応じてインスタンスの数を増減可能
- CPU、メモリ、ストレージのニーズに応じた様々なインスタンスタイプを提供
AWS ECS (Elastic Container Service)
ECSは,コンテナ化されたアプリケーションを管理・デプロイするためのサービス.Dockerコンテナのオーケストレーションを簡単に行う.
- AWSの他のサービスとの統合がスムーズ
- コンテナのデプロイ、スケーリング、管理を自動化
Fargateは、ECSやEKS(Elastic Kubernetes Service)用のサーバーレスコンテナ管理サービス.インフラストラクチャを意識せずにコンテナを実行できる.
- インスタンス管理やスケーリングを気にせず、アプリケーションに集中できる
- 必要なCPUやメモリを指定し、リソースを効率的に使用
- トラフィックの変動に応じて自動的にスケーリング
AWS Lambdaは,サーバーレスコンピューティングを提供するサービスで,コードをイベントに応じて(関数単位で)自動的に実行できる.
- サーバーレスでコードを実行
- イベント駆動型の処理に最適
- 自動スケーリングで需要に対応
- 豊富な言語サポート(Node.js, Python, Java等)
Amazon API Gatewayは,RESTful APIを構築・管理するためのサービスで,さまざまなクライアントとバックエンドサービスの間のインターフェースを提供する.
- RESTful APIの構築と管理
- APIキーによるアクセス制御
- リクエストの制限とスロットリング
- WebSocket APIのサポート
AWS Step Functionsは,複雑なアプリケーションのワークフローを視覚的に設計し,管理できるサービス.
- 複雑なワークフローを視覚的に設計
- 状態遷移の管理と監視
- エラーハンドリングとリトライ機能
- サービス連携のオーケストレーション
c. セキュリティの確保
バックエンドの重要な責務の一つが,システム全体のセキュリティ確保である.これは単なる不正アクセスの防止だけでなく,データの暗号化,プライバシーの保護,コンプライアンスへの対応など,多岐にわたる.
例えば,ユーザー認証システムでは,パスワードのハッシュ化,セッション管理,アクセストークンの発行など,セキュアな認証基盤を提供する.特に,二要素認証やソーシャルログインなど,近年は高度な認証メカニズムの実装が求められている.
また,個人情報や決済情報など,機密性の高いデータを扱う場合は,暗号化やトークン化による保護が不可欠だ.さらに,システムへの不正アクセスを検知し,適切に対処する仕組みも必要となる.
関連するAWSサービス
AWS IAM(Identity and Access Management)
AWS IAMは,AWSリソースへのアクセスを安全に管理するためのサービス.ユーザーやグループ,ロールの作成と権限の管理を行う.
このシリーズの名前の由来になったサービスです
- きめ細かなアクセス制御
- ロールベースの権限管理
- 一時的な認証情報の発行
- 多要素認証(MFA)のサポート
Amazon Cognitoは,アプリケーションのユーザー認証、認可、ユーザーデータの管理を行うためのサービス.
- ユーザー認証基盤の提供
- ソーシャルIDプロバイダとの連携
- トークンベースの認証
- ユーザープールの管理
AWS WAF(Web Application Firewall)
AWS WAFは,Webアプリケーションを保護するためのファイアウォールサービスで,悪意のあるトラフィックからアプリケーションを守る.
- Webアプリケーションの保護
- SQLインジェクション対策
- クロスサイトスクリプティング対策
- IPベースのアクセス制御
d. スケーラビリティの確保
現代のWebサービスでは,アクセス数が急激に増加することがよくある.例えば,ソーシャルメディアで話題になった記事や,セール中のEコマースサイトでは,通常の何倍ものトラフィックが発生する可能性がある.バックエンドは,このような急激な負荷の変動に対しても,安定したサービスを提供し続ける必要がある.
これを実現するために,バックエンドは自動的にリソースをスケールする機能を備えている.アクセス数が増えれば,自動的にサーバーの数を増やし,負荷を分散する.データベースも同様に,読み取りや書き込みの要求に応じて,適切にスケールする必要がある.
また,グローバルに展開するサービスでは,世界中のユーザーに対して低レイテンシーでサービスを提供することも求められる.このために,コンテンツをCDNで配信したり,データベースを地理的に分散配置したりする必要がある.
関連するAWSサービス
ELBは,受信トラフィックを複数のEC2インスタンスに分散させるためのサービス.アプリケーションの可用性と耐障害性を向上させる.
- リクエストを複数のインスタンスに効率的に分散し、負荷を均一化
- 各インスタンスの健康状態を監視し、問題があればトラフィックの送信先から除外
- トラフィックの変動に応じて、インスタンスを追加・削除するAuto Scalingと連携
- Application Load Balancer(ALB)、Network Load Balancer(NLB)、Classic Load Balancerなど、用途に応じて選択可能
EC2 Auto Scalingは,需要に応じてEC2インスタンスを自動的に追加・削除するサービス.負荷に応じてリソースを最適化できる.
- 需要に応じた自動スケーリング
- スケジュールベースの容量調整
- 複数のスケーリングポリシー
- ヘルスチェックと自動復旧
Amazon ElastiCacheは,インメモリデータストアサービスで,高速なデータキャッシュを提供する.主にRedisとMemcachedがサポートされている.
- 高速なインメモリキャッシュ
- Redis/Memcachedのサポート
- 自動フェイルオーバー
- バックアップと復元機能
Amazon CloudFrontは,グローバルなコンテンツ配信ネットワーク(CDN)で,低遅延でのデータ配信を実現する.S3にアップロードしたフロントエンドのビルドファイルを配信する使い方が一般的だ.(フロントエンドのホスティング)
- グローバルCDNサービス
- エッジロケーションによる高速配信
- DDoS保護機能
- カスタムSSL証明書のサポート
バックエンド開発は,現代のデジタルサービスを支える重要な基盤である.データの処理と保存,ビジネスロジックの実装,セキュリティの確保,スケーラビリティの確保という4つの主要な役割は,それぞれが密接に関連し合いながら,サービス全体を支えている.
AWSのようなクラウドサービスを活用することで,これらの複雑な要件を効率的に実現することが可能になる.特に,マネージドサービスを利用することで,開発者はインフラストラクチャの管理ではなく,ビジネスロジックの実装に集中することができる.
次のパートから実際のAWSのサービスをどのように利活用すべきかを記載していく.
続きの記事
Part2 クラウドとは? & ネットワーク編その1(VPC・サブネット・インターネットゲートウェイ・ルートテーブル・NATゲートウェイ・VPCエンドポイント)