Career Summary

남궁은

Backend (Java / Spring Boot) 4년차

자바 개발자로 이제 만 3년이 넘게 한 회사에서 시스템 개발 및 운영을 담당하고 있습니다. 공항 도메인 환경에서 근무하며, 주요 서비스는 탑승수속 서비스와 신분증을 대체할 수 있는 바이오등록 서비스입니다. 단일 API 기준 일일 약 90만 건 이상의 트래픽이 처리되는 시스템을 개발하고, 바이오등록 회원 800만명의 등록자를 보유하고 있으며, 안정적으로 운영될 수 있게 관리하고 있습니다. 빠르게 배포한 뒤 수정하는 것도 가능하지만, 현재는 공항 시스템의 안정성을 최우선으로 고려하여 배포 후 장애나 핫픽스가 발생하지 않도록 충분한 검증 과정을 거친 후 운영 환경에 반영하는 것을 중요하게 생각하며 개발하고 있습니다.

그 외에도 스프링배치, MQ, ESB, 한국공항공사 앱의 일부, 패스앱의 스마트탑승권, 바이오 면세점 결제 등 다양한 서비스도 함께 운영하고 있습니다. 최근에는 프론트엔드 소스를 Python과 Vue로 바이브코딩하여 운영에 반영하고, 수정 및 운영도 함께 담당하고 있습니다.

데이터를 다루는 백엔드 개발자인 만큼 데이터가 오염되지 않도록 무결성과 정합성을 지키는 것을 가장 중요하게 생각합니다. 시스템에서 문제가 발생했을 때 원인을 추적하고 다양한 단서를 분석하여 논리적으로 접근해 문제를 해결하는 것을 즐깁니다. 장애 상황을 단순 대응하는 것을 넘어 근본 원인을 찾고 안정적인 서비스를 만드는 데 관심을 가지고 있습니다. 흐름을 분석해 이상 데이터를 찾거나, 로그와 JVM 모니터링을 통해 이상 징후를 감지하거나, 항공사 등의 요청에 따라 분석 및 데이터 처리를 수행하고 있습니다.

현재 회사에서도 맡은 업무를 즐기며 성실히 근무하고 있지만, 폐쇄망 기반의 SM 환경이라는 특성상 다양한 개발 경험을 쌓는 데에는 한계가 있다고 느끼고 있습니다. 자사 앱을 기반으로 클라우드 환경에서 운영되는 서비스 개발 및 운영을 경험하며 기술적으로 더 성장하고 싶은 마음이 있습니다.

저는 새로운 환경에 대한 적응력이 빠른 편이며, 동료 및 상사들과의 원활한 소통을 중요하게 생각합니다. 업무에 대한 생각을 솔직하게 공유하고 협력하는 과정이 더 나은 결과를 만든다고 믿고 있습니다. 또한 서비스에 대한 깊이 있는 이해를 위해서는 기술적인 부분뿐 아니라 조직 내 원활한 인간관계도 중요한 요소라고 생각하며, 이를 바탕으로 함께 성장하고 싶습니다.

·

주요 프로젝트

한국공항공사 스마트공항 국제선 탑승수속 서비스 2023.04 – 2024.07
한국공항공사 스마트공항 국내선 탑승수속 서비스 2024.08 – 현재
한국공항공사 원아이디 사전등록 서비스 유지보수 및 추가개발
한국공항공사 홈페이지 일부 API 신규 개발
한국공항공사 스마트공항 앱 백엔드 API 신규 개발
한국공항공사 국제선 패스트트랙 신규 개발
한국공항공사 스마트탑승권 유지보수 및 추가개발
한국공항공사 바이오 면세점 결제 프로젝트 유지보수 및 추가개발
한국공항공사 국내선 신규 MQ 전환
한국공항공사 국제선 MQ 도입
한국공항공사 국제선 ESB
행정안전부 연계 API 연동 신규 개발
그 외
  • REST API 신규 개발.
  • C#/.NET 기반 단말 소스를 Python과 Vue로 대체 개발, 바이브코딩 방식으로 운영 및 관리.
  • 공사 내부 부서 및 외부 기관의 통계 자료 요청에 대응하는 통계문서 월평균 30건 이상 작성.
  • Spring Batch 및 프로시저 생성을 통한 연계 데이터 전송 및 데이터 정리.
  • 신규 MQ 도입으로 인한 MQ Reader 추가 개발 및 유지보수 및 업그레이드 항공사 테스트 지원.
  • ESB 추가 개발 및 유지보수 및 항공사 테스트 지원.
  • 운영 중 발생한 이슈 분석 및 해당 이슈를 반영한 기능 개선.
  • SQL 성능 분석 및 튜닝.
  • netty 코드 spring boot 마이그레이션.
  • 이용현황 실시간 대시보드.
  • MQ 전문 검증 로직 및 고정통계 작성 자동화 로직 생성.
01

SQL 성능 분석 및 튜닝

Scouter Execution Plan Index DBMS_STATS
  • Scouter를 활용한 응답 시간 지연 API 및 SQL 분석.
  • 실행계획(Execution Plan), 인덱스, DB 통계(DBMS_STATS) 검토를 통한 SQL 성능 저하 원인 분석.
  • 실행계획 분석 결과 기반 SQL 구조 및 인덱스 개선으로 조회 성능 향상.
  • SQL 변경 후 운영 환경에서 실행계획 및 수행 시간 확인을 통한 개선 결과 검증.
  • 대용량 데이터 조회 시 병목 구간 분석 및 SQL 튜닝.
  • DB 통계(DBMS_STATS) 갱신, 인덱스 재구성 및 실행계획 분석을 통한 운영 DB 성능 최적화.
  • 운영 DB 테이블, 인덱스 및 파티션 관리 등 DBA성 운영 업무 수행.
02

Spring Batch 개발 및 운영

Spring Batch Chunk 처리 알림톡 대량발송 개인정보보호법
  • Spring Batch 기반 개인정보 안내 알림톡 발송 Batch 개발 및 운영.
  • 바이오 등록 회원 약 800만 명 대상 개인정보 안내 알림톡 대량 발송 Batch 구현.
  • 개인정보보호법에 따른 개인정보 백업 및 일부 정리 Batch 개발 및 운영.
  • 데이터 백업 및 정리 Batch 매일 야간 스케줄 운영.
  • Chunk 기반 처리 방식 적용을 통한 대용량 데이터 처리.
  • Batch 로그 및 데이터 상태 분석을 통한 장애 원인 파악.
  • 실패 데이터 재처리 절차 개선을 통한 운영 복구 지원.
  • 배치 실행 과정에서 발생한 예외 분석 및 운영 이슈 개선.
03

운영 장애 분석 및 대응

JDBC 오류 MQ 오류 데이터 정합성
  • JDBC 오류, MQ 오류, 데이터 불일치 등 운영 중 발생한 다양한 장애 분석 및 대응.
  • 애플리케이션 로그, Batch 로그, 데이터베이스 상태 종합 분석을 통한 장애 원인 파악.
  • SQL을 활용한 데이터 정합성·무결성 검증 및 문제 발생 구간 확인.
  • 동적 SQL 사용 과정에서 발생한 데이터 변경 이슈 분석 및 운영 절차 개선.
  • 개발 부서 및 운영 부서와의 협업을 통한 장애 원인 확인 및 조치.
04

모니터링 및 성능 분석

Scouter Grafana Loki
  • Scouter를 활용한 응답 시간 지연 API 및 SQL 수행 시간 분석.
  • API 수행 시간과 SQL 수행 시간 비교를 통한 병목 구간 식별.
  • 실행계획 및 인덱스 검토를 통한 SQL 성능 저하 원인 분석.
  • Grafana, Loki를 활용한 시스템 상태 및 로그 모니터링 환경 운영.
  • 로그와 모니터링 데이터를 종합하여 데이터 흐름 추적 및 장애 발생 구간 식별.
  • 모니터링 데이터를 기반으로 성능 개선 대상 선정 및 운영 안정화 지원.
05

Querydsl 기반 조회 기능 개발

Querydsl Predicate 페이징 / 정렬
  • Querydsl을 활용한 다양한 검색 조건 지원 동적 조회 기능 개발.
  • Predicate 기반 조회 로직 적용을 통한 복잡한 검색 조건의 유연한 처리.
  • 공통 조회 로직 구성을 통한 코드 중복 감소 및 유지보수성 개선.
  • 페이징 및 정렬 기능 적용을 통한 조회 성능 및 사용성 개선.
  • 운영 요구사항 변경에 따른 조회 조건 확장 및 기능 개선.
06

단말 프로그램 개발 및 운영

Python Vue 신분증 스캐너 지문 · 장정맥 센서
  • C#/.NET 기반 단말 프로그램을 Python 및 Vue 기반으로 대체 개발.
  • 신분증 스캐너, 바코드 리더기, 지문 센서, 장정맥 센서, 카메라 등 다양한 장비 연동 기능 구현.
  • 단말 기능 테스트 및 QA 수행 후 운영 환경 배포.
  • 운영 중 발생한 단말 이슈 분석 및 기능 개선·유지보수 수행.
  • Windows 기반 키오스크 환경에서 단말 프로그램 배포 및 운영 자동화 지원.
  • 단말 장비 연동 테스트 및 현장 이슈 분석을 통한 기능 개선 및 유지보수 수행.
07

MQ / ESB 연계 개발 및 운영

IBM MQ ESB 항공사 연계 메시지 추적
  • 국내선/국제선 MQ 연계 기능 개발 및 유지보수.
  • 신규 항공사 MQ Reader 추가 개발.
  • MQ 전문 송수신 및 메시지 흐름 분석.
  • MQ 채널 비활성, Queue 적체, 전문 유실 등 운영 장애 분석.
  • ESB 연계 API 개발 및 유지보수.
  • 항공사 연계 테스트 및 전문 검증 지원.
  • 전문 송수신 로그 분석을 통한 데이터 추적 및 원인 분석.
주요 트러블슈팅 사례
·

SQL 실행계획 분석을 통한 조회 성능 개선

문제 발생대용량 데이터 조회 API에서 응답 지연이 발생하여 SQL 실행계획을 확인한 결과 Full Table Scan이 발생하는 것을 확인하였습니다. 조회 조건에 대한 인덱스 부재로 판단하여 신규 인덱스를 추가했으나, 생성 직후에도 실행계획이 변경되지 않고 기존 Full Scan 방식으로 조회되는 현상이 발생하는 것을 확인하였습니다.

해결DB 옵티마이저는 단순히 인덱스 존재 여부가 아닌 통계정보(Statistics)를 기반으로 실행계획을 결정한다는 점을 확인하였습니다. 이 통계정보는 옵티마이저가 실행계획을 결정할때 사용되는 것으로 갱신되지 않아서 인덱스를 추가했음에도 작동하지 않았던 것으로 판단했고, 바로 적용이 필요했기 때문에 수동으로 갱신하였습니다.

효과실행계획을 재확인하여 Index Scan 여부를 확인하고, 실제 문제 발생 조회쿼리를 실행해보면서도 개선되었음을 체감할 수 있었습니다.

·

DB Lock 장애 원인 분석 및 데이터 정합성 복구

문제 발생사전등록 서비스 운영 중 DB Lock 발생 알림과 함께 이중화 구성된 1, 2번 서버 다운 알림이 연속으로 발생하였습니다. 약 7분 후 자동 복구 시스템에 의해 서비스는 정상화되었으나, 장애 원인 분석을 진행하였습니다. DB 세션 관리자를 통해 Lock 대기 세션과 실행 중인 쿼리는 확인 가능했지만, 최초 Lock을 발생시킨 원인 쿼리는 이미 종료되어 직접 확인할 수 없는 상황이었습니다. 이후 실행된 요청들이 기존 Lock을 대기하며 장애가 발생한 것으로 판단하였습니다.

해결API 실행 시간 및 요청 현황을 분석하던 중 약 15분 이상 실행 상태를 유지하고 있는 API를 확인하였습니다. 해당 API를 분석하는 과정에서 요청 통계를 처리하면서 데이터의 정합성 오류를 발견하였고, 특정 컬럼의 값이 비정상적으로 동일하게 저장된 데이터를 확인하였습니다. 원인 분석 결과, 타 사무실 테스트 과정에서 테스트용으로 사용되었던 것으로 보이는 동적 쿼리 기반 UPDATE API가 호출된 것으로 파악되었습니다. 로직에 필수 조건 검증이 부족하여 테스트 요청이 운영 API로 유입될 경우 전체 데이터가 변경될 수 있는 구조임을 확인하였습니다. 긴급 대응으로 필수 입력값 검증 및 예외 처리 로직을 추가하여 재배포하였으며, 오염된 데이터는 사용자 이용 이력과 정상 데이터를 기준으로 복구 쿼리를 작성하여 야간 작업을 통해 복구하였습니다.

효과DB Lock 장애 원인을 추적하고 장시간 실행되는 API를 식별하여 장애 발생 지점을 분석하였습니다. 또한 데이터 변경 API에 필수 조건 검증을 추가하여 조건 누락으로 인한 대량 데이터 변경 가능성을 제거하고 운영 데이터 정합성을 확보하였습니다.

·

Spring Batch 기반 대량 알림톡 발송 시스템 구축

문제 발생바이오 등록 회원 약 800만 명을 대상으로 개인정보 이용 안내 알림톡을 발송하는 대량 처리 요구사항이 발생하였습니다. 대량 데이터를 단순 조회 후 일괄 처리할 경우 메모리 사용량 증가 및 장시간 실행으로 인한 장애 가능성이 있었으며, 운영 환경 제약사항을 고려한 안정적인 처리 구조가 필요하였습니다. 업무 시간 내에만 발송해야 하며, 기존 배치 작업 수행에 영향을 주지 않아야 했습니다. 회원별 1건 발송 보장, 외부 메시지 발송 제한으로 인한 차단 방지, 전체 대상자 처리 기간 단축을 동시에 만족해야 하는 상황이었습니다. 단순히 발송량을 낮출 경우 전체 발송 완료까지 장기간이 소요될 수 있어 시간당 처리량과 제한 건수를 고려한 발송 전략 수립이 필요하였습니다.

해결Spring Batch 기반 대량 발송 작업을 구현하였습니다. 전체 대상 데이터를 한 번에 메모리에 적재하지 않도록 Chunk 기반 처리를 적용하고, 일정 건수 단위로 데이터를 조회 및 처리하도록 구성하였습니다. 운영 환경 적용 전 발송 테스트를 진행하여 시간당 처리 가능 건수와 외부 메시지 발송 제한 기준을 확인하고, 안정적인 발송량을 산정하였습니다. 또한 알림톡 발송 이력 및 처리 상태를 관리하여 회원별 중복 발송을 방지하고 실패 건에 대한 재처리가 가능하도록 구현하였습니다. 발송 가능 시간을 제어하기 위한 중지 조건을 추가하였으며, 운영 중 수동 중단 시 마지막 처리 데이터 기준으로 중복 발송이 발생하는 문제를 확인하였습니다. 이를 해결하기 위해 단순 종료가 아닌 Job 실행 단위의 execute_id 기반 종료 처리 방식을 구현하여 모든 처리 흐름이 안전하게 종료된 이후 다음 작업이 진행되도록 개선하였습니다. 해당 종료 처리 방식은 이후 다른 배치 작업에도 적용 가능한 공통 구조로 확장하였습니다.

효과약 800만 명 규모의 개인정보 이용 안내 알림톡 발송 업무를 자동화하여 수작업 발송 부담을 제거하였습니다. Chunk 기반 처리와 발송 이력 관리로 대량 데이터 처리 시 안정성을 확보하고, 중복 발송 및 장애 상황에서의 재처리 가능성을 확보하였습니다. 또한 배치 종료 제어 로직을 공통화하여 대량 처리 배치 운영 안정성을 개선하였습니다.

·

AI 활용 기반 단말 UI 개발 및 장정맥 스캐너 장애 개선

문제 발생기존 C#/.NET 기반 단말 소스를 Python과 Vue 기반으로 대체 개발하며 운영 및 유지보수를 진행하였습니다. UI 개선, 이미지 생성, CSS 수정, 폰트 및 화면 배치 조정, 다국어 적용 등 단말 화면 관련 기능을 개발하였습니다. 프로토타입 형태로 운영 중인 바이오등록 키오스크 환경에서 간헐적으로 장정맥 스캔 진행 중 서비스가 응답하지 않는 현상이 발생하였습니다. 관리자 화면과 등록자 화면이 연동된 구조였으며, 장애 발생 시 단말 재구동으로 현장 관리자들이 복구하는 상황이었습니다.

해결로그를 분석하여 이틀에 한번 꼴로 발생하는 것으로 파악하였고, 장정맥 스캔시 특정 시퀀스 오류 발생 시 서비스 멈춤 현상이 발생하는 것을 확인하였습니다. 원인 분석 결과, 빠른 사용자 응답을 위해 적용했던 스캐너 초기화 및 재시도 로직이 과도하게 동작하면서 장정맥 스캐너에 반복 초기화 요청을 발생시키고, 이 과정에서 시퀀스 오류가 누적되어 장애로 이어지는 구조임을 확인하였습니다. 기존 0.2~0.3초 단위 자동 재시도 로직을 제거하고, 사용자가 재시도 버튼을 반복 입력할 수 없도록 3초간 입력 제한 기능을 추가하여 스캐너 초기화 요청 빈도를 제어하였습니다.

효과장애 발생 로그 분석을 통해 스캐너 연동 과정의 원인을 파악하고 재시도 제어 로직을 개선하였습니다. 개선 적용 이후 기존 하루~이틀에 1회 발생하던 장애가 일주일 이상 추가 발생하지 않아 단말 운영 안정성을 확보하였습니다.