Skip to content

Taerogrammer/Commelier

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 

Repository files navigation

🪙 코믈리에 (Commelier)

가상 자산 실전 감각을 기를 수 있는 iOS 기반 모의 코인 투자 앱 💸📈

코믈리에는 실제 돈 없이도 가상 화폐 투자 흐름을 익힐 수 있는 iOS 기반 모의 투자 앱입니다.

실시간 코인 시세를 기반으로 매매를 연습하고, 나만의 포트폴리오를 분석하며 투자 감각을 키울 수 있도록 하였습니다.



📺 스크린샷 (Screenshots)

거래소 시세 상세 가상 매수 포트폴리오

거래소

WebSocket을 기반으로 실시간 코인 시세를 수신하며, 전일 대비 변동률, 거래대금 등 주요 지표를 함께 제공합니다.
사용자는 상승률, 거래량 등의 기준으로 리스트를 정렬할 수 있어, 빠르게 시장 흐름을 파악하고 코인을 탐색할 수 있습니다.

시세 상세

선택한 코인의 시세 그래프와 함께, 시가·고가·저가·전일 대비 등 종목의 핵심 정보를 제공하는 화면입니다.
그래프는 실시간 시세 변동을 반영하며, 사용자는 시세 흐름과 가격 지표를 종합적으로 분석할 수 있습니다.
매수·매도 버튼을 통해 즉시 가상 매수·매도 화면으로 연결되도록 구성했습니다.

가상 매수·매도

사용자가 입력한 금액을 기준으로, 현재 시세에 따라 실시간으로 환산하여 가상으로 코인을 사고팔 수 있습니다.
모든 계산은 Decimal 타입 기반으로 처리되어, 소수점 오차 없이 높은 정밀도로 환율 및 수익률을 계산할 수 있습니다.
매매 결과는 포트폴리오에 자동 반영되며, 누적 평균 매수가를 기준으로 손익이 계산됩니다.

포트폴리오

전체 자산의 평가 금액, 수익률, 자산 비중 등을 시각적으로 보여주는 종합 자산 분석 화면입니다.
현재 보유 중인 코인의 총 평가 금액과 총 손익을 실시간으로 계산하며, Pie Chart를 통해 자산 구성 비율을 한눈에 파악할 수 있습니다.
또한, 거래 내역을 통해 어떤 코인을 언제 얼마나 매수했는지 추적할 수 있으며, 이를 기반으로 전체 투자 흐름을 점검할 수 있도록 구성했습니다.



✨ 주요 기능 (Features)

기능명 설명
💸 모의 투자 기능 실제 돈 없이도 코인을 사고팔며 실전처럼 트레이딩 연습 가능
📈 실시간 시세 반영 WebSocket을 통한 실시간 코인 시세 기반 매매 체험 제공
📊 포트폴리오 관리 보유 자산의 수익률, 평가 금액, 비중 등을 시각화하여 한눈에 확인 가능
🔥 인기 코인 현재 트렌디한 코인과 키워드를 실시간으로 확인하여 시장 흐름 파악 가능
🌓 라이트/다크 모드 사용자의 기호에 맞게 UI 테마를 자동 혹은 수동으로 변경 가능
⚠️ 네트워크 상태 알림 연결 오류 발생 시 원인 및 해결 방향을 사용자에게 직관적으로 안내



🛠️ 아키텍처 & 디자인 패턴 (Architecture & Design Pattern)



  • MVVM + In/Out 패턴을 적용해 ViewModel의 입력/출력을 명확히 정의하고, 사용자 이벤트 흐름과 상태 변화를 예측 가능하게 구성했습니다.

  • UseCase 를 통해 도메인 로직을 한 곳에 집중시켜, 기능별 책임을 명확히 분리하고 테스트 가능성을 높였습니다.

  • Repository Interface / Implementation 구조를 도입하여, 도메인 레이어는 데이터 접근 방식(API, DB 등)에 독립적으로 설계했습니다.

  • DataSource는 Realm, WebSocket, HTTP API 등으로 분리하여 실제 데이터 처리 책임을 맡고 있으며, 각 구성 요소는 SRP(단일 책임 원칙)를 따릅니다.

  • 의존성 주입(DI)Router Pattern 을 통해 객체 생성과 화면 전환 흐름을 분리하고, 모듈 간 결합도를 낮췄습니다.

  • 각 레이어는 역할별로 명확히 분리되어 있으며, 유지보수성과 확장성을 고려한 구조로 설계되었습니다.



⚙️ 주요 설계 및 구현


아키텍처 및 데이터 흐름

  • MVVM + Input/Output 패턴을 도입해 ViewModel의 역할을 명확히 분리하고, RxSwiftCombine을 활용해 UI와 데이터 간의 비동기 흐름을 구성
  • UseCase + Repository 구조를 통해 도메인 로직과 데이터 접근을 분리하여, 테스트 용이성과 유지보수성을 높임

유연한 확장을 위한 추상화 설계

  • Protocol-Oriented 설계로 각 레이어 간 결합도를 최소화
  • 인터페이스 기반 구조를 통해 기능 변경이나 교체에 유연하게 대응
  • Factory Method + DI(DIP) 적용으로 객체 생성 책임을 분리
  • SOLID 원칙 기반으로 구조 설계

정규화 기반의 데이터 모델 설계

  • Realm 모델링 시 중복 데이터를 참조 기반으로 분리하여 데이터의 무결성과 정합성을 확보
  • 자산 정보, 거래 기록 등을 스키마 간 독립적으로 구성해 변경 사항의 전파를 최소화

네트워크 / 실시간 데이터 처리

  • HTTP 통신에서 응답 코드에 따라 오류를 구분하고 예외 상황을 명확히 처리하여 안정적인 사용자 경험 제공
  • WebSocket 기반의 실시간 데이터를 Combine Publisher로 스트리밍화하고 ViewModel에서 구독 처리 → 실시간 시세 변화에 반응하는 구조 구현

정밀 계산 처리를 위한 Decimal 타입 적용

  • 금융 데이터에서 발생할 수 있는 **소수점 오차 문제(Double의 부정확성)**를 방지하기 위해 금액 계산에는 Decimal 타입을 적용
  • 10진수 기반의 정밀 계산으로 금액 정보의 신뢰성과 일관성 확보

UI 성능 최적화 및 유틸리티 구현

  • DiffableDataSource + Snapshot을 적용해 전체 렌더링 없이 변경된 항목만 효율적으로 갱신
  • 직접 구현한 NumberterKit을 통해 숫자 포맷 로직을 모듈화
  • Kingfisher + DownSampling을 활용해 이미지 캐싱 및 렌더링 최적화 → 메모리 사용량 감소 및 스크롤 성능 향상



🗓️ 프로젝트 정보

  • 개발 기간: 2025.03.06 ~ 2025.04.10
  • 개발 인원: 1인 (기획, 디자인, 개발)
  • 타겟 플랫폼: iOS (iPhone)
  • 배포: App Store



Frameworks & Libraries

구분 기술
UI UIKit, SwiftUI (일부), SnapKit
Asynchronous Combine, RxSwift, RxCocoa
Network Alamofire, WebSocket
Database Realm
Chart DGCharts, Charts
Image Caching Kingfisher
Utility NumberterKit (자체 제작)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages