사용 기술
단순한 도구 사용을 넘어, 각 기술의 설계 철학과 본질을 이해하고 적용합니다.
Flutter
독자적인 렌더링 엔진을 활용해 플랫폼에 종속되지 않는 네이티브 수준의 크로스 플랫폼 애플리케이션을 개발합니다.
Spring Boot
Java 21의 최신 기능을 바탕으로, 유지보수가 용이하고 확장성 높은 객체지향적 REST API 서버를 구축합니다.
MariaDB
검증된 오픈소스 RDBMS로서, 엄격한 트랜잭션 관리를 통해 데이터의 무결성을 보장하고 효율적인 인덱싱으로 응답을 최적화합니다.
Linux (OCI)
클라우드 OS 환경을 직접 제어하며, Nginx 웹 서버 연동 및 리버스 프록시 설정을 통해 안전한 네트워크 아키텍처를 완성합니다.
벨로아 (Belloa)
로스트아크 오픈 API 기반 거래소 실시간 푸시 알림 1인 풀스택 서비스
배포 플랫폼
AOS 출시
Google Play & One Store
서버 운영
Linux 인프라
OCI & Nginx 리버스 프록시
핵심 기능
1분 스케줄링
로스트아크 Open API 연동
메시징
FCM 푸시
실시간 백그라운드 알림
| 구분 | 구현 내용 | 사용 기술 |
|---|---|---|
| 인프라 | Linux 클라우드 서버 생성, 방화벽 설정, Nginx 웹 서버 및 SSL(HTTPS) 적용 | Linux / Nginx |
| 백엔드 | Spring 스케줄러를 이용한 1분 단위 외부 API 호출 및 MariaDB 데이터 적재 | Spring Boot / MariaDB |
| 클라이언트 | Flutter를 이용한 UI/UX 개발, API 통신, FCM 토큰 기반 푸시 알림 수신 | Flutter / FCM |
| 웹 (Web) | Thymeleaf 기반의 랜딩페이지, 공지사항, FAQ, API 등록 가이드 등 서비스 운영 전반 웹페이지 구축 | Thymeleaf / HTML / CSS |
| 서비스 배포 | 개발자 계정 등록부터 심사, Google Play Console 및 원스토어 공식 릴리즈 완료 | Google Play / One Store |
Architecture & Problem Solving
안정적인 OCI 인프라 구축
서비스의 중단 없는 운영을 위해 Linux 환경의 클라우드 서버를 직접 프로비저닝하고 관리합니다. Nginx를 리버스 프록시로 앞단에 배치하여 외부의 직접적인 접근을 차단하고, SSL 인증서를 적용하여 HTTPS 보안 통신을 강제했습니다. 트래픽 스파이크에 대비한 백엔드 아키텍처 설계로 안정성을 입증했습니다.
Spring Boot 기반 스케줄링
로스트아크 Open API를 1분 단위로 호출하는 과정에서 발생할 수 있는 병목 현상을 해결하기 위해 Spring의 비동기 처리와 스케줄러를 최적화했습니다. 수집된 대량의 경매장 데이터는 MariaDB에 적재되며, 효율적인 인덱싱 전략을 통해 유저가 설정한 알림 조건과 매칭되는 속도를 획기적으로 단축시켰습니다.
크로스 플랫폼 앱 아키텍처
단일 코드베이스로 iOS와 Android에 동시 대응하기 위해 Flutter를 채택했습니다. WebView를 활용하여 웹의 유연성을 가져가는 동시에, 네이티브 단의 FCM(Firebase Cloud Messaging) 채널을 분리하여 백그라운드 상태에서도 지연 없는 실시간 푸시 알림을 수신할 수 있도록 브릿지 인터페이스를 견고하게 설계했습니다.
개발 노트 & 트러블슈팅
현업과 토이 프로젝트에서 겪은 기술적 고민과 해결 과정을 기록합니다.
Flutter FCM 백그라운드 알림 수신 지연 해결기
안드로이드 Doze 모드에서 푸시 알림이 지연되는 현상을 Data Message와 Notification Message의 차이를 이해하고 백그라운드 핸들러를 수정하여 해결한 과정을 정리합니다.
Spring Boot 1분 단위 API 폴링 아키텍처
외부 API의 Rate Limit을 준수하면서도 다수의 유저에게 실시간에 가까운 알림을 제공하기 위해 메세지 큐(MQ) 도입을 고려하고, 최종적으로 Batch 처리를 최적화한 사례입니다.
Nginx 리버스 프록시와 Cloudflare CDN 연동
단일 인스턴스 서버의 부하를 줄이기 위해 Cloudflare를 연동하고, Nginx 설정에서 실제 Client IP를 받아오도록 X-Forwarded-For 헤더를 구성하는 방법을 알아봅니다.