Portfolio
안영준
Infrastructure Engineer.
5년차 인프라 엔지니어입니다. 서버 한 대에 직접 배포하던 시스템을, 에어갭·온프레미스 환경에서 자동화를 쌓아가며 K8s 클러스터 기반으로 직접 키워왔습니다.
1~2일 → 2~3시간클러스터 프로비저닝 자동화GPU 4장 → 70파드Aliyun GPUShare 병렬 추론1~2시간 → 30분OTel 관측 스택 - 장애 원인분석 단축이벤트 유실 0건Outbox 라이브러리 직접 개발
안영준ahn479512@gmail.com
Projects
NIPA 위성 변화탐지 플랫폼 - 클러스터·메시징 인프라 고도화
한컴인스페이스 · 2025.07. ~ 진행 중
아키텍처
개요
DB 폴링 방식이라 수평 확장이 막혀 있던 처리 구조를 메시지 큐 기반 비동기 아키텍처로 재설계하고, MSA 전환에 맞춰 클러스터 네트워킹·시크릿·배포·관측성까지 인프라 전 영역을 고도화했습니다.
Skills
KubernetesRabbitMQFastAPIGoPostgreSQLRedisPyTorchCiliumkube-vipOpenBaoArgoCDAnsiblePulpOpenTelemetryEnvoy GatewayKeycloak
핵심 업무
메시지 큐 기반 파이프라인 전환 - RabbitMQ 단계별 큐 분리 → 처리 워커 1개→15개
AS-IS
기존 시스템은 DB를 일정 주기로 폴링해 작업을 가져갔습니다. 워커를 늘려도 같은 DB에 더 많은 폴링 쿼리가 몰려 락 경합으로 수평 확장 효과가 거의 없었고, 완료 콜백 구조라 노드 재시작 시 콜백이 유실되면 작업이 RUNNING 상태로 고착됐습니다. Kafka는 처리량이 높지만 운영 오버헤드가 컸고, 위성 처리 작업은 단위가 명확해 ack/nack 기반의 확실한 전달 보장이 되는 메시지 큐 모델이 더 적합했습니다.
TO-BE
RabbitMQ를 선택하고 ack/nack + DLQ 기반 비동기 구조로 전환
단일 큐가 아니라 수집→전처리→추론→후처리 단계별로 큐를 분리
단계별 독립 확장 가능한 구조 확보, 처리 워커 컨테이너 1개→15개 수평 확장, 작업 유실 0건
  1. 1웹 뷰어전·후 영상 선택 · 신청
  2. 2API 서버작업 생성 · 큐 발행
  3. 3RabbitMQack/nack · DLQ
  4. 4변화탐지 AIONNX 추론 (consumer)
  5. 5후처리결과 저장 · 타일화
  6. 6웹 뷰어지도 위 변화 가시화
클러스터 인프라 고도화 - Cilium·kube-vip·ArgoCD·OTel, 팀원과 설계
AS-IS
MSA로 9개 서비스를 분리하면서 네트워킹·시크릿·배포·관측성 각각에서 감당하기 어려운 문제가 함께 드러났습니다. kube-proxy(iptables)는 서비스 수가 늘수록 규칙 매칭이 느려졌고, control-plane은 단일 노드라 장애 시 API 서버 전체가 멈췄고, 시크릿은 서비스마다 개별 관리돼 로테이션 부담이 늘었고, Jenkins 명령형 배포는 실제 상태와 스크립트가 분리돼 드리프트 추적이 안 됐고, 통합 관측 스택 자체가 없어 장애 구간을 특정하기 어려웠습니다. 각 문제가 네트워킹·시크릿·배포·관측성이라는 서로 다른 영역에서 동시에 터졌기 때문에, 팀원과 영역을 나눠 각각 해결해야 했습니다.
TO-BE
네트워킹 오버헤드 해결: kube-proxy를 Cilium(eBPF)로 대체해 서비스 처리를 커널 레벨에서 경량화하고 L3~L7 정책을 통합
단일 장애점 제거: kube-vip로 3노드 control-plane HA 구성해 노드 장애 시에도 API 서버 무중단
시크릿 관리 부담 해소: OpenBao+ESO로 시크릿을 중앙 저장하고 파드에 자동 주입, 서비스별 개별 관리·로테이션 부담 제거
배포 추적성 확보: Jenkins 명령형 배포를 ArgoCD GitOps로 전환, Pulp로 패키지 저장소 통합
관측 스택 신규 구축: Prometheus·OpenSearch·Tempo·Grafana를 새로 도입해 OTel로 수집 통합, 서비스 간 요청 흐름 추적 가능하게 구성
클러스터 네트워킹·시크릿·배포를 팀 차원에서 표준화, 관측 스택을 신규로 갖춰 장애 원인분석 1~2시간 → 30분 이내로 단축
프론트엔드 - jQuery·Thymeleaf 레거시를 Next.js 15 FSD로 전환, 웹 뷰어 신규 개발
항공우주연구원(KARI) 위성영상 AI 처리 플랫폼 구축
한컴인스페이스 · 2023.10. ~ 2025.07.
아키텍처
개요
회사의 모든 K8s 기반 AI 처리 플랫폼의 출발점이 된 프로젝트입니다. 관리형 K8s가 없는 온프레미스 환경이라 kubeadm으로 클러스터를 직접 부트스트랩했습니다.
Skills
KubernetesGoPythonSaltStackAnsibleAliyun GPUSharePostgreSQLRedisZabbixNginxRocky LinuxJenkinsNexus
핵심 업무
Kubernetes 클러스터 구축 - kubeadm 베어메탈 부트스트랩 + GPUShare 자원 공유
AS-IS
위성영상을 받아 AI 추론까지 흘려보내는 플랫폼을 만들어야 했는데, 컨테이너 하나가 죽으면 작업이 그냥 사라지는 구조로는 운영이 불가능했습니다. 게다가 노드당 GPU 하나를 컨테이너 하나가 점유하는 방식이라 대부분의 시간 동안 GPU가 유휴 상태였습니다. 워크로드가 여러 노드에 걸쳐 자동 복구돼야 하는데 Docker Compose·스크립트 관리로는 노드가 늘수록 관리 포인트가 선형으로 늘었고, 여러 모델을 동시에 띄워야 하는 요건과 1파드=1GPU 구조도 맞지 않았습니다(당시 GPU는 NVIDIA MIG 미지원).
TO-BE
관리형 K8s가 없는 온프레미스 환경이라 kubeadm으로 클러스터를 직접 부트스트랩
Aliyun GPUShare를 도입해 여러 컨테이너가 하나의 GPU를 fraction 단위로 나눠 쓰는 소프트웨어 레벨 공유 구성
노드 장애 시에도 워크로드가 자동 복구되는 구조 확보(이후 모든 K8s 기반 AI 처리 플랫폼의 출발점이 됨), GPU 4장에서 70파드 병렬 추론
Debezium CDC 안정화 - Outbox 전환 및 자가치유 운영 → 이벤트 유실 0건
AS-IS
Debezium CDC의 replication slot이 반복 파손돼 전체 스냅샷을 재수행해야 했고, 외부망·폐쇄망 DB 동기화도 필요했지만 망연계 솔루션이 파일 기반 전송만 지원했습니다. CDC 방식은 DB 로그 기반이라 slot 파손 시 외부 인프라 의존도가 높아 안정성을 보장하기 어려웠고, API 폴링은 망 구조상 불가능했으며 DB 덤프 주기 전송은 실시간성이 너무 떨어졌습니다. 망연계용으로 유지한 CDC 구간에서도 상태 판정 우선순위 오류로 WAL 완전 유실 상황을 '비활성'으로 오판해 필요한 slot 재생성을 건너뛰는 버그가 있었습니다.
TO-BE
일반 이벤트 처리는 CDC 인프라 의존을 걷어내고 AOP + MyBatis Executor 인터셉터 기반 Outbox 라이브러리 직접 개발
망연계 구간은 Debezium CDC로 WAL 레벨 변경분을 JSON 파일로 반출·반입하는 망 분리 우회형 아키텍처로 유지하되, 상태 판정 순서를 NOT_FOUND→WAL lost→inactive→healthy로 재정렬하고 강제종료→slot 재생성→검증까지 이어지는 자가치유 함수로 자동 복구
이벤트 유실 0건으로 애플리케이션 레벨 이벤트 보장, 보안 지침을 지키면서도 망연계 실시간성 확보, 유지되는 CDC 구간도 재시도 폭주 없는 자가치유 구조 확보
Nginx 게이트웨이 구축 - HTTPS 종단·보안 헤더·정보 노출 점검 통합
AS-IS
레거시 Tomcat 기반 프론트엔드를 외부에 HTTPS로 노출해야 했는데 서비스마다 보안 헤더 설정이 제각각이었고, 각 서비스가 개별적으로 외부에 노출되다 보니 라우팅·보안 처리도 분산돼 응답에 노출 금지 정보가 실리는지 확인할 방법도 없었습니다. Tomcat 단독으로는 와일드카드 인증서 갱신·보안 헤더 통합 관리가 번거로웠고, 단일 게이트웨이 없이 서비스가 각자 노출되다 보니 보안 정책을 한 곳에서 적용·검증할 수 없었습니다.
TO-BE
Nginx를 Tomcat 앞단 HTTPS 리버스 프록시로 구성 - 와일드카드 TLS 인증서·체인 적용, 중복 보안 헤더를 제거하고 CSP·X-Frame-Options 등을 한 곳에서 통합 관리
path 기반 라우팅으로 내부 분석 서비스·지도 서버와 외부 지도 타일 API를 함께 프록시, 쿠키 보안 속성까지 일괄 적용해 단일 진입점 확보
Wireshark로 패킷을 분석해 서버·버전 등 노출 금지 정보가 실제로 노출되는지 점검
서비스 7개의 HTTPS 종단·인증서·보안 헤더를 게이트웨이 1곳으로 통합, 정보 노출 여부 사전 점검 체계 마련
Nginx Ingress keepalive 튜닝 → TCP 핸드셰이크 오버헤드 제거
AS-IS
위성영상 타일 요청이 트래픽 대부분을 차지하는데, 매 요청마다 TCP 핸드셰이크가 반복되는 오버헤드가 있었습니다. Nginx Ingress의 기본 설정은 백엔드로의 커넥션을 요청마다 새로 맺어, 핸드셰이크 비용이 그대로 응답 지연에 더해졌습니다.
TO-BE
Nginx Ingress의 upstream keepalive 설정으로 백엔드 커넥션을 재사용하도록 튜닝
커넥션 재사용으로 응답 지연 단축, K8s 레플리카를 늘려도 그대로 스케일되는 구조 확보
CI 파이프라인 테스트 자동화 - k6 부하테스트·유닛테스트 도입 → 배포 후 에러율 11%→0%
AS-IS
배포 파이프라인에 자동화된 테스트가 없어, 부하 상황에서만 드러나는 문제나 트랜잭션 경계 결함이 배포 이후에나 발견됐습니다. 부하테스트는 문제가 생길 때마다 추가되는 사후적 sh 스크립트뿐이었고, 유닛테스트도 없어 CI 단계에서 걸러낼 방법이 없었습니다.
TO-BE
가상 유저 플로우를 정의해 k6 부하테스트를 Jenkins 파이프라인에 편입
API 300여 개 규모 시스템에 유닛테스트를 도입해 CI 단계에서 자동 실행
배포 후 에러율 11.22%→0%, 트랜잭션 경계·동기화 결함을 배포 전 CI 단계에서 검출
TTL이 필요한 휘발성 데이터·API/쿼리 응답 캐싱을 위해 Redis를 Helm으로 K8s에 배포·운영
백엔드 - 위성 메타 목록 조회 38초→159ms
백엔드 - Go 타일 서버 GDAL 워핑에 세마포어 제어로 동시성 확보
국가보안기관 위성영상 시스템 — 개발·에어갭 운영·신규 구축
한컴인스페이스 · 2022.07. ~ 진행 중
아키텍처
개요
위성영상을 수집·판독해 정부 표준 문서로 산출하는 시스템입니다. API·프론트 개발로 시작해 2024.07부터 에어갭 환경에서 5대 서버 규모 클러스터를 롤링 방식으로 서비스 중단 없이 운영했고, 2025.06~2025.12에는 다종위성 수집·처리 플랫폼을 물리 베어메탈 서버 설치부터 K8s 클러스터 구성, DB 설계, 파이프라인 구현까지 전 과정 신규 구축했습니다.
Skills
KubernetesDockerRocky LinuxGoPostgreSQLRedisGDALZabbixShellJenkinsNexus
핵심 업무
가시화 전면 실패 장애 - 표면 에러를 따라가 만난 진짜 원인
AS-IS
어느 날 가시화 작업이 전부 실패 처리되기 시작했습니다. 로그에는 No space left on device가 찍혀 단순 디스크 부족처럼 보였지만, 마운트된 스토리지 용량을 확인하니 여유가 충분히 남아 있었습니다. 명령어로 본 용량과 실제 동작이 어긋나 있어, 컨테이너가 아니라 마운트된 스토리지 자체의 문제로 의심됐습니다. 팀원과 함께 스토리지 장비에 원격 접속해 NVMe 상태를 확인한 결과 실제 여유 용량이 0이었고, 업체 운영 코드를 검토한 결과 펌웨어 업그레이드 과정에서 NVMe→system pool 데이터 이동 로직이 누락된 것이 근본 원인이었습니다.
TO-BE
마운트 경로에 빈 파일을 만들어 단순 쓰기조차 실패하는 것을 확인, 컨테이너가 아닌 스토리지 자체 문제로 범위를 좁힘
팀원과 함께 스토리지 장비에 원격 접속해 NVMe 상태를 직접 확인하고, 업체 운영 코드까지 검토해 펌웨어 이관 로직 누락을 발견
임시 패치로 서비스를 즉시 복구한 뒤 업체 정식 패치 연동까지 마무리
컨테이너→마운트→디바이스→펌웨어로 경계를 넘어 근본 원인 추적, 외부 레퍼런스 없이 하루 이상 걸리던 원인 파악·수정을 수 시간 이내로 단축
DB 접근 계층 중앙화(신규 구축) → 스키마 변경 영향 API 레이어로 축소
AS-IS
이어서 주도한 다종위성 수집·처리 플랫폼 신규 구축 프로젝트에서, 기존 프로젝트들은 각 서비스(카탈로깅, 작업 관리, 가시화 등)가 ORM으로 DB에 직접 접근하는 구조였습니다. DB 접근 로직과 자격증명이 모든 서비스에 흩어져 있어 스키마가 바뀌면 여러 서비스를 동시에 수정해야 했고, Python ORM과 Go가 같은 DB를 다룰 때 접근 패턴도 서로 어긋났습니다. 언어별로 각자의 ORM 계층을 개선하는 방법도 있었지만, 스키마가 바뀔 때마다 여러 서비스를 동시에 고쳐야 하는 근본 문제 자체는 해결되지 않는 미봉책이었습니다.
TO-BE
독립 스키마를 새로 짜는 기회를 활용해 DB 접근을 Go 기반 API 한 곳으로 중앙화
모든 서비스가 HTTP로만 DB에 접근하도록 재설계
7개 서비스가 직접 접근하던 DB를 API 1곳으로 중앙화, 스키마 변경 영향 범위가 API 레이어 한 곳으로 축소
베어메탈부터 시작한 신규 인프라 구축
AS-IS
관리형 인프라가 없는 신규 구축 프로젝트로, 물리 서버 설치부터 시작해야 했습니다. 검증된 패턴을 그대로 가져올 수 없는 영역(물리 서버 구성, DB 스키마, 수집기 통합)이 많아 운영 시나리오에 맞게 새로 설계해야 했습니다.
TO-BE
물리 서버 설치, K8s 클러스터 구성 핵심 참여
다종 수집기 통합, DB 기반 중복 체크, zst/tar.gz 포맷 변환 자동화 구현
히스토그램 스트레칭 자동화, COG 포맷 적용으로 가시화 성능 개선
등록일 기준 자동 삭제 서비스 구축
물리 서버부터 운영 가능한 시스템까지 전 과정 수행 경험 확보
인터넷이 완전히 차단된 에어갭 환경에서 수십 대 서버 규모 클러스터를 롤링 방식으로 서비스 중단 없이 운영
K8s 인증서 만료 대응 자동화
에어갭이라 장애를 사용자 신고 후에야 인지하던 구조에 Zabbix 하드웨어·서비스 관측 도입
백엔드 - 47개 매퍼 SQL Injection 전량 해소
백엔드 - CRUD·mapper 자동 생성 도구 개발로 보일러플레이트 제거
프론트엔드 - CesiumJS 3D globe 기반 판독·가시화 화면 개발
사내 공통 · 업무 자동화
사내 서버 간 통신을 OpenVPN으로 구성 - 물리적으로 분리된 서버를 안전한 터널로 연결
40여 개 테이블 CRUD 계층 자동 생성 - 테이블당 30분~1시간 걸리던 보일러플레이트 작성을 몇 십초 내로 단축
FastMCP 사내 에이전트 개발 - Git·캘린더·HRWeb 통합·구글 드라이브 자동 관리 → 주 30~60분 수작업 제거
Claude 스킬·훅 기반 에이전트 개발 - 작업 계획·평가 자동화
Jira·Bitbucket 연동 자동화 - 자동 브랜치 생성 → PR 문화 정착
대외활동 · 학습
FESI 13기 - 백엔드 멘토링codeit · 2026
프론트엔드 부트캠프 수강생 6명 대상 실무 방식 기반 멘토링 (PR 리뷰, REST API 설계, DDD·TDD 실습).
[동시성] 동시 신청 시 maxMembers 초과 가능 → PESSIMISTIC_WRITE 락 + Batch UPDATE로 원자적 증감 처리
[강결합] 알림 실패가 모임 데이터에 영향 → @TransactionalEventListener(AFTER_COMMIT)로 이벤트 분리, fault tolerance 확보
[IaC] Terraform으로 AWS EC2 프로비저닝, Ansible로 구성 관리 - 프로비저닝/구성 계층 분리
[비용 설계] NLB 비용 구조 비교 후 EC2+Nginx 게이트웨이 직접 구성 - 실습 환경 규모에서 SPOF 감수·고정비 절감 판단
[성과] 51개 테스트 파일(단위·통합·E2E 3-layer 피라미드) + GitHub Actions CI 구성
스위프(SWYP) 웹 9기 ~ 11기, 앱 4기스위프 · 2025 ~ 2026
4개 기수에 백엔드·프론트엔드·PM으로 참여하며 팀 프로젝트를 웹·앱으로 출시했습니다.
9기 백엔드(모먼티어), 10기 프론트엔드(축지법), 11기 PM·프론트엔드(위딩), 앱 4기 백엔드(Mapin)
[배포] NCP(네이버클라우드플랫폼) 환경에 배포
항해99 백엔드코스 9기항해99 · 2025
동시성 제어와 이벤트 드리븐 아키텍처를 실전으로 검증하는 학습 프로젝트. 상위 10% 수료.
[좌석 중복 예약] 비관적 락 → Redis 분산락 → 낙관적 락 순으로 전환, k6 + Grafana 부하 테스트로 트레이드오프 검증
[분산 트랜잭션] Redis 대기열 → Kafka 전환, Choreography Saga + DLQ로 일관성 확보
[배포] WireGuard VPN으로 사내 서버와 WSL 워커를 연결해 온프레미스 K8s 클러스터 구성, Jenkins·Nexus CI/CD 파이프라인 구축, API Gateway가 서비스별 경로·Swagger 문서를 1:1 라우팅
Skills · About
언어·프레임워크 · Go, Python, FastAPI, Java, Spring Boot
오케스트레이션 · Kubernetes, Docker, Docker Compose
IaC·구성관리 · Terraform, Ansible
네트워킹·보안 · Cilium, kube-vip, Nginx, Envoy Gateway, Keycloak, OpenBao, OpenVPN
데이터·메시징 · PostgreSQL, Redis, RabbitMQ
관측성 · OpenTelemetry, Prometheus, Grafana, Loki, Tempo, Zabbix
CI/CD · Jenkins, ArgoCD
아티팩트·패키지 · Nexus, Pulp
EMAILahn479512@gmail.com
GITHUBgithub.com/Ahnyeongjun
BASE서울, Korea
CAREER한컴인스페이스 · 5년
Education · Certifications
한밭대학교
대학교(학사) · 융합기술학과
2022.03. ~ 2026.03. · 졸업
대덕소프트웨어마이스터고등학교
고등학교 · 소프트웨어개발과
2020.03. ~ 2022.03. · 졸업
SQL개발자(SQLD)2025.12.
합격 · 한국데이터산업진흥원
정보처리기사2025.06.
합격 · 한국산업인력공단
정보기기운용기능사2021.12.
합격 · 한국산업인력공단
프로그래밍기능사2020.12.
합격 · 한국산업인력공단
안영준 · Infrastructure Engineerahn479512@gmail.com
포트폴리오 | 안영준 | 안영준