시작페이지로 시작페이지로
즐겨찾기추가 즐겨찾기추가
로그인 회원가입 | 아이디찾기 | 비밀번호찾기 | 장바구니 모바일모드
홈으로 와싸다닷컴 일반 상세보기

트위터로 보내기 미투데이로 보내기 요즘으로 보내기 싸이월드 공감
happy_imgmaker.php와 서버 부하..
자유게시판 > 상세보기 | 2014-06-13 15:54:40
추천수 31
조회수   1,082

제목

happy_imgmaker.php와 서버 부하..

글쓴이

bitbyte [가입일자 : 2009-06-07]
내용
리뉴얼 초반에 한번 의견을 냈었던 부분인데..



아주 기술 적인 부분이라, 언급을 자제하던 부분이지만,



와싸다의 속도 문제랑 직접적으로 관련이 있을 듯 하여 적어 봅니다.



현재 와싸다에서 매뉴의 상당부분이 happy_imgmaker.php라는 php를 통해서 그림으로 전달되고 있습니다.



매뉴뿐만 아니라, 여기저기 많이 사용되고 있는것으로 보입니다.



제가 보기엔 이 happy_imgmaker.php가 서버와 저사양 PC에 주는 부담이 상당합니다.



1. 이미지 생성 관련



우선 happy_imgmaker.php의 내부 구조를 모르기때문에 이 부분은 제가 틀릴 수도 있습니다.

다만, 신경써서 만들어 서 캐싱 구조를 정확하게 가진것이 아니라면,

일반적으로 이미지를 생성하는 php는 매번 동일한 그림그리기를 반복합니다.



특히 경험상 텍스트를 출력하는 소스코드는 CPU나 메모리의 점유율이 다른 그래픽 작업에 비해 높은 편이므로,

매번 그리고 있다면, 상당한 부하를 줄 것입니다.



그리고 매번 그리지 않는 다면, 굳이 happy_imgmaker.php를 통해서 전달을 받을 이유가 없습니다.



2. 통신 포트 관련



서버나, 클라이언트에서 통신을 위해 사용할 수 있는 포트는 제한된 자원 입니다.

따라서 이미지나, 받아야 하는 파일의 숫자가 늘어나게 되면, 기존의 연결을 해지하거나, 기존의 회선을 이용해 선형적으로 이미지를 전송하는 방식을 사용해야 합니다.



어느쪽이든지 서버의 포트를 잡아먹는 데.. 현재 제가 볼때 와싸다는 서버의 설정으로 keep-alive의 설정은 켜져있지만, 실제 TCP/IP레벨에서 통신 소켓을 매번 닫게끔 되어 있어서 Keep-alive가 적용되고 있지 않습니다.



이러한 경우 다수의 사용자가 접속을 시도하게 되면, 동시에 열리는 다수의 클라이언트 요구를 포트 부족으로 인해, 받지 못하는 문제가 발생하게 됩니다.



3. 캐싱 문제



현재 happy_imgmaker.php는 내부적으로는 알 수 없으나 외부적으로는 항상 동적인 페이지 입니다. 따라서 아무리 사소한 내용이지만, 변경사항만 체크하는 것이 아니라, 매번 이미지를 새로 전송받고, 이로인해 클라이언트에서도, 새로고침 혹은 링크를 열때 마다, 새로 디코딩하고, 열어줘야 하는 부담이 발생합니다.



구버전의 웹브라우저라면, 이러한 부분에 대한 내부적인 캐싱이 없었지만, 최근에는 속도 개선을 위해 변경되지 않은 이미지 파일은 바로 재활용하는 수준의 캐싱을 합니다. 따라서 클라이언트의 랜더링 속도나, 서버-클라이언트 간의 네트워크 부하, 서버 내에서 캐싱 체크의  이상 3가지의 프로세싱 처리 문제를 종합적으로 볼때, 현재의 구조는 캐싱을 방해하는 요소 입니다.



----



이상이 제가 보는 큰 문제점이고, 



아주 간단한 해법은 기존의 happy_imgmaker.php로 생성된 이미지를 그냥 파일로 서버에 저장한 다음,

저장된 파일의 이미지를 가지고 서비스 하면됩니다.



더 손쉬운 방법은 아예 이미지 대신 text로 서비스하면 서버의 부하는 급격하게 줄어 들 겁니다.



와싸다가 매뉴 구성을 수시로 바꾸는 것도 아니고,  동적으로 이미지를 생성해서 서비스 할 이유를 모르겠습니다.



ps. 그리고 저번에 디비 에러로 우연히 본것이지만, 현재 매뉴 구성을 사용자 권한별로 배번 DB에서 긇어와서 뿌려 주는 것으로 보이는데,... 아직도 그런지 모르겠군요..

로그인 여부에 따라서 쓰기와 수정하기 이런것들을 쿼리 하는 것은 일부 이해가 됩니다만, 모든 회원에게 동일한 매뉴를 쿼리하는 것은 이해가 안됩니다.


추천스크랩소스보기 목록
김동주 2014-06-13 18:20:21
답글

저도 전문가가 아니라 잘 모르지만, 말씀하신 1번, 3번 문제는 확실히 동감합니다. (2번은 제가 지식이 짧아 잘 모르겠습니다.)

제가 잠깐 살펴본 바, 페이지마다 차이는 있겠습니다만, Safari에서 웹페이지를 로드 하는데 대략 12~25초 걸리는 것 같습니다. (이 시간은 요청 이후 페이지의 모든 자원이 완전히 로드되는데 걸리는 시간입니다.) 그런데, 이 시간의 95% 이상이 대기 시간입니다. 말씀하신 happy_imgmaker.php(banner_view.php도 마찬가지)도 문제이기는 하나, 자유게시판 목록을 보는 페이지에서 대기시간의 거의 전부를 차지하는 놈이 bbs_list.php과 banner_view.php입니다.

초기 대기 시간, 즉 페이지 최초 요청시 걸리는 시간, 다시 말해서 서버가 클라이언트의 요청에 응답하는데 걸리는 시간은 bbs_list.php가 원흉이고, 이후에는 banner_view.php입니다. bbs_list.php의 응답 시간이 긴 원인은 ps에서 말씀하신 것과 연관이 있는 것 같고, banner_view.php의 응답 시간이 긴 원인은 배너 플래시의 원본이 너무 큰 거 같습니다.

김동주 2014-06-13 18:28:49

    지금 보니 bbs_short_comment.php도 그렇고, bbs_detail.php도 대기시간이 무지 걸리는 군요.
이 원인은 서버의 계산 속도의 문제이겠고, 최봉환님께서 말씀하신 것처럼 데이터베이스의 불필요한 반복 질의가 문제인 것 같으네요.
banner_view.php의 플래시가 과도하게 큰 거 같기는 하지만, 플래시는 페이지가 열린 뒤에 비동기식으로 다운로드되므로 사용자를 답답하게 하는 제일 중요한 원인은 아닌 것 같습니다.

일전에 다른 글의 댓글이 중복되어 있는 것을 종종 봤는데, 왜 이렇게 되었을까 생각해 봤는데, 사용자가 "댓글쓰기" 버튼을 눌러놓고 대기 시간이 길어지니 버튼이 제대로 안눌러졌는지 알고 반복해 누르니, 댓글이 중복으로 올라가는 것 같습니다.

김동주 2014-06-13 18:32:27
답글

플래시만이라도 캐싱되게 하면 좋으련만 페이지 옮겨갈 때마다 매번 다시 전송하네요... 헐... 으째 이리 만들었을까????

최봉환 2014-06-13 18:40:13
답글

저도 글쓰고 확인해 봤는데.. 배너가 플래시가 아니고 그림 파일이네요?? 어라라라...
그런데 받는데 오래걸리는것도 아니고, 대기가 1~4초입니다. 이것도 이해는 안되더군요.. 흠..

ps. 개발사쪽이 캐싱이나 최적화는 전혀 고려하지 않은것 같다는 느낌이 강합니다.

김동주 2014-06-13 18:44:38
답글

배너가 그림도 있구요, 플래시도 있습니다.

최봉환 2014-06-13 18:45:37

    그러게요 ^^

최봉환 2014-06-13 18:47:26
답글

서버 사이드에서 링크를 전부 고정 링크로 수정하면, http서버가 알아서 클라이언트와 캐싱을 처리해 줄 여지가 충분한데도.. 이걸 다 php가 읽어서 처리하게 만든것 같은데.. 서버 부하만 커질 듯합니다...

왜 이런 병신같은 설계를 했는지... 초짜도 아니고..

김동주 2014-06-13 18:48:22

    그러게 말입니다.. 뭘 그리 숨길게 많다고..

김동주 2014-06-13 19:02:51
답글

스타일의 폰트도 마음에 안드네요. 돋움, 굴림, 많은 고딕과 같은 윈도우 폰트네요. OS X는 어쩌라구..
페이지 레이아웃도 전적으로 테이블 요소에만 의존하네요.. table은 접근성도 떨어지고 속도도 떨어지는데...

최봉환 2014-06-13 19:17:20

    테이블 부분은 고질 병이기도 하고.. div쪽은 구버전 브라우저에서 호환성 문제가 있을 수 있어서 나름 이해 합니다. ㅠㅠ

  • 광고문의 결제관련문의