엠포스 프로젝트 이력
역할: 사내 광고 플랫폼 백엔드 개발 및 시스템 유지보수
재직 기간: 2024.12 ~ 2025.06 (7개월)
목차
광고 데이터 플랫폼 운영 개선 및 성능·보안 고도화
프로젝트 개요
| 항목 | 내용 |
|---|---|
| 기간 | 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 |
기여 및 성과
대용량 광고 데이터 처리 과정의 MemoryError 장애 분석 및 배치 안정화
- 문제: EC2
t3a.small(2GB RAM)환경에서 여러 광고 매체로부터 수집된 대용량 데이터를 단일 파일로 병합하는 배치 프로세스 수행 중, 데이터 증가로 인해 서버 메모리 임계치를 초과하여MemoryError가 발생하고 배치 작업이 중단됨. 공유 인스턴스 환경으로 서버 스펙 변경이나 재시작이 어려워 서비스 중단 없이 장애를 해결해야 하는 상황. - 해결: 배치 프로세스의 메모리 사용 흐름을 분석하여 데이터 병합 과정에서 발생하는 메모리 부족 원인을 식별하고, 서버 재시작 없이 Swap 메모리를 추가 및 확장하여 물리 메모리 부족 상황에서도 배치 작업이 지속적으로 수행될 수 있도록 실행 환경 개선.
- 성과: Swap 메모리 적용 이후 동일한
MemoryError가 재발하지 않았으며, 광고 데이터 취합 배치가 정상적으로 완료되도록 운영 안정성을 확보하고 데이터 수집 프로세스의 지속성을 확보.
Selenium 기반 광고 데이터 수집 구조 분석 및 API 기반 수집 방식 전환
- 문제: Selenium 브라우저 자동화 방식의 데이터 수집으로 인해 로그인 처리, 동적 페이지 렌더링 대기 등 수집 시간이 지연되고 브라우저 실행 의존성으로 인해 프로세스 오버헤드가 발생함.
- 해결: 대상 사이트의 로그인 네트워크 트래픽을 정밀 분석하여 Keycloak 기반 인증 토큰 획득 흐름을 규명하고, 직접 HTTP Request를 발급하여 광고 플랫폼 API 데이터를 수집하도록 수집 로직을 리팩토링함.
- 성과: 데이터 수집 처리 시간을 기존 3~5분에서 30~45초 수준으로 단축하여 약 80% 이상의 속도 개선을 이루었으며, 브라우저 프로세스 실행 의존성을 제거하여 배치 엔진의 경량화를 실현함.
AWS Lambda 기반 데이터 조회 로직 SQL Injection 취약점 분석 및 개선 방향 제안
- 문제: AWS Lambda의 Python + pymysql 기반 로직 내에서 사용자 입력값이 문자열 포맷팅 방식으로 SQL 질의문에 직접 결합되어 SQL Injection 공격을 초래할 수 있는 취약 지점 발견.
- 해결: 테스트 환경을 구축한 후
SLEEP()함수 등을 포함한 취약점 페이로드를 주입하여 Time-based SQL Injection 공격을 재현 및 영향도 검증. 이후 파라미터 바인딩 방식 적용 가이드를 도출하여 보고서 형태로 제안함. - 성과: 운영 서비스의 핵심 결함을 미연에 식별하고 안전한 쿼리 작성 표준 가이드를 제시하여 사내 보안 수준 제고에 기여함.
Django 테스트 실행 결과 가독성 개선을 위한 Custom Test Runner 구축
- 문제: 사내 광고 솔루션의 Django 테스트 환경에서 기본 Test Runner는 테스트 함수명만 Terminal에 출력하여, 테스트 케이스가 증가할수록 실행 결과만으로 검증 대상 기능과 테스트 목적을 파악하기 어려움. 테스트 목적 확인을 위해 함수명을 추측하거나 테스트 코드를 직접 확인해야 하는 비효율 발생.
- 해결: Django 기본 Test Runner 구조를 분석하고
DiscoverRunner,TextTestResult기반의 Custom Test Runner를 구현. 테스트 실행 과정에서 호출되는startTest()를 오버라이드하여 테스트 메서드의docstring을 출력하도록 개선하고, 프로젝트 테스트 실행 환경에 적용하여 한글 기반 테스트 설명이 표시되도록 변경. - 성과: Terminal 테스트 결과만으로도 검증 대상 기능과 테스트 목적을 즉시 파악할 수 있도록 개선하여 테스트 실행 결과의 가독성과 유지보수성을 향상.