'Web Development/jQuery Mobile'에 해당되는 글 3건

  1. 2011/12/26 jQuery Mobile 멀티 페이지 UI 작성하기
  2. 2011/12/16 jQuery Mobile로 페이지 만들기
  3. 2011/12/15 jQuery Mobile에 대한 소개

지난번에 이어 오늘은 jQuery Mobile을 이용하여 단일 HTML 페이지 안에서 여러 멀티 페이지 UI를 포함하도록 모바일 페이지를 만들어 볼 것이다. 적어도 이 정도는 되어야 흔히 말하는 모바일 기반의 웹 사이트를 상상할 수 있는 첫 걸음이 될 것이다.

지난번에 간단히 소개한대로, data-role Attribute가 jQuery Mobile에서는 핵심적인 역할을 수행하며, Page <DIV> 태그가 컨테이너 노릇을 하고, 여기 아래에 Header, Content, Footer 순으로 <DIV> 태그가 배치되어야 한다고 하였다. 그리고 Page <DIV> 태그들 중 가장 먼저 DOM에서 검색되는 항목이 jQuery Mobile에서 가장 처음 노출시키는 페이지가 된다고 하였다. 멀티 페이지 UI는 단순히 여기에 다른 Page <DIV> 태그들을 첫 Page <DIV> 태그 뒤에 이어붙이고 이들 사이를 하이퍼링크로 연결하는 작업만을 하는 것 뿐이다.

따라하기 쉬운 예제를 위하여, 오늘 만들어 볼 것은 모바일 사진 갤러리이다. 준비물은 모바일에서 로드하기에 부담스럽지 않을 정도의 해상도와 품질을 가진 사진 파일 3~4장 정도면 된다. 필요하다면 여러분이 가지고 있는 디카 사진을 적당히 해상도를 줄이거나 품질을 떨어뜨려 샘플 사진을 만들기 바란다.

멀티 페이지 UI 흐름 구상하기

멀티 페이지 UI를 만들기에 앞서, 어떤 순서로 사람들이 페이지를 네비게이션하게 될 것인지를 기획하는 작업이 선행될 필요가 있다. 연필과 종이를 이용해서 스케치를 해도 되고, 좀 더 체계적인 시스템을 사용하기 원한다면 Balsamiq과 같은 전문적인 Mock up 도구를 이용해도 된다. 필자는 아래와 같이 정말 draft type의 mock up을 Balsamiq Online Version을 통해서 만들어 보았다. (사실 이런 것을 따로 기획하지 않아도 될 만큼 단순하지만 여러분의 이해를 돕기 위하여 시도해 본 다소 성의 없는 mock up이니 넓은 이해를 바란다.)

세 장의 사진을 모바일 상에서 표시하기 위하여 위와 같은 UI와 흐름을 가진 멀티 페이지 템플릿 UI를 만들어보려고 한다. 버튼 1과 버튼2와 버튼 3을 눌렀을 때 나타낼 사진은 여러분의 재량에 따르기로 하고 계속해서 페이지 구성을 실제 마크업으로 옮겨보도록 하자.

멀티 페이지 만들기

이제 위의 레이아웃을 실제 멀티 페이지로 옮겨 볼 차례이다. 세 페이지의 화면이 모두 동일하므로 첫 Page <DIV> 태그를 만들고 이 태그를 응용하여 뒤에 다른 페이지들을 붙여나가면 쉽게 완성할 수 있을 것이다. 갤러리 페이지의 화면은 다음과 같은 코드로 나타낼 수 있을 것이다.

         <div data-role="page" id="first">
            <div data-role="header">
                <h1>My Mobile Gallery</h1>
            </div>
            <div data-role="content">
                <div class="ui-grid-b">
                    <img src="Chrysanthemum.jpg" border="0" alt="Chrysanthemum" class="galleryWidget" />
                </div>
                <br />
                <div class="galleryWidget">
                    <a data-role="button" data-inline="true" data-theme="b" href="#first">1</a>
                    <a data-role="button" data-inline="true" href="#second">2</a>
                    <a data-role="button" data-inline="true" href="#third">3</a>
                </div>
            </div>
        </div>

위의 코드에서 굵게 표시한 부분들이 jQuery Mobile이 이해하고 처리하는 실질적인 부분들임을 기억하도록 하자. 위의 코드가 얼핏 보기에는 HTML의 규격을 벗어난 것처럼 보이거나 혹은 서버 사이드에서만 처리가 가능할 것처럼 보일 수 있지만 위의 규격은 HTML5에서 매우 합당하고 정확한 규격이다. 바로 Custom Attribute 덕분인데, 이와 같이 jQuery Mobile과 사전에 약속한 Custom Attribute를 사용함으로서 jQuery Mobile이 이 페이지의 내용을 자유롭게 다룰 수 있도록 해주는 것이다. 반대로 말하면, 위와 같이 지정하지 않은 HTML 요소에 대해서는 jQuery Mobile이 일절 간섭하지 않는다는 뜻이기도 하다.

뷰 포트에 대한 이야기

모바일 웹 페이지를 만들 때 가장 중요한 것이 하나 있는데 바로 뷰 포트에 관한 사항이다. 이제까지 우리가 다루어왔던 웹은 모두 데스크 탑 브라우저를 기준으로 설계되어왔다. WML을 이용하여 모바일 페이지를 디자인하던 시절도 있었지만 이 때만 하더라도 뷰 포트에 대한 이야기는 거의 없었다고 봐야 하겠다. 하지만 HTML이라는 통일된 수단을 가지고 모바일 페이지를 설계하면서부터 이런 논의가 활발해졌고 지금은 하나의 규칙으로 정해져있다.

우리가 일상적으로 보는 뷰포트는 해상도가 아무리 못해도 640x480 이상이 되는 디스플레이를 기준으로 하고 있으며 이는 스마트폰의 디스플레이보다는 어떤 이유에서이든 압도적으로 높은 해상도이다. 당연히 스마트폰이 표시할 수 있는 해상도와는 차이가 생길 수 밖에 없는데 스마트폰 제조 업체들은 나름대로 이에 대한 해결책을 모색하기 위하여 뷰포트를 억지로 맞추어 웹 페이지를 표시한다. 여러분이 초창기 스마트폰을 가지고 스스로 만든 웹 사이트를 브라우징해보면 이를 곧바로 알 수 있는데, 화면이 실제 데스크탑에서 보여지는 것과 비슷하게 보이기는 하지만 너무 작아져서 브라우징하기 참 어려운 모양으로 페이지가 나타나게 됨을 확인한다. 물론 사용자는 이가 없으면 잇몸이라도 쓰는 심정으로 화면을 연신 확대하고 스크롤 해가면서 어렵게 쓰기야 하겠지만.

이런 문제점을 예방하고 꼭 필요한 컨텐츠만을 계획적이면서도 알차게 담을 수 있도록 하기 위하여 스마트폰을 기획하지만 더 구체적으로는 스마트폰이 이런 식의 재정의를 임의로 하지 않도록 규정을 강제할 필요가 있는데 이를 위하여 메타 태그로 페이지마다 뷰포트에 대한 설정을 잡아주는 것이 꼭 필요하다. 우리가 사용할 뷰 포트는 아래와 같으며 아래의 메타 태그를 지금 여러분이 실습할 페이지의 <HEAD> 태그에 추가하기만 하면 된다.

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no, target-densitydpi=medium-dpi" />

실제로 살펴보기

위의 페이지를 모바일 웹 사이트에서 미리 보면 다음과 같은 모습이 될 것이다. 아래의 화면은 Windows Phone 7.1 Emulator로 살펴본 웹 사이트의 모습이다. 예상한 대로 첫 화면이 잘 보인다.

 

페이지 나머지 완성하기

이제 나머지 페이지를 완성하도록 해보자. 전체 페이지의 코드는 다음과 같이 작성되면 된다.

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no, target-densitydpi=medium-dpi" />
        <link rel="stylesheet" media="all" href="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.css" />
        <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
        <script type="text/javascript" src="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.js"></script>
        <title>My Mobile Gallery</title>
        <style type="text/css" media="all">
            .galleryWidget { display: block; margin-left: auto; margin-right: auto; text-align: center; }
            .ui-grid-b img { width: 80%; height: auto; }
        </style>
    </head>
    <body>
        <div data-role="page" id="first">
            <div data-role="header">
                <h1>My Mobile Gallery</h1>
            </div>
            <div data-role="content">
                <div class="ui-grid-b">
                    <img src="Chrysanthemum.jpg" border="0" alt="Chrysanthemum" class="galleryWidget" />
                </div>
                <br />
                <div class="galleryWidget">
                    <a data-role="button" data-inline="true" data-theme="b" href="#first">1</a>
                    <a data-role="button" data-inline="true" href="#second">2</a>
                    <a data-role="button" data-inline="true" href="#third">3</a>
                </div>
            </div>
        </div>
        <div data-role="page" id="second">
            <div data-role="header">
                <h1>My Mobile Gallery</h1>
            </div>
            <div data-role="content">
                <div class="ui-grid-b">
                    <img src="Hydrangeas.jpg" border="0" alt="Hydrangeas" class="galleryWidget" />
                </div>
                <br />
                <div class="galleryWidget">
                    <a data-role="button" data-inline="true" href="#first">1</a>
                    <a data-role="button" data-inline="true" data-theme="b" href="#second">2</a>
                    <a data-role="button" data-inline="true" href="#third">3</a>
                </div>
            </div>
        </div>
        <div data-role="page" id="third">
            <div data-role="header">
                <h1>My Mobile Gallery</h1>
            </div>
            <div data-role="content">
                <div class="ui-grid-b">
                    <img src="Tulips.jpg" border="0" alt="Tulips" class="galleryWidget" />
                </div>
                <br />
                <div class="galleryWidget">
                    <a data-role="button" data-inline="true" href="#first">1</a>
                    <a data-role="button" data-inline="true" href="#second">2</a>
                    <a data-role="button" data-inline="true" data-theme="b" href="#third">3</a>
                </div>
            </div>
        </div>
    </body>
</html>

페이지 간 탐색을 위하여, data-role이 page로 설정된 <DIV> 요소에 대해서 ID 속성을 지정하였고 이를 Hyperlink에서 Anchor 속성으로 지정한 것에 주목하라. jQuery Mobile은 이에 대한 자바스크립트 수준의 처리를 자동으로 구현해주고 있으므로 여러분이 각 <DIV> 요소의 비주얼을 일일이 관리할 필요가 없다는 것이 매우 바람직하다. 아쉽게도 Windows Phone 7.1에 포함된 IE에서는 조금 미미하지만 다른 스마트폰의 WebKit 기반 브라우저들로 살펴보면 페이지 간 애니메이션 전환 효과도 정확하게 보인다.

마무리하며

jQuery Mobile에 대한 관심은 나날이 늘어가고 있다. PhoneGap에 대한 직접적인 지원도 하고 있으며, 뿐만 아니라 PhoneGap 그 자체도 영역을 넓혀서 이제 Windows Phone 7에서도 직접 사용할 수 있을만큼 프레임워크 수준이 많이 좋아졌다.

jQuery Mobile 덕분에 여러분이 이미 만들었거나 운영 중인 웹 사이트에 이와 같이 모바일 사이트를 하나 더 만드는 것은 약간의 노력을 기울이기만 한다면 얼마든지 손쉽게 추가할 수 있게 되었다. 게다가 이제는 버전 1.0이므로 믿고 사용할 수 있을만큼의 수준이 되었다. 오늘 한 번 시험 삼아서 여러분만의 모바일 웹을 만들어보기 바란다. 홈페이지가 웹 호스팅 환경에서 실행된다고 할지라도 라이브러리나 프레임워크는 CDN에서 내려받도록 걸어주기만 하면 되므로 트래픽 걱정도 할 필요가 없으니 더더욱 자신감을 가지고 만들어보기 바란다. :-)

저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)

지난번에는 jQuery Mobile의 필요성과 사용을 위한 준비 방법을 살펴보았다. 그리고 오늘은 jQuery Mobile을 이용하여 실제로 페이지를 만들 때 주의할 사항들과 대망의 첫 예제 Hello, World!를 만들어보려고 한다.

개발 환경의 선택

계속하기에 앞서 한 가지 언급하고 넘어가도록 하겠다. 웹 개발을 할 때 웹 서버와 함께 좋은 IDE를 반드시 하나 이상 활용하기 바란다. 파일 시스템에서 웹 페이지를 불러와 테스트하는 방법은 요즈음 웹 환경에서는 그다지 좋은 방법이 아니다. 만약 마땅히 테스트 베드로 삼을만한 웹 플랫폼이 없다면, 여러분이 선택할 수 있는 테스트 베드는 두 가지 종류가 있다. 하나는 Visual Web Developer 2010 Express를 사용하는 것이고, 또 다른 하나는 Microsoft WebMatrix를 이용하는 방법이다. 만약 여러분이 ASP.NET에 별로 친숙하지 않다면 ASP나 PHP 개발을 WebMatrix에서 쉽게 진행할 수 있으므로 일반적인 텍스트 에디터만 사용하기보다는 WebMatrix를 병행할 것을 권한다.

Visual Web Developer 2010 Express를 사용하면 서버 사이드 프로그래밍에 필요한 디버거와 웹 응용프로그램 서버를 기본으로 획득한 상태에서 프로젝트 단위로 고급 프로그래밍 기법을 시도해볼 수 있다. 만약 순수하게 자바스크립트를 테스트해볼 수 있는 테스트 베드가 필요하다면 WebMatrix를 사용해도 된다. 양쪽 모두 무료 도구이며 둘 다 설치해서 여러분의 기호에 맞는 도구를 먼저 테스트해볼 수도 있다. 양쪽 도구 모두 http://www.microsoft.com/web 에서 제공하는 Web Platform Installer를 이용하여 손쉽게 설치할 수 있다.

HTML5 제대로 쓰기

다시 본론으로 돌아와서, jQuery Mobile은 이전 시간에 마무리하면서 이야기하기를, HTML5의 사양이 필요하다고 하였다. 기본적으로 우리가 아는 HTML은 HTML4 혹은 XHTML 1.1의 사양이다. 그리고 이를 계승하는 것이 HTML5와 XHTML5가 된다. 버전 4를 계승하여 버전 5가 나온 것이므로 양쪽의 차이점은 사실 그다지 크지 않다. 하지만 jQuery Mobile이 기대는 부분 중에서 굉장히 중요한 부분이 하나 있는데 바로 Custom Attribute의 사용이다. HTML4나 XHTML1.1에서는 Custom Attribute를 사용하는데 제약이 따르게 된다. 그러나 HTML5와 XHTML5에서는 이러한 설정을 공식적으로 지원한다.

웹 브라우저의 입장에서는 HTML4와 HTML5를 구분할 수 있는 방법이 필요한데, 별다른 언급 없이 웹 페이지를 써내려가기 시작하면 브라우저의 선호도에 따라 페이지의 버전이 달리 선택되므로 웹 페이지가 브라우저의 종류나 버전에 따라 일관성없는 결과를 낼 가능성이 크다. 이를 바로잡기 위하여 DOCTYPE을 정확히 지정해야 하며, 그 중에서도 HTML5의 DOCTYPE을 정확히 지정해야 한다. HTML5의 DOCTYPE은 페이지의 제일 첫 줄에 아래와 같이 작성하는것만으로 끝난다.

<!doctype html>

HTML4나 XHTML1.1의 DOCTYPE을 기억하는 이들이라면 위의 DOCTYPE이 정말 전부인지 당황스럽게 느껴질 것이다. 실제로 그렇다. 위와 같이 서술하면 HTML5를 제대로 지원하는 브라우저에서는 HTML5 상태로 페이지를 해석하고 렌더링하게 될 것이고, 그렇지 않은 브라우저들은 HTML4를 기반으로 해석을 시작할 것이다.

그리고 주의할 점이 하나 더 있는데, DOCTYPE 앞에는 어떤 추가적인 요소도 등장해서는 안된다. 즉, DOCTYPE이 공백 문자들을 제외하고 웹 페이지안에서는 절대적으로 최우선이어야만 한다는 뜻이다. 이를 위반하면 페이지가 의도하지 않은 모습으로 표시될 가능성이 커진다.

Hello, World! in jQuery Mobile

드디어 모든 프로그래밍 과제의 첫 번째 예제인 Hello, World!를 jQuery Mobile 스타일로 만들어 볼 차례이다. 여러분의 웹 개발 IDE에서 새 프로젝트를 각자 만들고, 첫 index 페이지를 만들어 아래와 같이 코드를 작성한다.

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="utf-8" />
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.css" media="all" />
    <script src="http://code.jquery.com/jquery-1.6.4.min.js" type="text/javascript"></script>
    <script src="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.js" type="text/javascript"></script>
    <title>오늘의 뉴스</title>
</head>
<body>
    <div data-role="page" id="home">
        <div data-role="header">
            <h1>페이지 제목</h1>
        </div>
        <div data-role="content">
            <p>Hello, World!</p>
            <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque tempus vehicula libero a fringilla. Nunc volutpat adipiscing felis, non iaculis arcu consectetur vitae. Aliquam tincidunt ultricies dui sed laoreet. Integer ligula tellus, porttitor in ornare vel, eleifend a eros. Ut lacinia porttitor sagittis. Integer interdum metus ligula, in lacinia leo. Cras scelerisque porttitor sagittis. Praesent eget orci eu est sollicitudin faucibus. Duis euismod neque quis nunc malesuada nec tincidunt mi varius. Duis at feugiat odio.</p>...
        </div>
        <div data-role="footer">
            <h1>아무개가 만든 페이지</h1>
        </div>
    </div>
</body>
</html>

jQuery Mobile을 사용한 페이지이지만 어쩐지 자바스크립트 코드가 단 한줄도 보이지 않는다. 어떻게 된 것일까? 의문을 풀기 위하여 실제로 웹 서버에 올려 웹 페이지를 살펴보면 아래와 같이 재미있는 결과가 나오는 것을 볼 수 있다.

특별한 자바스크립트 코드나 CSS 클래스 설정을 하지 않고 단번에 모바일 웹 페이지의 UI가 완성된 모습이 보인다. 첫 시작치고 굉장히 많은 것을 가져다주고 있는 것이다. jQuery Mobile이 기본적으로 하는 일은 바로 이런 일이다. 여러 모바일 브라우저에서 이 페이지에 접근하면 모두 이와 같은 모습으로 페이지를 렌더링해주는 것은 물론, 모바일 브라우저의 해상도와 뷰 포트에 알맞게 와이드 스크린을 지원하는 모바일 장치에서는 지금 여러분이 보는 것과 비슷한 화면으로 웹 페이지가 나타날 것이고, 스마트폰 계열 스크린에서도 약간의 뷰포트 조정을 통해서 적당한 화면을 얻을 수도 있다.

참고로 위의 예제 코드에서 라틴어로 주절주절 써놓은 것은 데모용 웹 페이지에서 흔히 잘 쓰이는 Lorem Ipsum (이하 Lipsum) 텍스트이다. http://www.lipsum.com/ 에서 원하는 분량만큼 만들 수 있으며 여러분의 모바일 디자인을 테스트하기 위하여 양껏 만들어 위와 같이 사용하면 된다.

jQuery Mobile의 UI 구조

다음 시간에 좀 더 구체적으로 살펴보겠지만 jQuery Mobile의 UI 구조는 WML의 카드 레이아웃과 비슷한 점이 많다. 여러분이 어떻게 구현하는가에 따라서 달라질 가능성은 충분히 있지만 페이지를 한 번만 다운로드해서 필요한 모든 UI를 제공할 수 있도록 기능을 만들어주는 것이 jQuery Mobile의 UI 설계 방향이다. 페이지의 구조가 복잡하게 그려질 가능성이 없진 않으나, 정확한 이해와 활용을 전제로 한다면 곧 익숙해질 것이다.

여러분이 위의 스크린 샷에서 본 화면은 페이지의 화면이 아니라 제일 처음 등장하는, 페이지로서의 역할을 수행하도록 설정된 <DIV> 태그의 화면이다. 보통의 <DIV> 태그와 구분되는 점은, HTML5의 Custom Attribute를 이용하여 이 <DIV> 태그가 jQuery Mobile에 의하여 특별하게 취급될 수 있도록 되어야함을 지시할 수 있다는 것인데, 바로 그 Attribute가 data-role Attribute이다. jQuery Mobile 세계 안에서 가장 키포인트가 되는 Attribute가 바로 이 data-role Attribute이므로 잘 봐두길 바란다.

data-role이 page로 지정된 <DIV> 태그 안에는 Header, Content, Footer 순서로 <DIV> 태그가 배치되어야 한다. 시각적으로 일관성있고 이해하기 쉬운 모바일 레이아웃을 만들기 위하여 Header는 사용하는 것이 필요하고, Content야 두 말할 필요 없이 본문에 해당되는 내용이다. 그리고 Footer는 옵션이다. 세 가지 섹션 모두 <DIV> 태그로 구성되지만 당연히 data-role Attribute를 사용하여 각자의 역할을 jQuery Mobile에게 알려주어야 한다. 그러면 jQuery Mobile은 이 부분에 대한 처리를 수행하여 여러분이 보고 있는 화면과 같이 디자인을 마무리해주게 된다.

기존에는 <BODY> 태그 아래에 여러분이 필요한 내용을 직접 써내려가면 그만이었지만 jQuery Mobile 환경 아래에서 모바일 페이지를 프로그래밍하는 것은 이와 같이 약간의 규칙이 따른다. 다음 강좌에서는 지금 보여준 페이지 UI를 하나의 HTML 페이지 안에서 여러 개를 포함하고 전환할 수 있는 방법을 본격적으로 소개하도록 하겠다.

저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)

요즈음 웹 개발에 있어서 하나의 중추적인 트렌드로 자리 잡은 것이 바로 모바일 웹 개발이다. 모바일 웹 개발이라고 하면 흔히 하는 생각으로 막연하다는 느낌부터 들 것이다. 1세대의 모바일 웹 개발은 확실히 HTML보다 가벼워야 했고 하드웨어의 제한 사항이 큰 편이었기 때문에 WML과 같은 메타 언어의 존재감이나 그 수요가 분명했다. 하지만 모바일 기기와 일반 PC의 사양 차이가 날이갈수록 좁혀짐은 물론 이제 모바일 기기가 경우에 따라서는 일반 PC나 랩톱 컴퓨터보다 훨씬 더 유용해지고 쓰임새가 많아지게 되면서 이런 구분이 모호해지게 된다.

필자 역시 모바일 웹 개발을 해야 할 필요성을 자주 느끼게 되었다. 당장 가지고 있는 스마트폰인 Windows Phone 7.1 (이름하여 망고폰)을 비롯해서 주변 지인들이 빠짐없이 가지고 있는 아이폰, 아이팟, 아이패드, 그리고 안드로이드 계열이나 크롬 북을 포함하여 상당히 많은 수의 브라우저들을 고려하는 모바일 웹 사이트가 필요했다. 물론 이들 모두 일정 수준 이상의 HTML5와 CSS3, 그리고 자바스크립트 렌더링 엔진을 갖추고 있긴 하지만 특유의 해상도 제한이나 성능 제한, 그리고 결정적으로 고밀도의 선택이 가능했던 마우스를 대신하여 터치 인터페이스에 최적화된, 이전보다 훨씬 둔감한 조작을 이해할 수 있는 인터페이스를 디자인해야 한다는 것이 난제가 되었다.

기존 웹 기술을 최대한 보존하면서도 검증된 프레임워크의 이점을 누릴 수 있는 방법이 없을까 고민하다가 아주 훌륭한 프레임워크를 테스트해보게 되었고 그 내용을 블로그를 통하여 간단하게 소개하고자 한다. 바로 jQuery Mobile이다.

jQuery Mobile과 jQuery의 차이점?

그냥 얼핏 듣기에 jQuery Mobile과 jQuery는 큰 차이점이 없어보인다. 오히려 어떻게 보면 jQuery의 축소 버전이 아닌가 하는 생각이 들 수도 있다. 하지만 이 둘 사이의 정확한 관계는, jQuery Core를 기반으로 만들어진 Extension이 jQuery Mobile이며, jQuery Mobile은 단순히 기능 집합을 축소한 것이 아니라 오히려 모바일 환경에 알맞도록 확장시킨 일종의 확장팩에 해당되는 개념이다.

사실, 여러분이 어떻게 jQuery Mobile을 사용하는가에 따라서 jQuery 특유의 자바스크립트 기술을 전혀 사용하지 않을 수도 있다. jQuery Mobile이 제공하는 몇 가지 규칙에 맞추어 웹 페이지를 프로그래밍한다면 나머지 시각 효과, 간단한 검색 기능, 심지어 대화 상자 기능까지 자동으로 jQuery Mobile이 알아서 처리해주기 때문이다.

jQuery Mobile을 가장 잘 활용할 수 있는 방법

이제까지 여러분은 자바스크립트 모듈을 어떤 방식으로 사용해왔는가? 대개는 웹 사이트 안에 들어가는 부속품 정도로 여기고 이것을 같은 웹 사이트 안에서 서비스하도록 구성하는 일이 많았다. 그리고 웹 서버에 대한 트래픽이나 부하가 일어나지 않도록 하기 위하여 적절한 Cache Timeout 설정을 사용하여 클라이언트가 jQuery 라이브러리를 지속적으로 재사용할 수 있는 방안을 적용해왔을 것이다.

그렇지만 기왕 최적화를 할 요량이면 밀어 붙일 수 있는 곳까지는 밀어붙여보는 것도 나쁘지 않을 것이다. jQuery는 물론 jQuery Mobile까지 여러분의 웹 서버가 아닌 곳으로 레퍼런스를 걸 수 있는 방법이 요즈음 유행하고 있다. 즉, CDN 서버를 이용하는 방식으로, jQuery를 비롯한 몇 가지 유명한 자바스크립트 및 공통적인 웹 자원들을 공개적으로 서비스하는 곳이 있고 이곳의 라이브러리를 가져다 쓰는 방식이다.

jQuery의 경우 jQuery 프로젝트 팀이 자체적으로 운영하는 CDN 서비스가 있으며, Microsoft의 ASP.NET AJAX CDN, 그리고 잘 알려진 Google의 CDN 서비스까지 모두 세 가지 유형의 CDN 서비스를 사용하여 jQuery 및 jQuery Mobile 자바스크립트 라이브러리를 개별 웹 페이지에 붙여넣을 수 있다.

CDN에 대해서 간단히 설명하면, CDN 네임스페이스 상의 특정한 URL에 대해서 요청이 발생하면 해당 리소스에 대한 사본을 CDN 네트워크 상에서 현재 위치로부터 가장 가깝거나 혹은 빠른 응답 속도를 보이는 서버로부터 데이터를 가져와 클라이언트로 내려보내는 서비스이다. 물론 이 과정을 수행할 수 있도록 하기 위하여 원본 서버가 필요하고 이 원본 서버로부터 데이터를 가져와서 네트워크 상에 고속으로 배포하는 작업은 필수적이다. 글로벌 CDN으로 불리는 서비스들은 당연히 이러한 CDN에 큰 비용을 투자할 수 있는, 그리고 전세계적인 네트워크 망을 보유할 수 있는 기업이어야 할 필요성이 있으며 이러한 기업으로는 대표적으로 Google과 Microsoft가 있는 셈이다.

Microsoft CDN을 이용하여 jQuery 시작하기

각각의 CDN 서비스들마다 자바스크립트를 제공하는 방법에는 차이점도 있고 장단점도 있지만 여기서는 Microsoft의 CDN 서비스를 사용하는 경우를 예로 들어 설명하고자 한다. 당연한 이야이기이지만 Microsoft CDN에서는 jQuery를 Visual Web Developer의 JavaScript Intellisense와 연계할 수 있는 vsdoc 버전의 자바스크립트 라이브러리를 CDN 버전으로 제공받을 수 있다. Microsoft CDN 서비스로부터 여러분이 가져오고 싶은 자바스크립트 코드를 카탈로그로부터 가져오기 위하여 아래 웹 사이트를 찾아볼 수 있다.

http://www.asp.net/ajaxlibrary/cdn.ashx

위의 웹 사이트에 구체적인 설명이 잘 나와있지만 이 웹 페이지에서는 여러분이 상황에 맞게 쓸 수 있도록 코드 조각을 정리하여 설명하려고 한다.

만약 여러분이 jQuery 1.5.1 버전을 http 버전 프로토콜로 연결하려고 하면 아래와 같이 <HEAD> 태그 내부에 Child Element로 기술하면 된다.

<script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.5.1.min.js" type="text/javascript"></script>

만약 HTTPS 기반 웹 사이트를 사용 중이고 여기서 CDN을 사용하려고 한다면 프로토콜 접두사만 바꾸면 HTTPS 버전의 CDN도 이용할 수 있다.

<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-1.5.1.min.js" type="text/javascript"></script>

만약 VSDOC 버전을 연결하려고 하면 아래와 같이 min 대신 vsdoc으로 이름을 바꾸면 된다.

<script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.5.1.vsdoc.js" type="text/javascript"></script>

jQuery UI를 사용하기 위해서는 CSS 파일, 이미지 파일, 그리고 자바스크립트 파일에 대한 참조가 필요한데, CSS 파일에 대한 참조만 정확하다면 이미지 파일들의 경로는 신경쓰지 않아도 된다. 그리고 jQuery UI는 jQuery를 기반으로 하는 프레임워크이므로 jQuery에 대한 참조가 필수이다. 그리고 테마는 여러분이 http://www.asp.net/ajaxlibrary/CDNjQueryUI1816.ashx 페이지에서 1.8.16 버전에 해당되는 미리 제공되는 테마 중에서 하나를 택하여 CSS 파일에 대한 참조만 정확히 지정하면 된다. 이런 설정을 바탕으로 jQuery UI를 CDN에서 가져올 때 Redmond 테마 버전으로 가져오고자 한다면 아래와 같이 코드 조각을 쓸 수 있다.

<link rel="stylesheet" href="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.16/themes/redmond/jquery-ui.css" media="all" type="text/css" />
<script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.5.1.min.js" type="text/javascript"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.16/jquery-ui.min.js" type="text/javascript"></script>

그리고 jQuery Mobile을 사용하려 한다면 아래와 같이 작성한다.

<link rel="stylesheet" src="http://ajax.aspnetcdn.com/ajax/jquery.mobile/1.0/jquery.mobile-1.0.min.css" media="all" type="text/css" />
<script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.5.1.min.js" type="text/javascript"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.mobile/1.0/jquery.mobile-1.0.min.js" type="text/javascript"></script>

jQuery Mobile의 경우 HTML5 마크업을 사용하는 것이 중요하다. Custom Attribute에 대한 지원이 필수적이기 때문이다. 이 부분에 대한 설명은 다음 기회로 넘기기로 하겠다.

저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)