Human designproject 최종발표
-
Upload
hyunho-cho -
Category
Technology
-
view
103 -
download
4
Transcript of Human designproject 최종발표
사용자 니즈 조사
기숙사 식당에서 혼자 밥먹는 학생들
엘리베이터 옆 게시판에 포스트잇을 붙여 개강파티를 주선하는 사례
포스트잇을 붙여 중고 물품을 거래하는 사례
타지에서 기숙사 생활하는 학생들은 외롭다. “먼저 말걸기 쉽게” 해주자!
지나가다, 구성원 중 누구나, 별다른 노력 없이
급식메뉴표, 급식제공안내, 공과금명세, 온수단수알림, 난방공급알림, 택배수령자명단…
식권팝니다, 스터디구해요, 냉장고삽니다, 개강파티해요, 층간소음주의좀, 봉사활동같이가요, 연합동아리모집, 책나눔해요, 관리측에바랍니다…
Human Desgin Project에서 요구한 “배움”을 체크 해볼까
1. MQTT프로토콜을 이용한 Push서비스 경험
2. MongoDB를 Master-Slave로 Replication해보는 경험
3. Apiary를 활용해 테스트와 API Documentation를 습관화
4. HTTPS를 이용한 암호화 통신
5. NginX 경험해보기(요곤 가산점)
거 의 다 했 다!! (허접하지만...)
추가로 경험한 부분들
1. Token을 활용한 사용자 인증
2. GO언어로 간단하게 Image Server 구축해보기
지금 부터 저희의 경험을 공유하도록 하겠습니다.
3. Unit test(mocha) &REST api test(QUnit + jQuery)
“한 지붕 아래” 아키텍쳐
Client
Web serverMain server
MongoDB Master
MongoDB Slave
RabbitMQ
Image server
Push server
Mosquitto
req
res
write
read
write
subpush새 글 등록시
pub
MQTT를 이용한 Push
Paho 라이브러리를 이용하여 MQTTService를 구현
“새 글 알림 받기” 버튼 클릭 시 Mosquitto서버에 Subscribe
새 글 등록 시, 새 글에 대한 정보를 서버에서 Publish
Client에서 Push에 대한 Logic 수행
NginX를 활용한 웹서버 구현
NginX를 활용하면 싱글 쓰레드인 Node를 병렬로 여러 개 띄어놓고 부하를 분산시킬 수 있다!
80 NginX(http)
443 NginX(https)
8080 node
8888 node
NginX를 활용해 포트포워딩!
Server Client
첫 진입
POST{UUID : %@#$}UUID를
DB저장, 암호화된 token 발행 RESPONSE
{token : ^$@!}
SharedPreference로 token을 로컬에 저장
HTTP Header Authorization : token
이후 네트워크 통신 시 HTTP Header에 token을 함께 보냄
HTTP Header에서 token정보를 가져와 사용자 식별
Token을 활용한 사용자 인증
추가로!
Scale out이 가능하도록 서비스를 구성하기 위해서는 Token에 Redis, MongoDB 정보를 넣는다!
JWT모듈을 이용한 사용자 정보 암호화 시, 사용자 정보가 Scale out되어도 몇 번째 DB에 있는지에 대한 정보를
Token에 넣어 빠르게 찾을 수 있도록 설계. (그렇지 않으면 수많은 DB를 Full scan해야 하는 심각한 문제 발생!)
간단한 게시판 기반의 커뮤니티 구현인줄 알았더니....
게시판 ID에 따른 각각의 닉네임 중복 시 예외 처리 Join이 없는 NoSQL DB를 사용한 게시판 DB설계
익숙하지 않은 Fragment사용에 따른 수 많은 삽질들...
수많은 Null pointer exception, out of memory…
팀 회고 요약
기획에 따라 다양한 기능을 구현해보고자 했으나 부하가 가중되어 이번 학기 때
꼭 경험해야하는 부분만 우선 구현하는 것으로 전략을 수정하였다.
다행히 필수적으로 필요한 “배움”에 대해서는 경험 할 수 있었고, 그 외에 Token이나 GO를 활용한 Image server를 만들어 보는
소기의 성과를 거두었다.
하지만 처음 기획에서 계획했던 다른 기능들을 마저 구현하지 못한 부분은 많이 아쉽고 일정관리 부분에
더 신경을 써야함을 배웠다.