조형준DATA PORTFOLIO
CASE 07 / 개인 운영 / 업무 개선

개인 ETF 자동적립 시스템

중복 요청 방지와 조회 전용 기록 기능

핵심 요약

중복 요청을 막고, 주문과 분리된 조회·기록 기능을 만들었습니다.

상태 복구 · 조회 전용 HTML/JSON · 8월 13일 구현 기록

내 역할상태 관리, API 응답 처리, 회귀 검증, AWS 배포·복구

도구Python · 외부 API · AWS EC2/S3 · systemd

기록2026.07.20 상태 복구 / 08.13 조회 전용 기록 기능

기존 요약 PDF

작업 배경 · 외부 API의 불명확한 응답에서 처리 상태를 복구하고, 주문 기능과 분리된 조회 전용 기록 페이지를 구현했습니다.

장애 복구: 2026.07.20 / 조회 전용 기록 기능: 2026.08.13

웹 작업 기록 QR 코드

웹 작업 기록QR 또는 제목 링크로 상세 내용 열기

업무 결과

작성한 자료와 확인한 결과

응답이 불명확할 때 무조건 다시 요청하지 않고 이전 처리 결과를 조회해 상태를 복구했습니다.

확정 결과의 중복 반영을 막고 회귀 검증을 수행했습니다. 이후 조회 전용 HTML·JSON 기록 기능을 추가해 상태 보관과 주문 실행을 분리했습니다.

CODE & VALIDATION

코드 구성과 검증 방식

응답 해석·후속 요청 차단·실제 결과 조회·기록 반영을 구분했습니다. 기록 페이지는 조회한 snapshot만 렌더링하고 주문·매도 미리보기·확인값 생성 경로를 호출하지 않도록 구성했습니다. 공개 화면에는 계정·거래 원문을 포함하지 않습니다.

WORK LOG

작업 타임라인

7월 장애 복구와 8월 기록 기능 구현은 별도 작업입니다. 공개 도식과 데모에는 실제 계좌·거래 수치를 포함하지 않습니다.

상세 작업 기록 · 5단계 펼치기
01

2026.07.20 · 문제 확인

빈 응답 값으로 상태 확정이 멈춤

외부 API가 취소 여부를 빈 문자열로 반환하면서 내부 처리가 검토 필요 상태로 남았습니다. 필드가 존재해도 내부 검사와 실제 응답 규칙이 다를 수 있음을 확인했습니다.

확인한 결과성공·실패를 임의로 확정하지 않고 이전 요청의 실제 결과를 확인해야 하는 상태로 분류했습니다.

02

후속 요청 차단

재요청 전에 기존 결과 조회

같은 작업이 이미 처리됐을 가능성이 있어 신규 요청을 차단했습니다. 이전 요청번호를 사용해 외부 처리 결과를 다시 조회했습니다.

확인한 결과기록을 삭제하거나 동일 작업을 재전송하지 않고 확인된 결과로 복구할 기준을 확보했습니다.

03

수정·상태 복구

응답 예외를 반영하고 중복 저장 확인

필드의 존재와 타입 검사는 유지하면서 빈 문자열을 처리하도록 보완했습니다. 확인한 결과를 내부 상태와 맞추고 중복 반영 여부를 검사했습니다.

빈 응답 값 확인후속 요청 차단이전 결과 조회내부 기록 복구재검사·버전 보관

확인한 결과불명확하게 남은 처리 상태를 복구하고 결과가 한 번만 기록되는지 확인했습니다.

04

검증·버전 보관

같은 오류와 기존 기능 재검사

동일한 응답 유형을 검사 항목에 추가하고 기존 기능도 다시 확인했습니다. 수정본과 이전 코드·설정을 보관해 되돌릴 경로를 유지했습니다.

확인한 결과최종 산출물은 예외 처리 수정, 상태 복구 기록과 검증 근거입니다. 공개 화면에는 비식별한 단계 설명만 제공합니다.

05

2026.08.13 · 기능 구현

실행과 기록을 분리한 조회 전용 페이지

상태를 보관하려고 화면을 열었을 때 주문이나 매도 확인값이 생성되면 안 됐습니다. 잔고·전략 상태의 조회 결과로 HTML과 JSON을 구성하고, 매도 미리보기·주문 경로와 분리했습니다. 수량이 0인 목표 항목은 기록 대상에서 제외했습니다.

확인한 결과기록 페이지와 JSON endpoint를 추가했습니다. 8월 13일 테스트 12개 통과 기록을 확인했으며 공개 포트폴리오에는 기능 경계만 도식화했습니다.

분석 범위

개인 운영의 중복 반영 방지와 상태 복구 사례입니다. 투자 수익률 개선의 근거로 사용하지 않습니다.

장애 복구 과정 보기

2026.07.20 기록을 비식별 요약한 재생 화면입니다. 실제 계좌 조회·요청 기능은 없습니다.

세부 구현·검산·평가 조건 읽기

다시 요청하기 전에 이전 처리 결과부터 확인

2026년 7월 20일 외부 API의 취소여부 필드가 빈 문자열로 반환되면서 기존 요청을 검토 필요 상태로 남기는 문제가 발생했습니다. 신규 요청을 다시 보내거나 기록을 수동으로 삭제하지 않고 기존 식별자를 조회해 실제 결과를 확인했습니다.

문자열 필드의 존재와 타입 검사는 유지하면서 실제 응답 규칙에 맞게 빈 문자열 처리를 보완했습니다. 확정 결과가 한 번만 반영되고 감사 기록이 중복되지 않는지 확인하고, 같은 유형의 응답을 회귀 테스트에 추가했습니다.

S3에 둔 버전별 산출물과 설치 파일의 해시를 대조하고 이전 코드·실행 설정을 보존했습니다. 같은 날 별도 배포에서는 전체 테스트 481개 통과를 확인했으며, 이 장애 한 건의 테스트 개수와는 구분합니다.

개인 운영환경의 장애 복구 사례입니다. 실제 요청을 실행하지 않는 기록 조회 데모이며 금융정보·투자성과는 공개하지 않습니다.

데모에서 확인하는 내용

복구 과정의 각 단계를 선택하면 당시 확인한 상태와 판단을 읽을 수 있습니다. 실제 금융 API 연결이나 주문 기능이 없는 설명용 재생 화면입니다. 로그 원문 대신 비식별한 사건 요약만 사용합니다.

용어와 집계 단위
용어이 자료에서의 의미
API·요청 식별자외부 서비스와 주고받는 통로와, 이전 요청의 처리 결과를 다시 확인할 때 사용하는 요청번호입니다.
회귀 검증코드를 수정한 뒤 기존 기능이 유지되고 같은 오류 유형이 올바르게 처리되는지 다시 검사하는 것입니다.