00항공 물리 보안 통합 시스템
임직원·협력사·방문객의 출입 권한 신청/승인, 방문 관리, 출입 이력, 주차, 보안 카드·게이트 연동, 외부 인사 시스템 연동을 통합 제공하는 MSA 기반 출입보안 플랫폼입니다. 요구사항 정의·서비스 범위 분리·시스템 설계·개발환경 인프라·CI/CD를 총괄했고, HR·출입권한·Auth·파일 서비스와 개발환경 Gateway를 직접 개발했습니다.
Role & Scope
출입보안 MSA 플랫폼의 요구사항 정의부터 인프라·배포·핵심 서비스 개발까지 총괄했습니다.
- 기간
- 2024.01 ~ 2025.10
- 역할
- 개발 총괄 (백엔드 5명)
- 대상 규모
- 임직원 약 20,000명 · 협력사 약 300명
- 기술 스택
- Spring Boot 3 · Java 17 · QueryDSL · K8s · ArgoCD · Argo Rollouts · PostgreSQL · Redis · S3 · Spring Cloud Gateway
- 프로젝트 초기 요구사항 정의 및 서비스 범위 분리
- 온프레미스 Kubernetes 클러스터 설치 및 설정
- ArgoCD + Argo Rollouts 기반 GitOps 배포 체계 구성
- Spring Cloud Gateway + DiscoveryClient 개발환경 Gateway 구성
- Kubernetes CoreDNS 기반 서비스 간 통신 구조 설정
- HR · 출입권한 · Auth · 파일 서비스 직접 개발
- 고객사 개발환경(Jira · Jenkins · Bitbucket) 이관 대응
Architecture
약 10개 서비스를 단일 namespace에서 운영하는 MSA 구조와, 각 서비스 단에서 처리하는 공통 인증·인가 및 결재 callback 흐름입니다.
아키텍처 1 — 전체 MSA 및 GitOps 배포 구조
flowchart TB
User["관리자 / 임직원 포털"] --> Entry["Gateway (dev)<br/>운영은 Apigee로 대체"]
subgraph K8s["On-Prem Kubernetes Namespace"]
HR["HR 서비스"]
AUTH["Auth 서비스<br/>물리카드 · 모바일사원증 · 안면인식"]
ACCESS["출입권한 서비스"]
APPROVAL["결재 서비스"]
PARKING["주차 서비스"]
NOTI["알림 서비스"]
DOOR["출입문 서비스"]
MENU["메뉴 서비스"]
VISITOR["방문객 서비스"]
FILE["파일 서비스"]
PG[("PostgreSQL")]
REDIS[("Redis")]
S3[("S3")]
end
Entry --> HR
Entry --> AUTH
Entry --> ACCESS
Entry --> APPROVAL
Entry --> PARKING
Entry --> NOTI
Entry --> DOOR
Entry --> MENU
Entry --> VISITOR
Entry --> FILE
ExternalHR["외부 인사 시스템 API"] --> HR
ACCESS --> DoorAPI["외부 출입문 시스템 API"]
AUTH --> DoorAPI
FILE --> S3
HR --> PG
AUTH --> PG
ACCESS --> PG
APPROVAL --> PG
PARKING --> PG
NOTI --> PG
DOOR --> PG
MENU --> PG
VISITOR --> PG
FILE --> PG
HR --> REDIS
ACCESS --> REDIS
APPROVAL --> REDIS
VISITOR --> REDIS
GitHubActions["GitHub Actions"] --> ArgoCD["ArgoCD"]
ArgoCD --> Rollouts["Argo Rollouts"]
Rollouts --> K8s
아키텍처 2 — 공통 인증·인가 및 결재 callback 흐름
sequenceDiagram
participant C as Client
participant S as Domain Service
participant R as Redis (HR Cache)
participant A as Approval API
participant D as External Door System
C->>S: JWT + 암호화 사번 + 요청 대상
S->>S: JWT 유효성 검증<br/>(서명 · 만료 · issuer · audience)
S->>S: 암호화 사번 복호화
S->>R: HR 기준정보 조회
S->>S: JWT 사번 = 복호화 사번 = 요청 대상 검증
S->>A: 결재 요청 / 승인 판단 요청
A->>A: 승인권자 여부 판단
alt 최종 결재 완료
A->>S: callback 호출
S->>D: 사용자 · 카드 · 권한 반영
else 중간 결재 단계
A-->>S: 대기 상태 유지
end
What I Did · 문제 해결
서비스 경계 정의, 공통 검증 패턴, 외부 시스템 실패 재처리와 정합성 보정까지 직접 설계·구현했습니다.
-
MSA 개발환경 및 배포 체계 구축
약 10개 Spring Boot 서비스를 하나의 namespace로 운영하는 온프레미스 Kubernetes 환경을 구성했습니다.
GitHub Actions · ArgoCD · Argo Rollouts로 서비스별 자동·점진 배포가 가능하게 했고, 이후 고객사 표준 개발환경(Jira · Jenkins · Bitbucket)으로 이관했습니다.
-
Gateway 및 서비스 간 통신 구조 설계
개발환경에서는 Spring Cloud Gateway + DiscoveryClient로 프론트의 단일 호출 규칙을 각 서비스로 라우팅하는 진입점을 구성했습니다.
운영에서는 Apigee가 Gateway를 대체하므로, 인증·인가·CORS는 Gateway에 집중시키지 않고 각 서비스 단에서 처리하도록 설계했습니다. 서비스 간 통신은 CoreDNS 기반 서비스 DNS로 처리했습니다.
-
HR 서비스 개발
외부 인사 시스템 API를 주기 배치로 호출해 임직원 정보·조직도·부서·직책·재직 상태를 동기화하고, 내부 도메인 모델로 재구성했습니다.
신규 입사·정보 변경 이벤트를 기준으로 사원증 생성·기본 출입권한 부여 등 후속 프로세스의 기준 데이터로 활용했고, 신규 도입된 협력사 직원 관리 도메인을 직접 설계·개발했습니다.
-
Auth 서비스 개발
물리 사원증·모바일 사원증·안면인식 정보를 통합 관리하는 Auth 서비스를 개발했습니다. 실제 출입 인가는 외부 출입문 시스템이 수행하고, 본 서비스는 인증매체를 외부 시스템이 요구하는 카드 형태로 등록·관리했습니다.
모바일 사원증은 사번 기반 가상 카드번호를 생성해 외부 카드 정보로 매핑했고, 물리 사원증은 분실·재발급·반납 등 생애주기 로직을 유지했습니다.
-
출입권한 서비스 설계 및 개발
출입문을 최소 단위로 모델링하고, 여러 출입문을 묶는 권한 그룹을 설계했습니다. 개인·부서·부/실 3종 권한 체계와 기본권한 자동 부여, 신청/승인 후 부여, 관리자 수동 부여를 모두 지원했습니다.
부서 이동 시 변경된 조직 기준으로 권한을 재계산·재부여하고, 방문객 권한은 기간 만료 후 회수되게 했습니다. 외부 출입문 시스템의 대량 요청 처리 제약 때문에 전체 임직원 기본권한 반영은 새벽 배치로 분리했습니다.
-
외부 출입문 시스템 연동 안정화
외부 API 요청·응답을 모두 DB에 저장해 감사 추적이 가능하게 했습니다. 호출 실패 시 애플리케이션 내부 재시도 큐로
1차 실패 → 재시도 → 2차 실패 → 재시도형태로 최대 4회 재시도했습니다.최종 실패 건은 관리자에게 메일로 통지해 전용 클라이언트에서 수동 보정하게 하고, 새벽 보정 배치로 내부 권한 상태와 외부 반영 상태의 정합성을 맞췄습니다.
-
공통 인가 패턴 설계
각 서비스는 요청 시 JWT·암호화 사번·요청 대상 식별자를 함께 받았습니다. 서비스 단에서 JWT 서명·만료·issuer·audience를 검증한 뒤, JWT 사번 = 복호화 사번 = 요청 대상이 일치하는지 검증했습니다. 고객사 표준 개발환경으로 이관한 뒤에는 JWT 대신 Apigee 토큰으로 검증했습니다.
민감정보·결재 요청 등 추가 검증이 필요한 endpoint는 어노테이션 기반으로 검증 로직을 명시했고, HR 기준정보는 Redis에 캐싱해 매 요청마다 HR 서비스를 직접 호출하지 않도록 했습니다.
-
결재 및 callback 기반 후속 처리 구조 설계
결재 승인은 각 도메인 서비스가 직접 판단하지 않고, 요청자 사번·결재 ID를 결재 API에 전달해 결재 서비스가 승인권자 여부를 판단하도록 책임을 분리했습니다.
최종 결재 차수가 완료되면 결재 서비스가 모바일 사원증 신청·출입권한 신청 등 원 도메인의 callback을 호출해 후속 비즈니스 로직을 진행하는 구조로 설계했습니다.
-
파일 서비스 개발
공통 파일 업로드/다운로드 API와 메타데이터 관리를 담당하는 파일 서비스를 개발했습니다.
파일은 S3에 저장하고 다운로드는 S3 Presigned URL을 발급해 애플리케이션 서버가 바이너리를 직접 중계하지 않도록 했으며, 업로드 시 확장자·용량 제한을 적용했습니다.
Impact · 성과
면접에서 강조할 핵심 어필 포인트입니다.
- 임직원 약 20,000명, 협력사 약 300명 규모의 출입보안 도메인을 다루는 MSA 플랫폼을 총괄했습니다.
- 인프라·배포·인증/인가·HR 기준정보·인증매체 관리·권한 설계·외부 시스템 연동 안정화까지 연결되는 백엔드 리드 경험을 보여줍니다.
- 단순 기능 개발이 아니라 서비스 경계 정의, 공통 검증 패턴, 실패 재처리 절차, 정합성 보정 배치까지 포함한 아키텍처 설계 역량을 증명한 프로젝트입니다.