기본 콘텐츠로 건너뛰기

추천 가젯

리액트 + 비트(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": ...

📁 `pathlib`로 파일 경로를 객체처럼 다루자!

Pathlib icon

📁 `pathlib`로 파일 경로를 객체처럼 다루자!

pathlib는 파일 경로를 문자열이 아닌 `Path` 객체로 관리할 수 있게 해주는 모듈입니다. OS 간 호환성과 가독성을 모두 높여주며, 파일/디렉터리 작업을 직관적으로 처리할 수 있습니다.

✅ 1. 기본 `Path` 객체 생성 및 속성

from pathlib import Path

p = Path('/usr/local/bin')
print(p.name)       # bin
print(p.suffix)     # ''
print(p.stem)       # bin
print(p.parent)     # /usr/local
  • 객체 속성으로 경로 요소에 안전하게 접근 가능.

✅ 2. 파일 존재 확인, 생성, 삭제

p = Path('logs/app.log')
if not p.exists():
    p.parent.mkdir(parents=True, exist_ok=True)
    p.write_text('로그 시작\n', encoding='utf-8')
else:
    content = p.read_text(encoding='utf-8')
    print(content)
  • `.mkdir()`와 `exist_ok=True`로 안전한 폴더 생성.
  • 문자열 기반 입출력은 `.read_text()`, `.write_text()`로 간편하게.

✅ 3. 디렉터리 탐색 및 패턴 매칭

from pathlib import Path

for txt in Path('docs').rglob('*.txt'):
    print(txt, txt.stat().st_size, "bytes")
  • `rglob()` 덕분에 하위 폴더까지 포함한 확장자 일괄 탐색이 가능.

✅ 4. 파일 이동, 복사, 이름 변경

from shutil import copy2
from pathlib import Path

src = Path('data/report.txt')
dst = Path('backup/old_report.txt')
copy2(src, dst)    # 메타데이터 유지 복사

src.replace('archive/report.txt')  # 이동 및 덮어쓰기
  • 경로 연산과 `shutil` 조합으로 파일 조작을 안전하고 직관적으로.

✅ 5. 경로 결합, 절대 경로, 상대 경로 계산

from pathlib import Path

base = Path('/home/user')
sub = base / 'project' / 'main.py'
print(sub)                    # /home/user/project/main.py
print(sub.resolve())         # 절대경로 반환
print(sub.relative_to(Path('/home')))  # user/project/main.py
  • `/` 연산자를 사용한 경로 연결은 OS에 맞게 자동 변환됩니다.

✅ 6. 고급 예제: 로그 아카이브 자동화 스크립트

from pathlib import Path
import datetime

def archive_logs():
    today = datetime.date.today().isoformat()
    src = Path('logs')
    dst = Path(f'archive/logs_{today}')
    dst.mkdir(parents=True, exist_ok=True)
    for f in src.glob('*.log'):
        f.replace(dst / f.name)

archive_logs()
  • 날짜 기반 아카이브 폴더 자동 생성 + 로그 파일 이동.
  • 운영 환경 스크립트 예시로 실제 프로젝트에서 바로 응용 가능합니다.

✨ 요약 & 활용 팁

  • 모든 경로 작업을 객체로 처리 → 안전하고 직관적
  • `write_text` / `read_text` 등 입출력 기능 기본 탑재
  • `.glob()`, `.rglob()`로 패턴 탐색 작업 간편하게 처리
  • 경로 연산과 `shutil`, `datetime` 조합으로 실전 스크립트 작성 가능
  • OS 호환성 자동 관리 → Windows/Linux/macOS 모두 안전

댓글

가장 많이 본 글

Icons by Flaticon