프로젝트
더존비즈온KISA 전자문서유통중계자 인증 · 인프라부터 서비스까지

전자문서 유통 서비스

2인 팀에서 전자문서 유통 서비스의 인프라 설계와 API·관리자·배치 개발을 담당했습니다. 서버 22대의 이중화 환경을 구성하고 인증 심사 보완에 대응해 KISA 심사 적합 판정과 가오픈까지 진행했습니다.

KISA 전자문서유통중계자 인증 심사 적합 (1차 부적합 → 2차 적합) · 2022.09 가오픈

기간
2021.09 — 2022.08
팀
2인 팀 (팀장 + 본인)
역할
인프라 설계 · API · 관리자 · 배치 개발

둘이서 시작한 신규 서비스

전자문서유통중계자는 KISA 주관으로, 문서 자체가 법적 효력을 갖도록 유통정보와 열람 일시를 KISA에 전달하는 서비스입니다. 종이 문서를 전자화하는 전자고지 성격이라 개인 플랫폼은 이미 큰 회사들이 차지하고 있었고, 회사는 법인 간 유통에 집중하기로 했습니다. 다만 법인 유통 사례가 거의 없어 KISA도 명확한 답을 주지 못하는 구간이 있었습니다.

팀장과 함께한 2인 프로젝트에서 인프라 설계와 서비스 개발을 맡았습니다. API뿐 아니라 배치, 관리자 화면, 배포와 심사 대응까지 준비해야 했습니다.

인프라를 직접 세우다

운영 환경은 서버 22대로 구성하기로 결정했습니다. 어떤 구간을 몇 대로 이중화할지, 어느 계층에 무엇을 둘지는 제가 정했습니다. 앞단은 HAProxy + keepalived로 VIP를 잡아 WEB · WAS · AUTH · KEY 네 구간을 각각 2대씩 이중화했고, WEB은 Nginx 3대(그중 1대는 별도 도메인용), WAS는 Tomcat 2대에 API · 배치 · 관리자 서비스를 포트별로 나눠 올렸습니다. 인증 서버 2대에는 Redis 마스터 · 복제본과 Sentinel 3개(홀수 유지)를 두어 세션 토큰 저장소를 이중화했습니다.

데이터베이스는 MariaDB Galera 클러스터 3대 앞에 MaxScale 2대 + keepalived를 두어 읽기 · 쓰기 분산과 장애 전환을 맡겼습니다. 키 서버 2대는 Apache Commons Daemon과 JKS로 암호화 키를 관리합니다. 서버별 초기 설정 파일, 포트 정리, 로그 위치, SSL 인증서 갱신 절차까지 문서로 남겨 이후 운영자가 따라갈 수 있게 했습니다.

API · 관리자 · 배치

API 서버는 전자문서 등록 · 열람과 KISA로의 유통정보 전달을 담당합니다. KISA와는 VPN으로 연결해 통신하고, 명세서를 직접 정리했습니다. 관리자 서비스는 권한을 분리한 로그인, 이용자 · 관리자 정보, 공인전자주소와 탈퇴 이력, 이용자 · 관리자 활동과 KISA 송수신 모니터링, 유통 증명서 조회, 오류 알림을 제공합니다.

배치 서비스는 운영에서 생기는 뒷정리를 맡습니다. 만료 문서 삭제, 회원가입 · 문서 등록 · 열람 등록 · 탈퇴 · 이름 변경의 재처리, 송수신 내역과 로그 정리, 그리고 키 교체에 따른 재암호화까지 배치 명세서를 만들어 구현했습니다.

KISA 심사, 두 번째에 적합

전자문서유통중계자 인증 심사는 이틀에 걸쳐 진행됩니다. 1차 심사에서는 부적합을 받았고, 지적 사항을 보완해 2022년 7월 2차 심사에서 적합 판정을 받았습니다. 심사 직후 서버별 설정 파일을 그대로 보존해 두어, 심사받은 구성과 운영 구성이 달라지지 않도록 했습니다. 방화벽 정책 신청, 패키지 설치를 위한 인터넷 개방 요청 같은 기안도 직접 올렸습니다.

2022년 9월 6일 가오픈했고, 이후 회사의 비즈니스 플랫폼과 연동했습니다.

배포는 자동으로, 프론트는 무중단으로

개발 환경에는 GitLab · Nexus · Jenkins를 두고, API · 관리자 · 배치 서버가 같은 절차(브랜치 매개변수 → Maven 빌드 → 배포 스크립트)로 배포되게 했습니다. 운영 배포 스크립트는 기존 war를 날짜별로 백업한 뒤 교체합니다. Node.js 프론트는 PM2 fork 모드로 인스턴스 4개를 띄우고 Nginx가 ip_hash로 분산하며, Jenkins가 소스를 옮기고 pm2 reload를 호출해 무중단으로 바꿉니다.

구조와 구현

이용자 · 법인 HAProxy ×2keepalived VIP · HTTPS WEB · Nginx ×3 web-1ip_hash web-2ip_hash web-3별도 도메인 Node.js 프론트 · PM2 fork ×4 · 무중단 reload HAProxy ×2WAS VIP WAS · Tomcat ×2 API 관리자 배치 KISA API VPN 전용선 유통정보 · 열람일시 전달 HAProxy ×2AUTH VIP AUTH · Tomcat ×2 Redismaster · replica Sentinel ×3홀수 유지 토큰 검증 HAProxy ×2KEY VIP KEY ×2 JKS 키 서버Commons Daemon 암호화 키 MaxScale ×2keepalived VIP · R/W 분산 MariaDB Galera Cluster ×3 maria-1 maria-2 maria-3 WAS · AUTH · 배치의 DB 접근 개발 · 배포 GitLab Nexus Jenkins 브랜치 매개변수 → Maven 빌드 → 배포 스크립트(war 백업 후 교체) 프론트: 소스 전달 → pm2 reload 심사 직후 서버별 설정 파일 보존 · 포트 · 로그 · SSL 갱신 절차 문서화 운영 서버 22대 — HA 8 · WEB 3 · WAS 2 · AUTH 2 · KEY 2 · MaxScale 2 · DB 3
계층별 역할과 이중화 구성을 나타낸 개념도입니다. 서버 이름과 주소는 생략했습니다.
구현 범위 · 사용 기술
  • Java 8
  • Spring
  • MyBatis
  • Tomcat
  • Redis Sentinel
  • MariaDB Galera
  • MaxScale
  • HAProxy · keepalived
  • Nginx
  • Node.js · PM2
  • GitLab · Nexus · Jenkins
  • 이중화 인프라HAProxy + keepalived VIP 4쌍, WEB 3 · WAS 2 · AUTH 2 · KEY 2 · DB 3
  • API 서비스전자문서 등록 · 열람 · 유통정보 전달, KISA VPN 연동
  • 인증 · 키 서버Redis 토큰 인증 서버(Sentinel 이중화), JKS 기반 키 서버
  • 관리자 서비스권한 분리 로그인, 이용자 · 공인전자주소 · 송수신 모니터링 · 유통 증명서
  • 배치 서비스만료 문서 삭제, 등록 · 열람 · 탈퇴 재처리, 재암호화, 로그 정리
  • 배포GitLab · Nexus · Jenkins, Node 프론트는 PM2 무중단 + Nginx 로드밸런싱

돌아보면

개발과 함께 서버 설정, 인증서 갱신, 배포·재처리 절차를 문서화했습니다. 퇴사 전에는 50개 이상의 인수인계 문서로 개발·운영 절차를 전달했습니다.

회사 프로젝트의 소스 코드는 공개하지 않습니다. 구조도는 업무 흐름을 설명하기 위한 개념도입니다.