HomeLab Portfolio

김준섭Java Backend Developer

금융 SI 4개 프로젝트(ING·NH 농협·KDB·메리츠증권)에서 레거시 전환, 운영 안정화, 배치 검증을 수행했습니다. 형상관리가 없는 시스템은 디컴파일로, SVN 환경은 Git+Jenkins로 바꿔왔고, 지금은 자택 홈랩 위에서 qwer4.org 포털·블로그·AI 서비스를 직접 운영하며 개발 이후를 계속 검증합니다.

2022.03~ 금융 SI 실무
ING 운영 · 인프라 · 취약점 대응
NH 시장리스크 / WebSquare · SKYLark
Jira · Confluence · 문서 표준화
KDB 130개 프로그램 담당
HomeLab 공개 서비스 운영
서비스 상태 확인 중...
Current Focus
Financial Systems
Java 기반 웹 개발, 레거시 개선, 배치 검증, DB 전환과 운영 대응을 중심으로 일하고 있습니다.
Public Proof
HomeLab
자체 하이퍼바이저, ZTA Tunnel, nginx, Quartz 기반 홈랩과 공개 포털, 블로그를 직접 운영합니다.
Working Style
Analyze First
문서가 부족한 시스템에서도 기존 구조를 빠르게 파악하고, 바뀌는 부분을 안정적으로 정리하는 편입니다.

Profile

나는 이런 개발자입니다

  • 레거시를 두려워하지 않습니다. 형상관리가 없던 AML 시스템을 디컴파일로 분석해 TO-BE 전환 작업을 수행했고, ING 프로젝트에서는 SVN 기반 운영 환경을 Git + Jenkins CI/CD로 전환했습니다.
  • 개발만 하고 끝내지 않습니다. 홈랩과 공개 포털을 직접 운영하며 배포·인증서 교체·인프라 페일오버까지 경험합니다. 서비스가 죽으면 직접 고쳐야 하는 환경이 최고의 운영 훈련입니다.
  • 팀 자산을 만드는 문서화를 합니다. Jira 보드 세팅, Confluence 운영 가이드, Git 형상관리 문서를 정리하며 신규 인원이 빠르게 온보딩할 수 있는 기준을 만들었습니다.

Strength

핵심 강점

  • 레거시 전환 리스크 관리 — 형상관리 없는 시스템도 디컴파일 분석으로 변경 범위를 파악하고, SVN→Git 전환과 CI/CD 도입으로 ING 프로젝트 배포 시간을 약 70% 단축했습니다.
  • 금융 도메인 4건 이상 — 수출입 금융(ING), 시장리스크(NH), 글로벌 뱅킹 예산·경비(KDB, 130개 프로그램), AML(메리츠, 일 130~150만 건 배치)을 직접 담당했습니다.
  • 운영까지 책임지는 개발WildFly 인증서 교체, JDK 업그레이드, SSO 장애 분석, JEUS 포팅을 포함한 운영 이슈를 개발 외 역할로 수행했습니다.
  • 공개 검증 가능한 결과물 — qwer4.org 포털, blog.qwer4.org, ai.qwer4.org를 자체 하이퍼바이저·ZTA Tunnel·nginx로 직접 운영 중입니다. 페일오버 테스트 전 항목 PASS.

Timeline

커리어 타임라인

2025.10 ~ 2026.04 예정

메리츠증권 AML 재구축

Oracle to PostgreSQL 전환, JEUS 포팅, CDD 공통 모듈화, 배치 검증 업무를 수행하고 있습니다.

2025.04 ~ 2025.08

산업은행 글로벌 뱅킹

경영지원 예산, 경비 도메인 130개 프로그램을 담당하며 대규모 금융 SI를 경험했습니다.

2023.01 ~ 2025.03

사내 표준화 기여

Jira, Confluence, Git, SKYLark UI 문서와 템플릿을 정리하며 협업 기준 정리에 참여했습니다.

2023.01 ~ 2025.03

ING 유지보수와 운영 대응

개발, 배포, 인증서, JDK, SSO, 취약점 대응까지 함께 맡으며 운영 감각을 키웠습니다.

2022.07 ~ 2023.01

NH 농협은행 시장리스크

F1 컨설팅과 협업하며 WebSquare 보고서와 SKYLark 설정 화면, 배치 운영을 경험했습니다.

2022.03

아이엠비씨스템 입사

금융 SI 웹 개발 경력을 시작하며 Java 기반 프로젝트에 본격적으로 투입됐습니다.

Selected Work

대표 경험

2025.10 ~ 2026.04 예정 AML

메리츠증권 AML 재구축

AML 5.0 to 7.4 전환, Oracle to PostgreSQL 마이그레이션, 기간계 연계 화면 개발, JEUS 포팅, STR/CTR 배치 검증을 수행하고 있습니다. 형상관리가 없는 레거시를 디컴파일로 분석해야 했던 프로젝트입니다.

Problem 레거시 AML 시스템 성능 저하 및 형상관리 부재로 유지보수 한계 도달
Solution Spring Boot 기반 재설계, Oracle→PostgreSQL 전환, 배치 검증 로직 개선
Result 일 130만~150만 건 배치 검증 안정화, CDD 공통 모듈화, JEUS 포팅 완료
일 130~150만 건 Oracle → PG JEUS 포팅
2025.04 ~ 2025.08 KDB

산업은행 글로벌 뱅킹 재구축

200여 명이 참여한 대규모 SI 프로젝트에서 경영지원 예산, 경비 도메인 130개 프로그램을 담당했습니다. JSP Model 1 기반 화면을 WebSquare5 + AnyFrame 구조로 전환했고 승인 흐름과 연계를 반영했습니다.

Problem JSP Model 1 레거시를 현대 구조로 전환하며 복잡한 승인·연계 흐름 반영 필요
Result 130개 프로그램 담당 완료, 선급·후급·부가세·전표·EAI·DB-to-DB 연계 반영
130개 프로그램 200+ 인원 협업 WebSquare5
2023.01 ~ 2025.03 Internal

사내 개발 표준화 및 문서 체계 개선

외부 고객 프로젝트 외에도 Jira, Confluence, Git, SKYLark UI 관련 가이드와 운영 템플릿 정리에 참여했습니다. 문서가 쌓여도 다시 찾을 수 있어야 한다는 기준으로 운영 문서와 개발 문서를 정리했습니다.

  • 주간보고 양식과 이슈 흐름 기준을 정리해 협업 방식의 일관성을 높였습니다.
  • Git, 개발환경, UI 관련 문서를 작성하거나 정리하며 신규 인원 온보딩에 기여했습니다.
  • 시스템 관리자 문서와 인수인계 문서를 정리해 문서 이원화 방지에 참여했습니다.
2023.01 ~ 2025.03 ING

ING 은행 수출입 금융 시스템

Git 기반 형상관리 전환, Jenkins 자동 배포 파이프라인 구축, 17개 서비스 로직과 10개 UI 화면 개발, SonarQube 기반 취약점 개선을 수행했습니다. 단순 유지보수보다 운영 안정화 범위가 넓은 프로젝트였습니다.

Problem SVN 기반 형상관리와 수동 배포로 운영 리스크 및 취약점 대응 지연
Result 배포 시간 70% 단축, SonarQube 취약점 개선, JDK·SSO·인증서 대응 완료
배포 70% 단축 Jenkins CI/CD SonarQube
2022.07 ~ 2023.01 NH

NH 농협은행 시장리스크 시스템 구축

바젤3 개편에 따른 시장리스크 시스템 구축 프로젝트에서 F1 컨설팅과 협업했습니다. Linux, JEUS, Oracle 환경에서 SKYLark 기반 설정 화면과 WebSquare 기반 보고서 화면을 다뤘고, 배치 수행 흐름과 운영 절차를 함께 이해했습니다.

  • 시장리스크 업무 흐름을 이해한 상태에서 신규 화면 개발과 유지보수를 수행했습니다.
  • 설정 화면과 보고서 화면이 다른 기술 스택으로 구성된 환경을 경험했습니다.
  • 배치 운영 지원과 배포 대응을 함께 수행했습니다.

Trouble Shooting

실제로 겪고 해결한 문제들

이력서에는 나오지 않는, 실제 운영 환경에서 마주친 문제와 분석 과정입니다.

ING — 운영

WildFly 인증서 만료 → SSO 간헐적 실패

특정 사용자만 간헐적으로 SSO 로그인 실패. 에러 로그에는 "Connection reset" 외에 단서가 없었음.
서버 간 TLS 핸드셰이크 실패임을 확인 → WildFly 키스토어 인증서 만료 발견.
인증서 재발급 및 키스토어 교체, UAT·운영·백업 서버 순차 적용 후 세션 정책 재확인.
"간헐적"이라는 증상은 인증서 만료 초기에 나타나는 패턴임을 이후 유사 사례에 활용했음.

HomeLab — 인프라

ZTA Tunnel 이중 연결 → 인증 API 404 간헐적 발생

qwer4.org 포털 로그인 API가 외부에서 간헐적으로 404. 내부에서는 정상.
두 노드에서 동일 Tunnel ID로 ZTA 에이전트가 실행 중임을 확인 → 터널이 round-robin으로 트래픽을 분배. 미러 노드의 nginx에 /api/auth/ 블록이 누락돼 있었음.
미러 노드 nginx에 /api/auth/ proxy 블록 추가, auth-api bind를 모든 인터페이스로 변경해 양쪽 모두 정상 처리.
로그를 어느 노드에서 봐야 하는지를 먼저 확정해야 한다는 걸 확인했음.

메리츠 — 레거시

형상관리 없는 레거시 분석 → 디컴파일 기반 비교

기존 AML 5.0 시스템에 형상관리(VCS)가 없고, 운영 서버 클래스 파일만 존재.
운영 .class를 디컴파일 후 TO-BE 코드와 diff 비교. 변경 범위와 누락 로직을 직접 추적.
기간계 연계 화면 개발, CDD 공통 모듈화 작업에 기존 로직 손실 없이 반영.
코드가 없는 게 아니라 "찾는 방법이 다를 뿐"이라는 관점이 생겼음.

HomeLab — 배포

portal-vue 배포 후 Blank Screen

빌드 후 배포 완료 메시지가 났지만 브라우저에서 흰 화면만 표시.
JS 번들 파일 크기 확인 → 원본 대비 크기가 매우 작음 → base64 echo 방식의 plink 명령어 길이 제한으로 파일 잘림 확인.
tar + 청크 방식 배포 스크립트로 전환. 이후 배포 검증 절차(파일 크기 확인)를 표준화.
"배포 성공"과 "서비스 정상"은 다른 체크포인트임을 확인했음.

ING — 레거시

NULL 조회 결과 무방비 접근 → 운영 NPE 노출

사용자가 잘못된 날짜 값 입력 후 조회 시 화면에 NPE 에러만 표시. 에러 단서 없음.
selectOne 결과가 null인 상태에서 .get() 메서드를 null 체크 없이 직접 호출. 레거시 코드 전반에 유사 패턴 다수 존재.
BusinessException으로 null 케이스 처리, 메시지 코드를 통해 사용자 친화적 안내 추가. 동일 패턴 구간 일괄 검수.
JVM 예외가 화면에 그대로 노출되면 디버깅도 사용자 경험도 모두 나빠진다는 걸 확인했음.

ING — WAS

WildFly 피크 타임 응답 지연 → JVM 힙 리사이징 반복

업무 피크 타임 이후 WAS 응답이 간헐적으로 느려짐. OOM 로그 없어 원인 불명.
WAS 로그에서 Full GC 발생 빈도 확인 → 초기 힙(-Xms)과 최대 힙(-Xmx)이 달라 힙 리사이징이 반복 발생.
-Xms와 -Xmx를 동일 값으로 통일, MetaspaceSize 상한 추가. Full GC 빈도 급감.
"느려졌다"는 증상에서 GC 로그까지 계층별 지표를 함께 봐야 원인을 찾을 수 있다는 것을 확인했음.

메리츠 — DB 전환

Oracle → PostgreSQL 마이그레이션 중 전용 함수 불일치

Oracle에서 정상 동작하던 쿼리가 PostgreSQL 전환 후 오류 발생. 배치 처리 중 다수 실패.
Oracle 전용 함수(NVL, DECODE, TO_DATE 포맷)가 PostgreSQL에서 미지원. AML 5.0 쿼리 전반에 혼재.
PostgreSQL 동등 함수로 매핑(NVL→COALESCE, DECODE→CASE WHEN). 배치 쿼리 270여 건 순차 검수 및 수정.
DBMS 전환은 접속정보 변경이 아니라 함수 체계·NULL 처리·날짜 포맷 전체를 재검증해야 하는 작업임을 확인했음.

Growth

교육과 성장

Bootcamp

항해99 백엔드 부트캠프 수료

2025년 7월 5일부터 2025년 9월 13일까지 항해99 백엔드 부트캠프에 참여했습니다. GitHub 공개 저장소 기준으로 hhplus-tdd-java, study-learn-spring-posts, hhplus-e-commerce-spring에 포인트 과제, Spring Boot 기반 게시판과 JWT 인증, 이커머스 서버 구조 학습 내용을 정리했습니다.

Course

클라우드환경 (SaaS) 솔루션 전환과정

2023.09, 위블 교육을 통해 자사 솔루션에 적용하기 위한 Docker 기반 클라우드 전환과 SaaS 운영 관점을 학습했습니다. 실무에 바로 연결할 수 있는 배포와 운영 변경 포인트를 정리하는 데 초점을 맞췄습니다.

Course

Docker 기본 / 클라우드기반 Docker 활용

2022.04, 구트아카데미 교육을 통해 웹 애플리케이션 배포, 유지보수, 네트워크 구축에 필요한 Docker 기본기를 학습했습니다. 이후 홈랩과 실무 운영 경험으로 연결해 컨테이너 관점을 확장했습니다.

Course

빅데이터 분석 & Java 개발자 과정

2021.06부터 2021.12까지 에이콘아카데미에서 HTML, CSS, JavaScript, JSP, Spring, Database, Python, 웹 크롤링, 데이터 분석, 머신러닝, 딥러닝까지 폭넓게 학습하며 개발 전환의 기반을 만들었습니다.

Backend

Web Stack

Java
Spring
Python
Vue.js 3
Kotlin
JavaScript

Data

Database / Middleware

Oracle
PostgreSQL
MySQL
Tomcat
Git
Jenkins

Infra

Self-hosted Platform

Linux
Docker
nginx
Terraform
Ansible
GitHub

HomeLab / Public Platform

이 사이트는 어떤 구조로 만들어져있나요?

지금 보고 있는 이 포트폴리오 사이트는 제가 직접 구성한 홈랩 위에서 운영되고 있습니다. 상용 클라우드 없이, 자택 물리 서버 → 하이퍼바이저 → 서비스 컨테이너 → 리버스 프록시 → ZTA Tunnel 경로로 공개됩니다.

Problem 클라우드 의존 없이 다수 서비스를 안정적으로 공개 운영하면서, 실무와 연결되는 DevOps 경험을 직접 쌓아야 했음
Solution 하이퍼바이저 위 LXC 컨테이너로 서비스 격리, ZTA Tunnel로 포트 비공개 보안 터널, 이중 엔드포인트 자동 페일오버 구성
Result 블로그·포털·AI·영상 서비스 동시 운영. 페일오버 테스트 전 항목 PASS. 단일 포털 인증으로 모든 서비스 SSO 연동
Method 하이퍼바이저 + LXC/VM, nginx 이중화, ZTA Tunnel 고가용성, IaC (Terraform/Ansible), LibreNMS 모니터링
서비스 7+ 페일오버 PASS SSO 통합 포트 전면 비공개

공개 포털 스택

qwer4.org

  • Vanilla HTML/CSS/JS — 프레임워크 없이 직접 구성. 로딩 속도 최우선
  • nginx (엣지 노드 + 미러 노드) — 이중화 구성, 한쪽 장애 시 ZTA Tunnel 자동 페일오버
  • Python HTTP 서버 — 방명록 API, 인증 API, 유지보수 API를 단일 호스트로 운영
  • ZTA Tunnel + Zero Trust Access — 포트 개방 없이 공개, 관리용 서브도메인은 GitHub OAuth 보호

어드민 패널 스택

admin.qwer4.org

  • Vue 3 + Tailwind v4 SPA — 관리자 대시보드. Vite 빌드 후 nginx 정적 서빙
  • Kotlin/Spring Boot — 서비스 제어 API. 각 컨테이너/VM 상태 조작
  • LibreNMS — 네트워크·서버 모니터링 + 알림
  • JWT 기반 포털 인증 — 회원가입 시 영상·AI 서비스 계정 자동 프로비저닝

블로그 스택

blog.qwer4.org

  • Quartz v4.5.2 + Node 22 — Obsidian 노트를 마크다운 정적 사이트로 빌드
  • Obsidian → Git push → rebuild.sh — 글 발행 파이프라인. SSH 원격 빌드
  • CDN — JS/CSS 에셋 캐싱, 이미지 최적화
  • 커스텀 CSS (custom.scss) — 다크 테마, 폰트, 레이아웃 직접 구성

AI 서비스 스택

ai.qwer4.org

  • vLLM + 로컬 LLM 모델 — GPU 서버 위에서 로컬 추론. GPU 메모리 관리 직접 튜닝
  • Open WebUI — 웹 프론트엔드. 포털 계정과 SSO 연동
  • Discord Bot — 서버 제어, 블로그 동기화, 홈랩 모니터링 에이전트
  • Anki 대시보드 — 학습 데이터 시각화 + AI 카드 자동 생성

Public Proof

공개 링크

Contact

면접 또는 협업 문의는 아래로 연락해 주세요.