jayeon@portfolio — jsh — 92×34
jayeon@portfolio~/projects%cat projects/ooair.md
전자결재 — 변경에 강한 데이터 기반 결재선 (단독)
문제: 업무·등급마다 결재선이 다르고 조직·정책 변경이 잦음. 코드 고정은 불가.
설계: 업무×등급 조합 단위로 관리자 포털에서 결재선 설정, 결재 생성 시 결재선 스냅샷 복제. 방문·주차·차량·권한 등 여러 결재 유형이 같은 엔진을 재사용.
효과: 운영 중 결재선이 바뀌어도 진행 중 문서는 영향 없음. 변경 대응을 개발→운영 설정으로 이전.
방문예약·QR 출입증 — 예약→결재→암호화 QR 발급 (단독)
문제: 오프라인 임시 출입증은 대기·수기 확인이 많고, 방문 시간대·구역별 권한을 매번 조정하기 번거로움.
설계: 방문 예약→전자결재 승인→방문 당일 암호화 QR 발급을 한 흐름으로 연결. 승인 단계에서 출입 시간대·구역을 지정하면 게이트가 시간 기반 출입을 강제하고, QR은 방문 당일에만 발급하며 방문 기간 밖 요청은 거부.
효과: 상시 권한·수기 출입증 없이 예약 기반으로 출입을 통제. QR 당일 발급·기간 검증으로 사전 공유·재사용 위험을 차단.
알림 — 외부 연동 비동기화 + 추적성 (단독)
문제: 외부 메시징 솔루션이 비동기·수신 시점 성공만 응답. 미수신 클레임 원인 규명 곤란.
설계: 알림 API 전체 비동기 설계로 핵심 트랜잭션 분리 + 발송 요청 이력 별도 저장.
효과: 결재 승인이 알림에 영향받지 않음. 미수신 시 "요청 누락 vs 외부 발송 문제" 즉시 구분.
메뉴·권한 — 역할 기반(RBAC) 접근 제어 (단독)
문제: 서비스·화면이 늘면서 역할별 노출 메뉴·접근 범위를 코드에 고정하기 어려움.
설계: 메뉴·역할·역할-메뉴·사원-역할 모델로 RBAC 구성. 사원 단위로 역할→접근 가능 메뉴를 해석해 평면·트리 두 형태로 제공.
효과: 역할 설정만으로 화면 노출·접근을 운영에서 제어. 관리자·모바일 UI가 동일 데이터로 다른 형태를 사용.
출입 게이트 — 다계층 권한 관리 + 외부 연동 복원력 (협업)
문제: 사람 단위 권한 부여는 조직 개편 같은 대량 변경에 취약하고, 외부 출입통제 솔루션 호출 실패 시 하드웨어와 DB 권한이 어긋남.
설계: 개인·팀·부서 3계층 권한 모델로 대량 변경을 지원하되, 상위 권한 회수 시 개인 권한으로 이미 커버되는 출입은 남기는 선택적 회수. 팀·부서 대량 처리 중 외부 호출이 실패하면 DB 권한을 개인 단위로 낮추고 담당자에게 비동기 통보 후 수동 재시도를 허용(개인 단위는 트랜잭션 롤백).
효과: 대량 권한 변경 시 의도치 않은 출입 차단 방지. 외부 연동 장애에도 게이트 접근이 유지되고 데이터 손실 없이 복구.
출입이력 수집 배치 — 장애 복구 안전장치 (협업)
문제: 외부 솔루션 장애로 이력 누락 시 조회 불가, 상시 감시 어려움.
설계: (1) 다음 주기 실패 구간 재수집 (2) 실패 시 알림 서비스 연동으로 담당자 통보 (3) 수동 복구 API.
효과: 자동 인지·복구로 운영 안정성 확보.
```mermaid
graph LR
  subgraph "4개 단독 서비스 (김자연 설계)"
    A[방문예약 서비스] --> B[전자결재 서비스]
    B --> C[출입증QR 서비스]
    D[알림 서비스]
  end
  B -->|결재 완료 이벤트| D
  C -->|QR 발행| E[모바일 앱]
  D -->|이메일/SMS| F[외부 메시징 솔루션]
  G[출입이력 수집 배치] -->|API 폴링| H[외부 출입통제 솔루션]
  I[관리자 포털] -->|결재선 설정| B
  J[SSO 인증] -->|인증| A
```
시스템 아키텍처 — 4개 서비스·외부 연동 구조
```mermaid
sequenceDiagram
  participant 담당자
  participant 전자결재서비스
  participant DB
  participant 배치

  담당자->>전자결재서비스: 결재 생성 요청
  전자결재서비스->>DB: 결재선 설정 조회
  전자결재서비스->>DB: 결재선 스냅샷 복제 저장
  Note over 전자결재서비스,DB: 이후 결재선 변경 영향 없음

  loop 출입이력 수집 배치
    배치->>외부출입통제솔루션: 이력 수집 API 호출
    alt 실패
      배치->>배치: (1) 다음 주기 실패 구간 재수집
      배치->>담당자이메일: (2) 자동 통보
      Note over 배치: (3) 수동 복구 API 별도 제공
    end
  end
```
결재선 스냅샷 + 출입이력 수집 3중 안전장치 시퀀스
2024.03 — 2025.09 · 미로아이티㈜ (정규직)

OO항공 출입보안 시스템 구축

오프라인 임시 출입증 절차를 온라인 방문예약→결재→QR 출입증으로 전환한 MSA 출입보안 시스템. 10개 백엔드 서비스 중 4개를 단독 설계·개발(약 93개 API)했고, 시스템의 중심인 출입 게이트 서비스를 협업으로 개발.

Java 17Spring BootJPAQueryDSLPostgreSQLSSO

전자결재 — 변경에 강한 데이터 기반 결재선 (단독)

문제
업무·등급마다 결재선이 다르고 조직·정책 변경이 잦음. 코드 고정은 불가.
설계
업무×등급 조합 단위로 관리자 포털에서 결재선 설정, 결재 생성 시 결재선 스냅샷 복제. 방문·주차·차량·권한 등 여러 결재 유형이 같은 엔진을 재사용.
효과
운영 중 결재선이 바뀌어도 진행 중 문서는 영향 없음. 변경 대응을 개발→운영 설정으로 이전.

방문예약·QR 출입증 — 예약→결재→암호화 QR 발급 (단독)

문제
오프라인 임시 출입증은 대기·수기 확인이 많고, 방문 시간대·구역별 권한을 매번 조정하기 번거로움.
설계
방문 예약→전자결재 승인→방문 당일 암호화 QR 발급을 한 흐름으로 연결. 승인 단계에서 출입 시간대·구역을 지정하면 게이트가 시간 기반 출입을 강제하고, QR은 방문 당일에만 발급하며 방문 기간 밖 요청은 거부.
효과
상시 권한·수기 출입증 없이 예약 기반으로 출입을 통제. QR 당일 발급·기간 검증으로 사전 공유·재사용 위험을 차단.

알림 — 외부 연동 비동기화 + 추적성 (단독)

문제
외부 메시징 솔루션이 비동기·수신 시점 성공만 응답. 미수신 클레임 원인 규명 곤란.
설계
알림 API 전체 비동기 설계로 핵심 트랜잭션 분리 + 발송 요청 이력 별도 저장.
효과
결재 승인이 알림에 영향받지 않음. 미수신 시 "요청 누락 vs 외부 발송 문제" 즉시 구분.

메뉴·권한 — 역할 기반(RBAC) 접근 제어 (단독)

문제
서비스·화면이 늘면서 역할별 노출 메뉴·접근 범위를 코드에 고정하기 어려움.
설계
메뉴·역할·역할-메뉴·사원-역할 모델로 RBAC 구성. 사원 단위로 역할→접근 가능 메뉴를 해석해 평면·트리 두 형태로 제공.
효과
역할 설정만으로 화면 노출·접근을 운영에서 제어. 관리자·모바일 UI가 동일 데이터로 다른 형태를 사용.

출입 게이트 — 다계층 권한 관리 + 외부 연동 복원력 (협업)

문제
사람 단위 권한 부여는 조직 개편 같은 대량 변경에 취약하고, 외부 출입통제 솔루션 호출 실패 시 하드웨어와 DB 권한이 어긋남.
설계
개인·팀·부서 3계층 권한 모델로 대량 변경을 지원하되, 상위 권한 회수 시 개인 권한으로 이미 커버되는 출입은 남기는 선택적 회수. 팀·부서 대량 처리 중 외부 호출이 실패하면 DB 권한을 개인 단위로 낮추고 담당자에게 비동기 통보 후 수동 재시도를 허용(개인 단위는 트랜잭션 롤백).
효과
대량 권한 변경 시 의도치 않은 출입 차단 방지. 외부 연동 장애에도 게이트 접근이 유지되고 데이터 손실 없이 복구.

출입이력 수집 배치 — 장애 복구 안전장치 (협업)

문제
외부 솔루션 장애로 이력 누락 시 조회 불가, 상시 감시 어려움.
설계
(1) 다음 주기 실패 구간 재수집 (2) 실패 시 알림 서비스 연동으로 담당자 통보 (3) 수동 복구 API.
효과
자동 인지·복구로 운영 안정성 확보.
시스템 아키텍처 — 4개 서비스·외부 연동 구조
결재선 스냅샷 + 출입이력 수집 3중 안전장치 시퀀스