
Python tempfile 사용법
tempfile 모듈은 임시 파일과 임시 디렉터리를 안전하게 만들기 위한 Python 표준 라이브러리다. Python 3.14 공식 문서 기준으로 실무에서 가장 많이 구분해야 하는 것은 이름 없는 임시 파일이 필요한지, 이름이 보이는 임시 파일을 다시 열어야 하는지, 디렉터리 단위 정리가 필요한지다.
선택 기준은 네 가지다. 자동 정리가 필요한지, 파일 이름을 외부 API나 다른 프로세스에 넘겨야 하는지, Windows에서 재오픈이 필요한지, 그리고 수동 삭제 책임을 감수할지다. 이 글은 Python 3.14 공식 문서를 기준으로 TemporaryFile, NamedTemporaryFile, TemporaryDirectory, mkstemp, mkdtemp의 차이만 정리한다.
tempfile은 언제 쓰면 될까?
다음 조건이면 tempfile이 기본 선택지가 된다.
- 고유한 임시 경로를 충돌 없이 만들어야 한다.
- 작업이 끝나면 파일이나 디렉터리를 정리해야 한다.
- 공유 디렉터리에서 예측 가능한 파일명 생성 위험을 피하고 싶다.
공식 문서는 고수준 인터페이스로 TemporaryFile, NamedTemporaryFile, TemporaryDirectory, SpooledTemporaryFile를 제공하고, 저수준 함수로 mkstemp()와 mkdtemp()를 제공한다고 설명한다. 고수준 인터페이스는 자동 정리를 제공하지만, 저수준 함수는 호출자가 직접 삭제를 책임진다.
TemporaryFile과 NamedTemporaryFile은 무엇이 다를까?
TemporaryFile()은 임시 저장소가 필요하지만 파일 이름을 외부에 노출할 필요가 없을 때 적합하다. Python 공식 문서는 Unix에서 디렉터리 엔트리가 아예 생성되지 않거나 생성 직후 제거될 수 있다고 설명하며, 다른 플랫폼에서는 이 동작에 의존하지 말라고 안내한다.
NamedTemporaryFile()은 파일 시스템에 보이는 이름이 항상 필요할 때 쓴다. 공식 문서는 이 함수가 보이는 이름을 보장하고, delete와 delete_on_close로 삭제 시점을 제어한다고 명시한다.
from tempfile import TemporaryFile, NamedTemporaryFile
with TemporaryFile() as fp:
fp.write(b"hello")
fp.seek(0)
print(fp.read())
with NamedTemporaryFile(mode="w+t", delete=True, delete_on_close=False) as fp:
print(fp.name)
NamedTemporaryFile을 다시 열어야 하면 무엇을 봐야 할까?
이 부분이 실무에서 가장 자주 문제를 만든다. Python 3.14 공식 문서는 파일을 닫은 뒤 이름으로 다시 열어야 한다면 delete=False로 만들거나, with 문 안에서 쓴다면 delete_on_close=False를 고려하라고 설명한다. 후자는 컨텍스트 종료 시 자동 정리를 유지할 수 있어서 문서에서도 권장되는 방식이다.
운영체제 차이도 있다. 공식 문서는 POSIX에서는 열려 있는 동안에도 이름으로 다시 열 수 있다고 설명하지만, Windows에서는 추가 조건이 필요하다고 밝힌다. 예를 들어 delete=False이거나, 추가 오픈이 delete 공유 접근을 허용하거나, delete=True이면서 delete_on_close=False여야 한다. 또한 Windows에서 delete 공유 없이 다시 연 핸들이 남아 있으면 컨텍스트 종료 시 PermissionError가 날 수 있다.
TemporaryDirectory는 언제 더 낫나?
여러 파일을 한 번에 만들고 마지막에 디렉터리째 정리하고 싶다면 TemporaryDirectory()가 더 단순하다. 공식 문서는 이 객체가 컨텍스트 관리자이며, 종료 시 디렉터리와 내부 파일을 함께 제거한다고 설명한다.
Python 3.12부터는 delete 매개변수가 추가되어 컨텍스트를 벗어나도 디렉터리를 남겨둘 수 있다. 문서는 이 옵션이 디버깅이나 조건부 정리에 유용할 수 있다고 설명한다. 또 Python 3.10부터는 ignore_cleanup_errors가 있어 Windows에서 열린 파일 때문에 정리가 실패하는 경우를 best-effort로 넘길 수 있다.
from tempfile import TemporaryDirectory
from pathlib import Path
with TemporaryDirectory() as tmpdir:
base = Path(tmpdir)
report = base / "report.txt"
report.write_text("ok", encoding="utf-8")
mkstemp와 mkdtemp는 언제 선택해야 할까?
mkstemp()와 mkdtemp()는 저수준 함수다. 공식 문서는 두 함수 모두 안전하게 임시 경로를 만들지만, 생성 후 삭제 책임은 호출자에게 있다고 명시한다. 따라서 파일 디스크립터나 절대 경로를 더 직접적으로 다뤄야 할 때만 쓰는 편이 낫다.
mkstemp()는 OS 수준 파일 핸들과 절대 경로를 반환한다. mkdtemp()는 새 임시 디렉터리의 절대 경로를 반환하며, Python 3.12부터는 dir 인자가 상대 경로여도 항상 절대 경로를 돌려준다고 문서에 적혀 있다.
임시 디렉터리는 어디에 만들어질까?
기본 위치가 궁금하면 gettempdir() 문서를 보면 된다. Python 공식 문서는 기본 디렉터리 탐색 순서를 TMPDIR, TEMP, TMP, 그 다음 플랫폼별 기본 경로 순서로 설명한다. 따라서 컨테이너, CI, 서버 배치 작업에서는 환경 변수 설정이 실제 저장 위치를 바꿀 수 있다.
실무에서는 어떤 선택이 무난할까?
- 파일 이름이 필요 없고 한 함수 안에서만 쓰면
TemporaryFile()이 가장 단순하다. - 외부 프로그램이나 다른 코드에 경로를 넘겨야 하면
NamedTemporaryFile()을 먼저 본다. - 여러 파일을 묶어서 처리하면
TemporaryDirectory()가 정리 관리에 유리하다. - 파일 디스크립터나 절대 경로를 직접 관리해야 하면
mkstemp(),mkdtemp()를 선택한다. - Windows 재오픈이 필요하면
delete,delete_on_close, 열린 핸들 정리 순서를 함께 점검한다.
FAQ
NamedTemporaryFile의 delete_on_close는 언제 추가됐을까?
Python 공식 문서는 delete_on_close 매개변수가 Python 3.12에 추가됐다고 명시한다. 따라서 3.11 이하 호환 코드라면 이 인자를 전제로 작성하면 안 된다.
TemporaryDirectory는 항상 자동 삭제될까?
기본값은 자동 삭제지만, Python 3.12부터는 delete=False로 비활성화할 수 있다. 다만 이 경우 정리 책임은 호출자에게 남는다.
mkstemp를 쓰면 자동으로 파일이 지워질까?
아니다. Python 공식 문서는 mkstemp()와 mkdtemp()는 호출자가 직접 삭제해야 한다고 설명한다. 자동 정리가 필요하면 고수준 인터페이스가 더 적합하다.
참고 자료
'프로그래밍 > C, C++, Java, Python' 카테고리의 다른 글
| Python asyncio timeout 기준 정리 (0) | 2026.07.01 |
|---|---|
| Python tarfile 추출 필터 기준 정리 (0) | 2026.06.25 |
| Python Path.relative_to 사용법 (1) | 2026.06.13 |
| Python Path.copy 사용법 (0) | 2026.06.07 |
| Python Path.walk 사용법 (0) | 2026.06.02 |





