본문 바로가기
01. AI 테크 & 트렌드 (Main)/Claude & Anthropic

[보안포털 구축기 5편] 정보자산 관리전면 고도화

by 몽블86 2026. 5. 1.
보안포털 구축기 5편
🛡️ 보안포털 구축기
EPISODE 05
정보자산 관리
전면 고도화
엑셀 업로드부터 EOS 자동감지, 정렬/필터/페이지네이션까지
보안포털의 정보자산 관리가 한 단계 더 진화했다
FastAPI PostgreSQL openpyxl CI/CD EOS감지 GitHub Actions
01
이번 5편에서 구현한 것
4편 이후 추가된 핵심 기능 목록
📊
정보자산관리대장 엑셀 파서 완전 재작성
서버/클라우드/네트워크/DBMS/정보보호시스템/WebWas/PC/응용시스템 등 시트별 컬럼 구조가 모두 달라 각각 정확한 인덱스 매핑 처리
⚠️
EOS(기술지원 종료) 자동 감지
CentOS 7, Windows Server 2012, Oracle 11g 등 28개 기준으로 OS/버전에서 EOS 날짜 자동 판별 및 팝업 알림
📋
누적/덮어쓰기 선택 업로드
자산번호+자산명+IP 기반 MD5 해시 ID로 중복 방지. 같은 자산은 업데이트, 새 자산은 추가
🔄
관리자·일반포탈 UI 완전 동기화
탭 필터, 담당자/부서 검색, 컬럼 정렬, 15개씩 페이지네이션을 양쪽 동일하게 적용
02
시트별 컬럼 매핑 설계
각 시트마다 다른 컬럼 구조를 SHEET_CONFIG로 통합 관리
# 시트별 정확한 컬럼 인덱스 매핑 (0-based)
SHEET_CONFIG = {
    "서버": {
        "asset_type": "서버",
        "no_col": 1,  # No 컬럼 위치
        "cols": {
            "자산명": 5, "IP": 8,
            "담당자": 14, "EOS": 23,
            "진단여부": 25 ...
        }
    },
    "DBMS": { # 컬럼 수가 달라 별도 정의
        "cols": {
            "IP": 8, "운영체제": 9,
            "EOS": 20, "진단여부": 22 ...
        }
    },
    "클라우드": { ... }  # 서버와 동일 구조
}
💡 핵심 포인트
셀 병합(Merge Cell) 때문에 openpyxl로 읽으면 헤더 행이 2개(대분류/소분류)로 나뉘어 실제 데이터 시작 행이 달라짐. No 컬럼이 숫자인지 isinstance(no_val, (int, float))로 판별해 데이터 행만 파싱.
03
EOS 자동 감지 기능
28개 OS/SW 기준으로 기술지원 종료 자동 판별
OS / SW EOS 날짜 등급
CentOS 7 2024-06-30
Windows Server 2012 2023-10-10
Oracle 11g 2020-12-31
IIS 6.0 2015-07-14
Ubuntu 18 2023-04-30
MySQL 5.7 2023-10-31
Windows 10 2025-10-14
⚠️ EOS 알림 동작 방식
로그인 후 2초 뒤 EOS 대상 자산이 있으면 자동 팝업 표시. 헤더에 빨간 배지(⚠️ EOS 대상 N건)로 항시 표시. 담당자가 즉시 인지할 수 있도록 설계.
04
누적 / 덮어쓰기 선택 업로드
중복 없이 안전하게 자산 데이터 관리
🔄 덮어쓰기 모드
📌 기존 전체 데이터 삭제
📌 새 파일로 완전 교체
📌 연간 자산 전수조사 시
📋 누적 모드
✅ 기존 데이터 유지
✅ 신규 자산만 추가
✅ 수시 자산 추가 시
# 중복 방지 ID 생성 (자산번호+자산명+IP 기반)
def make_id(asset_type, asset_no, asset_name, ip):
    key = f"{asset_type}|{asset_no}|{asset_name}|{ip}"
    return int(hashlib.md5(
        key.encode(),
        usedforsecurity=False  # bandit B324
    ).hexdigest()[:12], 16)
 
# ON CONFLICT: 같은 자산이면 업데이트
INSERT INTO excel_data ... ON CONFLICT(category, item_id)
DO UPDATE SET data=:data
05
관리자 ↔ 일반포탈 UI 동기화
한 곳에서 업로드하면 양쪽에 동시 반영
170+
자산 관리
15개
페이지당 표시
8종
자산 분류
🗂️
탭 필터
전체 / 서버 / 네트워크 / 보안장비 / DBMS / WEB·WAS / PC / 클라우드 / 응용시스템
🔍
다중 필터 + 컬럼 정렬
담당자·부서·진단여부·키워드 검색. 헤더 클릭으로 오름차순↑/내림차순↓ 정렬. 보안등급은 가→나→다 순 정렬
06
CI/CD — 코드 품질 자동 검사
GitHub Actions로 lint → test → deploy 자동화
📤
git push origin main 코드 변경사항 GitHub에 업로드
🔍
flake8 — 코드 스타일 검사 E225(공백), E305(빈줄), E303(초과빈줄) 등 PEP8 준수 확인
🛡️
bandit — 보안 취약점 검사 B324(MD5 보안), B608(SQL인젝션) 등 코드 보안 자동 점검
🧪
pytest — 자동 테스트 API 엔드포인트 동작 검증
🚀
VPS 자동 배포 Docker 컨테이너 재시작 및 Nginx 서빙
💡 MD5 보안 이슈 해결법
ID 생성용 MD5는 보안 목적이 아니므로 usedforsecurity=False 파라미터를 추가해 bandit B324 경고를 정상적으로 처리. 보안 코드 리뷰 통과!
🎯
5편 완료!
다음 편 예고
정보자산 관리의 기반이 완성됐습니다.
이제 취약점 진단 결과와 정보자산을 연동해
자산별 취약점 현황을 자동으로 보여주는
대시보드 고도화로 이어집니다.
📊 대시보드 고도화 🔗 취약점-자산 연동 📧 EOS 이메일 알림 📱 모바일 최적화