- 서랍에 묵을 뻔한 iPhone 8을 SwiftUI 기반 OCR 서버로 바꿔, Apple Vision으로 83,418건의 요청과 48GB 이미지를 1년 넘게 처리함
- 시스템은 iPhone 8, 웹 서비스·API 라우팅용 Mini PC, EcoFlow River 2 Pro 768Wh, 220W 태양광 패널, Tailscale 네트워크로 구성됨
- 전체 전력 사용량은 하루 약 1.2kWh이며, 태양광 입력은 여름 150~220W 피크에서 겨울 5~20W 수준까지 계절에 따라 크게 달라짐
- 연속 운용 뒤 iPhone 배터리 상태는 76% 로 남았고, 바쁜 날에는 1,000건 이상을 처리했지만 iOS 백그라운드 제약과 열 관리는 별도 대응이 필요함
- 클라우드 OCR 대신 로컬 처리를 택해 요청당 비용과 외부 서버 업로드를 없앴고, 연간 84~120 CAD 전기요금 절감과 전자폐기물 감소 효과도 얻음
오래된 iPhone 8을 OCR 서버로 전환
- 개인 이미지 처리 프로젝트는 매일 수백 장의 이미지를 자동 분류하며, OCR 처리는 원래 Mac에서도 실행 가능했음
- 사용하지 않던 iPhone 8과 캠핑용으로 구매한 EcoFlow River 2 Pro를 결합해 태양광 기반 OCR 서버로 바꿈
- OCR 처리는 블로그와 별개의 사이드 프로젝트에 쓰임
- 1년 넘는 운용 결과는 다음과 같음
- 83,418건 OCR 요청 처리
- 48GB 이미지 데이터 처리
- 바쁜 날 1,000건 이상 요청 처리
- iPhone 배터리 상태 76%
- 연간 전기요금 84~120 CAD 절감
시스템 구성과 처리 흐름
- 전체 구성은 네 가지 장치와 네트워크로 나뉨
- Mini PC: 웹 서버, 이미지 처리 서비스, Plex 서버, 기타 서비스 실행
- iPhone 8: 창가에서 SwiftUI 앱으로 OCR 처리와 실시간 대시보드 담당
- EcoFlow power station: iPhone과 Mini PC에 오프그리드 전력 공급
- Tailscale network: 장치 간 연결 담당
- 이미지 처리 서비스가 OCR 대상 이미지를 iPhone으로 보내면, iPhone이 Apple Vision으로 텍스트를 인식한 뒤 결과를 다시 전송함
- iPhone 대시보드는 처리 통계와 서버 상태를 보여주며, 예시 UI에는
Requests Today,Total Processed,Avg Processing Time,Success Rate, 배터리 상태,Server running on port 8080이 포함됨 - Google Analytics 4도 통합돼 대시보드에 총 사용자 139,917명, 이번 달 17,643명, 평균 세션 6분 28초, 현재 활성 사용자 11명이 표시됨
Apple Vision 기반 iOS OCR 앱
- iOS에서 서버를 만들 때 가장 까다로운 부분은 앱을 계속 실행되게 유지하는 것이었음
- OCR 핵심은 Vision 프레임워크의
VNRecognizeTextRequest임recognitionLevel = .accurateusesLanguageCorrection = trueVNImageRequestHandler가CGImage를 받아 요청 수행- 인식 결과는
VNRecognizedTextObservation의 최상위 후보 문자열을 모아 반환
- OCR은 온디바이스에서 수행되므로 API 호출, 사용량 제한, 외부 서버 이미지 전송이 없음
- 정확도는 테스트한 일부 클라우드 서비스와 견줄 만한 수준임
- Vision 프레임워크의 텍스트 인식은 시간이 지나며 개선됐고, 특히 손글씨와 특이한 폰트에서 이전에 실패하던 인식이 동작하게 됨
태양광 전력 구성과 계절별 운용
- 전력 장비는 EcoFlow River 2 Pro 768Wh와 220W 태양광 패널임
- 실제 전력 사용량은 TP-Link 데이터 기준으로 전체 하루 약 1.2kWh임
| 구성 요소 | 유휴 전력 | 처리 부하 | 비고 |
|---|---|---|---|
| iPhone 8 OCR Server | 0.5~1W | 2~5W | 효율적임 |
| Mini PC | 15W | 25~30W | Plex, Archive Warriors 포함 |
| 전체 일일 소비 | 약 1.2kWh | 가변 | TP-Link 데이터 기준 |
- 계절에 따라 태양광 성능은 크게 달라짐
- 여름: 150~220W 피크 입력, 배터리 충전까지 가능한 지속 운용
- 봄·가을: 20~60W 평균, 태양광과 배터리 혼합 운용
- 겨울: 운이 좋으면 5~20W, 대부분 배터리 전력이며 런타임은 15~20시간
- River 2 Pro의 배터리 관리 시스템은 충전 곡선을 관리하며, 장치에 단순히 전력을 밀어 넣는 방식이 아님
- 캐나다의 추운 아침에는 처리 시간이 느려졌고, iPhone은 약간 따뜻할 때 OCR을 더 빠르게 처리했음
비용 계산과 클라우드 OCR 비교
- 초기 비용은 다음과 같음
- EcoFlow River 2 Pro: 599 CAD, 원래 캠핑용으로 구매
- 220W 태양광 패널: 180 CAD
- 케이블과 마운팅 하드웨어: 약 50 CAD
- 추가 태양광 투자: 약 230 CAD
- 실제 EcoFlow 데이터 기준 월 소비량은 5월 37.4kWh, 4월 45.8kWh였음
- 전기요금으로 환산한 절감액은 연간 약 84~120 CAD이며, 투자 회수 기간은 약 2~3년임
- 클라우드 OCR 서비스는 보통 1,000건당 1.00~1.50 CAD를 청구함
- 83,000건 이상 처리량을 클라우드 OCR로 처리했다면 83~125 CAD 비용이 들었을 것으로 계산됨
- 로컬 태양광 구성은 요청당 비용이 없고, 이미지를 외부 서버로 보내지 않음
1년 운용에서 드러난 안정성과 제약
- iPhone 8은 1년 넘게 연속 실행됐고, 지속적인 워크로드에도 성능 저하가 뚜렷하지 않았음
- iOS 백그라운드 처리는 예상보다 잘 동작했지만, 적절한 구성이 필요했음
- Background App Refresh 사용
- HTTP 서버가 정기 요청에 응답하도록 유지
- 최소한의 위치 서비스 사용
- 태양광 전력의 간헐성에 대응하기 위해 전력소는 저전력 장치인 iPhone을 우선하도록 설정됨
- 배터리가 낮아지면 Mini PC는 정상 종료됨
- iPhone은 필요하면 단독으로 몇 시간 동안 기본 OCR 요청을 처리할 수 있음
- 직사광선과 연속 처리는 열 스로틀링을 만들 수 있어, 그늘 확보와 공기 흐름 개선, 고온 보고 시 요청을 줄이는 처리를 추가함
- iOS는 앱이 영원히 실행되는 것을 원하지 않기 때문에, 계속 살아 있는 상태와 배터리 보존 사이의 균형이 필요함
로컬 우선 처리와 장치 재활용
- 모든 이미지는 사용자의 장치 안에 머물며, 클라우드 업로드나 제3자 접근이 없음
- 생명 유지 수준의 절감액은 아니지만, 의미 있는 컴퓨팅 워크로드가 재생에너지로 동작할 수 있음을 보여줌
- 서랍에 들어갈 예정이던 iPhone이 OCR 서버로 쓰이면서 전자폐기물로 전환되지 않음
- 모든 처리가 클라우드에 있어야 하는 것은 아니며, 태양광으로 구동되는 로컬 장치가 데이터를 직접 처리할 수 있음
참고 리소스
- EcoFlow River 2 Pro 768Wh: 사용한 전력소
- EcoFlow River 2 Pro와 220W 태양광 패널 번들: 실제 운용 구성과 같은 조합
- 200W 접이식 휴대용 태양광 패널: 이미 전력소가 있을 때 쓸 수 있는 유사 패널
- iPhone 8 이상과 iOS 13+가 있으면 Vision 프레임워크를 사용할 수 있음
- Apple Vision Framework Documentation: OCR 구현 문서
- Background App Refresh Guide: iOS 앱을 백그라운드에서 유지하는 문서
- SwiftUI HTTP Server Examples: HTTP 서버 구현 예시
- TP-Link Kasa Smart Plugs: 실제 전력 소비 모니터링 도구
- EcoFlow 앱: River 2 Pro 내장 모니터링 도구
- GearScouts.com: 전력소와 아웃도어 장비 가격 비교 도구