데이터 설계는 다음과 같다.

DynamoDB 테이블 4개

  1. KWU-Reading-Room-Data
  2. KWU-Reading-Room-1
  3. KWU-Reading-Room-2
  4. 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 함수가 사용할 수 있도록 연결할 예정이다.