샤플앤컴퍼니

샤플앤컴퍼니

운영 중인 현장 관리 서비스에서 배치 재실행과 SQS 메시지 중복 전달을 서로 구분해 처리해야 했습니다. 배치·메일 서버를 분리하고 두 단계에 다른 DB UNIQUE 제약을 적용하기로 판단했습니다. 메일 구조와 보고서 빌더를 구현하고 재실행·재전달 시나리오별 방어 범위를 대조했습니다. Exactly-once 전송을 보장하지 않는 한계를 명시해 실패 지점별 멱등 경계를 나눈 사례입니다.

회사 코드와 사용자·현장 데이터는 포함하지 않고 공개 가능한 범위에서 처리 구조를 재구성했습니다.

30초 요약

맥락
운영 중인 현장 관리 서비스에서 일괄 메일, 점검 보고서와 이슈 관리 백엔드를 개발했습니다.
문제
서버 일괄 메일의 대상 선정과 실제 전송을 분리하면서, 배치 재실행과 SQS 메시지 중복 전달을 각각 처리해야 했습니다.
판단
배치 서버와 메일 서버를 SQS로 분리하고 발송 요청과 메시지 소비 단계에 서로 다른 DB UNIQUE 제약을 적용했습니다.
역할
메일 발송 구조와 중복 방어, Kotlin DSL 보고서 공통 빌더, 현장 이슈 관리 API를 직접 구현했습니다.
결과
온보딩 메일 구조를 인보이스 발송에도 재사용했고, 점검 보고서의 라이브러리 종속 코드를 Kotlin DSL 공통 빌더로 분리했습니다.
검증
배치 재실행과 메시지 재전달 시나리오를 분리해 각 UNIQUE 키와 방어 범위를 대조했습니다.
한계
DB 제약은 확인된 두 단계의 중복 처리를 방어하지만 메일의 Exactly-once 전송이나 전체 실패 복구를 보장하지 않습니다.
증명하는 역량
재실행과 중복 전달을 하나의 추상적 멱등성으로 묶지 않고 각 실패 지점에 맞는 DB 제약으로 나누는 역량을 보여줍니다.

검증과 근거

확인 가능한 근거

주장의 적용 범위와 측정 조건을 함께 표시합니다.

  1. 사용자 확인배치 요청 생성과 메시지 소비의 중복 방지

    배치 재실행은 발송 기준일을 포함한 DB UNIQUE 제약으로, SQS 메시지 중복 전달은 메일 트랜잭션 키의 DB UNIQUE 제약으로 방어했다.

    두 단계의 중복 방어이며 Exactly-once 전송 보장이 아니다.
  2. 사용자 확인점검 보고서 생성 구조 개선

    POI 기반 점검 보고서 생성 방식을 FastExcel 기반으로 전환하고 Kotlin DSL을 사용해 반복되는 생성 흐름을 공통 빌더로 분리했다.

    회사 운영 환경의 30초에서 3초 수치는 근거가 확인되지 않아 사용하지 않는다.
  3. 사용자 확인운영 상태

    메일 발송, 점검 보고서와 현장 이슈 관리 업무는 모두 운영됐다.

사용 기술

구현에 직접 연결된 기술

보조 기술 보기
  • Spring Boot
  • AWS SES
  • JPA
  • QueryDSL
  • FastExcel
  • Apache POI
  • AWS S3

회사 내부 코드와 사용자·현장 데이터는 포함하지 않았으며, 공개 가능한 범위에서 당시 처리 구조와 책임 경계를 재구성했습니다.

경력 정보와 역할 경계

HADA 개발팀은 백엔드 개발자 2명, 리드 개발자(풀스택) 1명, 프론트엔드 개발자 1명, PM(기획) 1명과 기획자 1명으로 구성됐습니다. 이 페이지에 나열한 세 업무의 구현은 모두 직접 담당했으며, 업무별 기획자와 프론트엔드 개발자와 협업했습니다. 세 업무는 모두 운영됐습니다.

직접 담당

  • 온보딩·인보이스 메일의 대상 선정과 전송 기능 구현
  • 배치 재실행과 SQS 중복 전달에 대한 DB UNIQUE 제약 적용
  • 점검 보고서 생성 방식을 POI에서 FastExcel로 전환하고 Kotlin DSL 공통 빌더 구현
  • 현장 이슈의 상태·변경 이력과 S3 이미지 API 구현

  • 업무별 기획자·프론트엔드 개발자와 기능 요구사항 및 화면 연동 협업

외부 구성

  • AWS SQS의 메시지 전달
  • AWS SES의 실제 이메일 전송
  • Apache POI와 FastExcel의 XLSX 생성 기능
  • AWS S3의 첨부 이미지 저장

Case 3. 현장 이슈 관리

현장 이슈의 등록과 처리 상태를 관리하고, 변경 이력과 다중 이미지 첨부 기능을 구현했습니다.

현장 작업자가 이슈를 등록하고 해결 과정을 추적할 수 있는 API를 개발했습니다. 상태와 변경 이력을 관리하고, AWS S3를 연동해 여러 이미지를 첨부하거나 수정할 수 있도록 했습니다.

확인된 범위는 상태 변경 이력과 이미지 처리이며, 워크플로 엔진이나 이벤트 소싱으로 확대하지 않습니다. 실제 고객사명, 현장명과 내부 상태 코드는 공개하지 않습니다.

근거