8. Affogato의 가치
• 사용자에게 주는 가치
• “현재” 가장 “인기”있는 댓글로 주의를 집중 / 분산
• 다른 유저들과 실시간으로 대화하는 즐거움
• 내 댓글에 대한 다른 유저의 반응을 실시간으로 확인
• 서비스 사이트에게 주는 가치
• 댓글을 통한 상호작용의 증가 유저 몰입도 증가
• SNS 동시 포스팅을 통해 컨텐츠 공유 및 확산
24. 아포가토 개발사례 7선
1. 대용량 데이터의 고속 처리를 위한 DB MW (DB
Proxy)
2. 다른 사이트의 프레임과 통신하기
3. Socket.IO를 이용한 댓글 작성중 표시
4. Socket.IO 클러스터링
5. 모바일 웹 1 Page Application
6. node.js 테스트 프레임워크 mocha
7. 저비용 고효율 CSS3 Transition
35. 3. Socket.IO를 이용한 댓글 작성중 표시
컴2
H e l l o (마지막 입력 3초
후)
//client side
var socket = io.connect(‘http://server.url’);
var isWriting = false;
var endTimeoutId =null;
$(‘textarea’).on(‘keyup’, function () {
if (!isWriting) {
socket.emit(‘writing_start’, {});
isWriting = true;
}
endTimeoutId = setTimeout(function () {
socket.emit(‘writing_end’, {});
isWriting = false;
}, 3000);
});
37. 4. Socket.IO 클러스터링
• 단일 프로세스 node 서버로는 대용량 실시간 처리
에
어려움을 겪음 (성능 미흡)
• 다중 프로세스의 node 서버 클러스터링으로 해결
함
• 프로세스(또는 서버)간 통신은 udp multicast를 이
컴2 컴2 컴2 컴2 컴2 컴2 컴2 컴2 컴2
AA AB C
39. 5. 모바일 웹 1 Page Application
• 원글 페이지에 아포가토의 모든 기능을 넣기는 무겁
다.
• 원글에는 인기댓글 몇개만 표시, 나머지는 별도 페이
지로
• HTML5 pushState API를 통한 1 Page Application으로
• Express.js같은 인터페이스를 제공하는 Davis.js 사용
48. 7. 저비용 고효율 CSS3 Transition
작은 투자, 큰 차별!
.uninteresting_ui{
opacity:0;
margin-top:-20px;
}
.uninteresting_ui.make_fun{
transition:200mslinear;
opacity:1;
margin-top:0;
}
49. 지금까지 살펴본 아포가토 개발사례 7선
1. 대용량 데이터의 고속 처리를 위한 DB MW (DB
Proxy)
2. 다른 사이트의 프레임과 통신하기
3. Socket.IO를 이용한 댓글 작성중 표시
4. Socket.IO 클러스터링
5. 모바일 웹 1 Page Application
6. node.js 테스트 프레임워크 mocha
7. 저비용 고효율 CSS3 Transition
웹 초창기부터 있어 왔지만 댓글은 그저 개발 시간 잡아먹는 기능 중 하나였습니다.
요새 흥하는 서비스들 중에 이런 일상적인 것들을 평범하지 않게 만든 것들이 굉장히 많은데요.
댓글도 그렇게 될 수 있을 것이라고 생각했습니다.
아포가토는 차가운 아이스크림에 뜨거운 에스프레소를 끼얹어서 즐기는 음료입니다.
댓글 플러그인은 아포가토의 아이스크림처럼 기존 사이트들에 색다른 재미요소가 되지 않을까 하고 프로젝트명으로 아포가토로 정하게 되었습니다.
그래서 저희는...
기존 댓글은 그냥 쭉 한번 훑어보고 지나가버리는 것이라면
아포가토는 댓글들을 훑어보다가...
바로 이루어지는 실시간 업데이트나 인기글에 대한 피드백을 받아서 관전 모드가 될 수 있고
더 나아가서 직접 참여하게 될 수도 있겠다... 고 생각했습니다.
SNS의 아이덴티티는 이걸 더 촉발시켜줄 것이라고도 생각했고요.
그래서 아포가토의 가치는...
사용자에게 주는 가치부터 보자면...
1) 실시간 업데이트 - 브라우저 업데이트하지 않아도, 새글이 생겼을 때 알 수 있어 더욱 집중하게 됨
1) 실시간 업데이트 - 브라우저 업데이트하지 않아도, 새글이 생겼을 때 알 수 있어 더욱 집중하게 됨
3) 내 댓글 알림 - 내 댓글에 대한 반응 알림
DB MiddleWare
... 분산처리를 통해서 안정성과 고속처리를 할 수 있도록 만들었고요.
... 복구, 그리고 Dynamic Scale Out을 지원하여 운영중에 DB를 내리는 일 없이 scale out할 수 있도록 하였습니다.
사용자가 댓글을 입력한 경우뿐 아니라 입력중인 이벤트들도 다루기 때문에 Socket.IO이 동시에 많은 접속과 이벤트를 처리할 수 있어야 했습니다.
4번째 이야기는 그러기 위한 Socket.IO의 클러스터링을 어떻게 했는지 하는 것인데요.
저희 Socket.IO 서버는 node.js로 되어 있는데요.
단일 프로세스의 node 서버로는 테스트를 해보니 다른 멀티 스레드 기반 언어들에 비해 대용량 실시간 처리에의 퍼포먼스가 조금 떨어지더라고요.
그래서 다중 ...
... udp multicast를 이용하여 프로세스와 서버간에 통신을 하고, 그래서 Scale out을 쉽게 할 수 있도록 구성했습니다.
CSS Transition은 UI 디자이너와 프론트엔드 개발자의 역할이 오버랩되는 부분이라고 생각해요.
그래서 오히려 이 부분을 자주 놓치게 되곤 합니다.
CSS 속성 한두개만 넣으면 그 UI를 사용자하는 사용자의 경험이 굉장히 달라질 수 있다고 생각합니다.
실제로 IE6, 7, 8은 CSS Transition을 지원하지 않죠.
IE9는 지원해요. 물론 다른 브라우저도 당연히 지원하죠.
저도 얼마전까지 “음... 우리나라 사이트들에 CSS Transition이 이렇게나 안쓰이는 이유가 써봤자 적용받는 사용자가 그리 많이 않아서 일꺼야...” 라고 생각했었는데요. 며칠전에 무심코 국내 브라우저 점유율 자료를 찾아봤더니 크롬은 거의 20%나 되고 IE9까지 CSS Transition 지원하는 브라우저를 합치면 절반이 넘더라고요.
물론 jQuery Animation 같이 자바스크립트를 이용하면 오래된 IE에까지 비슷한 효과를 구현할 수는 있는데요. 이러면 표현이 자바스크립트 안에 뒤섞여버려서 코드 관리나 디자인 변경을 하려고 할 때 장애물이 되곤 해서 주로 꼭 Transition 효과가 필요한 부분이 아니면 잘 쓰지 않는 것 같아요.
그래서 나머지 부분의 UI를 조금 더 낫게 만들 기회를 놓치고 있는 건 아닌가... CSS Transition을 쓰면 참 좋겠다... 라고 생각했어요.
이 사진은 저희팀이 매일 아침에 10분정도 하는 미팅 장면인데요.
아침마다 많은 소통도 하게 되고 팀웍도 다질 수 있게 된 것 같아서 굉장히 좋아하는 시간입니다.
저희는 이 시간마다 업무 진행 상황을 Trello라는 웹 서비스에 주별로 정리해서 살펴보고요.
우리 목표 대비 일이 얼마나 진행되었는지를 체크하는 번다운 차트를 만들어서 확인하고 있어요. y축 0점이 목표 달성 지점이죠.
여기 구불구불한 빨간 선하고 그 아래 파란 선이 있잖아요. 어떤 선이 저희 실제 상황일까요?
네... 불행히도 목표에 한참 모잘라네요. ㅠㅜ