앱 개발을 준비하면서 가장 먼저 작성하는 자료는 보통 화면 목록입니다.
로그인 화면, 홈 화면, 상품 상세 화면, 예약 화면, 결제 화면, 마이페이지처럼 사용자가 보게 될 화면을 정리한 뒤 여러 앱개발업체에 견적을 요청합니다.
하지만 화면 목록만으로 상담을 진행하면 업체마다 서로 다른 범위를 기준으로 견적을 산정할 수 있습니다.
한 업체는 모바일 앱 화면만 개발 범위로 해석하고, 다른 업체는 서버와 데이터베이스를 포함할 수 있습니다. 또 다른 업체는 관리자 페이지, 스토어 출시, 외부 서비스 연동까지 포함할 수 있습니다.
견적 금액은 비슷해 보여도 실제 포함된 시스템은 전혀 다를 수 있습니다.
예를 들어 사용자가 앱에서 예약 버튼을 누르는 기능을 생각해보겠습니다.
예약 버튼과 달력을 보여주는 것은 앱의 역할입니다. 하지만 예약 가능한 시간을 계산하고, 동시에 들어온 신청이 중복되지 않도록 막고, 예약 내역을 저장하는 일은 서버와 데이터베이스가 담당해야 합니다.
운영자가 예약을 승인하거나 일정을 변경하고, 취소 사유를 확인하는 기능은 관리자 시스템에서 처리할 수 있습니다. 예약 확정과 변경 내용을 사용자에게 알려주는 기능까지 필요하다면 푸시 알림이나 문자 서비스 연동도 검토해야 합니다.
즉, 하나의 예약 기능에도 다음과 같은 범위가 연결됩니다.
- 사용자가 이용하는 모바일 앱
- 업무 규칙을 처리하는 백엔드 서버
- 정보를 저장하는 데이터베이스
- 운영자가 사용하는 관리자 페이지
- 푸시 알림이나 결제 같은 외부 서비스
- iOS·Android 스토어 출시와 운영 환경
앱개발업체에 상담을 요청하기 전에는 기능을 몇 개 만들 것인지보다 각 기능을 어느 시스템이 담당해야 하는지 먼저 나누는 것이 좋습니다.
이 기준이 정리되어야 업체별 견적을 같은 조건으로 비교할 수 있고, 출시 직전에 관리자 기능이나 서버 개발이 빠져 있었다는 사실을 발견하는 상황도 줄일 수 있습니다.
앱개발업체에 문의하기 전, 먼저 정해야 할 서비스 목표
개발 범위를 정하기 전에 서비스가 해결하려는 문제를 한 문장으로 정리해보는 것이 좋습니다.
기능을 먼저 나열하면 필요한 기능과 있으면 좋은 기능이 섞이기 쉽습니다. 반대로 서비스 목표와 사용자의 핵심 행동을 먼저 정하면 첫 번째 출시 범위를 판단하기가 수월해집니다.
예를 들어 다음과 같이 작성할 수 있습니다.
보호자가 외출 중에도 반려동물의 급여 상태를 확인하고 예약 급여를 설정할 수 있는 앱
이 문장에서는 핵심 사용자가 보호자라는 점과 앱에서 완료해야 할 주요 행동이 드러납니다.
- 반려동물 등록
- 급식기 연결
- 현재 급여 상태 확인
- 예약 급여 설정
- 급여 결과 확인
여기에 운영자의 업무도 연결해서 생각해야 합니다.
- 가입한 회원 확인
- 연결된 기기 상태 확인
- 기기 연결 오류 문의 처리
- 사용자별 급여 이력 조회
- 공지사항과 서비스 정책 관리
사용자 행동만 정하고 운영자의 후속 업무를 정하지 않으면 앱은 사용할 수 있어도 서비스를 관리하기 어려울 수 있습니다.
또 다른 예로 예약 서비스를 살펴보겠습니다.
사용자의 핵심 흐름은 다음과 같을 수 있습니다.
``text<br>회원가입<br>→ 예약 대상 선택<br>→ 날짜와 시간 선택<br>→ 결제<br>→ 예약 확정<br>→ 이용 완료<br>``
운영자에게는 별도의 흐름이 필요합니다.
``text<br>예약 접수 확인<br>→ 결제 상태 확인<br>→ 예약 승인 또는 변경<br>→ 사용자 안내<br>→ 이용 완료 처리<br>→ 취소·환불 대응<br>``
앱개발업체에 전달할 요구사항에는 두 흐름이 모두 포함되어야 합니다.
상담 전 다음 질문에 답해보면 서비스 목표를 구체화할 수 있습니다.
- 이 앱을 주로 사용하는 사람은 누구인가?
- 사용자가 앱에서 반드시 완료해야 하는 행동은 무엇인가?
- 그 행동이 완료된 뒤 운영자가 처리해야 하는 일은 무엇인가?
- 첫 출시에서 반드시 작동해야 하는 흐름은 어디까지인가?
- 초기에는 수작업으로 처리해도 되는 업무가 있는가?
- 이용자가 늘어나면 자동화해야 할 업무는 무엇인가?
정책이 모두 확정되지 않았더라도 괜찮습니다.
다만 확정된 내용, 협의가 필요한 내용, 추후 개발할 내용을 구분해서 전달해야 앱개발업체에서도 1차 개발 범위와 확장 범위를 나누어 제안할 수 있습니다.
앱에서 구현할 기능과 서버·데이터베이스 기능 구분하기
사용자가 스마트폰에서 보는 화면과 서비스의 업무 규칙은 같은 것이 아닙니다.
앱은 사용자가 정보를 입력하고 결과를 확인하는 접점입니다. 서버는 사용자의 요청이 가능한지 판단하고 데이터를 처리하며, 데이터베이스는 회원·예약·주문·결제·활동 기록 등을 저장합니다.
역할을 간단히 구분하면 다음과 같습니다.
| 구분 | 주요 역할 | 예시 |<br>|---|---|---|<br>| 모바일 앱 | 사용자 입력과 결과 표시 | 로그인, 검색, 예약 신청, 결제 요청 |<br>| 백엔드 서버 | 인증, 업무 규칙, 외부 연동 | 예약 가능 여부 계산, 주문 금액 검증 |<br>| 데이터베이스 | 서비스 데이터 저장 | 회원, 상품, 예약, 결제, 알림 기록 |<br>| 관리자 시스템 | 운영 업무 처리 | 회원 조회, 예약 변경, 환불 처리 |<br>| 외부 서비스 | 전문 기능 제공 | 결제, 소셜 로그인, 푸시, 지도, OCR |
예를 들어 사용자가 앱에서 프로필을 수정한다고 가정해보겠습니다.
앱에서는 이름과 이미지를 입력하는 화면을 제공합니다. 서버에서는 로그인한 사용자가 자신의 정보만 수정하는지 확인하고, 입력값이 허용된 형식인지 검사합니다. 데이터베이스에는 변경된 정보가 저장되고, 이미지 파일은 별도의 스토리지에 저장될 수 있습니다.
운영자가 부적절한 프로필 이미지를 확인하거나 계정 문의에 대응해야 한다면 관리자 페이지에서 회원 정보와 변경 상태를 조회할 기능도 필요합니다.
앱 화면만 보면 단순한 프로필 수정이지만 전체 범위는 다음과 같이 늘어납니다.
- 프로필 조회·수정 화면
- 이미지 선택 및 업로드
- 사용자 인증과 권한 확인
- 입력값 검증
- 데이터베이스 저장
- 이미지 저장소 연동
- 오류 메시지 처리
- 관리자 회원 조회
- 회원 탈퇴 시 데이터 처리
특히 회원가입 기능이 있다면 탈퇴와 데이터 삭제 범위도 함께 검토해야 합니다.
현재 Apple은 계정 생성을 지원하는 앱에서 사용자가 앱 안에서 계정 삭제를 시작할 수 있도록 요구하고 있습니다. Google Play 역시 앱에서 계정을 만들 수 있다면 앱 내부의 삭제 경로와 앱을 이용할 수 없는 경우를 위한 웹 기반 삭제 요청 경로를 요구합니다. 출시 정책은 변경될 수 있으므로 실제 제출 시점에 최신 기준을 다시 확인해야 합니다. (developer.apple.com)
따라서 회원가입을 요구사항에 넣을 때는 단순히 로그인 화면만 작성하기보다 다음 항목을 함께 정리하는 편이 좋습니다.
- 가입 방식: 이메일, 휴대전화, 소셜 로그인
- 이메일이나 휴대전화 인증 필요 여부
- 중복 가입 판단 기준
- 비밀번호 재설정 방식
- 로그인 유지 방식
- 휴면·정지·탈퇴 상태
- 탈퇴 후 보관하거나 삭제할 데이터
- 소셜 계정 연결 해제 처리
- 운영자의 계정 정지와 복구 권한
이처럼 앱 기능을 정리할 때는 각 화면 옆에 서버 처리와 관리자 업무를 함께 적어보면 누락되는 범위를 줄일 수 있습니다.
회원·예약·주문·결제·알림 기능별 백엔드 범위
백엔드 개발은 단순히 앱의 입력값을 데이터베이스에 저장하는 작업으로만 보기 어렵습니다.
누가 요청했는지 확인하고, 요청이 현재 상태에서 가능한지 판단하며, 여러 요청이 동시에 들어왔을 때 데이터가 어긋나지 않도록 처리해야 합니다.
1. 회원과 권한
회원 기능에서는 로그인 성공 여부만큼 사용자 유형과 접근 범위가 중요합니다.
서비스에 따라 다음과 같은 사용자가 존재할 수 있습니다.
- 일반 사용자
- 유료 회원
- 파트너 또는 판매자
- 지점 담당자
- 본사 운영자
- 슈퍼 관리자
같은 앱이나 관리자 시스템을 사용하더라도 사용자별로 조회할 수 있는 데이터와 실행할 수 있는 작업이 달라질 수 있습니다.
예를 들어 파트너가 자신의 매장 예약만 확인해야 하는데 다른 매장의 데이터까지 조회할 수 있다면 단순한 화면 오류가 아니라 권한 설계의 문제입니다.
따라서 앱개발업체와 상담할 때는 사용자 종류뿐 아니라 다음 내용을 전달해야 합니다.
- 각 사용자가 볼 수 있는 정보
- 등록·수정·삭제할 수 있는 정보
- 승인이 필요한 작업
- 다운로드할 수 있는 데이터
- 민감 정보의 표시 범위
- 계정 상태에 따른 접근 제한
2. 예약
예약 기능은 달력에 가능한 시간을 표시하는 것보다 운영 규칙이 더 중요합니다.
확인할 항목은 다음과 같습니다.
- 무엇을 예약하는가?
- 시간, 좌석, 객실, 장비, 담당자 중 어떤 자원을 차감하는가?
- 예약 신청과 확정은 구분되는가?
- 결제 전 임시로 자원을 확보하는가?
- 예약 변경은 몇 회까지 가능한가?
- 취소 가능 시간과 수수료는 어떻게 되는가?
- 운영자가 예약을 강제로 변경할 수 있는가?
- 중복 예약을 어떤 기준으로 막는가?
앱은 사용자가 날짜와 시간을 선택하도록 도와주지만, 최종 예약 가능 여부는 서버에서 다시 판단하는 구조가 필요할 수 있습니다.
두 명의 사용자가 거의 동시에 마지막 한 자리를 선택할 수 있기 때문입니다. 앱에 가능하다고 표시되었다는 이유만으로 예약을 확정하면 초과 예약이 발생할 수 있습니다.
3. 주문
주문 기능에서는 상품을 장바구니에 담는 화면뿐 아니라 주문 시점의 가격과 옵션, 배송지, 할인 조건을 서버에서 검증해야 합니다.
주요 확인 항목은 다음과 같습니다.
- 상품과 옵션의 판매 가능 상태
- 현재 재고
- 회원 등급이나 거래처별 가격
- 쿠폰 중복 사용 규칙
- 배송비 계산
- 주문 취소 가능 상태
- 부분 취소와 부분 환불
- 품절 또는 가격 변경 시 처리
- 주문 당시 상품 정보 보존
상품명이 나중에 변경되더라도 과거 주문서에는 주문 당시의 상품명과 가격이 남아야 할 수 있습니다. 따라서 현재 상품 정보와 주문 시점 정보를 어떻게 저장할지도 개발 범위에 영향을 줍니다.
4. 결제
결제 화면이 정상적으로 열리고 사용자가 결제 완료 페이지를 확인했다고 해서 서비스 내부의 주문이나 예약까지 정상적으로 확정되었다고 볼 수는 없습니다.
외부 결제는 다음과 같은 예외 상황을 고려해야 합니다.
- 결제는 승인됐지만 앱이 종료된 경우
- 결제 성공 후 서버 저장이 실패한 경우
- 같은 승인 결과가 여러 번 전달된 경우
- 주문은 생성됐지만 결제가 실패한 경우
- 부분 취소가 필요한 경우
- 운영자가 관리자에서 환불해야 하는 경우
- 결제사 상태와 내부 상태가 다른 경우
따라서 주문 상태와 결제 상태를 분리하고, 결제사의 최종 결과를 서버에서 확인하거나 웹훅으로 동기화하는 구조를 검토해야 합니다.
관리자 페이지에서도 주문 번호, 결제 번호, 승인 금액, 취소 금액, 현재 상태, 실패 원인 등을 확인할 수 있어야 고객 문의에 대응하기 쉽습니다.
5. 알림
푸시 알림은 앱에서 메시지를 보여주는 기능처럼 보이지만 발송 대상과 시점은 주로 서버의 데이터와 업무 상태를 기준으로 결정됩니다.
Firebase Cloud Messaging의 공식 구조에서도 자동화된 메시지 요청과 다양한 메시지 유형을 처리하려면 앱 서버나 Cloud Functions와 같은 신뢰할 수 있는 서버 환경이 필요하다고 설명합니다. 또한 기기가 오프라인이거나 토큰이 변경되는 등 전달 결과에 영향을 주는 조건이 있으므로, 발송 요청 성공을 사용자 수신 완료와 같은 의미로 보기는 어렵습니다. (firebase.google.com)
알림 기능을 요구사항에 포함할 때는 다음을 정해야 합니다.
- 어떤 상태에서 알림을 보낼 것인가?
- 누가 알림 대상인가?
- 사용자별 수신 설정을 제공할 것인가?
- 알림을 눌렀을 때 어떤 화면으로 이동하는가?
- 로그아웃 상태에서는 어떻게 처리하는가?
- 이미 취소되거나 삭제된 내용의 알림은 어떻게 처리하는가?
- 발송 내역을 관리자에서 확인할 것인가?
- 실패하거나 만료된 기기 토큰을 어떻게 관리할 것인가?
“푸시 알림 연동”이라는 한 줄만으로는 이러한 범위가 충분히 전달되지 않습니다.
운영자가 사용할 관리자 페이지 설계하기
앱개발업체에 상담할 때 자주 빠지는 항목이 관리자 시스템입니다.
앱이 출시되면 회원 문의, 예약 변경, 주문 취소, 결제 확인, 콘텐츠 수정, 신고 처리처럼 운영자가 직접 처리해야 할 일이 발생합니다.
관리자 페이지가 없다면 개발자가 데이터베이스를 직접 확인하거나 운영팀이 별도의 엑셀 파일을 만들어 관리하게 될 수 있습니다.
관리자 기능은 메뉴 목록보다 실제 업무 순서를 기준으로 정리하는 것이 좋습니다.
예를 들어 예약 운영 업무는 다음과 같이 작성할 수 있습니다.
``text<br>신규 예약 확인<br>→ 결제 상태 확인<br>→ 예약 확정<br>→ 일정 변경 요청 처리<br>→ 사용자에게 변경 알림<br>→ 이용 완료 처리<br>→ 취소·환불 이력 확인<br>``
이 흐름을 지원하려면 다음 기능이 필요할 수 있습니다.
- 예약 목록과 상세 조회
- 기간·지점·담당자·상태별 검색
- 예약 상태 변경
- 변경 사유 입력
- 결제와 환불 내역 확인
- 사용자 알림 발송
- 작업자와 변경 시각 기록
- 엑셀 다운로드
- 역할별 접근 권한
관리자 권한도 단순히 관리자와 일반 사용자 두 종류로만 구분하기 어려울 수 있습니다.
| 관리자 유형 | 필요한 권한 예시 |<br>|---|---|<br>| 상담 담당자 | 회원·예약 조회, 메모 작성 |<br>| 운영 담당자 | 예약 확정·변경·취소 |<br>| 정산 담당자 | 결제·환불·정산 조회 |<br>| 콘텐츠 담당자 | 배너·공지·상품 수정 |<br>| 최고 관리자 | 계정·권한·전체 설정 관리 |
메뉴를 보이지 않게 하는 것과 서버에서 실제 접근을 차단하는 것은 다릅니다. 권한이 없는 사용자가 주소나 API를 직접 호출해도 데이터에 접근하지 못하도록 서버의 권한 검사가 함께 적용되어야 합니다.
또한 운영자가 중요한 데이터를 변경할 수 있다면 다음 기록을 남길지 검토해야 합니다.
- 작업한 관리자
- 작업 시각
- 변경한 항목
- 변경 전 값
- 변경 후 값
- 변경 사유
- 관련 예약·주문·회원 번호
모든 데이터를 같은 수준으로 기록할 필요는 없지만 예약 상태, 결제, 환불, 회원 권한처럼 고객 응대나 정산에 영향을 주는 정보는 변경 이력이 유용할 수 있습니다.
원소프트가 개발한 포토부스 플랫폼에서도 사용자 서비스와 파트너 운영 페이지, 슈퍼 관리자 페이지를 분리했습니다. 사용자는 매장과 이벤트를 탐색하고 촬영 결과를 확인하며, 파트너는 매장·이벤트·촬영 템플릿을 관리하고, 슈퍼 관리자는 전체 운영 데이터를 관리하도록 역할을 구분했습니다.
이처럼 관리자 시스템은 사용자 앱에 부가적으로 붙는 화면이 아니라 서비스 운영 주체와 업무를 반영하는 별도의 시스템으로 보는 것이 좋습니다.
iOS·Android 개발 방식과 반응형 웹 검토 기준
앱개발업체 상담 전에는 서비스가 반드시 설치형 앱이어야 하는지도 검토해야 합니다.
앱에는 다음과 같은 장점이 있습니다.
- 카메라, 위치, 블루투스 같은 기기 기능 활용
- 푸시 알림
- 앱 아이콘을 통한 반복 접근
- 모바일 환경에 맞춘 사용 경험
- 일부 데이터의 로컬 저장과 오프라인 처리
반면 다음과 같은 서비스는 반응형 웹이나 웹앱으로도 목적을 달성할 수 있습니다.
- 검색을 통해 처음 방문하는 사용자가 많은 서비스
- 별도 설치 없이 링크로 바로 접근해야 하는 서비스
- 회사 소개와 문의 접수가 중심인 서비스
- 내부 직원이 PC와 모바일을 함께 사용하는 업무 시스템
- 기기 기능을 거의 사용하지 않는 정보 조회 서비스
설치형 앱이 적합하다면 iOS와 Android를 어떤 방식으로 개발할지 결정해야 합니다.
네이티브 개발
iOS와 Android를 각각의 플랫폼 기술로 개발하는 방식입니다.
플랫폼별 기능과 디자인을 세밀하게 구현해야 하거나 특정 기기 기능을 깊게 활용해야 하는 서비스에서 검토할 수 있습니다. 다만 두 플랫폼의 개발과 테스트, 업데이트를 각각 관리해야 하므로 일정과 운영 구조를 함께 고려해야 합니다.
크로스플랫폼 개발
Flutter와 같은 프레임워크를 활용해 하나의 공통 코드 구조로 iOS와 Android 앱을 개발하는 방식입니다.
Flutter는 공식 문서에서 하나의 코드베이스를 기반으로 iOS와 Android를 포함한 여러 플랫폼용 애플리케이션을 개발할 수 있다고 설명합니다. 다만 단일 코드베이스를 사용하더라도 카메라, 위치, 알림, 로그인, 결제처럼 플랫폼 정책과 네이티브 설정이 다른 기능은 iOS와 Android에서 각각 확인하고 테스트해야 합니다. (docs.flutter.dev)
따라서 “크로스플랫폼이면 모든 개발이 절반으로 줄어든다”거나 “네이티브가 항상 더 좋다”는 식으로 단정하기보다 다음 기준을 검토해야 합니다.
- 앱에서 사용하는 기기 기능
- 플랫폼별로 다른 화면과 동작의 정도
- 기존에 보유한 기술과 소스 코드
- 출시 후 기능 업데이트 주기
- iOS·Android 동시 출시 필요성
- 개발팀과 유지보수 인력
- 웹 서비스와의 기능 공유 여부
- 향후 태블릿이나 웹 확장 가능성
원소프트의 반려묘 건강 관리 및 스마트 급식기 프로젝트는 Flutter 모바일 앱, NestJS API 서버, Next.js 관리자 웹으로 구성했습니다.
보호자가 사용하는 앱에서는 반려묘 프로필, 급식기 연결, 급여 계획, 자동화 규칙, 카메라와 알림 흐름을 제공하고, 서버는 회원 인증과 프로필 데이터를 처리하도록 역할을 나눴습니다. 운영 기능은 별도의 관리자 웹으로 확장할 수 있는 구조로 분리했습니다.
이 사례에서도 개발 방식의 선택보다 중요한 것은 사용자 앱, 기기 연동, 서버 데이터와 관리자 운영 범위를 각각 구분하는 것이었습니다.
외부 API와 소셜 로그인 연동 시 확인할 예외 처리
앱에는 결제, 소셜 로그인, 지도, 문자, 이메일, 푸시 알림, 본인 인증, OCR, AI API 등 다양한 외부 서비스가 연결될 수 있습니다.
외부 API 연동은 제공된 주소를 호출해 결과를 받는 것으로 끝나지 않습니다.
먼저 다음 내용을 확인해야 합니다.
- 필요한 기능이 실제 API로 제공되는가?
- API 신청과 계약의 주체는 누구인가?
- 개발용 계정과 운영용 계정이 분리되는가?
- 이용 요금은 누가 부담하는가?
- 호출 횟수나 사용량 제한이 있는가?
- 장애나 응답 지연 시 앱은 어떻게 동작하는가?
- 외부 서비스가 전달하는 상태와 내부 상태를 어떻게 연결하는가?
- 실패한 작업을 자동 또는 수동으로 다시 처리할 수 있는가?
- 운영자가 연동 결과를 확인할 화면이 필요한가?
소셜 로그인
소셜 로그인은 로그인 버튼을 추가하는 것보다 기존 회원과 소셜 계정을 연결하는 정책이 중요합니다.
- 동일한 이메일의 일반 회원이 이미 있을 때 통합할 것인가?
- 이메일을 제공하지 않는 경우 어떤 정보로 사용자를 구분할 것인가?
- 사용자가 소셜 서비스에서 권한을 철회하면 어떻게 처리할 것인가?
- 소셜 로그인 토큰이 만료되거나 폐기되면 다시 인증시킬 것인가?
- 탈퇴 시 연결된 인증 정보도 해제할 것인가?
OAuth 기반 연동에서는 액세스 토큰의 만료뿐 아니라 리프레시 토큰의 만료·폐기 가능성도 처리해야 합니다. Google 공식 권장사항도 장기 접근용 토큰을 사용하는 서비스는 토큰이 무효화되거나 만료되는 상황에 대응해야 한다고 안내합니다. (developers.google.com)
결제 연동
결제에서는 승인, 실패, 취소, 부분 취소, 중복 통지와 내부 주문 상태 불일치까지 고려해야 합니다.
특히 외부 결제 결과를 받은 뒤 내부 데이터 저장이 실패할 수 있으므로 운영자가 불일치 건을 검색하고 다시 확인할 수 있는 기능이 필요할 수 있습니다.
푸시 알림
푸시 알림도 외부 서비스에서 발송 요청을 정상적으로 받았다는 사실과 실제 사용자의 기기에 표시되었다는 사실을 구분해야 합니다.
사용자가 알림 권한을 거부했거나, 기기가 오프라인이거나, 토큰이 더 이상 유효하지 않을 수 있습니다. 앱이 실행 중인지 백그라운드 상태인지에 따라서도 메시지 처리 방식이 달라질 수 있습니다. (firebase.google.com)
외부 연동 요구사항에는 정상 상황보다 실패 상황을 함께 적는 것이 좋습니다.
```text<br>정상 흐름:<br>결제 승인 → 주문 확정 → 사용자 알림
예외 흐름:<br>결제 승인 → 주문 저장 실패<br>→ 오류 기록<br>→ 관리자 확인<br>→ 결제 상태 재조회<br>→ 주문 확정 또는 환불 처리<br>```
이 정도로 정리하면 앱개발업체도 단순 API 연결과 운영 가능한 연동 구조를 구분해 견적을 작성할 수 있습니다.
테스트·스토어 출시·배포 범위도 개발에 포함해야 합니다
개발 화면이 완성되었다고 바로 앱을 출시할 수 있는 것은 아닙니다.
출시 전에는 운영 환경과 스토어 제출에 필요한 항목을 준비해야 합니다.
- Apple Developer와 Google Play 개발자 계정
- 앱 이름과 설명
- 앱 아이콘과 스토어 이미지
- 개인정보처리방침
- 데이터 수집·이용 정보
- 카메라·위치·알림 등 권한 요청 사유
- 회원 탈퇴와 데이터 삭제 경로
- 테스트 계정
- 심사 담당자가 확인할 기능 설명
- 서버 운영 환경과 도메인
- 오류 기록과 모니터링 방식
- 고객 문의 채널
Apple은 App Store Connect에서 개인정보처리방침 주소와 앱 및 제3자 구성 요소가 수집하는 데이터 처리 내용을 제출하도록 요구합니다. Google Play에서도 민감하거나 위험도가 높은 권한을 사용하는 앱은 출시 과정에서 권한 사용에 관한 별도 신고와 검토가 필요할 수 있습니다. (developer.apple.com)
따라서 견적서에는 다음 업무가 포함되어 있는지 확인해야 합니다.
- 개발사 내부 기능 테스트
- iOS 실기기 테스트
- Android 실기기 테스트
- 화면 크기와 OS 버전별 확인
- 외부 API 테스트 계정 연동
- 운영 서버 배포
- 앱 빌드와 서명
- 스토어 등록 자료 입력
- 심사 제출
- 심사 반려 사항 수정
- 출시 후 초기 오류 대응
“스토어 출시 지원”이라는 문구만 있다면 어디까지 지원하는지 구체적으로 물어보는 편이 좋습니다.
앱 빌드 파일만 전달하는 것인지, 실제 스토어 등록과 심사 제출까지 진행하는지, 심사 반려 후 수정이 몇 회 포함되는지에 따라 범위가 달라질 수 있습니다.
소스코드와 계정 인수인계 범위 확인하기
외주 개발에서 인수인계는 소스코드 압축 파일을 받는 것으로 끝나지 않습니다.
서비스를 계속 운영하려면 다음 자산을 누가 소유하고 관리하는지 확인해야 합니다.
- iOS 앱 소스코드
- Android 앱 소스코드
- 백엔드 서버 소스코드
- 관리자 페이지 소스코드
- 데이터베이스 구조와 백업
- 서버와 클라우드 계정
- 도메인과 DNS
- Apple Developer 계정
- Google Play Console 계정
- Firebase와 푸시 설정
- 결제사와 소셜 로그인 계정
- 디자인 원본
- API 문서
- 배포 방법과 환경 변수 목록
스토어 계정은 가능하면 의뢰 기업이 소유하고 개발업체를 필요한 권한으로 초대하는 방식을 검토할 수 있습니다.
Apple Developer Program은 Account Holder가 계약 동의와 멤버십 관리 등의 책임을 담당하고, 조직 계정에서는 역할에 따라 팀원의 접근 범위를 나눌 수 있습니다. Google Play Console도 계정 소유자·관리자·사용자에 따라 접근 권한을 나누고 특정 앱에만 권한을 부여할 수 있습니다. (developer.apple.com)
개발업체의 개인 계정이나 업체 소유 계정으로 앱을 출시하면 계약 종료나 업체 변경 시 이전 절차가 복잡해질 수 있습니다.
다음 질문을 계약 전에 확인하는 것이 좋습니다.
- 각 스토어 계정은 누구 명의로 개설하는가?
- 서버와 클라우드 비용은 누가 직접 결제하는가?
- 소스코드는 언제, 어떤 방식으로 전달되는가?
- 데이터베이스 구조와 API 문서가 제공되는가?
- 배포를 재현할 수 있는 안내가 제공되는가?
- 외부 서비스 계정의 최고 관리자 권한은 누구에게 있는가?
- 개발 종료 후 업체의 접근 권한은 어떻게 회수하는가?
- 유지보수 업체가 바뀔 때 기술 인계가 가능한가?
업체별 앱개발 견적을 같은 기준으로 비교하는 방법
앱개발업체의 견적을 비교할 때는 총액만 나란히 놓기보다 시스템별 포함 범위를 표로 정리하는 것이 좋습니다.
| 확인 항목 | 업체 A | 업체 B | 업체 C |<br>|---|---|---|---|<br>| 요구사항 정리와 기획 | | | |<br>| UX/UI 디자인 | | | |<br>| iOS 앱 | | | |<br>| Android 앱 | | | |<br>| 백엔드 API | | | |<br>| 데이터베이스 | | | |<br>| 관리자 페이지 | | | |<br>| 결제·로그인·알림 연동 | | | |<br>| 테스트 | | | |<br>| 서버 배포 | | | |<br>| 스토어 제출 | | | |<br>| 심사 대응 | | | |<br>| 소스코드 전달 | | | |<br>| 문서와 계정 인수인계 | | | |<br>| 하자 수정 | | | |<br>| 출시 후 유지보수 | | | |
같은 기능명도 업체마다 다르게 해석할 수 있으므로 기능별 상세 범위도 확인해야 합니다.
예를 들어 견적서에 ‘회원 관리’가 적혀 있다면 다음 중 어디까지 포함되는지 물어볼 수 있습니다.
- 회원가입과 로그인
- 이메일 인증
- 비밀번호 재설정
- 소셜 로그인
- 회원 탈퇴
- 이용 정지
- 관리자 회원 검색
- 활동 이력 확인
- 개인정보 마스킹
- 엑셀 다운로드
- 권한 변경
- 변경 이력
‘알림 기능’도 마찬가지입니다.
- 푸시 알림 수신
- 서버 자동 발송
- 관리자 수동 발송
- 예약 발송
- 대상자 조건 설정
- 알림함
- 읽음 처리
- 딥링크
- 수신 설정
- 발송 이력
총액이 낮은 견적이 잘못된 것은 아닙니다.
초기 버전에서는 운영자가 일부 업무를 수작업으로 처리하고, 자동화 기능을 이후에 추가하는 방식도 가능합니다. 다만 무엇이 제외되었고 출시 후 어떤 업무를 사람이 처리해야 하는지를 알고 선택해야 합니다.
앱개발업체 상담 전 체크리스트
아래 항목을 모두 확정할 필요는 없습니다. 현재 알고 있는 내용과 상담이 필요한 내용을 구분해 전달하는 것만으로도 도움이 됩니다.
서비스와 사용자
- [ ] 앱이 해결하려는 문제를 한 문장으로 정리했다.
- [ ] 주요 사용자 유형을 구분했다.
- [ ] 사용자별 핵심 행동을 정리했다.
- [ ] 첫 출시에서 검증할 흐름을 정했다.
- [ ] 반응형 웹보다 앱이 적합한 이유를 검토했다.
앱과 백엔드
- [ ] 앱에서 입력하고 확인할 정보를 정리했다.
- [ ] 서버에서 판단해야 할 업무 규칙을 정리했다.
- [ ] 저장해야 할 데이터와 보관 기간을 검토했다.
- [ ] 사용자 유형별 권한을 구분했다.
- [ ] 실패·취소·중복 요청 상황을 정리했다.
관리자 시스템
- [ ] 운영자가 반복적으로 처리할 업무를 적었다.
- [ ] 회원·예약·주문·결제 조회 범위를 정했다.
- [ ] 검색과 필터 조건을 정리했다.
- [ ] 운영자별 권한을 구분했다.
- [ ] 변경 이력이 필요한 데이터를 확인했다.
- [ ] 일괄 처리와 엑셀 다운로드 필요성을 검토했다.
외부 연동
- [ ] 결제·로그인·알림·지도 등 연동 목록을 작성했다.
- [ ] 외부 서비스 계약 주체를 정했다.
- [ ] 운영 비용과 호출 제한을 확인할 담당자를 정했다.
- [ ] 외부 장애 시 처리 방식을 검토했다.
- [ ] 실패 건을 운영자가 확인할 방법을 정했다.
출시와 인수인계
- [ ] Apple과 Google 개발자 계정의 소유자를 정했다.
- [ ] 개인정보처리방침 준비 담당자를 정했다.
- [ ] 테스트와 스토어 심사 대응 범위를 확인했다.
- [ ] 서버와 외부 서비스 계정의 소유자를 정했다.
- [ ] 소스코드와 디자인 원본 전달 조건을 확인했다.
- [ ] 하자 수정과 유지보수 범위를 구분했다.
앱 화면이 아니라 운영 가능한 시스템을 기준으로 상담해야 합니다
앱 개발의 범위는 사용자가 보는 모바일 화면에서 끝나지 않습니다.
사용자가 로그인하고 예약하거나 결제하는 행동 뒤에는 인증, 데이터 저장, 상태 관리, 외부 서비스 연동과 운영자의 후속 업무가 이어집니다.
따라서 앱개발업체를 비교할 때는 다음 다섯 영역을 나누어 확인하는 것이 좋습니다.
- 사용자가 이용하는 앱
- 업무 규칙을 처리하는 서버
- 정보를 저장하는 데이터베이스
- 운영자가 사용하는 관리자 시스템
- 출시·배포·유지보수와 계정 인수인계
모든 기능을 첫 버전에 포함할 필요는 없습니다.
핵심 사용자 행동과 서비스를 운영하기 위해 반드시 필요한 기능을 먼저 개발하고, 고급 통계·마케팅 자동화·복잡한 권한·추가 플랫폼 지원은 실제 운영 데이터를 확인한 뒤 확장할 수 있습니다.
중요한 것은 기능을 무조건 줄이는 것이 아니라, 1차 출시에서 누가 어떤 업무를 수행하고 어떤 부분을 시스템이 처리할지 명확하게 정하는 것입니다.
원소프트는 웹·앱·AI와 관리자 시스템 개발을 진행할 때 사용자 화면뿐 아니라 백엔드, 데이터 구조, 운영자의 업무와 향후 확장 범위를 함께 검토합니다.
현재 준비한 화면 목록이나 간단한 서비스 설명만 있더라도 사용자 앱, 서버, 관리자 시스템과 외부 연동으로 나누어 개발 범위를 정리할 수 있습니다.
원소프트는 경기도 화성시 동탄순환대로 823, 영천동 에이팩시티에 위치하고 있습니다. 앱 개발을 검토하고 계신다면 현재 정리된 요구사항과 운영 방식을 바탕으로 필요한 시스템 범위를 함께 살펴볼 수 있습니다.
제목 후보
- 앱개발업체 상담 전, 앱·서버·관리자 시스템의 역할을 나누는 방법
- 앱개발업체 견적 비교, 사용자 앱과 백엔드·관리자 범위를 구분하세요
- 앱개발업체 문의 전 확인할 개발 범위, 앱 화면만 정하면 부족합니다
- 앱개발 외주 범위 정리, 모바일 앱·서버·데이터베이스·관리자 구분법
- 앱개발업체 선정 전, 기능별 시스템 역할과 견적 포함 항목 확인하기
추천 제목
앱개발업체 상담 전, 앱·서버·관리자 시스템의 역할을 나누는 방법
메인 키워드
앱개발업체
서브 키워드
- 앱개발외주
- 앱개발견적
- 모바일앱개발
- 백엔드개발
- 관리자시스템개발
추천 해시태그
#앱개발업체 <br>#앱개발외주 <br>#모바일앱개발 <br>#백엔드개발 <br>#관리자시스템개발 <br>#앱개발견적 <br>#Flutter앱개발 <br>#동탄앱개발 <br>#화성앱개발 <br>#경기남부개발업체
썸네일 문구
- 앱·서버·관리자 역할 구분
- 앱 견적 범위 확인하기
- 화면 밖의 시스템까지
글 요약
앱개발업체에 상담하기 전에는 모바일 앱의 화면 목록뿐 아니라 백엔드 서버, 데이터베이스, 관리자 시스템과 외부 연동의 역할을 구분해야 합니다. 회원·예약·주문·결제·알림 기능별로 필요한 처리 범위와 예외 상황을 정리하고, 테스트·스토어 출시·소스코드 및 계정 인수인계까지 같은 기준으로 확인해야 업체별 견적을 현실적으로 비교할 수 있습니다.
CTA 후보
- 준비한 기능 목록이 앱 화면 위주로 구성되어 있다면, 실제 운영에 필요한 서버·데이터베이스·관리자 기능이 무엇인지 함께 나누어 검토해드릴 수 있습니다.
- 앱개발업체에 견적을 요청하기 전 사용자 흐름과 운영 업무를 정리하고 싶다면, 현재 기획 자료를 기준으로 1차 개발 범위와 추후 확장 범위를 함께 살펴볼 수 있습니다.
관련 포트폴리오
- catpy_app - 반려묘 건강 관리 및 스마트 급식 플랫폼
- Flutter 모바일 앱, NestJS API 서버, Next.js 관리자 웹을 분리한 시스템 구조
- 반려묘 프로필, 급식기 연결, 급여 계획, 자동화 규칙, 카메라와 알림 기능의 역할 구분
- 모바일 앱의 사용자 경험과 서버 인증·데이터 처리, 운영 기능을 분리한 부분 참고
- realty-friend - 매장 운영 및 포토부스 이벤트 플랫폼
- 사용자 서비스, 파트너 운영 페이지, 슈퍼 관리자 페이지와 NestJS API 서버 구성
- 사용자·파트너·관리자 권한 분리와 매장·이벤트·촬영 결과 운영 구조
- 결제 웹훅과 내부 구독 상태 동기화, 외부 연동 예외 처리 부분 참고
다음에 작성하면 좋은 연관 글
- 앱 백엔드 개발, 로그인·데이터 저장·상태 관리 범위를 정하는 방법
- 앱 관리자 페이지 개발, 회원·결제·알림 운영 기능을 설계하는 기준
- 앱 스토어 출시 대행 범위, 계정·심사·개인정보·인수인계 확인 방법
