개발 기술 · 더 알아보기 · 직접 체험형

오래 걸리는 보고서 생성, 앱과 서버는 어떻게 나눠 처리할까요?

생성 요청과 서버 실행을 나누고, 같은 작업 번호로 상태와 결과를 이어주는 개발 과정입니다.

접수와 완료 구분별도 실행 · 재진입완료 파일 접근 확인
한 보고서의 생성01요청 접수202 · 작업 번호 저장02별도 실행작업자가 파일 생성03같은 작업 재조회RPT-2101 · 상태 읽기04완료 파일 받기현재 권한 확인 후 제공접수 뒤의 실행과 결과를 같은 작업 번호로 연결합니다

작동으로 살펴보는 개발 과정

요청한 뒤, 화면을 떠나도 이어집니다

기간을 선택해 요청하고, 작업 목록에서 같은 보고서를 다시 확인해 보세요. 앱의 안내와 서버에 남은 상태를 나란히 살펴볼 수 있습니다.

생성 요청 뒤 ‘작업자 실행 허용’을 누르면 처리가 이어집니다. 사용자를 바꿔 같은 작업의 접근 권한도 확인할 수 있습니다.

시연을 별도 화면으로 열기

단계별 개발 판단과 결과물

다섯 단계가 하나의 작업으로 연결됩니다

업무 기록을 엑셀 파일로 받는 기능은 버튼을 누르는 순간 끝나지 않을 수 있습니다. 서버가 조건에 맞는 기록을 찾고, 파일을 만들고, 결과를 보관하는 동안 앱은 무엇을 보여줘야 할까요? 그 사이 화면을 닫거나 통신이 끊겼다면 어디서 다시 확인해야 할까요?

이런 기능은 생성 요청을 접수하는 일과 실제 파일을 만드는 일을 나누고, 같은 작업 번호로 진행 상태와 결과를 이어주도록 설계할 수 있습니다. 앱이 계속 기다리는 화면만 보여주는 대신, 서버에 남긴 작업을 다시 찾아 결과를 확인하게 만드는 구조입니다.

업무 관리 앱에서 기간을 선택해 엑셀 보고서 한 건을 만드는 과정을 다섯 단계로 살펴보겠습니다.

개발 단계 01

생성 요청을 작업 기록으로 남깁니다

먼저 보고서에 넣을 조건과 작업을 요청한 사람을 정합니다. 사용자가 10월 1일부터 18일까지의 업무 기록을 선택하면, 서버는 요청자가 해당 기록을 볼 수 있는지와 날짜 조건을 확인합니다. 소유자는 앱이 적어 보낸 이름을 그대로 믿는 대신 로그인 정보에서 확인합니다.

산출물과 다음 연결

이 단계의 결과물은 입력 조건과 접근 기준, 작업 기록의 저장 항목, 접수 응답과 상태 조회 API의 명세입니다. 접수 응답과 화면 문구부터 구분해야 이후의 대기·실행·완료를 같은 기준으로 연결할 수 있습니다.

접수 응답과 저장 항목 자세히 보기

조건을 통과하면 서버가 작업 번호를 부여하고 요청자·조회 기간·생성 상태를 저장하도록 설계합니다. 작업 번호 RPT-2101의 첫 상태는 ‘대기’입니다. 이때 저장하는 것은 완성된 엑셀 파일이 아니라, 누가 어떤 조건으로 무엇을 만들라고 요청했는지에 관한 작업 기록입니다.

API는 이 기록을 남긴 뒤 202 Accepted와 작업 번호, 상태를 조회할 주소를 돌려주도록 정합니다. 202 응답은 요청을 처리 대상으로 받았다는 의미이며 실제 처리가 끝났거나 반드시 성공한다는 보장은 아닙니다. 앱도 이 응답을 받으면 ‘보고서 생성 요청을 접수했습니다’라고 안내해야 합니다.

개발 단계 02

파일 생성은 별도 서버 작업자가 맡도록 나눕니다

보고서를 만드는 일까지 최초 요청 하나에 모두 넣으면, 앱은 그 응답이 올 때까지 완료 여부를 기다려야 합니다. 접수를 담당하는 API와 실제 파일을 만드는 서버 작업자를 나눕니다. 서버 작업자는 대기 중인 일을 가져와 수행하는 프로그램을 뜻합니다.

산출물과 다음 연결

이 단계의 결과물은 작업을 가져오는 규칙, 데이터 조회와 파일 생성 처리, 결과 보관과 상태 변경의 연결입니다. 앱 화면을 먼저 완료로 바꾸는 것이 아니라 서버가 실제로 마친 지점에 맞춰 상태를 남기는 것이 중요합니다.

별도 실행과 결과 보관 자세히 보기

작업자는 RPT-2101을 실행할 대상으로 확보한 뒤 상태를 ‘처리 중’으로 바꾸고, 저장된 기간과 허용된 데이터 범위로 업무 기록을 읽도록 설계합니다. 실행 시점에도 요청자가 원본 기록에 접근할 수 있는지 다시 확인합니다. 앱에서 나중에 다른 기간을 선택해도 이미 접수한 작업의 조건이 저절로 바뀌지 않게 합니다. 같은 작업을 두 작업자가 동시에 실행하지 않도록 가져오는 기준도 서버에 둡니다.

파일을 만든 뒤에는 결과를 보관하고, 그 파일이 어느 작업의 결과인지 연결해야 합니다. 파일을 쓰는 도중이거나 결과를 받을 준비가 되지 않았다면 ‘완료’로 바꾸지 않습니다. 이런 요청과 실행의 분리는 비동기 요청·응답 구조의 한 형태입니다.

개발 단계 03

앱은 같은 작업 번호로 상태를 다시 읽습니다

접수가 끝난 뒤 앱은 작업 번호로 서버의 상태를 조회합니다. 생성 상태는 ‘대기’, ‘처리 중’, ‘완료’, ‘실패’로 구분합니다. 상태 조회에 성공했다는 것과 보고서 생성이 성공했다는 것도 별개입니다. 조회 결과가 ‘처리 중’이라면 앱은 그 상태를 보여주고, 완료 파일 받기 버튼은 아직 열지 않습니다.

산출물과 다음 연결

이 단계의 결과물은 상태 조회와 작업 목록을 연결한 앱 화면입니다. 재진입했을 때도 서버가 저장한 상태를 읽어야 같은 보고서를 불필요하게 다시 만들지 않을 수 있습니다.

상태 재조회와 재진입 자세히 보기

상태를 확인하기 위해 매 순간 요청을 보낼 필요는 없습니다. 화면이 열려 있을 때 정해진 간격으로 조회하고, 화면을 벗어나면 반복 조회를 멈추도록 구성할 수 있습니다. 다시 들어왔을 때는 새 생성 요청 대신 기존 작업 기록부터 읽습니다. 실제 처리량을 알 수 없다면 시간이 지났다는 이유로 진행률을 만들어 올리지 않습니다.

새로고침과 재진입을 이어주려면 현재 화면의 기억에만 작업 번호를 보관해서는 부족합니다. 서버에 요청자의 작업 기록을 남기고, 앱이 본인의 작업 목록이나 상세 화면에서 같은 번호를 다시 찾도록 설계합니다. 화면을 닫는 행동과 서버 작업을 취소하는 행동도 구분합니다.

개발 단계 04

응답 지연과 확인된 실행 실패를 구분합니다

처리 중인 작업의 상태 조회가 늦거나 끊겼다고 해서 보고서 생성까지 실패한 것은 아닙니다. 서버 작업자는 계속 실행 중일 수 있습니다. 앱은 마지막으로 확인한 상태와 ‘현재 상태를 다시 확인해야 합니다’라는 안내를 구분해 보여주고, 연결이 돌아오면 같은 작업 번호로 재조회하도록 설계합니다.

산출물과 다음 연결

이 단계의 결과물은 실행 상태와 통신 상태를 나눈 오류 처리, 실패 이유, 재확인·재처리 규칙입니다. ‘잘 안 되면 다시 생성’이라는 안내 대신, 무엇이 확인됐고 다음에는 어느 작업을 확인할지 이어줘야 합니다.

통신 오류와 재처리 자세히 보기

반면 작업자가 파일 생성이나 보관을 끝내지 못했다는 결과를 기록했다면 실행 실패로 다룰 수 있습니다. 이때는 실패 이유와 해당 시도를 남기고, 불완전한 파일을 완료 결과로 제공하지 않습니다. 단순히 오래 걸린다는 이유만으로 실패를 확정하지 않는 것입니다.

예를 들어 결과 파일을 보관하는 단계에서 실패가 확인됐다면, 기존 작업과 요청 조건을 유지한 채 재처리 여부를 결정할 수 있습니다. 재처리를 허용할 때도 서버가 현재 상태와 시도 기록을 확인해야 합니다. 이미 다시 처리 중인 일을 버튼을 한 번 더 눌렀다고 별도로 시작하지 않게 하는 기준이 필요합니다.

최초 접수 응답 자체를 받지 못한 경우에도 새 작업부터 만들면 안 됩니다. 요청을 구분하는 값과 서버의 접수 기록을 대조해 같은 요청의 작업이 있는지 먼저 확인하도록 정합니다. 이 글의 중심은 접수 이후의 실행 구조이며, 요청 유실과 중복 방지의 세부 처리는 별도로 연결되는 문제입니다.

개발 단계 05

완료 파일을 받을 때도 접근 권한을 확인합니다

파일이 준비되면 서버는 결과 파일과 RPT-2101의 관계를 저장하고 생성 상태를 ‘완료’로 바꾸도록 설계합니다. 앱은 상태를 다시 읽은 뒤 파일 받기 버튼을 표시합니다. 작업 기록에는 선택한 기간과 생성 상태를 함께 보여줘 사용자가 어떤 결과를 받는지 알 수 있게 합니다.

개발 구조의 핵심

오래 걸리는 작업을 나누는 개발은 접수 응답을 빨리 보내는 데서 끝나지 않습니다. 요청 조건과 소유자를 기록하고, 별도 실행의 상태와 결과를 남기며, 앱이 재진입해도 같은 작업을 확인하고 권한에 맞는 파일을 받게 연결하는 것이 이 구조의 핵심입니다.

파일 권한과 데이터 시점 자세히 보기

하지만 작업 번호나 파일 주소를 안다는 이유만으로 누구나 결과를 받아서는 안 됩니다. 서버는 작업 상태를 조회할 때와 파일을 받을 때 각각 현재 요청자의 접근 권한을 확인해야 합니다. 화면에서 버튼을 숨기는 것만으로 파일을 보호할 수는 없습니다. OWASP 권한 관리 안내도 개별 요청과 파일 같은 자원에 대한 접근 확인을 강조합니다.

또한 보고서 조건을 저장했다고 요청 당시의 모든 데이터 값까지 고정되는 것은 아닙니다. 여기서는 작업자가 조회할 때의 업무 기록을 사용하도록 정합니다. 접수 시점의 값이 그대로 필요한 보고서라면 데이터를 고정하는 별도 기준이 필요합니다.

우리 서비스의 오래 걸리는 작업을 함께 살펴보세요

보고서·파일 생성처럼 처리 결과를 기다려야 하는 기능을 알려주세요. 요청과 실제 실행을 나눌 범위, 앱에서 보여줄 상태와 결과 확인 방법을 30분 상담에서 함께 정리합니다.

30분 무료 상담 신청
앱이 만들어지는 방식으로 돌아가기