Post

DeepReal Studio - AI 이미지 생성 앱

비동기 흐름을 중심으로 사용자 상태 인식을 설계한 iOS 프로젝트

DeepReal Studio - AI 이미지 생성 앱

DeepReal Studio

AI 이미지 생성 기반 iOS 앱

DeepReal Studio는 사용자가 최소한의 입력만으로 AI 이미지 생성 결과를 빠르고 직관적으로 확인할 수 있도록 설계된 AI 이미지 생성 기반 iOS 애플리케이션입니다.

이 프로젝트에서 저는 기능 구현 자체보다, 비동기 요청 이후의 상태가 사용자에게 어떻게 인식되는지를 기준으로 서비스 흐름과 화면 전환 구조를 설계하는 데 집중했습니다. 특히 응답 시간이 일정하지 않은 환경에서도 사용자가 현재 상황을 혼란 없이 이해할 수 있도록 상태 중심의 UI 흐름을 구성하는 것을 목표로 했습니다.

프로젝트 개요

  • 프로젝트명: DeepReal Studio – AI 이미지 생성 앱
  • 기간: 2026.01
  • 팀 구성: iOS 개발자 1명, FE 1명, BE 1명
  • 역할: iOS 개발

프로젝트 소개

DeepReal Studio는 AI 이미지 생성 과정에서 발생하는 대기 시간과 결과 확인 과정을 사용자에게 자연스럽게 전달하는 데 초점을 둔 서비스입니다.

단순히 결과 이미지를 보여주는 것이 아니라, 요청 → 대기 → 완료라는 흐름이 사용자 경험 관점에서 명확하게 인지되도록 설계했으며, 상태 변화에 따라 화면이 일관되게 전환되도록 서비스 단위의 UI 구조를 구성했습니다.


서비스 구성 한눈에 보기

DeepReal Studio에서는 사용자가 다음과 같은 흐름으로 서비스를 이용할 수 있습니다.

  • 이미지 생성 요청
    • 최소한의 입력만으로 AI 이미지 생성을 요청할 수 있습니다.
  • 생성 대기 상태
    • 이미지 생성 중임을 명확히 인지할 수 있도록 대기 상태 UI를 제공합니다.
  • 결과 확인
    • 생성 완료 시 결과 이미지를 즉시 확인할 수 있습니다.
  • 사진 보관함
    • 생성된 이미지를 최대 3장까지 앱 내 보관함에 저장할 수 있습니다.
  • 사진 저장
    • 생성된 이미지를 기기에 저장해 외부에서도 활용할 수 있습니다.

기술 스택

  • UIKit / Swift
  • ReactorKit 기반 단방향 데이터 플로우
  • RxSwift / RxFlow
  • SnapKit, Then
  • REST API

핵심 구현 및 기술적 선택

핵심 구현

  • Swift/UIKit 기반 iOS 네이티브 앱 개발
  • ReactorKit 기반 상태 관리 및 단방향 데이터 플로우 적용
  • 비동기 요청 흐름을 기준으로 한 상태 중심 UI 설계
  • 요청·대기·성공·실패 상태 분리를 통한 화면 전환 기준 정립
  • Response Body 기반 에러 코드 처리를 고려한 네트워크 구조 설계

담당 역할

  • UIKit 기반 iOS 앱 UI 구현 및 화면 흐름 설계
  • AI 이미지 생성 서버 API 연동 및 비동기 데이터 처리
  • 요청·대기·성공·실패 상태를 명확히 구분한 상태 기반 UI 구성
  • 사용자 입력 최소화를 고려한 화면 전환 구조 개선
  • Git/GitHub 기반 PR 단위 개발 및 코드 리뷰 참여
  • 기획·디자인·백엔드와 협업하며 기능 단위 요구사항 구현

Trouble Shooting & 개선 사례

비동기 응답에 따른 사용자 혼란 문제

  • 문제: 이미지 생성 요청 후 응답 시간이 일정하지 않아, 사용자가 앱이 멈춘 것처럼 인식할 수 있는 상황 발생
  • 접근: 비동기 처리 자체보다, 응답 대기 중 사용자가 인지하는 상태에 집중
  • 해결: 요청·대기·성공·실패 상태를 명확히 분리하고, 각 상태에 맞는 UI를 구성해 화면 전환 기준을 통일
  • 결과: 대기 중 이탈 감소, 생성 과정에 대한 사용자 이해도 및 안정감 향상

응답 바디 기반 에러 코드 처리 문제

  • 문제: 서버 응답이 HTTP Status Code와 별도로 Response Body 내부에 실제 에러 코드를 포함하는 구조였기 때문에, 단순 Status Code 기준 분기만으로는 에러 상황을 명확히 구분하기 어려웠습니다.
  • 접근: 성공 여부와 관계없이 Response Body를 일관되게 파싱하고,
    에러 코드 전용 모델을 정의해 에러 처리 기준을 명확히 분리하는 방향으로 접근했습니다.
  • 해결: 공통 에러 모델을 정의하고, 네트워크 계층에서 에러를 중앙 집중적으로 처리하도록 구조를 개선했습니다.
  • 결과: 화면 단에서 에러 분기 로직이 단순해졌으며,
    에러 메시지 표현과 사용자 안내 흐름을 일관되게 유지할 수 있었습니다.

프로젝트를 통해 배운 점

  • 비동기 작업이 많은 서비스일수록, 네트워크 처리보다 상태 설계가 사용자 경험에 더 큰 영향을 준다는 점
  • 기능 구현보다, 사용자가 어떤 흐름으로 서비스를 인식하는지를 기준으로 UI 구조를 설계하는 접근의 중요성
  • 혼자 개발하더라도, 서비스 단위 관점에서 구조와 기준을 먼저 정리하는 것이 이후 수정과 확장에 유리하다는 것
This post is licensed under CC BY 4.0 by the author.