tempfile 모듈로 안전하게 임시 파일 생성하기
파이썬에서 고유한 임시 파일을 가장 안전한 방식으로 만들려면 표준 라이브러리의 tempfile 모듈을 사용하는 것이 가장 좋습니다. 특히 mkstemp() 함수는 다음과 같은 보안상 이점을 제공합니다.
- 파일 생성 과정에서 경쟁 상태(race condition)가 발생하지 않습니다.
- 생성된 파일은 파일을 만든 사용자 ID만 읽고 쓸 수 있어 권한이 안전하게 제한됩니다.
mkstemp() 기본 사용법
import tempfile
_, temp_file_path = tempfile.mkstemp()
print("File path: " + temp_file_path)mkstemp()는 파일 디스크립터와 파일 경로를 튜플 형태로 반환합니다. 위 예제에서는 파일 디스크립터를 언더스코어(_)로 무시하고 파일 경로만 출력했습니다.
주의: 임시 파일은 직접 삭제해야 합니다
mkstemp()로 생성한 파일은 프로그램이 종료되어도 자동으로 삭제되지 않습니다. 따라서 작업이 끝난 후에는 반드시 직접 파일을 정리해야 합니다. 일반적으로 os.close()로 파일 디스크립터를 닫은 뒤 os.remove()를 호출하는 방식을 사용합니다.
import os
import tempfile
fd, temp_file_path = tempfile.mkstemp()
try:
# 임시 파일 사용
...
finally:
os.close(fd)
os.remove(temp_file_path)자동 삭제가 필요하다면?
임시 파일을 자동으로 정리하고 싶다면 NamedTemporaryFile을 컨텍스트 매니저(with 문)와 함께 사용할 수 있습니다.
import tempfile
with tempfile.NamedTemporaryFile(delete=True) as tmp:
print(tmp.name)
# with 블록 종료 시 파일 자동 삭제이처럼 tempfile 모듈을 활용하면 파일 이름 충돌이나 보안 문제를 걱정하지 않고도 안전하게 임시 파일을 생성하고 관리할 수 있습니다.