토이 프로젝트 [출석부] - 1
Tags: s3, python, aws
Published: 2023-04-23 23:54:36

저는 AWS 한국 사용자 모임(AWSKRUG)에서 오거나이저로 활동하고 있습니다.
보통 한달에 한번 밋업 모임을 실시하고 있는데 10~30명 정도의 사람이 참석을 합니다. 어느날 저는 이런 궁금증이 생겼습니다. 모임이나 행사 신청자 중에서 얼마나, 누가 참석을 할까? 그래서 신청자 명단을 엑셀 시트로 작성하고 모임 당일날 프린터로 출력하여 가져갑니다. 신청자들이 한명씩 도착하면 각자 자신의 이름 옆에 출석 확인용으로 체크 또는 사인을 하도록 부탁했습니다.
그런데 모임 행사가 계속될수록 이런 단순한 과정들이 너무 지루해졌습니다. 게다가 작은 모임 행사가 아닌 규모 있는 컨퍼런스 같은 행사에서는 모두 QR 코드를 사용하는 것을 우리 모두는 알고 있습니다. 그래서 저도 단순 업무 프로세스를 가능한 모두 자동화하여 편하게 출석 체크 할 수 있는 토이 프로젝트 [출석부]를 무턱대고 시작하였습니다. 

저는 아직 AWS와 파이썬 프로그래밍 경험이 많지 않으므로 토이 프로젝트 진행이 빠르지 않을거라 예상합니다. 그리고 제 포스팅에 문제점이 있다면 알려주시기 바랍니다.

토이 프로젝트 시작을 생각하고 저는 일단 QR 코드를 지원하는 바코드 스캐너부터 구입하였습니다. 바코드 스캐너부터 구입한 이유는, 바코드 스캐너를 이용하여 원하는 QR 코드 생성과 인식이 가능한지 먼저 검증해야 하기 때문이었습니다.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t9o0qr0ve0du9155f4dk.png)

지난 3월달에 위의 바코드 스캐너를 구입하여 QR 코드 생성과 인식이 가능한 것을 검증했고, 이후에 보여 드릴 것입니다.

제가 진행할 토이 프로젝트의 전반적인 프로세스는 아래 그림과 같습니다.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4biyfmjsqf2k438zwb5y.png)

이번 토이 프로젝트 첫번째 포스팅에서는 A-1 ~ A-3 까지의 과정을 정리해보겠습니다. 사용된 데이터는 테스트 용도이므로 민감한 개인 정보는 다루지 않는다라는 것도 알아주세요.

제가 토이 프로젝트를 진행하는 환경은 아래와 같습니다. 특별한 사항은 없네요.

- 개인용 노트북(Windows 10, Intel(R) Core(TM) i7-7500U 2.70GHz)
- Anaconda3 2121.05(Python 3.8.8, 64bit)

개발 도구를 여러 가지 사용하기에는 번거로워서 간단히 쥬피터 노트북으로 일단 시작하였습니다. 진행하면서 특별한 문제점이 없다면 계속 이 환경을 이어 가겠습니다.

우선 밋업 사이트에 접속해서 필요한 정보를 수집하는 파이썬 코드 부분입니다.
크게 어려운 부분이 없으므로 간단히 그림과 설명으로 넘어갑니다.
몇주전에 작성한 코드들이 대부분이지만 화면 캡쳐를 위해 일부 수정하고 다시 실행했습니다.

먼저 필요한 모듈들을 설치합니다. 이후에 더 필요한 모듈들이 있겠지요...

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d6cwad50e57hs8jp64tz.png)

설치한 모듈들을 임포트 합니다.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/232plqpaz7drxplp4ukx.png)

키와 시크릿, 버킷 이름 등의 민감한 정보에 대해서는 모자이크 처리하며 설명하지 않겠습니다.

밋업 사이트에 접속하여 해당 밋업의 타이틀 정보만 추출합니다. 다른 정보가 더 필요하더라도 어렵지 않겠네요.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2ee53tden4lqjaauppkw.png)

일단은 테스트를 위해 밋업 타이틀 정보만을 이용해서 QR 코드 이미지를 생성합니다. 그리고 민감 정보가 없으므로 간단히 Base64 인코딩만 했습니다.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ws06gnrqllzb2sgf6ybz.png)

와우! 아래와 같은 이미지 생성이 잘 되었네요. 가운데 작은 캐릭터는 AWSKRUG의 마스코트 "구름이" 입니다.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vk5kt1rt252m21jwgnyz.png)

이제 생성된 이미지를 위한 S3 버킷을 생성 합니다. AWS 콘솔에 로그인하고 서울 리젼으로 설정합니다.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y115bvz6f4lo7sgq4xal.png)

버킷을 생성하려는데 대문자와 한글은 안되는군요.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ro6yo4rn8wwuyfj54rsk.png)

영문자 소문자만을 이용해서 버킷을 생성했습니다. 

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ev4gznq70cdbtzckgoz3.png)

IAM 사용자 계정과 S3 사용을 위한 액세스 키도 생성하였으나 생략합니다 ^^

자, 이제 정말 이미지 파일을 버킷에 업로드 합니다. 약간의 중간 과정을 생략하고 최종 코드는 아래와 같습니다. 업로드한 파일을 다른 파일 이름으로 다운로드 해서 확인해보니 이상이 없고 노트북 화면에 표시도 해봤습니다. 성공입니다!

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/43nmmftqz6sordazld5t.png)

S3 콘솔에서도 이미지 파일 업로드를 확인합니다. 역시 성공이네요!

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gc87bmty5uxbjbyl7j4p.png)

이번 포스팅은 여기까지만 하고 다음에 이어서 해보겠습니다. 
두서 없는 글 읽어주셔서 감사합니다~ ^^

S3 API는 아래 링크를 참고했습니다.
https://boto3.amazonaws.com/v1/documentation/api/latest/guide/s3-uploading-files.html
https://boto3.amazonaws.com/v1/documentation/api/1.12.6/reference/services/s3.html