본문 바로가기

IT이야기

[20031007] static 과 dynamic 사이의 갈등, 웹사이트 구성에 관해

2003-10-07에 쓴 글인데, 포스팅합니다.

static 과 dynamic 사이의 갈등, 웹사이트 구성에 관해

static 과 dynamic 사이의 갈등, 웹사이트 구성에 관해 잘 만든 웹 사이트들을 보는 것은 매우 즐거운 일이다. 그런데 잘 만든 웹 사이트가 이상하리 만치 느린 경우가 발생한다. 매번, 하루 종일 느린 것이 아니라, 특정 시점에 사용자들이 몰려 올때 이상하게 멈춰서는 경우가 있다. 이 경우에는 아무리 좋은 하드웨어를 가지고 있다고 해도, 기반에 사용된 방법론 때문에 한계치를 넘어서기 힘든 경우가 발생한다. 요즘과 같이 게시판과 쪽글로 잦은 쌍방향성의 동작이 많이 발생하면, 그 속도가 더 느려진다.

그렇다면, 과연 문제는 무엇일까? 웹이라는 특성에 대해서 크게 고민하지 않은 점과 그로 인해서 사용자 편리성과 제한된 자원을 효율적으로 이용하는 방법을 고민하지 않았다고 봐도 무방하다. 우선 웹의 특성에 대해서 말하자면, 기존의 컴퓨터 통신이나 ftp, chatting 과는 다르게 connectionless 라는 방식을 사용한다. 이전의 응용프로그램들이 서버-클라이언트의 연결을 서비스 사용을 끝낼 때 까지 유지하는 반면, 웹은 링크를 클릭하거나 URL을 입력할 때 한번만 연결을 시도하게 된다. (물론 keep-alive 라는 헤더가 추가되어서 일정 시간동안 연결을 유지하는 것은 있지만 논외로 하자) 전자가 한정된 네트워크 연결을 기존 연결된 사용자가 독점하는 반면, 웹은 사용이 끝난, 즉 한 페이지를 읽어오는 것이 완료되면 네트워크 연결을 종료/반납함으로써 한정된 자원을 공유(!) 하게 된 것이다. 이 부분에서 갈등이 빚어지는데, 이제 웹이 단순한 html 뿐 아니라 데이터베이스등의 자원을 연결하는 프로그램-asp, php, cgi 등을 총칭-과 연결되면서 웹이 단순하게 html, 이미지만을 전송하는 것이 아니라 무엇인가 페이지를 만들어서 보내는 역할까지 하게 된 것이다. 기존에는 단순하게 파일만 읽어서, 또는 캐시된 파일만 가져다가 뿌려주면 되는 단순 작업이었는데, 데이터베이스를 연결하고, 페이지를 만들어내고 하는 등 하는 역할이 증대한 것이다.

만약에 웹서버의 사양은 좋고, 네트워크 연결이 매우 빠른 곳인데도 느리게 연결된다면 이 부분에 대해서 검토를 해야할 것이다. 조금 문제를 세분해서 바라보면 이렇다. 어떤 페이지, 특히 메인 페이지나 대분류 메뉴의 메인 페이지는 상대적으로 조회되는 횟수가 많다. 이 횟수는 조회되는 횟수와 컨텐츠가 올라오는 즉 메인에 올라올만한 규정에 맞는 게시물이 등록되는 횟수와 비교해서 그렇다는 것이다. 가령 시간당 3600 번 메인 페이지가 불러지는데, 시간당 메인에 등록될 게시물이 10개 라면 어떻게 될까? 보통의 웹 사이트 또는 보통의 솔루션은 3600 번 데이터베이스로부터 메인 페이지를 생성해낸다. 뒤돌아 보면 3590 번은 안 해도 되는 일을 하는 것이다. 실제로 이 보다 더한 경우를 겪으면 더 하다. 공지에 해당하는 게시물로 메인이 치장되면 시간당 3600번 이지만, 그 컨텐츠는 잘해야 하루에 1번 갱신된다. 즉 3600-1/24 만큼 시간당 낭비되는 것이다.

실제로 한번 여러분의 사이트들에서 얼마나 많은 갱신이 메인에서 이루어져야 하는지에 대해서 검토해봐라. 그리고 시간당 메인 페이지가 호출되는 횟수를 비교해보면 튜닝의 요소가 분명해질 것이다. 이 점이 왜 사용자 편리성과 직결되냐고 의문을 갖을 것이다. 몇 년 동안의 웹 사이트에 관한 사용자 이용도에 관한 통계 자료들을 보면-오래되서리 자료 자체를 제시못하지만- 특정 사용자가 한 사이트를 방문해서 머물것인지, 아니면 다른 곳으로 갈 것인지 3초면 결정을 한다는 것이다. 그리고 시간당 3590번의 데이터베이스 연결 작업을 하면서, 가끔씩은 데이터베이스 업데이트 작업때문에 락이 걸려서 페이지 로드 속도가 갑자기 느려지는 경우가 있다. 이런 경우에 사용자들은 짜증과 떠남을 선택할 것이다. 물론 애정이 있다면, 충분히 참을 만 하겠지만. 사용자에게 단지 화면으로 구성된 편리함 뿐 아니라, 사용자게에 인터넷, 웹을 통한 컴퓨팅 자원의 활용이라는 측면에 바라보면 이것 또한 편리성의 중요한 측면이 된다. (필자주:이런 방식으로 프로그램으로 구성된 사이트들도 잘 돌아갑니다. 몇몇 웹 관련 프로그램들에서 시간을 두고 장단점 등을 연재할 예정이니, 너무 이상하게 비난만 한다고 하지 마세요.)

static(정적)과 dynamic(동적)인 갈등의 요소는 위와 같은 문제에서 기인한다. 특히나 웹을 통한 쌍방향성은 실시간으로 동적인 정보/컨텐츠를 얻기 위한 것인데, 이점이 웹과 서버의 성능을 떨어뜨리는 것이다. 그렇다고 해서 모두다 정적인 정보/컨텐츠 만을 고집한다면, 쌍방향성과 즉시성이 떨어진다는 점이다. 현저히. 그래서 사이트를 기획하고 운영하고 개발하는 사람들은 이 부분에서 명확하게 trade-off 를 선택해야 한다. 전체 중에서 어떤 부분은 정적으로 하고 동적으로 구성할 것인지, 정적인 구성에 동적인 구성을 추가하고자 한다면, 그 시기와 주기를 어떻게 할 것인지, 그리고 그 컴퓨팅 비용을 얼마나 지불할것인지에 대해서 고민을 해야 한다.

static 과 dynamic 의 갈등은 계속될 것이다. 사용자들은 항상 빠르고 최신의 정보를 얻고자 하지만, 운영하는 측은 그만큼의 욕구를 모두 충족시키지 못하기 때문에, 적절한 부분에서 타협을 할 것이다. 아님말구

보론) 웹 또는 DB 에 관한 튜닝, 정적/동적인 구성에 관한 내용이 너무 방대해서 간략한 수준에서 문제제기 정도로 적어봅니다. 요즘 어처구니 없는 일을 겪다 보니, 자꾸 이 점에 대해서 마음이 동하는군요. 다른 사이트나 분들 이야기보다는 내 이야기이니 오버 안하셔도 됩니다. 이 분야에 관심이 있거나 궁금하신 분은 질문하시면 아는 선까지는 알려드리지요.