데이터 설계는 다음과 같다.
DynamoDB 테이블 4개
- KWU-Reading-Room-Data
- KWU-Reading-Room-1
- KWU-Reading-Room-2
- KWU-Reading-Room-3
AWS DynamoDB 서비스를 이용하고, AWS Lambda 함수를 통해 접근한다.
AWS Lambda에서 DynamoDB에 접근하기 위해선 역할(Role)을 설정해야 한다.
AWS Lambda Role 설정 같이 세부적인 내용은 생략…
테이블 : KWU-Reading-Room-Data
이 테이블은 열람실 데이터가 1분 단위로 있다보니 워낙 많아 30분 단위로 집계해 API 사용자들이 편하게 사용할 수 있도록 만든 테이블이다.
개인적으로 나중에 다른 분들이 데이터 분석할 때 사용해봤으면 좋겠다는 바램도 있다.
내 주변에서 일어나는 실생활 데이터를 분석하는게 상상만해도 재밌는 일이기 떄문이다…
이 테이블은 테이블 KWU-Reading-Room-1,2,3 으로부터 데이터를 집계해서 평균 좌석을 계산한다.
DB 테이블 정보 요약:
30분 단위로 평균 값을 저장하는 DB임
파티션 키 | 정렬 키 1 | 정렬 키 2 | 정렬 키 3 | 정렬 키 4 | |
---|---|---|---|---|---|
이름 | RoomNumber | timestamp | occupied | vacant | |
자료형 | INT | String | INT | INT |
RoomNumber : 방 숫자
예) 1, 2, 3
timestamp : 타임 스탬프
ISO-8601 형식을 따르되, 한국 타임스탬프를 이용할 것임 (+09:00) 30분 단위로 변경
예) 2015-12-21T17:42:34+09:00 (Z는 시간차가 +00:00 인 그리니치 천문대 기준을 의미, 한국은 +09:00)
AWS 모든 인스턴스에서 시간은 UTC를 사용하고 있어 한국 시간(+09:00) 대신 표준시를 사용한다
occupied : 사용중인 테이블 숫자
30분간 집계한 평균 사용중인 좌석수를 의미한다.
예) 79
vacant : 사용가능한 테이블 숫자
30분간 집계한 평균 사용가능한 좌석수를 의미한다.
예) 45
테이블 : KWU-Reading-Room-1, 2, 3
1 분 단위로 AWS EventTrigger가 오픈열람실 정보를 가져와서 저장하는 DB다.
이 테이블은 모든 사용중이거나 비어있는 테이블 번호(개수x)를 모두 가지고 있다.
나중에 열람실 사용량 대신 세부적으로 어느 좌석이 인기가 많은지 찾아보는 분들이 있으면 유용하게 쓰일 수 있다.
DB 테이블 정보 요약:
파티션 키 | 정렬 키 1 | 정렬 키 2 | |
---|---|---|---|
이름 | timestamp | occupied | vacant |
자료형 | String | INT Array | INT Array |
timestamp : 타임 스탬프
ISO-8601 형식을 따르되, 한국 타임스탬프를 이용할 것임 (+09:00) 30분 단위로 변경
예) 2015-12-21T17:42:34+09:00 (Z는 시간차가 +00:00 인 그리니치 천문대 기준을 의미, 한국은 +09:00)
occupied : 사용중인 테이블 번호
예) [1, 2, 3, 4, 5, … ]
vacant : 사용가능한 테이블 번호
예) [6, 7, 8, 9, 10, … ]
열심히 돌아가고 있는 DynamoDB 테이블
현재는 테스트 단계라서 room-1, room-2, room-3만 DB를 사용하는 중이다.
2022-01-01 까지 API endpoint와 연결된 AWS Lambda 함수가 사용할 수 있도록 연결할 예정이다.