---
# System prepended metadata

title: "Checkable : 부스트캠프 출석조회 어플 \U0001F5D3"

---

# Checkable : 부스트캠프 출석조회 어플 🗓

<center>
<br>
<br>
<img src="https://i.imgur.com/kMelGt3.png" width="550">
<br>
<br>
<br>
아직도 200여개의 댓글들을 스크롤하면서 불편하게 확인하시나요? 🥲
<br>
이제 앱에서 간단하게 출결사항을 조회하세요! 😆
</center>

## 💁🏻‍♀️ 팀원 & 역할 소개

|<img src="https://avatars.githubusercontent.com/u/43032377?v=4" width = 100>|<img src="https://i.imgur.com/V1KUwdf.jpg" width=100>|<img src="https://i.imgur.com/KD6hOp1.jpg" width=100>|
| :--------: | :--------: | :--------: |
|[S013] 김태훈<br>[@Modyhoon](https://github.com/Modyhoon)|[S036] 이나정<br>[@dailynj](https://github.com/dailynj)|[S045] 이지수<br> [@tmfrlrkvlek](https://github.com/tmfrlrkvlek)|
|크롤링 코드 작성|Firebase 세팅|크롤링 환경 세팅(EC2 & Crontab)|
|Firebase 데이터 수집|Firebase iOS 연동 & UI 작업|Firebase iOS 연동 & UI 작업|


<br>

## 📱 프로젝트 소개 

### 🥲 기존의 출첵시스템

| 매일 체크해야 하는 출결관리 | 일일히 확인해야하는 번거로움 |
| :--------------------: | :------------------:|
| <img src="https://i.imgur.com/glxiMHT.png" width=250>|<img src="https://user-images.githubusercontent.com/72058473/134460854-3ab0c0ca-505e-4d3e-9076-4ed5e4b0468c.gif" width=200>|

<br>

### ✔️ 서비스 핵심 기능

1. 부스트캠프 체크인, 체크아웃 기록 조회 (캘린더 형식)

    |출석부 예시 1|출석부 예시 2|
    |:----------:|:----------:|
    |![](https://i.imgur.com/UAe52nq.png)|![](https://i.imgur.com/jtwJbad.png)|
    

2. 출결 현황 확인
    |출결 현황 예시 1|출결 현황 예시 2|
    |:----------:|:----------:|
    |![](https://i.imgur.com/32yEhqM.png)|![](https://i.imgur.com/brgjHb1.png)|

3. 사용자의 아이디 저장 (with userDefaults)

<br>

### ⚒ 프로토타입
<img src="https://i.imgur.com/iM9oXlK.png" width=600>

<br>
<br>

### ✅ 시연 영상
<img src="https://i.imgur.com/sZyge88.gif" width=250>

<br><br>

### 🏛  SW 아키텍처 & 사용 기술/라이브러리

<img src="https://i.imgur.com/pPbHg4e.png" width=550>

<br>

|서버|슬랙 스레드 크롤링([Link](https://api.slack.com/))|DB|APP|
|:-:|:-:|:-:|:-:|
|AWS EC2|Python|FireStore|iOS/Swift|
|Crontab|SlackAPI||FSCalendar|

<br>

### 🗂 DB Schema
<img src="https://i.imgur.com/rYAkP80.png" width=550>


<details><summary>자세히 보기</summary>
<p>

### Date

```json
// Date: 날짜
// CheckInOnly : 체크아웃 O - false, 체크아웃 X - true
// IsActive : Date Count 유무, True/False (19시에 True로 변환)

{
    Date: 2021-09-23,
    CheckInOnly: true,
    IsActive: false
}
```

</p>
            
<p>

### AttendanceDetail

```json
// Date : Date
// CamperId : CamperId
// CheckInTime :  10:00:01 | null
// CheckOutTime : 23:00:10 | null
// Attendance : True/False

{
    Date: 2021-09-23,
    CamperId: "S013",
    CheckInTime: 09:59:59,
    CheckOutTime: null,
    Attendence: true
}
```
    
</p>

<p>

### CamperId

```json
// CamperId : 번호
// Name : 이름
// Type : 안드로이드(K), iOS(S), 웹(J)

{
    CamperId: "S013",
    Name: "김태훈",
    Type: 'S'
}
```
</p>

<p>

### Attendance

```json
// CamperId : CamperId
// Count : 총 출석 횟수 

{
    CamperId: "S013",
    Count: 3
}
```

</p>

</details>


### 🏃‍♂️ Install & run
```bash=
git clone https://github.com/boostcampwm-2021/bookathon_F.git

cd BoostAttendance
pod init
pod install # m1 칩에서 오류가 발생한다면 arch -x86_64 pod install 을 실행해주세요
```

🧨  m1 칩에서 pod install 오류가 난다면 -> ```arch -x86_64 pod install``` 을 실행해주세요
🧨  Firebase 오류가 난다면 -> [링크](https://gogorchg.tistory.com/entry/iOS-Error-Could-not-build-ObjectiveC-module-Firebase)
🧨 CocoaPod 오류가 난다면 -> [링크](https://escnet.tistory.com/24)

<br>

## 🥕 개발 후기
### Lambda 최대 용량 초과 😢
<img src="https://i.imgur.com/h3fJjWD.png" width="500">

  **눈물겨운 개발 과정💦**
  1. gRPC 모듈이 C기반이여서 Python으로 세팅된 Lambda에서는 동작 불가 
  2. 도커로 가상 환경을 구축한 후 필요한 패키지 의존성만 추출 [참고사이트](https://stackoverflow.com/questions/66291208/firebase-admin-with-aws-lambda-python)
  3. 용량이 커 zip 파일 업로드 불가능
  4. S3에 업로드 -> 50MB 초과로 에러
  5. EC2로 전환
  

### 파이어베이스 기본 용량 초과 😮
  체크인 - 체크아웃 스레드의 댓글이 각 200여개에 이름
  <img src="https://i.imgur.com/CtX7t2j.png" width="400">
  
  중복체크 로직 등 DB에 접근하는 쿼리의 양이 점점 많아지고, 
  결국 사용량 초과로 무료 요금제는 더 이상 사용하지 못하게 됨 😭
  눈물을 머금고 새벽3시에 **Blaze 요금제 결제 💸💸💸**
  <img src="https://i.imgur.com/f9GZ7QO.png" width="450">
  
  약 **31만회**의 읽기 트래픽
  <img src="https://i.imgur.com/x7QHHSe.png" width="600">
  
<br>

### XCode 버전이 달라서 열지 못하는 이슈 
  XCode 최신버전인 **13.0** 환경에서 프로젝트 생성
  해당 프로젝트를 XCode 12.6 환경에서 실행하니 다음과 같이 이슈 발생
  <img src="https://i.imgur.com/lGpDmW8.png" width="500">
  
  <br>
  
  이후 계속해서 원인을 찾아보다가 XCode를 업그레이드 (13.0) 하니 정상적으로 프로젝트가 열림.
  협업을 할때에는 개발 환경을 먼저 맞추고 시작하는게 중요하다는 것을 다시금 느낀 경험

