API 아키텍처 선택 비교: 개인 개발에서 테스트한 여섯 가지 설정에 대한 기술적 평가
Source: Dev.to
개인 프로젝트를 처음 시작했을 때는 앱이 대부분 독립적으로 동작할 수 있을 것이라고 생각했습니다.
하지만 데이터 공유, 사용자 인증, 다중 앱 확장 등과 같은 요구사항이 늘어나면서 적절한 백엔드(API)와 서버리스 인프라를 선택해야 할 필요성이 생겼습니다.
Swift‑only, Firebase, FastAPI, 직접 Supabase 접근, Next.js 등 여러 구성을 평가한 결과, React Native × Hono × Cloudflare Workers × Supabase가 최적의 아키텍처라는 결론에 도달했습니다.
이 글은 각 옵션의 특성을 객관적으로 정리하고, 채택 또는 배제된 기술적 이유를 설명합니다.
선택 기준
API 아키텍처는 다음 요구 사항을 기준으로 평가되었습니다.
기능 요구 사항
- iOS와 Android 모두에서 사용할 수 있는 API
- 비회원(게스트) 사용자와 인증된 사용자를 지원
- 영구 데이터 저장소 (RDB 필요)
- 여러 작은 애플리케이션이 공유하는 API
비기능 요구 사항
- 장기 개인 개발에 비용 효율적
- API 수준에서 무단 접근 방지
- 멀티테넌트 / SaaS 사용을 위한 확장성
- 낮은 운영 및 유지보수 부담
- 서버리스 아키텍처 선호
Evaluated Architectures
각 후보 아키텍처를 아래에서 검토하고, 요구 사항을 얼마나 잘 충족하는지 평가합니다.
2‑1. Swift (iOS Only)
Overview
Swift만을 사용해 네이티브 iOS 앱을 구축하고, 데이터를 로컬에 저장합니다.
Evaluation
| Pros | Cons (Requirement Mismatch) |
|---|---|
| 빠른 UI 개발 | Android 지원 없음 → 크로스‑플랫폼 요구 사항 불충족 |
| 네이티브 실행으로 높은 성능 | RDB 또는 API 레이어를 포함할 수 없어 데이터 공유 요구 사항 불충족 |
| 앱 측 보안에만 의존하는 것은 부적절 |
Result: → 요구 사항 미충족으로 인해 거부
2‑2. Swift + Firebase
Overview
Firebase Authentication과 Firestore를 백엔드로 사용합니다.
Evaluation
| Pros | Cons (Data Requirement Mismatch) |
|---|---|
| 학습 곡선이 낮음 | Android 지원 없음 |
| SDK 통합으로 빠른 개발 | Firestore는 RDB 요구 사항을 만족하지 못함 (조인 및 정규화가 어려움) |
| 보안 규칙이 복잡해지고 규모가 커질수록 취약해짐 |
Result: → RDB 및 확장성 제약으로 인해 거부
2‑3. React Native + Firebase
Overview
크로스‑플랫폼 React Native 앱이 Firebase Authentication과 Firestore에 직접 연결됩니다.
Evaluation
| Pros | Cons (API Requirement Mismatch) |
|---|---|
| 크로스‑플랫폼 지원 | Firestore는 RDB 요구 사항을 충족하지 않음 |
| 매우 빠른 개발 속도 | 직접 클라이언트 접근은 적절한 API 로직 레이어 구축을 방해함 |
| 감사 로그, 서명, 고급 보안 로직을 서버 측에서 강제 적용할 수 없음 |
Result: → 보안 아키텍처 부족으로 인해 거부
2‑4. React Native + FastAPI + AWS
Overview
FastAPI(Python)를 API 레이어로 사용하고, AWS RDS, Lambda, VPC 등 서비스를 활용합니다.
Evaluation
| Pros | Cons (Cost Mismatch) |
|---|---|
| 엔터프라이즈급 보안 설계 | RDS, VPC, 모니터링 등을 포함하면 개인 개발에는 과도함 |
| 매우 유연한 비즈니스 로직 | 높은 운영 비용 및 고정 지출 |
| 다양한 데이터베이스 옵션(PostgreSQL, MySQL, Aurora) 제공 | 서버리스 환경이라도 API Gateway와 CloudWatch 비용이 누적됨 |
Result: → 비용‑성능 균형이 맞지 않아 거부
2‑5. React Native + Supabase (Direct Client Access)
Overview
React Native가 Supabase(PostgreSQL + RLS)에 직접 연결됩니다.
Evaluation
| Pros | Cons (No Server Layer) |
|---|---|
| 완전한 RDB 지원 | 비즈니스 로직을 구현할 API 레이어 부재 |
| Row Level Security(RLS)를 통한 기본 보안 | 클라이언트 측 비밀 키 관리 위험 |
| 여러 애플리케이션이 공유하기엔 충분히 안전하지 않음 |
Result: → 보안 및 아키텍처 제한으로 인해 거부
2‑6. React Native + Next.js (Vercel) + Supabase
Overview
Next.js API Routes와 Vercel Edge를 이용해 API를 구축하고 KV 캐싱을 사용합니다.
Evaluation
| Pros | Cons (Cost and Purpose Mismatch) |
|---|---|
| Edge Runtime을 통한 빠른 응답 | SSR / RSC 청구가 무료 티어를 빠르게 소진 |
| 손쉬운 KV 기반 캐싱 | 순수 API 용도로 Next.js를 사용할 경우 이점이 제한적 |
| 웹과 API의 원활한 통합 | Workers 대비 API 중심 워크로드에 비용 효율성이 낮음 |
Result: → 비용 효율성 우려로 인해 거부
2‑7. React Native + Hono + Cloudflare Workers + Supabase (Final Choice)
Overview
Hono가 Cloudflare Workers에서 API 레이어로 동작합니다. Supabase(PostgreSQL + RLS)를 주요 데이터스토어로 사용하고, Workers KV를 캐시로 활용합니다.
Reasons for Adoption
-
보안 요구 사항 충족
- API 레이어에서 JWT 검증, 요청 서명, 속도 제한 구현
- Supabase RLS와 중첩된 방어 체계 제공
- 앞단에 Cloudflare WAF 배치 가능
- 클라이언트에 Supabase anon 키를 배포할 필요 없음
-
저비용
- Workers는 지속적인 비용이 거의 없으며, 사용량 기반 과금 구조로 예산을 효율적으로 관리할 수 있음
-
확장성 및 유지보수성
- 서버리스 환경으로 자동 스케일링 지원
- Hono와 Workers의 경량 구조가 빠른 배포와 업데이트를 가능하게 함
-
개발 생산성
- TypeScript 기반으로 기존 React Native 코드와 일관된 개발 경험 제공
- Supabase의 자동 생성 API와 RLS 정책을 활용해 백엔드 로직을 최소화
Result: → 최종 선택
free under ~100 k requests/month
- KV and caching reduce Supabase query volume
- Zero fixed operational cost
- High Scalability
- API modularization suitable for multi‑app expansion
- Hono provides Express‑like ergonomics with high performance
- Serverless scaling removes infrastructure concerns
- High Development Efficiency
- Workers + Hono are optimized for API‑only use
- Simple middleware composition
- Smooth integration with Supabase
Result: → Adopted as it best satisfies both technical and non‑functional requirements
아키텍처 다이어그램
[ React Native App ] [ Cloudflare Workers (Hono) ] [ Supabase (PostgreSQL + RLS) ]
|
v
[ Workers KV (cache) ]
상세 다이어그램
]
|
HTTPS
|
[ Cloudflare Workers (Hono API) ]
|
+--> JWT Verify -----> [ Supabase Auth ]
|
+--> SQL + RLS ------> [ Supabase PostgreSQL ]
|
+--> Rate Limit -----> [ Workers KV ]
비교 표
보안, 비용, 확장성은 이 프로젝트의 가정에 기반한 주관적 평가입니다.
| Architecture | RDB | 보안 | 비용 | API 확장성 | 전체 |
|---|---|---|---|---|---|
| Swift | × | 낮음 | 낮음 | 낮음 | 거부 |
| Swift + Firebase | × | 중간 | 낮음 | 낮음 | 거부 |
| RN + Firebase | × | 중간 | 낮음 | 중간 | 거부 |
| RN + FastAPI + AWS | ○ | 높음 | 높음 | 높음 | 거부 |
| RN + Supabase (Direct) | ○ | 중간 | 낮음 | 낮음 | 거부 |
| RN + Next.js + Vercel | ○ | 중간 | 중간 | 중간 | 거부 |
| RN + Hono + Workers + Supabase | ○ | 높음 | 매우 낮음 | 높음 | 채택 |
요약
이 글에서는 개인 개발 프로젝트를 위해 여러 API 아키텍처를 비교하고, 각 옵션을 기능적 및 비기능적 요구사항에 따라 평가했습니다.
최종 선택인 React Native × Cloudflare Workers × Hono × Supabase는 다음과 같은 이유로 돋보였습니다:
- 강력한 API 수준 보안 제어
- Supabase와 행 수준 보안(RLS)을 활용한 안정적인 관계형 데이터베이스 지원
- Cloudflare Workers를 통한 뛰어난 비용 효율성
- 유연한 서버리스 확장성
- 다중 앱 확장에 적합한 구조
