오경식 · iOS Engineer 포트폴리오 경력기술서 인쇄하면 A4 규격 PDF가 됩니다 · P

오경식

iOS Engineer

경력기술서

(주)애즈위메이크 iOS Developer · 2023.05 ~ 2026.07 · 3년 2개월

동네 마트 기반 커머스 플랫폼 서비스. 2023년 핵심 앱의 네이티브 전환에 팀으로 참여한 뒤, 2024, 2025, 2026년 매년 신규 앱을 하나씩 iOS 단독으로 출시. 신규 앱 3종은 저장소 개설부터 출시, 운영까지 전 과정을 담당함.

8천 → 37만큐마켓 담당 기간 누적 가입자 · 평점 4.7
7,000햇배달 월 배달 처리량 · 7개 마트, 기사 48명
46.5%파트너스 리팩터링 커밋 비중 (239건)
4.5개월케이마켓 요구사항 정의 → 앱스토어 출시

4년 연속 앱 첫 릴리스

2023 큐마켓 v4.0.0 · 08-01 · 네이티브 전환
2024 파트너스 v1.0.0 · 06-14
2025 햇배달 v1.0.0 · 11-07
2026 케이마켓 v1.0.0 · 04-26

케이마켓 — 베트남 현지 신규 앱 개발

개발 2026.01~04 · 운영 ~2026.06 | iOS 단독 | Swift · SwiftUI · Swift Concurrency · MV

베트남 현지 한인마트와의 계약을 통해 자사 커머스 플랫폼 기반의 신규 앱을 개발한 프로젝트. iOS를 단독으로 맡아 요구사항 정의부터 앱스토어 출시까지 4.5개월 만에 완료함.

다국어 지원 파이프라인 구축

  • 프로덕트팀이 정리한 번역 데이터를 Xcode Strings 파일로 변환하는 구글 시트 확장 프로그램을 직접 개발
  • Figma MCP + Claude Code를 활용해 Figma에 정의된 텍스트와 키값을 자동 매칭, 다국어 작업 공수를 절감

현지화 — 3개국어 및 베트남 현지 소셜 로그인

  • 한국어, 영어, 베트남어 3개국어 지원. String Catalog fallback 정책을 정의하고 국가별 날짜 포맷 분기를 처리
  • 국내 참고 자료가 거의 없는 Zalo(베트남 현지 메신저) OAuth를 연동. SDK를 로컬 SPM 패키지로 래핑해 의존성을 격리

UX 개선 — 선별적 로딩 인디케이터

  • 기획 단계에서 누락된 로딩 인디케이터를 구현 과정에서 식별
  • 이미지 업로드가 포함된 환불 신청, 주문 확정 등 응답 지연이 발생하는 API에 한해 선별 적용. 일괄 적용 시 노출이 과도해져 오히려 UX를 해친다는 판단으로 프로덕트팀과 협의해 범위를 결정

도메인 단위 아키텍처 재구성 (출시 이후 2026.05~06)

  • 화면 중심의 Presentation 구조를 도메인 중심으로 전면 재편
  • Order 도메인을 8단계 파일럿으로 분리해 방법론을 확립한 뒤, 동일 절차로 12개 도메인 전체를 분리하고 Presentation 폴더를 제거
  • 각 단계를 독립 커밋으로 유지해 동작 보존을 검증하며 진행
4.5개월요구사항 정의 → 앱스토어 출시 (iOS 단독)
3개국어한국어 · 영어 · 베트남어
12분리한 도메인

햇배달 — 배달 기사용 실시간 주문 처리 앱

기획 2025.02 · 개발 2025.05~11 · 운영 ~2026.07 | iOS 단독 | Swift · SwiftUI · Swift Concurrency · SSE

큐마켓을 통해 들어온 주문을 마트 배달 기사가 처리하는 전용 앱. 기존에는 마트가 자체 기사를 운영하거나 외부 호출 서비스(건당 약 4~6천원)에 의존해야 했고, 이는 배달 관리 비효율과 비용 부담의 원인이 됨. 자사 기사 앱 도입으로 운영 효율을 확보하고 외부 호출 비용을 대체하기 위한 신규 사업으로 진행됨. Android 1명, 백엔드 1명, 기획 1명, 디자인 1명과 협업하며 iOS를 단독으로 담당함.

실시간 주문 동기화 — SSE 기반 상태 일관성 설계

  • 서버 → 클라이언트 단방향 알림만 필요한 도메인 특성을 고려해 SSE 채택. 백엔드팀과 협의하여 결정
  • SSE는 “변경 발생” 신호로 활용하고, 실제 데이터는 API fetch 후 로컬 캐시와 비교해 갱신하는 방식 채택
  • 활성 탭 전략 — 배달대기, 배달중, 배달완료 3개 탭 중 활성 탭에서만 SSE를 처리하고 비활성 탭은 진입 시점에 fetch. 전 탭 처리 시 발생하는 사이드 이펙트와 불필요한 갱신을 차단
  • 스크롤, 정렬 인지 삽입 — 현재 스크롤 위치와 정렬 기준에 따라 신규 주문을 적절한 위치에 삽입. 비활성 탭에는 카운트 dot으로 인지 가능하게 처리. 초기 기획에 없던 요구사항으로, 구현 과정에서 사용성 이슈를 식별해 기획 추가를 제안함

동시성 정합성 — 다중 기사 환경의 주문 선점 처리

  • 한 마트의 여러 기사가 동일 주문을 동시에 잡으려 할 때 발생하는 race condition을 백엔드팀과 함께 정의 및 해결
  • “배달 시작” 액션 시 서버가 선점 가능 여부를 판단하는 구조로 설계. 클라이언트는 응답에 따라 성공, 실패를 분기 처리
  • 성공, 실패와 무관하게 해당 주문을 배달대기 탭에서 제거하고, 카운트 갱신은 별도 fetch로 분리해 응답 페이로드를 최소화

재연결 시 데이터 복구

  • 네트워크 단절 후 첫 SSE 이벤트 수신 시점에 전체 페이지를 재fetch하고 캐시와 비교 동기화
  • 단절 시점에 페이지 사이즈(30개) 이상의 주문 발생 시 누락 가능성을 식별해 팀에 공유. 출시 일정상 후속 과제로 합의

클린 아키텍처 구조 재편 (2026.05~06)

  • SwiftUI 앱을 Presentation / Domain / Data / API / Common 5개 모듈로 물리 분리
  • Domain 레이어의 UI, API 의존 누수를 제거해 도메인 코드가 프레임워크에 의존하지 않는 구조를 확립. 화면을 Screen + ViewModel + Subview로 재구성하고 DI를 컨테이너 기반으로 전환

영수증 기반 오프라인 주문 등록 (2026.07)

  • 전화, 방문 등 비디지털 경로로 들어오던 주문을 앱으로 끌어오기 위한 신규 기능
  • 촬영 가이드 → 이미지 크롭, 리사이즈 → presigned URL 다중 업로드 → 서버 분석 결과 폴링 → 주소 후보 선택까지 5단계 플로우를 구현

Claude 기반 개발 자동화 워크플로우 (2026.05)

  • GitHub Actions에서 자동 버그 픽스와 PR 리뷰 응답을 수행하는 워크플로우를 구성
  • 타 저장소 온보딩, 동기화 스크립트를 작성해 사내 4개 프로젝트로 확산
7개 마트운영 중
48사용 중인 배달 기사
7,000월 배달 처리량

마트가 외부 호출 서비스에 지불하던 건당 4~6천원을 자사 앱으로 대체함.

파트너스 — 웹 서비스의 iOS 앱 전환

앱 전환 개발 2024.03~07 · 운영 ~2026.05 | iOS 단독 | Swift · SwiftUI · Swift Concurrency · MVVM-C

마트 주문 관리 웹 서비스의 iOS 앱 전환 프로젝트. 마트 운영자들이 주문 확인을 위해 매번 데스크탑을 사용해야 한다는 불편이 반복적으로 제기되었고, 이를 인지해 모바일 앱 전환을 프로덕트팀에 직접 제안하여 진행함. 신규 앱 개발 시 SwiftUI 도입을 주도함.

웹 기반 기획, 디자인팀과의 모바일 UX 조율

  • 웹 친화적 설계를 모바일 환경에 맞게 지속 조율
  • 대표 사례로, 달력 두 개를 동시에 펼치는 웹 방식 그대로의 날짜 필터 기획안을 모바일 화면 제약과 UX 관점에서 설득하고, 타 앱 레퍼런스를 직접 수집해 DatePicker 방식으로 전환

iOS 14 최소 지원 버전 대응

  • NavigationStack 미지원으로 버그가 많던 NavigationView 대신, UINavigationController를 감싼 커스텀 네비게이션 객체를 구현해 안정적인 화면 전환을 확보
  • 이후 최소 지원 버전 상향 시 NavigationStack 기반 Coordinator 패턴으로 개선

아키텍처 단계적 전환 (본인 주도 · 2년)

  • 레거시 단일 타깃 구조를 MVVM-C 도입 → Repository, Usecase 분리 → Domain/Data/Presentation SPM 멀티모듈 분리 → 네비게이션 재설계 순으로 무중단 전환
  • 리팩토링 전용 기간을 확보할 수 없는 제약 아래, 기능 개발에 얹어 구조를 점진적으로 개선

개발 프로세스 자동화 (2026)

  • Fastlane 기반 빌드, 배포 파이프라인 운영(TestFlight, Firebase App Distribution)
  • 커밋 컨벤션 문서화 및 팀 적용
46.5%리팩터링 커밋 비중 (239건)
v1.13.02년간 운영하며 도달한 버전
36.6%기여자 5명 중 단일 최다

데스크탑 없이 주문 현황을 확인할 수 있게 됨. 불만이 반복 제기되던 마트 운영사 기준으로 관련 CS 문의가 감소함.

큐마켓 — 하이브리드에서 네이티브 iOS 전환

전환 개발 2023.05~09 · 운영 ~2026.07 | 팀 개발 (주니어 4명 + 팀장 1명, 화면 단위 분담) | Swift · UIKit · Combine · MVVM

동네 마트 상품을 판매하는 커머스 앱의 네이티브 iOS 전환 프로젝트. 사업 확장에 따른 하이브리드 앱의 성능 한계를 해소하고 향후 빠른 기능 개발 기반을 마련하기 위해 진행됨. 해당 프로젝트 수행을 위해 합류함. 5개월 출시 일정과 팀원 전원의 학습 비용을 고려해 Combine 기반 MVVM을 채택함.

담당 영역 — 전환 프로젝트

  • 공통 UI 컴포넌트 — 디자인 시스템에 맞춰 첫 커스텀 얼럿 컴포넌트를 설계, 개발해 전 화면에 공통 적용. 이후 팀원들의 유사 컴포넌트 확장 기반이 됨
  • 결제 — 쿠폰, 포인트 사용 로직. 포인트 무제한 사용 정책에서 쿠폰 동시 적용 시 발생하는 정합성 문제를 식별. 1차 출시에서는 동시 적용을 제한하고, 후속으로 쿠폰 우선 적용 후 포인트를 역산하는 로직으로 전환
  • 검색, 마이페이지 — 디자인 시스템에 맞춰 화면 단위 구현
  • 웹뷰 연동 — 배너 클릭 시 WKWebView 진입, JS 브릿지를 통한 네이티브 기능 호출 및 커스텀 스킴 기반 화면 전환 처리

기능 명세 부재 상황 대응

  • 기존 하이브리드 앱의 기능 명세 문서가 없는 상황에서, 앱 직접 조작 및 네트워크 로그 분석을 통해 기능 스펙을 역으로 추출한 뒤 구현

장바구니 로컬 → 서버 이관 (2024.06~07)

  • 로컬에서 관리하던 장바구니를 서버 기반으로 전면 이관. 조회, 추가, 선택 상태 변경, 개수 조회, 전체 삭제, 다시 담기, 검증 등 API 7종을 신규 구현
  • 마트 변경 시 개수 반영, 진입 시 검증 적용 등 이관 과정에서 발생한 정합성 이슈를 대응

큐머니 사용 한도 계산 UseCase 분리

  • 포인트 사용 한도 계산 로직을 UseCase로 분리하고 단위 테스트를 작성
  • 쿠폰, 포인트 동시 적용 정책이 복잡해지는 과정에서 계산 책임을 화면에서 분리
8천 → 37만해당 기간 서비스 누적 가입자
4.7앱스토어 평점 유지
v4.0 → v5.193년간 담당한 버전 구간

출시 후 사용자 설문에서 “앱 속도 향상” 피드백을 다수 확보함. CS팀 전언 기준 성능 관련 문의 건수가 큰 폭으로 감소함.

Skills

Language & UI
Swift · SwiftUI · UIKit
Concurrency
Combine · Swift Concurrency
Architecture
MVVM · MVVM-C · MV · Clean Architecture · SPM 멀티모듈 · DI 컨테이너
Networking
Moya · SSE · WKWebView (JS 브릿지, 커스텀 스킴 핸들링)
CI / CD
Xcode Cloud · Fastlane · GitHub Actions
기타
Unit Test (UseCase 레벨) · 코드 리뷰 · Claude Code 기반 개발 자동화

Education

2022.04.11 ~ 2022.10.07 야곰아카데미 [커리어스타터 캠프 6기]
2022.02.07 ~ 2022.03.19 야곰아카데미 [코드스타터 캠프 3기]
2011.03 ~ 2017.02 부경대학교 화학과 졸업
오경식 · iOS Engineer unchain123@kakao.com