4일 만에 CSV 데이터 클리너를 만든 방법 (Python 초급 작업 프로젝트)

발행: (2026년 2월 24일 오후 09:25 GMT+9)
4 분 소요
원문: Dev.to

Source: Dev.to

배경

QA(Meta, Microsoft)와 RPA 컨설팅을 2년 이상 하던 중 자동화 엔지니어링으로 전환하기로 했습니다. 이것이 제가 4일 만에 만든 첫 번째 Python 프로젝트이며, 전 과정을 문서화했습니다.

도전 과제

프로덕션 수준의 CSV 클리너를 구축하기:

  • 데이터(잘못된 항목 포함)를 절대 잃지 않음
  • 상세한 오류 보고서 제공
  • 실제 현장에서 마주치는 지저분한 데이터 처리
  • 품질 우선 원칙 적용

만든 것

Python 스크립트가:

  • ✅ 수천 개의 연락처를 몇 초 만에 정리
  • ✅ 이메일, 전화번호, 이름, 나이 검증
  • ✅ 유효 데이터와 무효 데이터를 구분
  • ✅ 상세 오류 보고서 생성

여정 (날짜별)

1‑2일 차: Python 기본

  • 변수, 문자열, 함수
  • 딕셔너리와 리스트
  • CSV 파일 처리

가장 어려웠던 부분: 반복문과 데이터 흐름 이해

3일 차: 핵심 구현

  • 정리 및 검증 함수 8개 작성
  • 오류 처리 구현

돌파 순간: 각 함수가 오류를 리스트 형태로 반환해야 함을 깨달음

4일 차: 통합 및 테스트

  • 모든 함수를 결합
  • 파일 쓰기 추가
  • 지저분한 데이터로 테스트

핵심 학습: 관심사의 분리(정리 vs 검증)

핵심 코드 섹션

검증 패턴

def validate_email(email):
    """Check email structure"""
    errors = []

    if "@" not in email:
        errors.append("Missing @")

    # More checks...

    return errors
  • 리스트를 반환(여러 오류를 수집 가능)
  • 명확한 오류 메시지
  • 확장하기 쉬움

메인 루프

for row_num, row in enumerate(reader, start=2):
    all_errors = []

    # Clean
    cleaned_name = clean_name(row.get("Name", ""))

    # Validate
    all_errors.extend(validate_name(cleaned_name))

    # Decide
    if all_errors:
        error_contacts.append(...)
    else:
        clean_contacts.append(...)

배운 점

기술 스킬

  • Python 기본
  • CSV 처리
  • 오류 처리 패턴
  • 재사용성을 위한 함수 설계

메타 스킬

  • 효율적인 학습 방법(프레임워크보다 기본기 먼저)
  • 체계적인 디버깅 방법
  • 가독성 높은 코드 작성법
  • 작업 문서화 방법

QA 마인드셋을 코드에 적용

  • 엣지 케이스 테스트(빈 문자열, None 값)
  • 상세 오류 보고
  • 데이터 무결성(절대 정보 손실 금지)
  • 명확한 문서화

실수한 점

  • 처음에 모든 로직을 하나의 함수에 넣으려 함

    • 해결: 정리와 검증을 분리
  • 형 변환 시 오류 처리를 빼먹음

    • 해결: 필요한 곳마다 try/except 블록 추가
  • 출시 전에 “완벽하게” 만들고 싶었음

    • 해결: 먼저 동작하는 버전을 배포하고, 이후에 개선

결과

프로젝트 통계

  • 약 200줄 코드
  • 함수 8개
  • 시작부터 완료까지 4일
  • 100 % 직접 작성(학습 자료 활용)

실제 성능

  • 1,000행:

자유롭게 활용해 보세요:

  • 프로젝트에 사용
  • 개선점 제안
  • 댓글로 질문 남기기
0 조회
Back to Blog

관련 글

더 보기 »