IT/Web Dev | Posted by 철규님(최규철) 2011. 5. 10. 19:57

[jQuery Mobile] 2. Getting started - Hello world

이 글은 jQuery Mobile 공식 홈페이지(http://jquerymobile.com/)의 Docs and Demos를 기반으로 작성되었습니다.
작성일(2011/05/10) 기준 jQuery Mobile의 최종 버전은 jQuery Mobile 1.0 Alpha 4.1입니다.

2. Getting started - Hello world
< jQuery Mobile로 Web application 만들기 >
Written by Gyucheol Choi on 10 MAY 2011
모든 언어를 처음 접할때 작성하는 프로그램은 아마 "Hello world!"를 출력하는 프로그램일 것입니다. 물론 안드로이드 개발에 있어서는 프로젝트 생성 윈도우에서 next 버튼만 클릭하면 hello world를 출력하는 프로젝트를 생성해줘서, 새로운 언어로 새로운 환경에서 hello world를 띄워보는 흥미를 없애버리긴 했지만요. 이번 글에서는 jQuery Mobile을 설치(?)하고 Hello world를 출력하는 어플리케이션을 만들어볼려고 합니다.
jQuery Mobile 사용 하기
jQuery Mobile을 사용하는 방법은 두 가지가 있습니다. CDN(Content Delivery Network)에서 제공하는 자바스크립트(.js) 파일과 CSS(.css) 파일을 사용하는 방법이 있고, 소스 및 이미지를 다운로드 받아서 자신의 호스트 서버에 업로드 한 후 이 버전을 참고하는 방법이 있습니다. 각자의 호불호에 따라서 사용을 하시면 될 듯합니다. 제공되는 버전을 보면 Uncompressed 버전과 Minified 버전이 있는데, Minified 버전은 불필요한 개행이나 공백, 주석 등을 완전히 제거한 버전이고, Uncompressed 버전은 개행, 공백, 주석 등을 온전히 유지하여 디버깅을 가능하게 한 버전입니다. 때문에 실제 파일 크기를 보면 자바스크립트의 경우 130KB/19KB, CSS 파일의 경우 53KB/7KB 등으로 많은 차이가 나는 것을 알 수 있습니다. 실제적인 jQuery Mobile의 내부 구조를 살펴보시고 싶은 분은 Uncompressed 버전을 사용하시면 많은 도움이 될 것 같습니다.
이 글에서는 CDN에서 제공하는 Minified 버전의 자바스크립트 파일과 CSS 파일을 사용하는 방법을 알아보겠습니다.

jQuery Mobile을 사용하기 위해서는 CSS 파일과 jQuery Core 자바스크립트 파일, jQuery Mobile 자바스크립트 파일이 필요합니다. jQuery Mobiel 다운로드 사이트(http://jquerymobile.com/download/)를 참고해서, 'Copy-and-Paste Snippet'의 태그를 웹 페이지에 추가합니다.

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>헤더 타이틀</title> 5 <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0a4.1/jquery.mobile-1.0a4.1.min.css" /> 6 <script src="http://code.jquery.com/jquery-1.5.2.min.js"></script> 7 <script src="http://code.jquery.com/mobile/1.0a4.1/jquery.mobile-1.0a4.1.min.js"></script> 8 </head> 9 <body> 10 11 </body>

해당 HTML 파일이 HTML5를 기반으로 한 문서라는 것을 1번 라인에 명시하였습니다. 그리고 5, 6, 7번 라인에서 jQuery Mobile을 위한 CSS 파일, 자바스크립트 파일을 포함시킵니다. 이로써 jQuery Mobile에서 제공하는 모든 기능을 사용할 준비가 완료되었습니다. 이제 Hello world를 띄워보는 어플리케이션(이라고 하기도 뭐한 어떤 것)을 만들어 보겠습니다.
Hello world
jQuery Mobile에서는 화면의 구성 요소들을 div 태그로 구분을 하고 div 태그의 data-role 속성(attribute)을 명시함으로써 화면에서 어떤 역할을 할지 지정합니다. 이후는 jQuery Mobile 프레임워크가 모든 걸 알아서 합니다. 자세한 페이지 구조는 다음 글에서 설명을 하기로 하고 우선은 간단한 구조만 정의하고 예제를 볼까 합니다.

jQuery Mobile 프레임워크는 1개 이상의 page를 가지고, 하나의 page는 header, content, footer를 각각 가집니다. 예제로 작성할 Hello world 어플리케이션에서는 Header 부분에 "First App", Content 부분에 "Hello world!", footer 부분에 "jQuery Mobile"을 각각 나타내보겠습니다. 위의 설명대로 구성한 소스코드는 아래와 같습니다.

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>jQuery Mobile Test</title> 5 <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0a4.1/jquery.mobile-1.0a4.1.min.css" /> 6 <script src="http://code.jquery.com/jquery-1.5.2.min.js"></script> 7 <script src="http://code.jquery.com/mobile/1.0a4.1/jquery.mobile-1.0a4.1.min.js"></script> 8 </head> 9 <body> 10 <div data-role="page"> 11 <div data-role="header"> 12 <h1>First App</h1> 13 </div> 14 15 <div data-role="content"> 16 <p>Hello World!</p> 17 </div> 18 <div data-role="footer"> 19 <h2>jQuery Mobile</h2> 20 </div> 21 </div> 22 </body>

위의 파일을 저장하고 원하는 브라우저에서 열어보면 아래와 같은 화면을 볼 수 있습니다.


Hello world - Theme
jQuery Mobile은 기본적으로 5가지 형태의 테마를 제공합니다. div 태그에 data-theme 속성에 값을 부여함으로써 각각의 테마를 적용할 수 있습니다. 테마는 특별한 id 없이 a, b, c, d, e의 값을 가집니다. 명시하지 않을 경우 a의 테마가 적용됩니다.
01234

테마 page 단위로 일괄적으로 적용할 수도 있으며, 필요에 따라 화면의 각 구성 요소에 서로 다른 테마를 적용할 수도 있습니다.




이로써 jQuery Mobile을 내 웹 어플리케이션에 적용하고, 이를 이용해서 Hello World를 출력하는 프로그램, 그리고 그 프로그램에 테마를 적용하는 것까지 해보았습니다. 간단한 예제지만 분석해볼만한 내용은 더 많은 것이라 생각됩니다. 지금은 잘 이해되지 않는 부분도 나중에 다시 한번 보신다면 더 잘 이해하고 더 많은 의미를 찾아낼 수 있지 않을까 생각합니다.

댓글을 달아 주세요

IT/Web Dev | Posted by 철규님(최규철) 2011. 5. 10. 12:18

[jQuery Mobile] 1. Overview of jQuery Mobile

이 글은 jQuery Mobile 공식 홈페이지(http://jquerymobile.com/)의 Docs and Demos를 기반으로 작성되었습니다.
작성일(2011/05/10) 기준 jQuery Mobile의 최종 버전은 jQuery Mobile 1.0 Alpha 4.1입니다.


1. Overview of jQuery Mobile
< jQuery Mobile로 Web application 만들기 >
Written by Gyucheol Choi on 10 MAY 2011
jQuery는 네이티브 어플리케이션과 유사하게 동작하는 웹 어플리케이션을 쉽게 작성할 수 있도록 도와주는 프레임워크입니다. jQuery에서 제공되는 자바 스크립트 라이브러리를 이용해 HTML 문서 생성, 이벤트 처리, 애니메이션 처리, AJAX 인터액션 등을 손쉽게 활용해 웹 어플리케이션을 작성할 수 있습니다.

jQuery Mobile은 모바일 환경에서 동작하는 웹 어플리케이션 개발에 최적화된 모바일 웹 개발 프레임워크 라고 볼 수 있습니다. jQuery를 이용해서 작성한 웹 어플리케이션도 모바일 환경에서 실행이 가능하지만, 모바일 기기의 특성에서 오는 제약사항을 고려하고자 한다면, jQuery Mobile의 선택이 더 올바를 것입니다.

이 글에서는 jQuery Mobile 공식 홈페이지(http://jquerymobile.com/)의 Docs and Demos를 참고로 해서 jQuery Mobile의 특징에 대해서 알아보려 합니다.
Intro to jQuery Mobile
jQuery Mobile은 하나의 어플리케이션이 어떤 스마트폰이나 태블릿PC의 모바일 웹 브라우저에서도 일관성 있는 UI를 가지도록 하는 자바스크립트 라이브러리입니다. 때문에 마이너한 일부 브라우저를 제외하면 jQuery Mobile로 작성된 어플리케이션은 동일한 화면 구성, 또는 사용자의 편의성을 크게 해치지 않는 한도 내에서 적절히 최적화된 화면 구성을 가지게 됩니다. 웹 '어플리케이션'을 목표로 삼은만큼 jQuery Mobile로 작성된 '웹' 어플리케이션은 일반 'PC용' 어플리케이션과 꽤나 비슷한 수준의 사용환경 또한 제공합니다.


다양한 사용 환경에 적절하게 대응하기 위해서 jQurey Mobile은 깔끔하게 정리된 시맨틱 HTML(clean, sementic HTML)을 사용합니다. 장치에서는 이 HTML 파일을 읽어 CSS와 jQuery Mobile 적용 과정을 거쳐서 풍부한(rich and interactive) 사용자 경험을 가진 어플리케이션을 생성합니다.
Key Features
  • jQuery 개발과의 일관성 유지 및 jQuery 개발 유경험자의 쉽고 빠른 적응을 위해 jQuery core를 기반으로 함
  • HTML을 지원하는 대부분의 주요 모바일 플랫폼에서 호환 가능
    - iOS, Android, Blackberry, Palm WebOS, Nokia/Symbian, Windows Mobile, bada, MeeGo 등
  • 성능(속도)를 위해 코드 사이즈를 최소화하고 이미지 사용을 줄임
  • 빠른 개발과 스크립트 사용 최소화를 위해 HTML5 마크업 중심으로 각 페이지와 동작에 대한 설정을 함
  • 가능한한 모든 환경에서 핵심 내용과 기능을 정확하게 전달하고, 최신 플랫폼에서는 일반 어플리케이션과 동일한 사용 환경 제공을 위해 점진적 개선(Progressive enhancement) 방법을 사용
  • 페이지 내의 모든 jQuery Mobile 위젯을 자동으로 초기화하기 위해 HTML5의 data-role 속성을 이용함
  • 다른 보조적인 기능 지원을 위해 다양한 부가 요소가 포함되어 있음
  • 터치, 마우스, 커서를 사용하는 입력 등을 단순한 API로 간단하게 지원하기 위해 새로운 이벤트 사용
  • 터치에 최적화되거나 테마 변경이 가능한 컨트롤 등을 위해 새로운 플러그인 지원
  • 사용 환경을 손쉽게 변경할 수 있도록 테마 기능 지원

Supported platforms


Supported platforms in Alpha 4
Alpha 4가 릴리즈되면서, Windows Phone 7의 지원이 추가되었습니다. 다음의 플랫폼에서는 jQuery Mobile의 기능이 완벽하게 지원되고, 처음 의도한 화면의 구성이 흐트러짐 없이 표현됩니다.

  • Apple iOS 3.1-4.2
  • Android 1.6-2.3
  • Blackberry 6
  • Windows Phone 7
  • Palm WebOS 1.4
  • Opera Mobile 10.1 (Android)
  • Opera Mini 5.02 (Android)
  • Firefox Mobile beta (Android)
Target platform additions for beta
다음 릴리즈에서는 Blackberry 5, Nokia/Symbian을 지원할 계획이라고 합니다. 삼성의 Bada와 MeeGo는 지원하는 폰을 확보하는 대로 테스트 후 공식 지원 리스트에 업데이트 할 예정이라고 합니다. 또한 jQuery Mobile은 jQuery core를 기반으로 하고 있기 때문에 Firefox, Chrome, Safari, Internet Explorer, Opera 등과 같은 PC용 웹 브라우저의 최신 버전에서도 정상적으로 동작합니다.

댓글을 달아 주세요

IT/Computing | Posted by 철규님(최규철) 2011. 5. 3. 22:12

[번역] How to beat Apple

권정혁/구루(@xguru)님의 트위터에서 좋은 글이 소개되어 번역합니다.
잘못 번역된 내용이 “당연히” 있을 테니 원문을 꼭 참고해서 읽으세요. 번역 오류나 개선, 오타에 대한 피드백은 언제나 환영하고 감사드립니다. ^^


Apple 넘어서기
How to beat Apple
Written by Jason Kottke on 26 APR 2011
Translated by Gyucheol Choi on 03 MAY 2011
원문 보기
한동안은 iPhone과 iPad 대항마를 만들어내는 회사들이 그들의 게임에 있어서 Apple을 넘어서기란 불가능할 것이다. Apple은 공급망의 이점을 가지고 있고, 그들 고객의 카드 번호를 대량으로 보유하고 있으며(왜 잡스가 이 이야기를 매 Apple 행사마다 꺼낼까? 그만큼 중요하다는 것!), 주요 특허, Steve Jobs나 Jony Ive와 같이 평생을 바친 임직원, 주요 미디어 업체와의 굳건한 연대, 그리고 앱스토어, 어플리케이션, 하드웨어의 통합 에코시스템 등을 가지고 있다. 아주 눈에 띄는 경쟁력이다

하지만 영리한 경쟁자라면 Apple이 따라하거나 직접적으로 경쟁할 수 없을만큼 눈에 띄는 제품을 만들 수 있는 약점 또한 Apple은 가지고 있다.

  1. Apple은 큰 규모에 있어서는 "소셜"을 잘 못한다. Ping(Apple의 SNS 서비스, 역자주)?, 게임 센터? 무슨 소리. 소셜 어플리케이션은 Apple의 DNA에 없는 듯 하다. 그들의 베스트 어플리케이션은 여전히 1인용 또는 2/3/4인용이다. 누군가는 폰/앱/게임/음악/비디오 경험에 있어서 iPhone/iPad를 넘어서기 위해 Facebook의 소셜 그래프를 어떻게 이용할 지를 찾아내야 한다. 그리고는 파트너들과, 특히 Facebook과, 이런 것을 구현해야 한다. Facebook Fone은 잘만 된다면 엄청난 성공을 이룰 것이다.
  2. Apple은 클라우드도 하지 못한다. Mobile Me가 2000년 1월(그때는 iTools로 불렸었다)에 나왔지만, 이 버시스는 새로 나온 Dropbox 만큼도 관심을 끌지 못하고 있다. iPod, iPhone, iPad는 여전히 데스크탑/노트북 그리고 iTune에 묶여있다. 분명 더 나은 방법을 위한 기회가 있을 것이다.
  3. iTunes는 갈수록 구식이 되어가고 있다. 클라우드와 소셜이 두 가지 약점이라면, iTunes는 아주 오래되었고 최근 몇 년 동안은 비대한 기능의 집합체가 되어가고 있다. 뮤직 스토어, 비디오 스토어, 앱 스토어, 모바일 장치 관리자, "소셜" 네트워크... 게다가 음악을 재생하는 용도로도 쓸 수 있다. Spotify, Randora, Rd.io 등이 다른 접근 방법이 있음을 알려주고 있다.
  4. 이것이 내 생각인지 Daring Fireball 같은 곳에서 읽은 것인지는 정확하게 기억나지 않지만, Apple이 잘하고 있는 제품과 서비스는 Steve Jobs가 사용하는 (또는 신경을 쓰는) 것 들이고, 그가 사용하지 않거나 신경을 쓰지 않는 것은 좋지 못하다. (때론 나쁜 수준) Jobs는 Keynote를 사용하는데 이 프로그램은 매우 좋다. 반대로 난 Jobs가 iCals를 이용해서 약속을 잡는 것을 해본적이 없다고 단언할 수 있는데, 그만큼 이 프로그램은 별로다. 클라우드 앱과 소셜 앱이 이 글의 최상위에 있는 것도 이유가 있다. 난 Jobs가 이런 것들에 대해서 신경을 쓰고 있다고 생각하지 않는다. 그가 신경을 써도, 열정은 없을 것이다. 그것들은 그에게 주요한 것이 아니라서, 그는 그것들에 대해서 어떻게 해야될 지, 그러한 문제를 어떻게 해결할지를 모르는 것 같다.
그리고 실제로는 전혀 약점이 아닌 Apple의 약점도 몇 개 있다.
  1. 가격. 많은 사람들은 여전히 Apple 제품의 가격이 비싸다고, 때로는 가격에 거품이 있다고 생각한다. 하지만 아직 아무도 경쟁할 만한 성능의 태블릿을 500달러 이하로 만들어내지 못한다. 만약 Apple을 가격으로 공략한다면, 거기에는 잠재적 함정이 숨어있다: Apple은 터무니없을 정도로 이익률이 높고 현금을 많이 보유하고 있다; 만약 그들의 사업 영역 보호를 위해 가격으로 경쟁을 해야할 필요가 있다고 생각이 들면, 경쟁자들이 사업을 포기할 때까지 오랫동안 그리고 낮은 가격 수준을 유지할 수 있다.
  2. 개방성과 비밀성. 경쟁자들은 Apple의 각본에 따라, 당신에게 경쟁령있는 이점을 주는 것들에 대해서는 공개하고, 다른 것에 대해서는 이야기하지 않는다. 개방이 항상 좋은 것은 아니다.

댓글을 달아 주세요

IT/Computing | Posted by 철규님(최규철) 2011. 5. 3. 21:48

[번역] How to Be a Successful Software Engineer

권정혁/구루(@xguru)님의 "구루의 기술 뉴스"에서 좋은 글이 소개되어 번역합니다.
잘못 번역된 내용이 “당연히” 있을 테니 원문을 꼭 참고해서 읽으세요. 번역 오류나 개선, 오타에 대한 피드백은 언제나 환영하고 감사드립니다. ^^


성공적인 소프트웨어 엔지니어가 되는 법
How to Be a Successful Software Engineer
Written by Daniel Huckstep on 16 NOV 2010
Translated by Gyucheol Choi on 03 MAY 2011
원문 보기
당신의 업무에 있어서 최고가 된다는 것에 대해서 정답은 없다. 어떤 사람은 재능을 타고나기도 하고, 다른 사람은 단지 그 일이 좋아서, 그 일을 더 잘하기 위해 자신의 시간을 기꺼이 투자하기도 한다.

당신의 현재 상태가 어떻든 상관없이, 항상 발전의 여지는 있다. 나는 내가 하고 있는 일-굉장한 소프트웨어를 개발하는 것-을 더 잘하기 위한 방법에 있어서 나를 도와줬던 것들에 대해서 이야기하려고 한다. 현실에서는 "소프트웨어 엔지니어"라는 단어를 당신의 업무 분야에 맞게 바꾼다면 대부분의 사항들이 여전히 유효할 것이다.

변명(?) : 큰 시스템 안에서 본다면, 나를 (아직은) '성공했다'라고 하진 않을지도 모른다. 하지만 나는 내 방식대로 잘 해가고 있다고 생각한다. 프로그래밍을 한지는 겨우 7년이 됐고 학교를 졸업한지도 2년이 지났지만, 나는 내 자신에 대한 확신이 있다. 나를 도와줬던 이러한 것들이 지금의 내가 있게 해줬고, 내 분야에 있어서 더 앞으로 더 높은 곳으로 나아갈 수 있도록 지금도 도와주고 있다.

다음의 내용들은 특별한 순서없이 나열한 것들이다...
배움을 멈추지 마라

학교를 더 이상 다니지 않는다고 해서 배움 또한 멈춘다는 것은 아니다. 꾸준히 배워야 한다. 새로운 기술이 나오고, 새롭게 생각하는 방법이 자리잡고 있으며, 새로운 문제들이 해결을 기다리고 있다. 발전없이 정체되거나 새로운 문제를 낡은 사고 방식으로 해결할 수는 없다. 때로는 그 방법이 통할수도 있고, 때로는 그것이 최선의 방법인 채로 남기도 하다. 하지만 많은 경우에 당신은 새로운 분야를 탐구해야 하고 진정으로 뛰어난 해결책을 찾기 위해 다른 관점에서 문제를 해결해야 한다.

배우는 방법에는 여러가지가 있다.
읽기
블로그, 잡지, 전문 출판물이나 저널, 책, 코드, 도식, 실험, 연구 등 그 무엇이든. 적절히 읽을 수 있을만큼 많이 읽어라. 또한 한두가지 형태로 제한해서도 안된다. 블로그만 읽어서도 안된다. ACM 간행물(소프트웨어 엔지니어링 분야라면)이나 당신이 일하는 분야의 전문 출판물을 구독하가. 실제 책 또한 읽어야 한다. 많은 소설이 읽혀지고 있고 블로그와 온라인 간행물이 넘쳐나고 있지만, 비소설 종이책은 그만큼의 인기는 없다. 당신의 분야에서 하나의 책을 골라서, 종이책(또는 킨들 eBook1)을 구매하라. 그리고 읽어라.
컨퍼런스
가능하다면 컨퍼런스에 참석하라. 때로는 이것이 매우 큰 일이고 비행기를 타고가서 호텔을 잡는 데 많은 돈이 들기도 하지만, 충분히 가치 있는 일이다. 나는 비록 아직 소프트웨어 관련 컨퍼런스에 가보지는 않았지만, 트위터나 슬라이드, 비디오, 또는 단지 참석한 사람들만 보고 판단해도 충분히 가치 있는 일이라고 말할 수 있다. 나는 슬라이드나 비디오 등을 확인하면서 많은 것을 배우는데, 실제로 참석한다면 더 많은 것을 배울 수(그리고 더 큰 재미를 얻을 수) 있다는 것은 추분히 납득할만 할 것이다.
전문 개발 세미나
전문 개발 세미나는 당신의 커리어를 향상시키고 업무를 더 잘할 수 있게 도와주기 위한 것이다. 개인적으로는 세미나들이 하루나 이틀 정도였지만, 몇 주가 되기도 하고 많은 돈이 들기도 한다. 당신의 고용주가 도움을 줄 수 있는지 확인해보라. 왜냐하면 결국에는 그것은 그들에게도 이익이 되기 때문이다.
다른 사람으로부터 배워라
몇몇 주요 내용으로 분류해봤다.
비평을 듣고 피드백을 줘라.
누군가가 당신의 코드, 디자인, 솔루션 등 무엇이든지에 관해서 언급한다면, 그것들을 듣는 것은 당신에게 가장 흥미로운 일일 것이다. 그들이 말한대로 해야된다는 것을 의미하는 것이 아니라 최소한의 그들이 말하는 것을 들어보고 무엇을 말하고자 하는지를 알아내야 한다는 것이다. 그들은 문제나 당신의 솔류션을 전혀 다른 시각에서 보기 대문에 그들의 생각이 전적으로 옳을때도 있다. 그들은 나름의 관점을 가지고 있고, 다른 것들에 대해서 생각하고 당신이 보지 못한 문제를 찾아낼 수도 있다.
유사한 문제에 솔루션을 시험해 보라.
새로운 소스 컨트롤 시스템을 만들기로 결정했다고 해보자. 아마 이것을 하려는 납득할 만한 이유는 많을 것이다. 하지만 기존의 소프트웨어가 그 문제를 해결하기 위해서 어떻데 동작하는지를 테스트 해보지 않는 것은 멍청한 짓이다. git, mercirial, svn에 대해서 알아보라. merge conflict, repository 제공, 그리고 이러한 것들을 빠르게 동작하게 하는 것에 있어서 기존의 프로그래미 어떻게 지원하는지 살펴보라. 기존의 솔루션을 테스트하는 것으로부터 많은 것을 배울 수 있다.
가르쳐라

인용구를 찾을 수가 없는데, 다른 사람에게 어떤 것을 가르칠 수 있기 전까지는 그것을 제대로 이해한 것이 이나라는 것과 유사한 말이다. 그러므로 가르쳐보라!

당신이 어떤 것을 매우 좋아한다면 다른 사람이 그것을 배울 수 있게 도와줘라. 당신이 가진 지식을 전달해서 다른 사람이 문제를 해결하고 새로운 문제에 새로운 기술을 적용하는 것을 도와줘라. 가르치는 것은 user group, meetup, 컨퍼런스 등에서 의견을 내놓는 형태일 수도 있고, codelesson과 같은 사이트에서 정식 클래스를 운영하는 형태일 수도 있으며, (Github에서 제공하는 것과 같은) 협업 트레이닝을 하는 형태, 심지어는 당신이 작성한 코드의 일부를 협업자와 같이 리뷰하는 형태일 수도 있다.

어떤 형태를 택하든, 거기서 벗어나서 가르쳐라.
일을 사랑하고 관심이 가는 것에 대한 일을 해라
이 두 가지는 연관된 것이다. 세금 계산 소프트웨어를 싫어한다면 Intuit에서 일하면 안된다. 꽤나 간단하다. "근데 내 관심 분야에는 좋은 소프트웨어 회사가 없는걸요!"라고 말할 지도 모르겠다.

이직하라

당신의 일을 좋아하지 않는 다면, 즐길 수 있는 일을 찾을 수 있는 곳으로 이직하는 것을 배재하면 안된다. 일하러 갈 수가 없고, 하고 있는 일을 즐길 수 없다면, 당신의 하루는 너무나 우울할 것이고, 때문에 당신의 당신에게 주어진 일에 아무런 동기도 가질 수 없을 것이다.

이것을 고려해봐라: 당신이 MIPS 어셈블리 프로그래밍을 싫어하고 집에서 하려고 하지 않는다면, 매일 일하러 가고 거기서 일을 하는 것이 왜 납득이 될까?

당신이 좋아하는 것을 하라. 그리고 당신이 하는 것을 좋아하라. 이유가 없다.
일관성을 유지하라
당신이 행동하고 자신을 나타내는데 있어서 일관성은 중요한 것이라고 생각한다. 이것은 당신의 옷차림부터(Steave Jobs는 복장 일관성 종결자다) 코딩, 작문 스타일까지 많은 것을 포함한다.

예를 들면, 나의 아바타랑 약력은 어디에나 똑같다고 확실히 말할 수 있다. 내가 가입한 어떤 사이트든 만화처럼 그려진 내 사진을 볼 수 있을 것이고 내가 (글 쓸때 기준으로) "소프트웨어 엔지니어, 캐나다 앨버타 에드먼턴"이라고 적혀있는 것을 확인할 수 있을 것이다. 아미 지역을 적는 칸이 따로 있었으면 지역명을 적지는 않았을 것이지만, 어쨌든 기록해놓았다.

작문 스타일, 옷차림, 약력, 태도 그리고 연락처 등이 일관성을 유지하도록 신경써야 하는 모든 것 들이다. 연락을 위해서 이메일을 알려줬다면 그 이메일을 계속 사용해야 한다. 온라인 상에서 꾸준히 멋진 사람이었다면, 갑자기 불쑥 튀어나와 이상한 사람이 되어서는 안된다.
일관성을 유지하라. 사람들이 당신이 누군지를 기억하는데 도움이 될 것이다.
항상 컨택 가능한 상태를 유지하라
상자에 갇혀서 사는 것은 형편없는 짓이다. 당신의 경력에서 더 높은 위치로 가고싶다면(이것이 직위 상승을 의미하는 것은 아니다) 당신의 분야에서 다른 사람들과 소통하기를 원할 것이다. 명함에 이메일 주소나 전화번호를 기재하라. 웹콜을 위해서는 Skype를 사용하라. 이메일 공개를 원하지 않는다면 Wlfoo의 연락처폼을 이용하라. 왜 안하는가? Gmail과 그것이 제공하는 스팸 필터링 기능을 이용해라!

항상 컨택 가능한 상태인 것만으로도 당신은 자신을 가르치게도 할 수도 있고("저기요, 이거 어떻게 하신건가요?") 취업에 대한 기회를 얻을 수도 있도, 평론을 할 수도 있다. 우리가 언급한 모든 것들이 다 좋은 것들이다.
커뮤니티에서 활동하라

이 사람은 Why the Lucky Stiff이다. 그는 정말 멋쟁이다. 그는 루비 커뮤니티를 위해 아주 많은 일을 했는데 때문에 그가 인터넷에서 사라졌을 때 사람들은 그가 무엇을 하다가 그만뒀는지를 찾아내고 그가 참여했던 것들을 유지하는 일을 인계받기 위해 그들이 하던 일 조차 멈출 정도였다.

만약 그가 그냥 집에 머무르면서 그 자신을 위한 것들만 했다면, 멋쟁이까지 되지는 않았을 것이다.

멋진 코드를 가지고 있다면 사람들에게 보여줘라. 당신의 업무 분야에서 어떤 멋진 일을 했다면 다른 사람들에게 그것을 보여주고 어떻게 만들어냈는지를 가르쳐줘라.
재미로 일(코딩)을 연습하라
집에서는 코딩을 하지 않는다면, 잘못된 것이다. 시.간.이.없.어.요 따위는 헛소리는 하지마라. 시간은 있다. 단지 당신이 제대로 관리를 못할 뿐이다. Scott Hanselman은 두 아이가 있지만 여전히 프로그래밍을 한다. 당신이 하는 프로그래밍이 회사에서 하는 것이 전부이고, 정말 집에 와서는 프로그래밍을 하고 싶지 않다면, "일을 사랑하고 관심이 가는 것에 대한 일을 해라"라는 섹션을 참고해라.

이는 프로그래밍을 넘어서도 적용된다. 전기 엔지니어이면서 기타를 연주한다면 기타 엠프를 만들어라. 목수라면 아이들을 위해 투박한 스윙 세트를 만들어줘라.

집에서 하고 싶은 것을 하기만 하면 된다. 당신이 하고 싶은 것이 일로 하고 있는 것이라면, The Eagle과 같은 것을 만들고 쉬어라.
끝을 맺어라
Joel Spolsky가 한 말이다. Fog Creek Software의 채용 공고를 본 적이 있다면, 그들은 단지 두 가지 사항만을 고려한다는 것을 알 것이다: 영리함 그리고 일을 끝내는 능력. 만약 이 두 가지 조건을 만족시킨다면, 당신이 python/django 개발자이고, 그 회사에서는 Wasabi 기반 어플리케이션 분야에서 일할 사람을 필요로 한다고 하더라도 전혀 문제가 되지 않는다. 꽤나 빠르게 그들의 업무를 이애하고 따라 잡을 수 있을 것이다. 마치 다른 목공예점에 가는 것과 같다. "지난 번엔 가죽 손잡이가 달린 붉은색 망치를 사용하셨던 것 알고 있어요. 하지만 여기는 배드민턴 스타일 손잡이가 달린 푸른색 망치 밖에 없네요."라고 말하는 것처럼. 언어는 기본적으로 도구일 뿐이다. 그리고 당신이 머리가 좋다면 그로 인해 혼란스러울 일은 없을 것이다. 도구는 전혀 문제가 되지 않는다.
정리를 잘 하라

할일 목록을 사용하거나, 나아가서 GTD(Get Things Done) Pholosophy를 사용하라. 나는 GTD를 사용하려고 시도도 해보았고, 지금도 그런 것의 일부를 활용하고 있기도하지만, 난 내가 해야 할 일이나 어느 시점에 하고 싶은 일을 잊어버리지 않기 위해 그 일들을 Remember The Milk에 저장하고 있다. 이것은 일들을 당신의 머리에서 빼내서 항상 생각할 필요가 없는 곳으로 옮겨준다. 나는 내가 작업하고 있는 특정 소프트웨어 프로젝트의 특정 사안에 대한 관리를 위해 bug tracker를 사용하기도 한다.
손을 떼라
어떤 일을 끝까지 해내고 싶어하는 것을 이해하지만, 그것이 할 필요나 끝낼 가치가 없는 경우도 있다. 나는 Gravatar 처음 나왔을 때 Rails3 예제 프로그램으로 Gravatar와 똑같은 것을 만들고 싶었었다. 확정된 것은 아니었지만, 그냥 내가 괜찮겠다라고 생각했던 것이었다. 하지만 Rails3가 퇴출되면서, 다른 일로 샐 수 밖에 없었다. 그리고 이제는 더더욱 하기가 어려워졌다. 그 어플리케이션에 시간을 보낸 나는 시간을 낭비한 꼴이었고, 한동안은 Rails3에 대해서 생각도 하지 않았고, 내 블로그는 이미 '조롱거리3'이었다. 어떤 일이 당신의 할일 목록에 오랫동안 있다면(아마 갑자기 생각난 일일 것이다) 그것을 하는 대신에 그 일이 그 목록에 계속 있을 필요가 있는지를 생각해보라.

이는 당신이 벌써 시작했지만 흐지부지되고 있는 것에도 적용된다. 더 이상 흥미롭지 않거나 의미가 있는 것이 아니라면, 그 일을 접고 다른 신선하고 멋진 일을 하라.
비동기적이 되어라
조금 이상한 소리지만, 일단 이야기 하려고 한다.

todo list나 RSS 피드를 실질적으로 활용해라. 이메일과 같이 이것들인 비동기 시스템이다. 이베일을 보내고, 피드를 구독하고, 또 toto 아이템을 적어라. 그리곤 더 이상 너무 많이 신경쓰지 마라. 당연히, 다음날 이메일을 확인하거나, 침대에 가기 전에 피드를 읽으면 된다. 새로운 내용을 위해 웹사이트를 계속 확인하거나 Skype에 텍스트로 "John is typing..."을 치기 시작하면서 자리에 앉지 않아도 된다. 당신이 그것들을 처리할 시간을 지정할 수 있다. 생각이 날때 쓰고, 시간이 남들때 처리를 하면 된다. 머리에서 더 많이 뽑아내서 다른 시스템에 넣을 수록 좋다. 이를 통해 당신은 손에 주어진 일에만 집중할 수 있게 된다. 나중에 이메일을 처리하고 피드를 읽을 수 있는 시간이 있을때, 그때 그것에 집중하면 된다.

컴퓨터 관련 분야에서는 더 적용할 수 있는 것들이지만, 나에게는 정말 도움이 되었기 때문에 적어보았다.
Kindle을 사라

진심으로. 이 기기는 정말 멋지다. 읽기에는 너무 좋고, 다른 문서를 킨들로 보내서 읽기 쉽게 하기 위해 (전문 저널 스타일 형태의 PDF 폼으로 매우 멋지게) 변환할 수 있다. 베터리는 정말 오래 가고, Amazon의 책 모음도 훌륭하다. 책을 많이 읽는 다면 킨들이 필요하다. 단지 139달러이다.
Google Docs를 이용하라

모든 PDF 소백서, eBook, PDF 메뉴얼 등 내가 인터넷에서 (읽기용으로 또는 참고용으로) 찾은 모든 것은 Google Docs에 저장되어 있다. Google Docs는 훌륭한 오피스 툴 셋으로 모든 시스템에서 동일하게 동작하기 때문에 "아, Mac에 저장해놨는데 지금은 Windows를 사용하고 있네"와 같은 헛소리 신경 쓸 필요가 없다. 그냥 동작한다. 파일들은 Google의 서버에 안전하게 저장되어 있고(나는 이것이 매우 좋다고 생각하지만, Google의 시스템에 어떤 것을 저장한다는 것에 대해서는 생각이 다를 수도 있다), 완벽히 검색이 가능하다. 오피스 관련으로만 제한된 것도 아니다. 나는 PDF, 중요한 압축 파일, 그리고 정말 안전하게 저장되고 쉽게 접근할 수 있을 필요가 있는 모든 것들을 저장한다.
붐!
이제 끝! 이것들이 비밀의 전부이다. 물론 사실 이것이 비밀은 아니다. 하지만 나는 이점 들이 내가 소프트웨어 분야에서 좋은 성과를 낼 수 있도록 도와줬다고 생각한다. 아마도 이것들은 당신 또한 도와줄 수 있을 것이다.

댓글을 달아 주세요

IT/Mobile Platforms | Posted by 철규님(최규철) 2011. 4. 8. 00:34

Android Architecture Overview


Android Architecture Overview
Written by GyuCheol Choi on April 08, 2011



플랫폼? OS? 프레임워크?

안드로이드에 대한 설명에 앞서서, 필요한 몇 가지 용어를 정의하고 시작하려고 한다. 크게 중요하게 느껴지지 않을지도 모르는 용어 정의이지만 다른 개발자, 특히 외국 개발자와의 명확한 의사 소통을 위해서는 용어의 정확한 뜻, 정확한 사용법 등을 아는 것이 많은 도움이 된다(고 필자는 생각한다).

스마트폰이 보급되에 스마트폰용 어플리케이션 작성에 대한 관심이 어느 때보다 높아지고 있는 최근, 개발을 시작하려고할 때에 가장 먼저 듣게 되는 용어를 뽑으라면 '운영체제(OS)', '프레임워크', '플랫폼' 등일 것이다. 이 용어들에 대해 간단하게 알아보자.


운영체제(operating system)

운영체제는 CPU, 메모리, I/O 장치, 저장장치 등의 하드웨어 자원을 직접 관리할 뿐만아니라, 응용 프로그램이 이들 하드웨어 자원을 손쉽게 사용할 수 있도록하는 추상화 계층을 제공하는 시스템 소프트웨어를 말한다. 또한 응용 프로그램이 하드웨어의 CPU에서 직접 수행될 수 있도록하는 역할도 한다. 멀티태스킹을 지원하는 운영체제의 경우에는 동시에 실행되고 있는 여러 개의 응용 프로그램에 대한 자원 관리나 스케줄링 등의 기능도 지원한다.

대표적인 PC 운영체제로는 Microsoft Windows, Linux, Max OSX 등이 있다.


프레임워크(framework)

프레임워크는 정확한 의미를 가장 알기 힘든 용어 중의 하나라고 생각된다. 응용 프로그램 개발 과정을 살펴보면 각종 응용 프로그램에서 유사한 형태의 기능을 사용하는 경우가 많은데, 이 경우 개발자의 부담을 덜어주기 위해 프레임워크에서는 해당 기능에 필요한 API들을 묶어서 제공한다. 일반적으로는 이러한 API 집합 들을 프레임워크라고 본다. 물론 정확한 의미를 따지면 단순히 API 뿐만 아니라 코딩 패턴 등을 포함하기도 한다.

개발자의 입장에서는 라이브러리와 유사하다고 느낄 수도 있지만, 프레임워크는 그 프레임워크를 사용하는 응용 어플리케이션의 틀과 구조를 결정하며, 라이브러리와는 반대로 개발자의 코드를 직접 제어할수 도 있다.


플랫폼(platform)

위키백과(http://ko.wikipedia.org)의 내용을 요약하면 플랫폼은 '응용 프로그램의 동작을 가능하게 하는 하드웨어 아키텍처와 소프트웨어 프레임워크'를 말한다. 구체적으로 플랫폼은 '하드웨어 아키텍처, 운영체제, 프로그래밍 언어, 런타임 라이브러리, GUI' 등을 포함한다. 즉, 안드로이드 플랫폼이라고 한다고 해서 구글에서 배포하는 '안드로이드'만을 의미하는 것이 아니라, 그 안드로이드가 동작하기 위해 필요한 하드웨어 아키텍처부터 안드로이드 응용 프로그래밍 작성을 위한 개발 환경, 안드로이드가 사용자에게 보여지는 GUI까지 모두 포함한다.

예를 들어 설명을 하면, PC 플랫폼은 Intel 또는 AMD CPU를 기반으로 하는 하드웨어 아키텍처에 윈도우나 리눅스가 운영체제 및 GUI 지원을 위해 올라가고, 윈도우 및 리눅스용 응용 프로그램 개발/실행을 위한 라이브러리나 개발 툴 등을 포함한 것이라 할 수 있다.

대표적인 휴대용 기기 플랫폼은 iOS, 안드로이드, 바다 등을 들 수 있는데, 대부분 ARM CPU를 기반으로 하는 아키텍처를 채용하고, 각각의 OS 및 SDK 등을 제공한다.


명확하게 정리되지는 않지만, 위의 내용을 토대로 운영체제, 프레임워크, 플랫폼에 대해서 정리를 해보면, 플랫폼이 운영체제와 프레임워크를 포함한다는 것을 알 수있다. '안드로이드 플랫폼'을 예로 들면, 이 '플랫폼'은 ARM CPU를 기반으로 한 하드웨어 아키텍처 위에 리눅스를 '운영체제'로 탑재하고, 응용프로그램 작성 및 실행을 위한 어플리케이션 '프레임워크'들 을 포함하고 있다.

각각의 구성 요소에 대해서는 아래에서 자세히 설명하려고 한다.





안드로이드 플랫폼 아키텍처(Android Platform Architecture)

안드로이드 플랫폼 아키텍처에 대해서는 구글 안드로이드 개발팀의 Mike Cleron이 설명한 동영상 강의가 있다. 아래 링크에서 직접 볼 수 있으며, 아래 글의 내용도 이 동영상 강의 중의 일부를 정리한 것이다.

[동영상 바로가기] Androidology - Part 1 of 3 - Architecture Overview


System architecture

전체적인 구조를 먼저 살펴보기 위해 다음 그림을 보자.


안드로이드 플랫폼은 운영체제로 Linux Kernel을 사용하고 있으며, 이 위에 Library, Android Runtime, Application Framework, Application 등을 포함하고 있다.



Linux Kernel


안드로이드 플랫폼은 Linux 2.6 커널을 기반으로 하고 있으며, 이 리눅스를 HAL(Hardware Abstraction Layer)로 사용하고 있다. 안드로이드 플랫폼에서 리눅스를 채택한 이유는 이미 각종 드라이버에 대한 지원이 충분하고, 메모리 관리, 프로세스 관리, 보안 모델, 네트워킹 등 많은 운영체제 기본 요소들이 이미 구현되어 있고 또한 충분한 시간 동안 검증을 받았기 때문이다.



Libraries

안드로이드 플랫폼에 포함된 라이브러리들은 모두 C나 C++로 작성되었다. Mike는 이 부분이 안드로이드 플랫폼의 강력함의 원천이라고 설명한다.


Surface manager: 실행되는 여러 어플리케이션이 화면에 어떻게 나타나는지를 관리한다.
OpenGL/ES, SGL: 안드로이드 플랫폼 그래픽 라이브러리의 핵심. OpenGL/ES는 3D 그래픽을 지원하며, 장치에 따라 H/W 가속 기능 또한 지원한다. SGL은 대부분의 어플리케이션이 사용하는 2D 그래픽을 위한 것이다. 안드로이드 플랫폼의 그래픽 라이브러리 특징 중 흥미로운 점은 한 어플리케이션에서 3D 그래픽과 2D 그래픽을 혼합해서 사용할 수 있다는 점이다.
Media Framework: Media Framework는 OHA(Open Handset Alliance)의 회원인 PacketVideo에서 지원되는 라이브러리로, 미디어 지원을 위한 각종 코덱을 포함하고 있다.
FreeType: Font를 그려주기 위한 라이브러리
SQLite: Data 저장
WebKit: 구글 브라우저의 코어로 사용되고 있는 오픈 소스 브라우저 엔진으로 모바일 장치의 작은 화면에서도 잘 동작하도록 수정되어 있다.



Android Runtime


Dalvik Virtual Machine: .Class, .Jar 파일을 변환(converting)해서 얻어지는 바이트코드(bytecodes)인 .dex 파일을 실행한다. .dex 파일은 저성능 프로세서(small processor)에서도 잘 동작하도록 효율적인 메모리 사용, 프로세스간 데이터 공유를 위한 자료구조 등을 지원한다. 이러한 효율성 덕분에 Dalvik Virtual Machine은 동시에 여러개의 인스턴스를 실행해서 어플리케이션을 실행할 수 있다.
Core library: Java 언어로 쓰여진 부분으로, Container, Utility, I/O 등 필수적인 기능을 제공한다.



Application Framework

Core library와 마찬가지로 Java 언어로 쓰여진 부분으로, 실제로 대부분의 어플리케이션이 사용하는 툴킷이다.


Activity manager: 어플리케이션의 Life Cycle을 관리하고, common backstack을 포함하고 있어서 다른 프로세스에서 실행 중인 어플리케이션들간의 원활한 이동(navigation)을 지원한다.
Package manager: 장치에 어떤 어플리케이션들이 설치되어 있는지, 각각의 어플리케이션이 어떤 기능을 수행하는지를 관리한다.
Windows manager: 화면에 보이는 Window를 관리하는 부분으로 Library 부분의 Surface manager에 대한 Java 추상화 모듈이라고 볼 수 있다.
Telephony manager: 전화 기능 지원을 위한 API들을 포함하고 있다.
Content provider: 안드로이드 플랫폼의 특이 사항 중 하나로, 어플리케이션간의 data 공유를 가능하게 해주는 역할을 한다. 폰의 전화번호부(contacts) 어플리케이션이 Content manager를 사용하고 있어서, 전화번호나 이름 등의 데이터를 필요로하는 어플리케이션에서는 이를 이용해서 데이터를 가져다 쓸 수 있다.
Resource manager: 지역화된 문자열, 비트맵/벡터 이미지, 레이아웃 정의 파일 등 어플리케이션에서 코드 이외의 부분을 관리한다.
View system: 버튼, 리스트 등과 같은 UI 구성 요소를 제공하며, 이벤트 dispatching, 레이아웃, 드로잉 등을 관리한다.
Location manager: GPS 등을 이용한 위치 기반 서비스에 필요한 기능을 제공한다.
Notification manager: 상단의 Notification bar를 사용할 수 있게 해준다.
XMPP service: XML을 기반으로 한 메세지 기반 미들웨어를 위한 오픈 표준 통신 프로토콜인 XMPP(eXtensible Message and Presence Protocol)을 제공한다.



Applications


전화걸기, 전화번호부 등 기본 어플리케이션 및 사용자 설치 어플리케이션이 위치하는 부분으로, 모든 어플리케이션은 바로 아래의 Application framework에서 제공하는 기능을 이용하여 만들어진다.




한두페이지의 글로 하나의 플랫폼에 대한 이해를 한다는 것은 불가능한 일이지만, 간략하게 안드로이드 플랫폼의 기본 구조에 대해서 정리해 보았다. 일반적인 사용자 어플리케이션을 작성하는 개발자라면 특별히 몰라도 되지만, 아는 만큼 더 나은 어플리케이션을 작성할 수 있지 않을까 생각한다.


댓글을 달아 주세요

  1.  댓글주소  수정/삭제  댓글쓰기 소혼 2011.04.20 09:09 신고

    추가로 WebOS가 뭔지 정리 부탁해도 되까? ㅋㅋ