기본 콘텐츠로 건너뛰기

추천 가젯

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

모바일 청첩장 시리즈 2편 · R2 갤러리 & Firebase 방명록 Cloudflare R2 · Functions Firebase Firestore 클라우드플레어 R2로 갤러리 저장하고, Firebase로 방명록 달기 안녕하세요, 병민입니다 🙌 1편에서 전체 흐름을 잡았고, 이번엔 사진 업로드/보관 과 방명록 을 연결합니다. 서버는 따로 없고 Cloudflare Pages 를 쓰고 있으니, Pages Functions (= 워커)로 R2에 사전서명 URL을 만들어주고, 프론트에서 그 URL로 바로 업로드하는 구조예요. 방명록은 Firebase DB로 간단·안전하게! 전체 그림 프론트(React) → /api/r2/upload 로 업로드용 URL 요청 → R2에 파일 PUT 프론트(React) → /api/r2/list 로 목록 요청 → 갤러리 렌더 프론트(React) → Firebase SDK로 방명록 작성/조회 1) R2 버킷 & Pages Functions 준비 Cloudflare 대시보드 > R2 > Create bucket (예: wedding-gallery ) 버킷 > Settings > CORS 에서 사이트 도메인 허용(예: https://*.pages.dev , 커스텀 도메인) Pages 프로젝트 > Settings > Functions 에서 R2 바인딩 추가: ...

파이썬 collections 모듈 완전 정복 🧩

Collections icon

파이썬 collections 모듈 완전 정복 🧩

collections 모듈은 고급 자료구조를 제공해 파이썬 코드의 효율성과 가독성을 높입니다. 다양한 활용법을 예제와 함께 소개합니다.

1. deque: 양방향 큐

from collections import deque

dq = deque([1, 2, 3])
dq.append(4)
dq.appendleft(0)
print(dq)  # deque([0, 1, 2, 3, 4])

dq.pop()
dq.popleft()
print(dq)  # deque([1, 2, 3])

2. Counter: 빈도 계산

from collections import Counter

words = ["apple", "banana", "apple", "orange", "banana"]
cnt = Counter(words)
print(cnt)            # Counter({'apple': 2, 'banana': 2, 'orange': 1})
print(cnt.most_common(2))  # [('apple', 2), ('banana', 2)]

3. defaultdict: 기본값 있는 딕셔너리

from collections import defaultdict

dd = defaultdict(int)
dd["a"] += 1
dd["b"] += 2
print(dd)  # defaultdict(, {'a': 1, 'b': 2})

4. namedtuple: 가독성 높인 튜플

from collections import namedtuple

Point = namedtuple("Point", ["x", "y"])
p = Point(10, 20)
print(p.x, p.y)  # 10 20
print(p)  # Point(x=10, y=20)

5. OrderedDict: 입력 순서 유지 딕셔너리

from collections import OrderedDict

od = OrderedDict()
od["a"] = 1
od["b"] = 2
od["c"] = 3
print(list(od.keys()))  # ['a', 'b', 'c']

요약

  • deque로 양방향 큐와 스택 구현 가능
  • Counter로 시퀀스 요소별 빈도 계산
  • defaultdict를 사용하면 키가 없어도 기본값으로 초기화 가능
  • namedtuple은 필드 이름이 있는 튜플로 코드 가독성 향상
  • OrderedDict는 삽입 순서가 보존되는 딕셔너리 클래스

댓글

가장 많이 본 글

Icons by Flaticon