기본 콘텐츠로 건너뛰기

추천 가젯

리액트 + 비트(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 바인딩 추가: ...

파이썬 itertools.groupby 완벽 가이드

파이썬 itertools.groupby 완벽 가이드 🧩

itertools.groupby는 연속된 데이터를 그룹화할 때 사용되는 강력한 함수입니다. 정렬된 데이터를 기준으로 묶어서 처리할 수 있어 데이터 분석과 전처리 단계에서 자주 활용됩니다.

groupby 아이콘

✅ 기본 사용법

from itertools import groupby

data = "aaabbccccdddaa"

# key 기준으로 그룹화
for key, group in groupby(data):
    print(key, list(group))

# 출력
# a ['a', 'a', 'a']
# b ['b', 'b']
# c ['c', 'c', 'c', 'c']
# d ['d', 'd', 'd']
# a ['a', 'a']

연속된 동일 값들이 하나의 그룹으로 묶입니다.

✅ 정렬 후 그룹화

데이터가 정렬되어 있지 않다면, 먼저 정렬해야 그룹화가 올바르게 동작합니다.

items = ['apple', 'banana', 'pear', 'apricot', 'blueberry']

# 첫 글자 기준 정렬 후 그룹화
items.sort(key=lambda x: x[0])

for key, group in groupby(items, key=lambda x: x[0]):
    print(key, list(group))

# 출력
# a ['apple', 'apricot']
# b ['banana', 'blueberry']
# p ['pear']

✅ 로그 분석 예시

로그 파일 같은 데이터를 사용자 ID 기준으로 묶어 분석할 수 있습니다.

logs = [
    ("user1", "login"),
    ("user1", "click"),
    ("user2", "login"),
    ("user2", "logout"),
    ("user1", "logout")
]

# user 기준 정렬
logs.sort(key=lambda x: x[0])

for user, actions in groupby(logs, key=lambda x: x[0]):
    print(user, [a for _, a in actions])

# 출력
# user1 ['login', 'click', 'logout']
# user2 ['login', 'logout']

⚠️ 주의사항

  • groupby연속된 값만 그룹화합니다.
  • 정렬되지 않은 데이터에서는 원하는 결과가 나오지 않을 수 있으므로 sort() 후 사용하세요.

요약

  • groupby는 연속된 데이터를 묶어서 그룹화할 수 있습니다.
  • 정렬 후 사용하면 데이터 분류와 집계에 유용합니다.
  • 로그 분석, 데이터 전처리, 통계 처리 등 다양한 실전 사례에 적용할 수 있습니다.

Icons by Flaticon

댓글

가장 많이 본 글

Icons by Flaticon