Skip to content

Commit b423d39

Browse files
committed
2021-12-26 오픈열람실 API 만들기 글 작성
+ 사진 7개
1 parent be0c29f commit b423d39

File tree

8 files changed

+119
-0
lines changed

8 files changed

+119
-0
lines changed
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
---
2+
layout: post
3+
title: KWU 도서관 오픈열람실 API 만들기
4+
hide_title: true
5+
feature-img: ""
6+
thumbnail: "assets/img/posts/making-KWU-reading-room-API.aws-logo.png"
7+
color: rgb(73,212,185)
8+
bootstrap: true
9+
tags: [2021, ] # 태그는 작성하면 알아서 분류됨
10+
author: ccppoo
11+
---
12+
13+
동아리 운영을 위해서, 또 나 자신을 위해서 보편적이면서도 안 만들어진,
14+
15+
또 난이도는 어렵지 않은 API를 제작할 대상을 찾고 있는 도중 도서관 오픈열람실을 타겟으로 잡았다.
16+
17+
학교에서 직접 제작한 API가 없어 조금 실망감이 크긴 했지만, API를 직접 만들 기회가 되어서 다행이었다.
18+
19+
# API 제작 대상 살펴보기
20+
21+
학교의 열람실 정보는 이미지로 사용중인 좌석과 비어있는 좌석을 보여준다.
22+
23+
{% include image.html src="/assets/img/posts/making-KWU-reading-room-API/reading-room.png" height=400px%}
24+
25+
밑에 있는 내용처럼 1분 마다 갱신하는 형태로 나름 API처럼 잘 갱신되어 보이는 듯 하지만
26+
27+
막상 내부에 들어가 html을 보면 경악스러운 모습을 볼 수 있다.
28+
29+
{% include image.html src="/assets/img/posts/making-KWU-reading-room-API/reading-room-html.png"%}
30+
31+
이미지 위에 하나 하나 html 요소를 붙여 색으로 나누고 있었던 것이다.
32+
33+
알기로는 열람실 책상 배치 위치 이동이 몇 년동안 없었던 것 같은데...
34+
35+
이렇게 밖에 구현할 수 밖에 없는건가?
36+
37+
아무튼 보이는 모습처럼 html 파싱을 통해서 좌석 번호마다 공석, 점유 상황을 파싱할 수 있었다.
38+
39+
단순히 복사 붙여놓기한 형태라 파싱하는데 쓰이는 코드는 몇 줄 안 걸렸다.
40+
41+
```python
42+
html_text = bytes(html, 'iso-8859-1').decode('cp949')
43+
44+
bsObj = bs(html_text, features="html.parser")
45+
46+
seat_data_html = bsObj.find('div', id='maptemp')
47+
48+
# 비어있는 좌석
49+
seats = seat_data_html.find_all('td', bgcolor='gray')
50+
seats_o = [s.contents[0].contents[0] for s in seats]
51+
52+
# 사용중인 좌석
53+
seats = seat_data_html.find_all('td', bgcolor='red')
54+
seats_x = [s.contents[0].contents[0] for s in seats]
55+
```
56+
57+
여기까지 오면 쉽게 데이터를 확보할 수 있다.
58+
59+
무엇보다 요청을 보내는데 특별히 인증절차가 없어 서버가 잠깐 다운되지 않는 이상 별 수고를 들일 필요없이 파싱을 할 수 있었다.
60+
61+
{% include image.html src="/assets/img/posts/making-KWU-reading-room-API/aws-lambda-api-console.png"%}
62+
63+
위 사진처럼 AWS 람다와 API Gateway를 이용하면 파싱을 대신해주는 형태로 더 쉽게 데이터를 가져오도록 만들었다.
64+
65+
## 이 정도 선에서 끝낼수도 있지만...
66+
67+
생각해보니 이런식으로 래핑하는 것까지 좋은데 AWS 기능을 어떻게든 사용해보고 싶어
68+
69+
다음과 같은 구조를 생각하고 있다.
70+
71+
{% include image.html src="/assets/img/posts/making-KWU-reading-room-API/api-structure-1.png"%}
72+
73+
API를 다른 학생들에게 공개할 예정이라, 단순히 파싱만 대신하는 형태로 운영하다가는 서버가 폭주할 수도 있고
74+
단순히 래핑한 수준에 불과한 것 같아 데이터도 수집할 겸 이렇게 설계했다.
75+
76+
학교 서버와 유저 간의 데이터 플로우를 이원화 하는 것이 운영하는데 있어 더 안정적이고
77+
78+
무엇보다 실제 데이터 또한 1분마다 갱신되는거라 단순히 래핑만해서 반환하는 것은 불필요한 트래픽이 낭비되기 때문이다.
79+
80+
람다차원에서 캐싱할까 생각해봤지만, 이왕에 캐싱할 거 차라리 데이터베이스에 저장해 나중에 시계열 분석을 할 때
81+
82+
전혀 관련없는 데이터보다 학교 열람실의 시계열 데이터를 분석하면 더 몰입하기도 쉽고, 재밌는 결과물이 나올 것이라고 봤다.
83+
84+
두 개의 부분으로 나누면 다음과 같다.
85+
86+
{% include image.html src="/assets/img/posts/making-KWU-reading-room-API/api-structure-2.png"%}
87+
88+
초록색 부분이 내 람다함수가 이용하는 백엔드와 같은 것이고
89+
90+
파란색 부분이 API 사용자로부터 요청이 왔을 때 DynamoDB로부터 데이터를 가져오는 프론트와 같은 것이다.
91+
92+
여기서 더 세부적으로 나누는 것은 크게 의미가 없고, 취지에 맞지 않아 이 선에서 마치기로 했다.
93+
94+
## 정리
95+
96+
클라우드를 이용해 나 말고도 다른 사람들도 함께 쓸 수 있는 애플리케이션을 만들고 있다!
97+
98+
AWS라면 ec2를 깔짝이는 수준에서나 사용했었는데, 람다라는 것을 사용해보니 이전에는 이해가 안되었던 람다를 이해할 수 있었다.
99+
100+
AWS Lambda라는게 처음에는 이해하기까지 어려웠던 이유가
101+
102+
컴퓨터를 잠깐 사용한다는데 누가 그걸 작동시키는 거지?
103+
104+
그걸 작동시키고 값을 어떻게 하는 거지?
105+
106+
그냥 내가 콘솔에서 `python main.py`하는거랑 뭐가 다르지?
107+
108+
라는 의문점이 들었고, 직관에 반하는 정의라 엄청 해맸는데
109+
110+
디스코드 봇을 만드는 다른 예시 유튜브 영상을 따라하면서 API Gateway라는 AWS 기능도 알게 되면서 람다를 이해할 수 있게되었다.
111+
112+
앞으로 ec2 인스턴스를 만드는 것보다 람다와 API Gateway, EventBridge를 이용해 재밌는 것을 많이 만들것 같은 예감이 든다.
113+
114+
최근에 다른 학교에서 학교 서비스를 클라우드를 통해 운영한다는 소식을 많이 봤는데
115+
116+
학교 차원에서 클라우드 교육도 적극적으로 밀어주고, 도입해줬으면 좋겠다.
117+
118+
{% include aligner.html images="/posts/making-KWU-reading-room-API/aws-logo.png ,kwu_logo.jpg" column=2 row=1 %}
119+

assets/img/kwu_logo.jpg

154 KB
Loading
Loading
Loading
Loading
Loading
Loading
Loading

0 commit comments

Comments
 (0)