Portfolio

노성웅

Back-end Engineer

asdz453@gmail.com

010-8866-3354

Project Detail

PPP Cloud — CSP 멀티테넌트 네트워크 상품

2024.08 ~ 2025.06
PPP 다단계 프로비저닝 오케스트레이션 및 실패 지점별 차등 롤백 구조
다단계 벤더 프로비저닝 오케스트레이션 · 실패 지점별 차등 롤백(11개 예외 타입)
PPP 멀티테넌트 데이터 모델 — 방화벽 정규화 FK 그래프 / 로드밸런서 비정규화, 2단 격리
상품 도메인별 멀티테넌트 데이터 모델 · DB 논리 격리 + 장비 물리 격리(2단)

운영자가 대신 처리하던 매니지드 방식을 고객 셀프서비스 API로 전환하면서, 서로 다른 벤더 장비를 순서대로 호출하는 다단계 프로비저닝의 안정성멀티테넌트 데이터 모델이라는 두 설계 과제를 풀었습니다. (문제·해결 상세는 아래 Key Responsibilities 참고)

고객(테넌트)마다 독립된 환경을 보장해야 했는데, 방화벽과 로드밸런서는 격리 특성이 서로 달라 단일 방식으로 모델링하기 어려운 게 관건이었습니다. 각 벤더 장비가 실시간 상태 조회 API를 제공해, DB가 장비 전체 상태를 복제할 필요는 없었습니다. 테넌트-자원 매핑에 필요한 최소 데이터만 저장하면 됐기에 단일 스키마 논리 격리를 택했습니다.

방화벽은 Zone(테넌트)을 루트로 하는 FK 그래프로 설계했습니다. zone_idx(Zone PK)를 경계 루트인 FireWallVs에만 두고, 하위 엔티티는 상위로 조인해 테넌트를 식별하도록 정규화했습니다. 로드밸런서는 LoadbalancerEntity에 zone_idx(DB 식별자)와 lb_partition(장비 Citrix의 Partition 이름)을 나란히 저장하는 비정규화로 설계했습니다. DB 조회와 장비 API 호출에 각각 맞는 키를 바로 쓸 수 있게 한 것입니다. 여기에 DB는 FK 논리 격리, 물리 장비는 TrusGuard의 VS·Citrix의 Partition으로 테넌트별 물리 격리하는 2단 구조를 구성했습니다.

Tech Stack

Frontend
Vue 3TypeScriptTanStack QueryAnt Design
Backend
Spring BootJPAQueryDSLMariaDBJUnit5
Infra
K8sJenkinsCitrix ADCAhnLab TrusGuardOpenStack

Key Responsibilities

  • 운영자가 대신 처리하던 매니지드 방식을 고객 셀프서비스 API로 전환 · 반복적인 수동 처리 업무 해소

    문제고객이 자원을 직접 제어할 수 없고 운영자가 대신 생성해주는 매니지드 방식이라, 로드밸런서에 VM 하나 연결하는 것도 요청·대기가 반복(체감상 월 50건 안팎)되는 제한적인 CSP 구조

    분석네트워크 장비가 이미 제공하는 멀티테넌트 기능을 외부에 안전하게 노출하는 별도 API 서버를 신규 개발 → 고객이 자기 테넌트 범위에서 직접 자원을 신청·즉시 처리

  • 다단계 벤더 프로비저닝을 Saga 패턴(11개 예외 타입 기반 차등 롤백)으로 설계 · 자원 누수 구조적 방지, 벤더 추가 시 예외 타입·핸들러만 추가하는 확장 구조

    문제방화벽·VS·라우트·ACI·OpenStack 등 서로 다른 벤더 API의 순차 호출이 외부 시스템이라 DB 트랜잭션·@Transactional로 묶을 수 없어, 중간 실패 시 자원 누수가 발생하고 재시도조차 막힘

    분석벤더 호출을 조율하는 Integration 계층 분리(도메인 서비스 / 벤더 어댑터 / Builder) + 프로비저닝 7단계마다 실패 지점별 롤백 범위가 다른 11개 예외 타입 체계 설계(공통 예외 상속, 하위 예외는 컨텍스트만 추가) · 도메인별 구체 롤백은 각 도메인 담당자가 이 구조 위에서 처리

  • 로드밸런서 공유 자원(Citrix Service)에 참조 카운팅을 설계 · 애플리케이션 레벨에서 참조 상태를 직접 관리해 여러 가상서버의 백엔드 공유를 안전하게 보장, 중복 생성·조기 삭제 방지

    문제Citrix 장비에서 백엔드는 {IP}_{PORT}로 식별되는 하나의 Service 객체인데 여러 가상서버가 같은 Service를 공유 바인딩 가능. 여러 가상서버가 안전하게 공유하려면 애플리케이션이 직접 참조 상태를 추적해야 해 중복 생성·사용 중인 자원의 조기 삭제 위험

    분석연결 시 장비에 Service 존재 여부를 조회해 재사용/신규 생성 분기, 해제 시 DB에서 동일 IP·Port를 참조하는 다른 활성 바인딩 존재 여부를 쿼리로 확인 후 삭제하는 방식으로 참조 카운팅 구현

  • 상품 도메인별 특성에 맞춘 멀티테넌트 데이터 모델(방화벽 정규화 FK 그래프 / LB 비정규화) + DB 논리 격리·장비 물리 격리 2단 구조 설계

    문제고객(테넌트)마다 독립 네트워크 환경을 보장해야 하는데 상품(방화벽·LB)마다 격리 특성이 달라 단일 방식으로 모델링 불가

    분석장비가 상태 조회 API를 제공해 DB는 얇은 매핑 레이어로 충분 → 단일 스키마 논리 격리. 방화벽은 Zone 루트 FK 그래프로 정규화, LB는 DB·장비 식별자를 함께 저장하는 비정규화로 조인 없이 각자 필요한 키 사용

  • 장비 API를 실제 호출하는 통합 테스트로 스펙 불일치를 배포 전 검증 · 최전방 네트워크 설정 실패로 인한 테넌트 전체 연결 장애 사전 차단

    문제네트워크 상품이 테넌트의 최전방 장비를 전부 다루는 구조라 설정 실패 시 테넌트 전체가 연결 불가. 벤더 장비마다 스펙 문서와 실제 동작이 달라(안랩 방화벽 필드명 오타, Citrix 독자 쿼리 파라미터 인코딩 등) 연동 개발 중 반복적으로 고치고 재배포

    분석벤더 장비 연동을 검증하는 테스트 문화가 없던 조직에서, Mock 없이 실제 스테이징 장비를 직접 호출하는 통합 테스트를 도입 — 비즈니스 로직보다 요청 포맷이 실제 장비 스펙과 어긋나지 않는지를 배포 전 검증하는 데 초점

RPMS — 자산계획 관리 시스템

2024.01 ~ 2025.06
RPMS 자산 동기화 성능 개선 — 건별 처리(2시간)에서 일괄 조회·HashMap 인메모리 비교·JDBC Bulk Insert(10초)로 전환
자산 동기화 성능 개선 · 건별 처리 → 일괄 조회 + HashMap 비교 + JDBC Bulk Insert (2시간 → 10초)
RPMS diff 기반 변경 이력 — 필드 단위 비교(타입 정규화)로 실제 변경 시에만 이력 적재
예산심사 감사 요구를 반영한 diff 기반 변경 이력 · 실제 변경 시에만 이력 적재

5인 팀에서 핵심 기능인 자산 동기화 성능을 담당했습니다. 연 2회 스케줄러 배치였던 동기화가 "버튼 즉시 실행"으로 기획이 바뀌면서 14만 건 2시간이 병목으로 드러났고, 건별 비교 조회를 HashMap 인메모리 비교로, INSERT는 JPA IDENTITY 전략이 Bulk Insert를 막는 한계를 확인해 JDBC Bulk Insert로 전환해 10초로 줄였습니다.

하지만 이 프로젝트에서 더 공들인 건 예산심사 도메인 규칙을 코드 구조로 옮기는 일이었습니다. 감사 대응상 "누가 언제 무엇을 바꿨는지"를 추적해야 했는데, 수정 요청마다 이력을 남기면 실제 값 변경이 없는 저장에도 불필요한 이력이 과다 적재되어 감사 추적성을 오히려 저해하는 문제가 있었습니다. 그래서 서버·스토리지·네트워크·백업·보안장비 등 7종 자원 각각을 요청 값과 기존 데이터로 필드 단위(자원당 20여 개)로 비교해 실제 변경이 있을 때만 이력을 적재하도록 설계했습니다. 이때 폼 입력값은 문자열, 엔티티 값은 숫자·boolean이라 단순 비교하면 `"500"`과 `500`을 다르다고 잡는 오탐이 생겨, 타입을 정규화해 비교하는 로직까지 넣어야 했습니다.

심사 규정 자체도 도메인 모델에 반영했습니다. 사업유형(신규·증설·추가·노후·폐기)마다 요구 항목이 달라, 폐기 예정 자산에 신규 도입과 같은 스펙 필수값을 요구하면 실무자가 잘못된 값을 채워 설계 오류로 이어졌습니다. Bean Validation의 Validation Group을 사업유형별로 나누고, 요청의 사업유형 코드에 따라 런타임에 적용할 Group을 선택해 검증 규칙 자체가 분기되도록 했습니다 (폐기는 최소 식별 정보만, 신규는 스펙까지 엄격 검증).

Tech Stack

Frontend
Vue.jsES6
Backend
Spring BootJPAQueryDSLBean ValidationMariaDBRedis
Infra
K8sDockerJenkinsHashiCorp VaultHarbor

Key Responsibilities

  • 배치 처리 2시간 → 10초 (약 700배) — HashMap 캐싱 + JDBC Bulk Insert 전환

    문제연 2회 스케줄러 배치였으나 버튼 즉시 실행으로 기획 변경 후, 14만 건 처리에 2시간이 걸려 사용자가 결과를 볼 때까지 대기해야 하는 사실상 못 쓰는 구조

    분석건별 비교 조회를 전체 조회 + HashMap 인메모리 비교로 개선. INSERT 병목은 JPA IDENTITY 전략이 단건 INSERT를 강제하는 구조적 한계를 확인해 JDBC Template Bulk Insert로 전환

  • 값 변경이 있을 때만 이력을 남겨 심사자가 봐야 할 내역만 남도록 설계 · 사업유형별로 검증 규칙을 분리해 실무자 입력 부담 축소

    문제감사 대응상 변경 이력 추적이 필요하나 단순 적재 시 값 변경 없는 저장도 이력이 과다 적재돼 감사 추적성을 저해. 또 사업유형마다 심사 규정(요구 항목)이 다른데 동일 검증을 걸면 폐기 자산에도 불필요한 스펙을 요구

    분석7종 자원을 필드 단위로 비교해 실제 변경 시에만 이력 적재(타입 차이 오탐 처리) + Bean Validation Group을 사업유형별로 분리해 런타임에 검증 규칙 분기

  • 사내 최초 QueryDSL 도입으로 혼재된 쿼리 방식 통일 · 컴파일 단계 쿼리 오류 사전 감지

    문제Data JPA·Criteria API·Native Query 세 방식이 혼재해 유지보수 시 구현 방식 파악이 부담이고, Native Query는 오타가 런타임에야 발견됨

    분석팀의 초기 회의론을 자산 현황 모듈 파일럿으로 설득 → 타입 안정성·가독성 개선을 직접 시연 후 지사 내 3개 프로젝트로 확산

Other Experience

한전 위험성 평가기반 자율안전 솔루션

2022.02 ~ 2023.10

한전과 진행한 위험성 평가기반 자율안전 솔루션 개발에 SI 풀스택으로 참여했습니다. GIS 기반 현장 관제, 메타데이터 관리, 보고서 생성 기능을 개발하고, 반복 비효율을 직접 발견해 템플릿화·배포 자동화로 개선했습니다.

  • GIS 실시간 관제 대시보드 및 메타데이터 관리 백엔드 개발
  • jsPDF 보고서를 FastAPI 헤드리스 렌더 서버로 서비스화 (앱/웹 동일 품질 PDF)
  • Tiles 프레임워크 도입으로 중복 코드 65% → 10% · Jenkins 파이프라인으로 배포 7일 → 1일
eGovFrameworkMyBatisMySQLFastAPIDockerJenkinsJSPjQueryES6

MSP 반복 운영 자동화 — WAF AI 반자동화·모니터링 구축

2026.02 ~ 2026.05

KT Cloud MSP 파트너사(3개월 계약)에서 40개 이상 고객사의 클라우드 인프라 운영을 담당했습니다. 반복 운영 업무를 자동화·표준화하는 데 집중해, WAF 차단 요청 처리를 AI 에이전트로 반자동화하고 고객사 모니터링 체계를 구축했습니다.

  • WAF 유해 IP 차단 요청을 Gmail API·MCP·Claude Code로 반자동화 (기관별 예외 규칙 인코딩 + 사람 승인 게이트)
  • 40개 고객사 Prometheus·Grafana 모니터링 구축 · VictoriaMetrics로 지표 보존 30일 → 1년
Gmail APIMCPClaude CodePrometheusGrafanaVictoriaMetricsAnsibleKT Cloud

Side Project

InnerCircle 통합 커머스 1
InnerCircle 통합 커머스 2
InnerCircle 통합 커머스 3

InnerCircle 통합 커머스

패스트캠퍼스 이너써클 백엔드 4기

2025.06 ~ 2025.09

대량 트래픽 환경에서도 안정적인 서비스를 제공하기 위해 상품·주문·결제 도메인을 MSA 아키텍처로 설계했습니다. 5인 팀에서 인프라(AWS 기반 MSA·오토스케일링), CI/CD, 인증/인가, 회원 도메인을 담당했습니다.

AWS ECS 기반 Auto-scaling 구조를 직접 설계해, 급격한 트래픽 변동에도 가용성을 유지하도록 했습니다. 분산 환경의 인증 문제는 API Gateway 중심의 JWT 무상태(Stateless) 인증 체계로 풀어 서비스 간 결합도를 낮췄습니다.

MSA 구조에서 스파이크 트래픽이 다운스트림 서비스 전체로 전파될 위험이 있어, API Gateway 레벨에서 토큰 버킷 알고리즘 기반 Rate Limiting을 구현했습니다. 슬라이딩 윈도우 대비 버스트 허용과 평균 제한을 동시에 제어할 수 있어 선택했습니다.

Tech Stack

Backend
Spring BootSpring CloudSpring SecurityJPAJUnit5PostgreSQLZipkin
Infra
AWS ECSAWS ECRDockerGitHub ActionsAWS S3AWS CloudMapPrometheusGrafana

Key Responsibilities

  • AWS ECS 기반 고가용성 MSA 인프라 아키텍처 설계 및 오토스케일링 체계 구축
  • GitHub Actions·AWS ECR 기반 CI/CD 파이프라인 구축 및 Zipkin 분산 추적으로 호출 흐름 가시화
  • JWT 무상태 인증 + API Gateway 중앙 인증 아키텍처로 서비스 간 결합도 완화
  • API Gateway 토큰 버킷 기반 Rate Limiting 구현으로 스파이크 트래픽 대응 및 다운스트림 보호

    문제MSA 구조에서 스파이크 트래픽 발생 시 다운스트림 서비스 전체로 장애가 전파될 위험

    분석API Gateway 레벨에서 토큰 버킷 알고리즘 적용 → 슬라이딩 윈도우 대비 버스트 허용과 평균 제한을 동시에 제어 가능