BLOG main image
분류 전체보기 (18)
여행의일상 (7)
우리나라 (0)
아시아 (7)
북중미 (0)
유럽 (0)
여행책관련 (3)
www.flickr.com
Thailand, Bangkok, Koh Samet 20080405 세트에 있는 항목을 나타내는 Flickr 배지입니다. 여기에서 나만의 배지를 만들어 보세요.
8,134 Visitors up to today!
Today 59 hit, Yesterday 79 hit
daisy rss
tistory 티스토리 가입하기!
'2008/07/01'에 해당되는 글 1건
2008/07/01 01:10
여러 분들이 뻔히 아실만한 웹 클라이언트 스크립트 관련 안티패턴 하나를 소개 해 봅니다.


그림 자르기.
90년대 말, 큰 이미지를 그대로 웹사이트에 올리는 행동은 '초보 웹디자이너'로 치부되기 십상이었습니다.
좀 더 빠른 체감속도를 위해 그림파일의 확장자로 JPG보다는 컴퓨서브의 GIF를 사용해야 했고, 큰 이미지는 수고스럽게 포토샵을 켜고 잘게잘게 채를 써는 것을 덕목으로 여겼습니다. 이는 디자인을 마크업으로 재생산하는 과정 중 필수 과정의 하나였죠.

지금은 수고스럽게 채를 썰 이유가 없고, 외려 이런 행동은 비용을 들게 하는 비생산적 행위라고 널리 알려져있지만, 자바스크립트·CSS파일 사용도 이 패턴에 동일하게 적용된다는 사실을 개발자들은 가슴 깊이 느끼고 있을까요?

적어도 저는 인식 하고만 있었지 느끼고 있진 않았습니다. 그런데 오늘 늦은 저녁 회의 중에, 서버 개발자분께
"자바스크립트 파일 너무 많이 만들지 마세요. 안좋아요." 라는 밑도끝도 없는 이야기를 듣고 순식간에 아래 이야기들이 생각 났고, 이내 마음 속으로 정리를 하게 되었습니다.

왜 잘게 자르면 안돼?
오늘, 91.9Mhz 타블로의 '꿈꾸는 라디오'에서 이런 멘트가 있었는데요.
왜 답은 항상 바뀌는거야? 똑같은 문제인데 어렸을때랑 지금이랑 답이 왜 달라서 날 이렇게 힘들게 해?
세상이 이런가 봅니다. 그래서 이전의 패턴은 지금 안티패턴이 되었습니다.

90년대 말에는 인터넷 속도가 시원찮았습니다. 56k, 28.8k모뎀 사용자 또한 고려 해야 했었고요. 그래서 브라우저의 http 연결갯수를 full로 활용하기 위해 이미지를 최대한 잘게 쪼개어, 동시에 여러개의 그림이 계단식 논과 밭 형태로 뿌려지게 함으로, 사용자들이 '오, 그림이 조금씩 보여지고 있어!' 라는 안도감을 느끼게 했습니다.
하지만 현재는 그럴 일이 없습니다. 한국의 인터넷은 이미 트루컬러의 bmp파일이라도 우적우적 씹을만한 충분한 속도를 지니고 있어 지난 세월의 패턴은 이슈 삼을만한 것들이 아니게 되었습니다. 게다가 그런 행동들은 다음과 같은 추가 비용을 가져다 줍니다 :
  1. 용량이 더 커진다.
    파일 헤더, 문서 정보 따위의 주석 등으로 인해 '하나의 파일'일 때 보다 더 많은 용량을 가지게 합니다.

  2. http 요청수를 늘인다.
    예를 들어 설명하자면, 집에서 마을버스를 타고 이마트에가서 이번 주말에 먹을 음식들을 한번에 사오면 되는데, 사과 하나, 우유 한팩, 라면 한 봉지, 과자 한상자를 하나 씩 살 때마다 이마트를 한번씩 따로 가며 비 생산적인 '마을버스 왕복비용'을 발생 시키게 되는 격입니다. 여기서 중요시하는 것은 왕복 거리가 아니고 요금을 내는 횟수입니다. 쓸데없는 http요청 갯수를 늘일 필요가 없습니다. 

  3. 자연스레 DNS서버 조회를 늘인다.
    이것은 위와 비슷하지만 또 다른 문제입니다.
    대부분의 웹사이트들은 IP주소를 가진 서버가 URL을 사용하여 쉬운 연결명(도메인)으로 접속할 수 있도록 DNS를 사용합니다.
    서버 <--------------> DNS서버<--------------> 사용자
    여기서 마을버스 왕복비용과 비슷한 비용이 발생합니다. 바로 DNS사용 비용인데요, 브라우저에서 요청하는 주소를 DNS서버가 조회하는 데에 이 비용이 발생합니다. 브라우저는 호스트 이름을 조회하고 완료될 때까지 어느것도 다운받지 못한 채 꾹 참고 있습니다. 수많은 이미지들, 스크립트 파일들은 일렬로 줄을 선 채 자신의 차레를 기다리고 있는 것입니다.

그렇다면, 파일 하나로 뭉쳐서 쓰면 되나?
그럼 파일 하나만 만들어? javascript.js 라고 만들면 되나??-_-
그건 또 아닙니다. 하나의 페이지에서 전체 자바스크립트를 다운 받으면 불필요한 소스코드까지 다운받게 됩니다. 게다가 소스 관리도 버거워지죠. 이건 뭥미...


그럼 어쩌라고-_-
일단 가장 기본적인건 적당히 효율적으로 나누어 쓰는 것입니다. 반복되는 서버페이지를 돕는 스크립트를 뭉쳐 파일을 만들어, 브라우저 캐시의 효율성을 극대화 시키는거죠.
거기에 더하여, 웹사이트 최적화 기법에서 밝히는, DOM스크립트를 이용하여 동적으로 css나 자바스크립트를 브라우져에 뿌리거나 하는 작업으로 90년대 말, 사용자들이 그림자르기에서 느끼던 '체감속도 효과'를 발휘할 수 있습니다.


쓰고보니 집에 오면서 읽었던 의 내용이 많이 녹아 있네요.
쉽고 모두 알고 있는 작은 부분에서도, 아는 것과 느끼는 것의 차이로 다른 결과물을 만들게 됩니다.
또한 중요한 것은, 좋은 패턴을 늘여나가는 것도 좋지만 안티패턴을 줄여나가는 것 같습니다.
Trackback Address :: http://songsl.net/trackback/6
shgraph | 2008/07/01 08:24 | PERMALINK | EDIT/DEL | REPLY
그렇다고 무조건 합치면, 소스관리가 힘들어지고.
그래서 Jindo2에 릴리즈 툴이 있지.
최종적으론 배포관리 툴로 변모하겠지만. : )
파일이 많으면 네트웤 상황이 안 좋은 분들에겐 굉장히 힘들어..^_^
songsl | 2008/07/01 10:23 | PERMALINK | EDIT/DEL
네.. 저도 글에 썼는..
아, 형.. 그러고 보니 그런 의미에서..(후략. 메일 드릴게요)
Gloridea | 2008/07/01 10:54 | PERMALINK | EDIT/DEL | REPLY
DNS 설명은 살짝 오류가 있는 것 같네요 ㅎㅎ DNS는 경유지가 아니라 조회만 하는 곳이므로, 서버와 사용자 사이에 경유지로 표현된 것 같은 부분은 이렇게 고치는게 좋지 않을까 싶네요.

DNS
| (IP address lookup)
사용자 -----(request)---- 서버

그리고 첫번째 DNS조회 이후 TTL 시간동안은 캐시된 주소를 사용합니다. DNS 설정 자체가 TTL=0이 아닌 이상은요. : ) 그렇기때문에 파일이 많은 것과 DNS 조회 시간은 크게 상관이 없습니다.
songsl | 2008/07/01 11:06 | PERMALINK | EDIT/DEL
오 이 블로그 버려진 곳 아니었군요-_-b
다들 RSS라도 등록해두신것인지-_-;; 굳
음 네. 제가 확실한 지식이 없다보니 오해스럽게 뭉뚱그려서 쓴 감이 없잖아 있네요. 캐시된 주소를 사용할 땐 경유를 하는 게 아니니 말씀하신 대로 쓰시는 게 옳을 수 있겠어요.
근데 마이스페이스나 구글같이 TTL이 1분이나 5분으로 설정되어있는 경우엔 DNS 조회시간이 크게 상관이 없다고 할 순 없을 것 같아요(??말이 이상하다).
근데 또 리플 쓰다보니 '그까이꺼..' 이런 생각 드네요.

헤헤 리플 감사합니당.
근데 여기 우리 랩 사람들만 오는 것인가-_-.
fahnel | 2008/07/04 10:33 | PERMALINK | EDIT/DEL | REPLY
결론은 역시나 잘 쪼개 놓고 적절한 곳에 씁시다. 구만...
익히 알고 있지만 몹쓸 습관과 관리의 귀찮음이 한 목 하겠지... ㅠㅠ
Gloridea | 2008/07/07 17:15 | PERMALINK | EDIT/DEL | REPLY
TTL이 짧다고 해도 한 페이지가 로딩되는데 TTL 시간보다 오래 걸리지는 않죠. : )

js 파일이 20여개로 쪼개져 있는 경우(S1), 경우 2는 하나로 뭉쳐져 있는 경우(S2) 에 대해,
DNS TTL이 1분, A페이지를 보고 2분 있다가 B 페이지를 본다... 라는 시나리오를 상정해보죠.

S1 :
A페이지를 접속할 때 - DNS Lookup 수행 1회
1분 후 DNS 캐시 만료
2분후 B페이지 접속할 때 - DNS Lookup 수행 1회

S2 :
A페이지를 접속할 때 - DNS Lookup 수행 1회
1분 후 DNS 캐시 만료
2분후 B페이지 접속할 때 - DNS Lookup 수행 1회

... 와 같이 동일합니다. : )
Name
Password
Homepage
Secret
prev"" #1 next