학생이 QR코드를 스캔하여 사진+정보를 제출하면, 교수자가 PDF 출석부를 다운로드하는 Streamlit 웹앱.
- 수업별로 데이터가 분리됩니다
- 데이터는 Google Sheets에 영구 저장됩니다
- 조별 페이지 분리 + 학년순 정렬된 PDF 출석부 생성
- 무료로 운영 가능합니다
- github.com 접속 → Sign up → 계정 생성 (이미 있으면 로그인)
- 이 저장소 페이지에서 초록색 "Use this template" → "Create a new repository" 클릭
- Repository name에
attendance-app입력 - Public 선택 → Create repository 클릭
✅ 내 GitHub에 코드가 복사되었습니다.
- Google Cloud Console 접속 → Google 로그인
- 상단 프로젝트 선택 → 새 프로젝트 클릭
- 프로젝트 이름:
attendance-app→ 만들기 - 생성된 프로젝트가 선택되었는지 확인
- 왼쪽 메뉴 API 및 서비스 → 라이브러리 클릭
Google Sheets API검색 → 클릭 → 사용 버튼- 다시 라이브러리 →
Google Drive API검색 → 클릭 → 사용 버튼
- 왼쪽 메뉴 API 및 서비스 → 사용자 인증 정보 클릭
- + 사용자 인증 정보 만들기 → 서비스 계정 선택
- 서비스 계정 이름:
attendance-bot→ 만들기 및 계속 - 역할: 편집자 → 계속 → 완료
- 방금 만든 서비스 계정 클릭
- 키 탭 → 키 추가 → 새 키 만들기 → JSON → 만들기
- JSON 파일이 다운로드됩니다 → 메모장으로 열어두세요
- share.streamlit.io 접속 → GitHub 계정으로 로그인
- New app 클릭
- Repository:
내아이디/attendance-app선택 - Branch:
main/ Main file path:app.py - Deploy! 클릭
- 앱의 ⋮ 메뉴 → Settings → Sharing 탭
- "This app is public and searchable" 로 변경 → Save
- Settings → Secrets 탭
- 아래 내용을 복사하여 붙여넣고, 본인 정보로 수정:
admin_password = "원하는관리자비밀번호"
app_url = "https://내앱주소.streamlit.app"
sheet_name = "출석부"
courses = ["수업이름1", "수업이름2", "수업이름3"]
[gcp_service_account]
type = "service_account"
project_id = "여기에-프로젝트ID"
private_key_id = "여기에-키ID"
private_key = "-----BEGIN PRIVATE KEY-----\n여기에-전체키\n-----END PRIVATE KEY-----\n"
client_email = "여기에-서비스계정@이메일"
client_id = "여기에-클라이언트ID"
auth_uri = "https://accounts.google.com/o/oauth2/auth"
token_uri = "https://oauth2.googleapis.com/token"
auth_provider_x509_cert_url = "https://www.googleapis.com/oauth2/v1/certs"
client_x509_cert_url = "여기에-인증서URL"수정할 부분:
admin_password→ 관리자 비밀번호app_url→ 배포된 앱 URL (브라우저 주소창에서 복사)courses→ 본인 수업 목록 (예:["경영학원론", "마케팅전략"])[gcp_service_account]아래 → 다운로드한 JSON 파일의 값으로 교체
⚠️ private_key는 JSON 파일의 값을 그대로 복사하세요 (\n포함)
- Save 클릭
- sheets.google.com 접속
- 새 스프레드시트 만들기
- 제목을 출석부로 변경
- 오른쪽 위 공유 버튼 클릭
- JSON 파일의
client_email값을 복사하여 편집자 권한으로 추가
첫 행에 헤더를 입력하지 않아도 됩니다. 학생이 처음 제출하면 수업별 탭이 자동 생성됩니다.
✅ 완료! 앱에 접속해서 테스트해 보세요.
- 교수자가 보여주는 QR코드를 스마트폰으로 스캔
- 수업 선택 → 이름, 학번, 학과, 학년, 조 입력 + 사진 업로드
- 제출 버튼
- 사이드바 관리자 → 비밀번호 입력
- 수업 선택 → 등록 학생 목록 확인
- PDF 출석부 생성 → 다운로드 (조별 페이지 분리)
- QR코드 섹션에서 학생 접속용 QR코드 확인/저장
| 증상 | 해결 방법 |
|---|---|
| 앱에 에러 표시 | Settings → Secrets 설정을 다시 확인 |
| "스프레드시트를 찾을 수 없습니다" | 4단계(Google Sheet 만들기)를 확인 |
| QR코드 접속 불가 | Settings → Sharing → "public" 확인 |
| 데이터가 안 보임 | 관리자 페이지에서 🔄 새로고침 클릭 |
| API 에러 | Google Cloud에서 Sheets API, Drive API 둘 다 사용 설정 확인 |
pip install -r requirements.txt
# .streamlit/secrets.toml 을 secrets.toml.example 참고하여 생성 후:
streamlit run app.py