E사 프로젝트 이력

목차

  1. 광고 데이터 플랫폼 운영 개선 및 성능·보안 고도화
    1. 프로젝트 개요
    2. 핵심 성과 및 의사결정 이력
      1. 1. 대용량 데이터 수집 배치의 메모리 부족 문제 분석 및 개선
      2. 2. Selenium 기반 데이터 수집 구조를 HTTP API 방식으로 전환
      3. 3. SQL Injection 취약점 분석 및 파라미터 바인딩 적용
      4. 4. Django Custom Test Runner를 활용한 테스트 결과 출력 개선

광고 데이터 플랫폼 운영 개선 및 성능·보안 고도화

프로젝트 개요

항목내용
기간2024.12 ~ 2025.06 (7개월)
업무/프로젝트사내 광고 플랫폼 운영 및 배치 안정화, API 기반 데이터 수집 전환, 서버 보안 취약점 진단
기술 스택Python, Django, Django REST Framework (DRF), Selenium, Keycloak, PyMySQL, AWS(Lambda, EC2, ECR, ECS, EventBridge, API Gateway, Code Commit, Parameter Store, CloudWatch, S3), BitBucket

핵심 성과 및 의사결정 이력

1. 대용량 데이터 수집 배치의 메모리 부족 문제 분석 및 개선

  • 문제
    • 타 부서와 리소스를 공유하는 2GB RAM 환경에서 대용량 광고 데이터를 수집하고 병합하는 배치가 종종 MemoryError(OOM)로 중단되는 문제가 발생함
    • 인프라 제약으로 인해 인스턴스 사양을 바로 올리기(Scale-up) 어려운 상황이었음
  • 해결
    • 원인 분석 및 환경 개선: 데이터 처리 과정에서 메모리 고갈이 발생하는 지점을 확인하고, 이를 완화하기 위해 OS 레벨의 Swap 공간을 1GB에서 4GB로 확장함
    • 코드 수준의 메모리 관리: Pandas 데이터 처리 중 불필요한 복사본이 생성되지 않도록 인플레이스(in-place) 연산을 도입하고, 메모리 사용량이 급증하는 구간 직후에 가비지 컬렉터를 호출함
  • 성과
    • 인프라 증설 없이 OS 설정과 애플리케이션 코드 수정을 통해 메모리 부족 현상을 해결하여, 배치 작업이 중간에 비정상 종료되는 문제를 개선함

2. Selenium 기반 데이터 수집 구조를 HTTP API 방식으로 전환

  • 문제
    • 기존에는 브라우저를 직접 제어하는 Selenium 방식으로 데이터를 수집하고 있어 실행 시간(3~5분)이 길고 CPU/메모리 부하가 컸음
    • 대상 웹사이트의 UI가 조금만 변경되어도 수집 로직이 실패하는 유지보수 문제가 반복됨
  • 해결
    • 동작 방식 분석: 기존 브라우저 자동화 과정에서 발생하는 로그인 및 데이터 요청 패킷을 분석함
    • 인증 및 수집 방식 변경: 분석한 결과를 바탕으로 Keycloak 기반 OAuth2 인증 로직을 구현하여, 브라우저 렌더링 없이 순수 HTTP API 요청만으로 데이터를 수집하도록 코드를 재작성함
  • 성과
    • 불필요한 렌더링 오버헤드를 제거하여 수집 시간을 3~5분에서 30~45초약 80% 단축했으며, 웹사이트 UI 변경에 영향을 받지 않는 안정적인 데이터 수집이 가능해짐

3. SQL Injection 취약점 분석 및 파라미터 바인딩 적용

  • 문제
    • AWS Lambda 기반 조회 API를 점검하는 과정에서 사용자 입력값이 문자열 포맷팅(f-string)을 통해 SQL 쿼리에 직접 결합되는 코드를 확인
    • 해당 구현 방식이 SQL Injection으로 이어질 가능성을 확인하고, 실제 공격 가능성과 영향 범위를 안전한 환경에서 검증할 필요가 있었음
  • 해결
    • 취약점 검증: 운영 환경에 영향을 주지 않도록 격리된 스테이징 RDS 환경에서 Time-based SQL Injection 시나리오를 구성하여 사용자 입력값을 통한 SQL 실행 가능성을 검증
    • 시큐어 코딩 적용: 취약한 쿼리 작성 방식을 pymysql의 파라미터 바인딩 방식으로 변경하여 사용자 입력값이 SQL 구문으로 해석되지 않도록 개선
    • 개발 보안 기준 정리: 취약점 발생 원인과 개선 방법을 정리하고, 안전한 SQL 작성 방식과 파라미터 바인딩 적용 예시를 포함한 사내 개발 보안 가이드 작성
  • 성과
    • 취약점 사전 제거: 운영 배포 전에 SQL Injection 발생 가능성을 발견하고 안전한 쿼리 작성 방식으로 개선
    • 시큐어 코딩 내재화: 특정 코드의 취약점 수정에 그치지 않고 SQL 작성 시 사용자 입력값을 직접 쿼리에 결합하지 않는 개발 기준을 정리하여 팀 내 공유
    • 개발 관점의 보안 인식 강화: 기능 구현 이후 별도의 보안 점검에 의존하기보다 개발 단계에서 입력값 처리와 SQL 실행 구조를 함께 검토하는 시큐어 코딩 관점 확립

4. Django Custom Test Runner를 활용한 테스트 결과 출력 개선

  • 문제
    • 작성된 테스트 케이스가 늘어나면서 실패한 테스트를 확인할 때 영문 함수명만 출력되어 디버깅에 시간이 소요됨
  • 해결
    • Django의 기본 DiscoverRunner를 상속받아, 테스트 실행 시 메서드에 작성된 한글 docstring(설명문)을 함께 출력하도록 확장함
  • 성과
    • 테스트 결과의 가독성을 높여 기능 수정 시 실패 원인을 빠르게 파악할 수 있도록 개발 환경을 개선함