Human designproject 최종발표

23
한 지붕 아래 Project NULL 이진우, 조현호, 최훈존

Transcript of Human designproject 최종발표

한 지붕 아래

Project NULL 이진우, 조현호, 최훈존

“한 지붕 아래”는?

학교 기숙사 등 한 지붕 아래에 살고 매일 얼굴을 마주하지만 서로 알지 못하는,

그래도 친해지고 싶은데 선뜻 말걸기는 힘든

청춘들을 위해 기획되었습니다.

사용자 니즈 조사

기숙사 식당에서 혼자 밥먹는 학생들

엘리베이터 옆 게시판에 포스트잇을 붙여 개강파티를 주선하는 사례

포스트잇을 붙여 중고 물품을 거래하는 사례

타지에서 기숙사 생활하는 학생들은 외롭다. “먼저 말걸기 쉽게” 해주자!

지나가다, 구성원 중 누구나, 별다른 노력 없이

급식메뉴표, 급식제공안내, 공과금명세, 온수단수알림, 난방공급알림, 택배수령자명단…

식권팝니다, 스터디구해요, 냉장고삽니다, 개강파티해요, 층간소음주의좀, 봉사활동같이가요, 연합동아리모집, 책나눔해요, 관리측에바랍니다…

Wire Frame

“한 지붕 아래”에

단 1개의 통합 게시판

가입절차가 없게

심플한 UI

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 수행

버튼을 클릭하면 MQTTService가 실행되고

Mosquitto서버에 Subscribe된다.

새 글이 게시판에 등록되면 새 글에 대한 제목이 Push로 온다

MongoDB Replication

Main server

MongoDB Master

MongoDB Slave

write

read

write

NginX를 활용한 웹서버 구현

NginX를 활용하면 싱글 쓰레드인 Node를 병렬로 여러 개 띄어놓고 부하를 분산시킬 수 있다!

80 NginX(http)

443 NginX(https)

8080 node

8888 node

NginX를 활용해 포트포워딩!

Apiary를 활용한 Documentation깔끔한 API 정리

이해 하기 쉬운 간단한 예시와 손쉬운 테스트

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해야 하는 심각한 문제 발생!)

Unit Test(mocha)

테스트 자동화(QUnit + jQuery)

GO언어를 이용한 Image server

req

res

간단한 게시판 기반의 커뮤니티 구현인줄 알았더니....

게시판 ID에 따른 각각의 닉네임 중복 시 예외 처리 Join이 없는 NoSQL DB를 사용한 게시판 DB설계

익숙하지 않은 Fragment사용에 따른 수 많은 삽질들...

수많은 Null pointer exception, out of memory…

팀 회고 요약

기획에 따라 다양한 기능을 구현해보고자 했으나 부하가 가중되어 이번 학기 때

꼭 경험해야하는 부분만 우선 구현하는 것으로 전략을 수정하였다.

다행히 필수적으로 필요한 “배움”에 대해서는 경험 할 수 있었고, 그 외에 Token이나 GO를 활용한 Image server를 만들어 보는

소기의 성과를 거두었다.

하지만 처음 기획에서 계획했던 다른 기능들을 마저 구현하지 못한 부분은 많이 아쉽고 일정관리 부분에

더 신경을 써야함을 배웠다.

간단한 시연

한 학기 동안 모두들 수고 많으셨습니다~!

넥스트의 조속한 정상화를 바라며...