기본 콘텐츠로 건너뛰기

추천 가젯

리액트 + 비트(Vite)로 모바일 청첩장 만들기 — 1편

모바일 청첩장 시리즈 1편 · 기획/스택/배포 리액트 + 비트(Vite)로 모바일 청첩장 만들기 — 1편 안녕하세요, 이번에 결혼 준비를 하면서 여자친구와 같이 모바일 청첩장 을 만들고 있어요. 여자친구가 디자인을 해서 전달해주면 제가 개발을 진행하고 있어요. 이 글은 구현기 1편 으로, 전체 흐름과 스택, 배포 구성까지 “부담 없이” 훑어봅니다. (코드는 여러 버전 테스트 중!) 이 글에서 보는 것 왜 SPA 모바일 청첩장인가? 기본 스택 & 폴더 구조 라우팅 선택: HashRouter가 편한 이유 Cloudflare Pages로 자동 배포 현재 진행 중인 UI 버전들(테스트 기록) 1) 왜 SPA 모바일 청첩장인가? 모바일 청첩장은 핵심이 명확해요. 가볍고 빠르고 끊김이 없어야 하고, 사진/지도/일정이 터치에 친화적 이어야 합니다. 그래서 React + Vite 로 싱글 페이지 앱(SPA)을 구성했고, 정적 호스팅(CDN)인 Cloudflare Pages 에 올려 GitHub 푸시 → 자동 배포 까지 한 번에 묶었습니다. UX 팁 · 이미지 WebP, loading="lazy" 기본 · 큰 터치 타깃 · BGM은 “사용자 탭 후” 재생(모바일 정책) 2) 기본 스택 & 폴더 구조 서버는 따로 두지 않았고, 정적 빌드 결과물( dist/ )만 올립니다. 현재 의존성은 아래와 같아요. package.json(요약) { "name": ...

파이썬 tempfile 완전 정복 🗂️ — 안전한 임시 파일·폴더 만들기

파이썬 tempfile 완전 정복 🗂️ — 안전한 임시 파일·폴더 만들기 tempfile 아이콘

파이썬 tempfile 완전 정복 🗂️

임시 파일을 직접 open('tmp.txt') 같은 방식으로 만들면 이름 충돌이나 보안 이슈가 발생할 수 있습니다. tempfile 모듈은 운영체제 안전 규칙을 따라 임시 파일·폴더를 만들어주고, 자동 삭제까지 관리합니다.

1) NamedTemporaryFile — 임시 파일

import tempfile

# 컨텍스트 매니저: 종료 시 자동 삭제
with tempfile.NamedTemporaryFile(mode="w+", suffix=".txt") as tmp:
    print("임시 파일 경로:", tmp.name)
    tmp.write("Hello Tempfile!")
    tmp.seek(0)
    print(tmp.read())

# 블록을 벗어나면 파일 자동 삭제
delete=False 옵션을 주면 자동 삭제되지 않고 남겨집니다.

2) TemporaryDirectory — 임시 디렉터리

import tempfile, pathlib

with tempfile.TemporaryDirectory() as tmpdir:
    print("임시 디렉터리:", tmpdir)
    p = pathlib.Path(tmpdir) / "file.txt"
    p.write_text("inside temp dir")

# 블록 종료 시 tmpdir 자동 삭제

3) 저수준 API: mkstemp, mkdtemp

import tempfile, os

fd, path = tempfile.mkstemp(suffix=".log")  # 파일 디스크립터 + 경로 반환
print("생성된 임시 파일:", path)
os.close(fd)  # 직접 닫아야 함
os.remove(path)

d = tempfile.mkdtemp(prefix="session_")
print("생성된 임시 디렉터리:", d)
# 직접 삭제 필요: os.rmdir(d) 또는 shutil.rmtree(d)

4) 임시 경로 확인 & 변경

import tempfile

print(tempfile.gettempdir())   # 시스템 기본 임시 폴더 경로
print(tempfile.gettempprefix()) # 파일명 접두사 기본값

5) 실전 예제

5-1. 업로드 파일 임시 저장 후 처리

import tempfile, shutil

def handle_upload(src_path):
    with tempfile.NamedTemporaryFile(delete=False, suffix=".bin") as tmp:
        shutil.copy(src_path, tmp.name)
        print("업로드 임시 저장:", tmp.name)
    return tmp.name

5-2. 테스트 실행 중 임시 디렉터리 활용

import tempfile, pathlib

def run_test():
    with tempfile.TemporaryDirectory() as tmpdir:
        p = pathlib.Path(tmpdir) / "output.txt"
        p.write_text("테스트 결과")
        # 테스트가 끝나면 디렉터리 자동 정리
        return p.read_text()

5-3. 임시 파일을 로그 핸들러로 쓰기

import tempfile, logging

with tempfile.NamedTemporaryFile(delete=False, suffix=".log") as tmp:
    handler = logging.FileHandler(tmp.name)
    logger = logging.getLogger("tmp")
    logger.addHandler(handler)
    logger.warning("임시 로그 기록")
    print("로그 파일 위치:", tmp.name)

요약

  • NamedTemporaryFile → 임시 파일, TemporaryDirectory → 임시 디렉터리
  • with 구문을 쓰면 종료 시 자동 삭제
  • mkstemp/mkdtemp는 저수준 API로 직접 정리 필요
  • 임시 위치는 gettempdir()로 확인 가능
  • 보안성과 유니크 파일명 보장이 장점

자주 묻는 질문(FAQ)

Q1. Windows에서도 잘 동작하나요?
A. 네. cross-platform으로 동작합니다. 단, Windows에서는 NamedTemporaryFile을 열면 다른 프로세스가 접근 못 하는 제약이 있어요.

Q2. 임시 파일을 특정 위치에 만들고 싶어요.
A. dir 파라미터에 경로를 넘기면 해당 위치에 생성됩니다.

댓글

가장 많이 본 글

Icons by Flaticon