2006년 12월 19일 화요일

AJAX와 퍼포먼스

기획자 나잘난양과 개발자 도야근군, 그리고 옵저버 김단지군은 오늘도 신규서비스 개발을 위한 회의에 열심입니다.


...


나잘난양 : 그러면 우리도 AJAX를 이용한 기술적 진보가 있다고 보도자료를 뿌릴 수 있다는 거지요?


도야근군 : 게다가 AJAX를 쓰면 퍼포먼스도 올라가지요.


나잘난양 : 우리 서비스 메인 페이지가 A,B,C,D의 네 개의 섹션으로 이루어져있는데 각 섹션을 AJAX로 불러오게 될 때 퍼포먼스적 이점이 뭐지요?


도야근군 : 우선 A,B,C,D의 각 섹션의 내용을 페이지가 로딩 된 후에 불러오기 때문에 페이지의 데이터전송량을 줄일 수 있지요.


김단지군 : 그런데 페이지 전체로 보면 결국 전송량은 똑같은 것 아닌가요? 오히려 각 섹션별로 각각 커넥션 헤더가 들어가기 때문에 데이터 전송량은 AJAX쪽이 더 많을 것 같은데요?


도야근군 : 커넥션 헤더는 무시할 만한 수치죠. 핵심은 비동기화 커넥션이기 때문에 각 섹션이 각각 동시에 데이터를 가져올 수도 있으니까 로딩시간이 훨씬 단축되죠.


김단지군 : 그 말은 일단 이 페이지를 다 띄우기 위해서는 기존방식보다 HTTP커넥션을 더 소모한다는 거네요? 동시접속자가 몰릴 때에는 문제가 될 수도 있겠는데요?


도야근군 : 서버의 성능을 믿으세요. -_-a 어쨌거나 잘게 나눠서 여러 커넥션으로 동시에 가져오니까 더 빠르다구요.


김단지군 : 하지만 어떤 커넥션은 HTTP특성상 리스폰스되지 않을 수도 있는데, 그럴 때는 그냥 완성되지 못한 페이지 상태이구요?


도야근군 : 그건 통짜 페이지에서도 마찬가지 잖아요? 예를 들어 5번의 커넥션 중 한번이 실패한다면 통짜페이지는 5번 중에 1번은 못띄운단 소리잖아요.


김단지군 : 그러면 4개의 섹션 + 1개의 페이지로 구성된 이 페이지는 섹션 중의 한개는 매번 로딩할 때마다 안뜨는 셈이겠군요.


나잘난양 : 페이지가 통째로 안뜨는 것보다야 낫겠죠.


김단지군 : 뭐, 어차피 HTTP 커넥션 오류는 흔한 일은 아니니까요.


나잘난양 : 다음 이야기를 해보죠. 핵심 컨텐트인 섹션 A는 10분마다 혹은 사용자가 버튼을 누르면 리프레쉬되는 거지요?


도야근군 : 네. 리프레쉬될 때 다른 섹션과는 달리 섹션 A만 리프레쉬되므로 다 로딩할 필요가 없지요.


김단지군 : 그런데 누가 10분이 넘게 같은 페이지를 보고 있지요? 어차피 여기는 메인 페이지라서 다른 페이지로 가는 인덱스 역할이잖아요?


나잘난양 : 사용자들을 무시하지 마셈. 우리의 충성스런 사용자들은 우리 서비스를 백그라운드로 띄워놓고 틈날 때마다 다시 꺼내본다구요. 게다가 우리는 전부 새창띄우기니까 메인페이지가 사라지지 않잖아요.


김단지군 : 그럼 사용자가 보고 있지 않아도 10분마다 리프레쉬가 일어난다는 거네요? 정말로 데이터 절약되는 거 맞아요?


나잘난양 : 그럼 자동 리프레쉬는 빼고, 버튼을 눌렀을 때만 리프레쉬되도록 할까요?


도야근군 : 그럴 줄 알고 이미 구현해놨습니다.


김단지군 : 난 F5키가 편한데...


도야근군 : 전체 페이지 리로딩은 낭비라니깐요.


김단지군 : 사용자들은 습관적으로 F5를 누르게 되어있다구요. 공통되고 일관된 인터페이스라는 건 무시하기 어려운 거에요.


나잘난양 : 사용법 계몽 이벤트라도 할까요? -_-a


김단지군 : 그렇다면 이번에는 반대로 습관적으로 "갱신" 버튼을 눌러대는 경우에는요? 아직 새 데이터가 추가되지 않았는데도 갱신요청을 하면 또 DB커넥션을 해야 하나요?


도야근군 : 최종요청시간을 가지고 있다가 리퀘스트쿼리시에 같이 넘기던가...


김단지군 : 아, 데이터가 또 늘어나네요?


도야근군 : 그까이꺼 몇바이트나 된다고. 그럼 아예 스태틱 빌드로 섹션의 해당 HTML을 10분마다 빌드한 뒤 무조건 그걸 가져다가 뿌려주는 걸로 하지요.


김단지군 : DB트랜잭션은 줄테니 확실히 이득 맞군요. 괘찮은 아이디어입니다. 근데... 그렇게 스태틱 빌드를 하려면 AJAX는 뭐하러 쓰는거죠? 그냥 가져다가 뿌려주기만 할 건데?


도야근군 : ...


나잘난양 : 섹션 D는 어때요? 이건 1초마다 갱신이니까 이건 확실히 AJAX의 효과가 있겠죠?


도야근군 : 아, 당연히 그렇겠지요. 이건 어차피 1초마다 갱신이니 스태틱 빌드도 불가능하니까요.


김단지군 : 우리 플랫폼이 혹시 DB커넥션을 세션상태에서 유지할 수 있는 시스템인가요? EJB나 뭐 그런 걸로?


도야근군 : LAMP인데요.. 게다가 커넥션을 세션 상태에서 유지하고 있는 건 HTTP특성상 별로 좋지 않은 방법이라서.


김단지군 : 그렇다면 1초마다 새 DB커넥션이 이루어지고 쿼리가 일어난다는 거군요. 그것도 동접자 마다...


도야근군 : 뭐, 어쩔 수 없죠. AJAX를 쓰려면 그 정도는 감수해야.


김단지군 : 하긴, 트렌드니까요.


나잘난양 : 보도자료는 중요한 거라구요.

...

댓글 없음:

댓글 쓰기