기본 콘텐츠로 건너뛰기

추천 가젯

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

파이썬 zip() 함수 심화: 다중 반복, 언패킹, 실전 예제까지

파이썬 zip() 함수 심화: 다중 반복, 언패킹, 실전 예제까지 🔗

zip() 함수는 여러 시퀀스를 동시에 순회할 때 매우 유용합니다. 기본 사용법부터 언패킹(*), 행렬 전치 등 실전 예제까지 함께 알아볼게요.

Python zip icon

✅ zip 기본 사용

두 개의 리스트를 하나로 묶어 동시에 반복할 수 있습니다.

# 기본 zip 사용
names = ['Alice', 'Bob', 'Charlie']
scores = [85, 92, 78]

for name, score in zip(names, scores):
    print(f"{name}: {score}")

✅ zip 결과 리스트로 변환

zip 객체는 이터레이터이므로, list로 변환해서 확인할 수 있습니다.

# zip을 리스트로 변환
zipped = list(zip(names, scores))
print(zipped)  # [('Alice', 85), ('Bob', 92), ('Charlie', 78)]

✅ zip 언패킹 (역변환)

* 연산자를 활용하면 다시 각각의 시퀀스로 분리할 수 있습니다.

# zip 언패킹 (역변환)
names_scores = [('Alice', 85), ('Bob', 92), ('Charlie', 78)]
names, scores = zip(*names_scores)
print(names)  # ('Alice', 'Bob', 'Charlie')
print(scores) # (85, 92, 78)

✅ zip을 활용한 행렬 전치

zip과 *를 조합하면 행렬의 행과 열을 쉽게 바꿀 수 있어요.

# 행렬 전치 예제
matrix = [
    [1, 2, 3],
    [4, 5, 6]
]
transposed = list(zip(*matrix))
print(transposed)  # [(1, 4), (2, 5), (3, 6)]

zip()은 반복문을 더 읽기 쉽게 만들고, 데이터를 효율적으로 가공할 수 있는 강력한 도구입니다. 복잡한 시퀀스 처리를 zip으로 간단하게 해결해보세요!

두 개의 리스트를 하나로 묶는 지혜, zip()을 알면 반복문이 더 깔끔해진다. 🚀

Icons by Flaticon

댓글

가장 많이 본 글

Icons by Flaticon