반응형

혁신적인 아키텍처와 창발적 설계: 언어, 표현성 및 설계, Part 1


코드의 표현성을 개선하여 창발적 설계를 가능하게 하는 방법

Neal Ford, 소프트웨어 아키텍트, IBM

요약: 창발적 설계의 경우에는 관용적 패턴을 찾아서 개선하는 기능이 중요합니다. 또한, 설계하는 데 있어서는 코드의 표현성이 매우 중요합니다. 두 개의 파트로 구성된 이 기사에서 Neal Ford는 표현성과 패턴의 교차점을 논의하고 관용적 패턴과 정규 설계 패턴을 사용하여 이러한 개념을 설명합니다. 그는 JVM용 동적 언어의 고전적인 네 가지 패턴 중 일부를 수정하여, 모호한 언어로 인해 불명료해진 설계 요소를 표현성이 우수한 언어를 이용하여 어떻게 파악할 수 있는지 설명합니다.


반응형
반응형

HTML5 기초, Part 3: HTML5 API의 기능

출처 : http://www.ibm.com/developerworks/kr/library/wa-html5fundamentals3/index.html#web-workers
 HTML5는 웹과 클라우드에서 현재 독자가 비즈니스를 하는 방식 면에서 획기적인 변화를 반영합니다. 이 기사는 HTML5의 변화에 대한 관심을 끌기 위해 구성되었으며 총 네 파트로 소개되는 시리즈 중 세 번째 파트입니다. 새 태그와 페이지 구성을 시작으로, 웹 페이지 설계에 대한 높은 수준의 정보, 양식의 작성, API의 사용 및 가치, 마지막으로 Canvas가 제공하는 창의적인 기회를 제시합니다. 이번 기사에서는 함수를 시연하는 예제 페이지를 사용하여 HTML5 API를 소개합니다.

목차


반응형
반응형

Web workers 사용하기


이 글은 bespin 프로젝트에서 Web Workers를 이용하여 많은 대단한 기능들을 구현한 Malte Ubl가 작성한 글입니다.

최근들어 웹어플리케이션의 사용자 경험(UX)는 점점 더 화려하고 풍부하게 발전되어 왔습니다. GMail, Meebo 그리고 Bespin같 은 브라우저 안에서 동작하는 어플리케이션들은 미래의 웹이 어떻게 보여지고 느껴질지에 대한 그림을 보여주고 있습니다. 좋은 사용자경험(UX)을 완성하는데 있어 중요한 요소중에 하나가 사용자의 동작에 빠르게 반응하는 어플리케이션을 만드는 것입니다. 사용자는 어플리케이션이 한동안 어떤일을 수행하면서 사용자의 반응에 응답하지 못하고 멈춰있는 동안의 기다림을 싫어하기 때문이죠.

자바스크립트 프로그래밍 언어는 현대 클라이언트 기반 웹 어플리케이션의 핵심이라고 할 수 있습니다. 자바스크립트와 DOM은 본래 단일 스레드로 동작합니다. 이것은 자바스크립트가 어떤 특정 시점에 오직 하나의 일만 수행할 수 있다는 의미입니다. 32개의 코어를 가지고 있는 컴퓨터라 할지라도 오래 걸리는 연산을 수행할때 여전히 그 중의 하나의 코어만 사용된다는 것입니다. 예를 들어, 달로 가는 최적의 궤적을 계산하여 화면에 그 궤적을 애니메이션으로 보여주는 어플리케이션에서 궤적을 계산하는 동안은 동시에 그 궤적의 애니메이션을 화면상에 보여줄 수 없다는 것입니다. 그뿐만 아니라 계산 도중에는 마우스 클릭이나 키보드 입력에 전혀 반응 할 수도 없는 것이죠.

동시성(Concurrency)

동시성은 집중적인 계산을 수행중에도 반응성을 유지하기 위한 방법으로 사용되어 지는 최근 현대 프로그래밍 언어의 한 부분입니다. 예전에는 종종 스레드를 사용하여 동시성을 처리하였습니다. 그러나 스레드의 경우 다수의 다른 스레드에서 동시에 같은 데이타를 처리할때 매우 난해한 오류나 복잡한 현상을 자주 일이켜 프로그래머로 하여금 프로그램 흐름의 이해를 어렵게 만들기도 합니다.

WHATWG으로 부터 추천되고 Firefox 3.5에 추가된 WebWorkers는 멀티스레딩을 이용한 프로그램에서 야기되던 문제들 없이도 동시성을 자바스크립트 어플리케이션에서 동작하도록 해줍니다. 사용법은 쉽습니다. 단지 Worker 인터페이스를 사용하기만 하면 됩니다.

아래의 예제에서 worker.js 파일이 로드되고 코드를 실행하기 위해 새로운 스레드가 생성될 것입니다.

// Start worker from file "worker.js"
var worker = new Worker("worker.js");

주 화면 스레드와 workers 사이의 정보교환은 postMessage 함수를 이용하여 정보를 전달함으로 이루어집니다. postMessage는 다수의 윈도우간의 정보교환을 목적으로 Firefox3에 추가되었습니다. worker에서 페이지로 정보를 보내기 위해서는 단순히 메시지를 보내기만 하면 됩니다.

// Send a message back to the main UI thread
postMessage("Hello Page!");

worker로 부터 메시지를 받기 위해서는 worker 오브젝트에 “onmessage” 콜백을 등록해야합니다. 여기에 콜백 함수로 전달되는 이벤트 데이타를 경고창으로 보여줍니다. 이 경우 “event.data”는 위 예제에서 보내진 메시지인 “Hello Page!” 문자를 가지게 됩니다.

worker.onmessage = function (event) {
  alert(event.data);
  // Send a message to the worker
  worker.postMessage("Hello Worker");
}

worker에 메세지를 전달하기 위해서 worker 오브젝트의 postMessage를 호출합니다. worker안에서 메세지를 받기 위해서 onmessage 함수를 정의하면 메세지가 worker로 전달될때마다 이 함수가 불리게됩니다.

에러 핸들링

worker에서 발생할 수 있는 실행 오류를 처리할 수 있는 방법으로 두가지가 있습니다. 첫째는 worker안에 onerror 함수를 설정하는 것과 둘째로 worker 외부에서 onerror 핸들러를 설정하여 오류를 처리하는 것입니다.

worker.onerror = function (event) {
  alert(event.message);
  event.preventDefault();
}

event.preventDefault() 함수는 기본 동작을 수행하지 않도록 막는 역할을 합니다. 예를 들어 오류가 발생했을때 유저들에게 오류 메시지를 보여주거나 최소한 오류 메세지 콘솔에 보여주는 기본 동작을 막는 것입니다. 여기 예제에서는 기본 동작 수행 대신 경고만 하는 것을 보여줍니다.

아무것도 공유하지 않음

workers는 그와 연계되어 있는 페이지나 다른 workers들과 상태값을 전혀 공유하지 않습니다. 그들이 서로 소통할 수 있는 유일한 방법은 postMessage를 이용하는 것입니다. 또한 workers는 DOM에 대한 접근 권한이 없어서 직접 웹페이지를 조작할 수가 없습니다. 따라서 여러 workers가 동시에 같은 데이터를 조작하려고 할때도 데이터 무결성에는 전혀 문제의 위험이 없다고 할 수 있습니다.

workers를 이용한 표준 설치는 유저 이벤트를 처리하는 여러개의 자바스크립트 응용 페이지들로 구성되어 있을 수 있습니다. worker에게 집중적인 계산을 하라는 메세지가 발생하면 worker는 계산을 시작합니다. 그렇더라도 페이지의 스크립트는 바로 중지하고 다른 유저 이벤트들을 들을 수 있게 됩니다. worker가 계산을 마무리하는 즉시 결과값을 표시하는 페이지에 결과 값 반환 메세지를 보낼 수 있습니다.

스크립트가 수행을 하는데 오랜 시간이 걸릴때면 브라우저가 보여주곤 했던 무반응 스크립트에 대한 경고는 web workers를 사용할 경우 옛말이나 다름없게 되었습니다.

피보나치 예제

다음은 0부터 99까지 피보나치 수를 백그라운드에서 계산을 하는 worker의 예제입니다. 사실 굉장히 비효율적인 방법으로 비교적 큰 숫자(30보다 큰)의 피보나치 숫자를 계산을 할 경우 시간이 매우 오래걸리기 때문에 스크립트가 당신의 컴퓨터에서 절대 끝나지 않을 수도 있습니다.(아니면 스택 오버플로우로 멈춰버리거나) 그러나 worker안에서 이를 수행할 경우 메인 웹 페이지의 반응성에는 전혀 영향이 없습니다. 따라서 당신은 다음 숫자를 기다리는동안 약간의 재미요소로 복잡한 애니메이션도 그릴 수 있습니다.

이 HTML 페이지는 “fib-worker.js” 파일에 worker를 실행 시키는 스크립트를 포함하고 있습니다. worker에서 나오는 메시지는 console.log를 통해 브라우저의 콘솔창에 표시됩니다.

<!DOCTYPE html>
<html>
    <head>
      <title>Web Worker API Demo</title>
      <script type="text/javascript">
        var worker = new Worker("fib-worker.js");
        worker.onmessage = function (event) {
          console.log(event.data.index +" -> " + event.data.value)
        }
      </script>
    </head>
    <body>
    </body>
</html>

worker가 구현되어 있는 자바스크립트는 피보나치 숫자를 계산하고 결과를 페이지에 전송하는 루틴을 포함하고 있습니다.

// File fib-worker.js
function fib(n) {
   return n < 2 ? n : fib(n-1) + fib(n-2);
}

for(var i = 0; i < 100; ++i) {
   postMessage({
      index: i,
      value: fib(i)
   })
}

위에 예제에서 우리는 postMessage로 복잡한 오브젝트를 전달할 수 있는 것을 볼 수 있습니다. 이 오브젝트들은 JSON을 통해 전달될 수 있는 모든 것을 포함할 수 있습니다. 이는 함수는 worker의 경계를 가로질러 전달될 수 없으며 오브젝트는 reference가 아닌 value에 의해 전달된다는 뜻입니다.

Worker APIs

worker는 importScripts라는 함수를 지원합니다. 이것은 더 많은 소스 파일을 worker에 로드할때 사용할 수 있습니다.

importScripts("file.js");
importScripts("foo.js", "bar.js");

여러 파라미터를 함수에 전달할때 스크립트는 동시에 다운로드 되어지나 실행은 명시된 순서에 의해 되어집니다. 이 함수는 모든 스크립트가 다운로드되고 실행되기 전까지 리턴하지 않습니다.

여기서 우리는 문자열로부터 SHA-1 해쉬 합을 계산하는 외부 자바스크립트를 로드하여 AJAX 요청으로 부터 해쉬 결과를 얻는데 사용합니다. 또한 onmessage 이벤트를 통해 전달되는 URL 정보를 받기 위해 표준 XMLHttpRequest 객체를 사용하는데 흥미로운 점은 worker 스스로가 페이지 렌더링을 함에 있어 비동기적으로 동작하므로 굳이 AJAX 요청을 비동기적으로 처리하는 것에 대한 걱정을 할 필요가 없다는 것입니다. 그러므로 HTTP 요청을 위한 약간의 기다림이 크게 문제 되지는 않을 것입니다.

importScripts("sha1.js")

function onmessage(event) {
    var xhr = new XMLHttpRequest();
    xhr.open('GET', event.data, false);
    xhr.send();
    postMessage(sha1(xhr.responseText));
}

Workers에서 사용 가능한 다른 API들

위 예제에서 본것 처럼 workers는 AJAX 요청을 위해 XMLHttpRequest를 사용할 수 있으며 web storage API를 사용하여 클라이언트의 데이타베이스를 접근할 수도 있습니다. 여기서 사용된 API들은 일반 자바스크립트의 사용법과 거의 동일할 것입니다.

현재 브라우저에 대한 정보를 확인할 수 있는 객체로 잘 알려진 navigator object처럼 일정 시간 이후나 특정 시간 간격으로 코드를 실행 할 수 있도록 하는 setTimeout, setInterval (그리고 clearTimeout과 clearInterval) 함수도 worker 안에서 사용이 가능합니다.

더 많은 API들은 이후에 추가될 것입니다.

브라우저 호환성

이 글을 쓰는 시점에는 Firefox 3.5가 post Message를 통해 복잡한 객체를 전달할 수 있는 기능을 지원하고 위 예시에 나와 있는 확장된 API들이 구현되어 있는 유일한 브라우저입니다. Safari 4는 Worker API 중에 매우 기본적인 것들만 구현되어 있습니다. 그 밖의 다른 브라우저는 일찍이 브라우저의 컨셉을 소개한 Google Gears를 통해 Worker 기능을 사용할 수 있습니다.

실 사용 예제

브라우저 기반의 소스 코드 에디터의 Bespin project 에서는 실시간 오류 검사 및 자동 완성 기능 등 CPU를 많이 사용하는 기능등을 worker를 이용해 성공적으로 구현하였습니다. 또한 Google Gears에 Worker API를 구현한 a shim 을 만들고 거기에 Safari 4에 빠져 있는 Worker 기능을 추가하였으며 postMessage 인터페이스 위에 transparent custom evnets를 사용하도록 하였습니다. 이 콤포넌트들은 후에 다른 프로젝트에서 사용할 수 있도록 단독 라이브러리 형태로 제공될 것입니다.

Web Workers는 정교한 어플리케이션을 위해 Open Web이 조금 더 강력한 플랫폼으로 자리 매김하는데 있어 중요한 역할을 할 것입니다. 왜냐하면 결국에 모든 것들은 자바 스크립트를 통해 처리되곤한느데 이런 스크립트가 web workers의 화려한 기능을 통해 클라이언트에서 쉽게 동작할 수 있기 때문입니다. 따라서 당장 오늘 당신의 어플리케이션에 이를 추가하여 사용자에게 조금 더 좋은 반응성과 즐거움을 느끼게 해주길 바랍니다.

원저자: Eric Shepherd – 원문으로 가기


반응형

'프로그래밍 > Web' 카테고리의 다른 글

[WEB] Sencha Touch Touch Charts Mobile HTML5 Charts  (0) 2011.08.30
[HTML5] HTML5 API의 기능  (0) 2011.08.21
[HTML5] 10 Web Workers  (0) 2011.08.21
[HTML5] Web Worker - HTML5 Rocks  (0) 2011.08.21
SSO (Single Sign-On) - 인증방식  (0) 2011.07.15
반응형

Web Applications 1.0

Living Standard — Last Updated 19 August 2011

반응형

'프로그래밍 > Web' 카테고리의 다른 글

[HTML5] HTML5 API의 기능  (0) 2011.08.21
[HTML5] Web Worker  (0) 2011.08.21
[HTML5] Web Worker - HTML5 Rocks  (0) 2011.08.21
SSO (Single Sign-On) - 인증방식  (0) 2011.07.15
[JSON] json text to json Object  (0) 2011.06.28
반응형

The Basics of Web Workers


http://www.html5rocks.com/en/tutorials/workers/basics/

반응형

'프로그래밍 > Web' 카테고리의 다른 글

[HTML5] Web Worker  (0) 2011.08.21
[HTML5] 10 Web Workers  (0) 2011.08.21
SSO (Single Sign-On) - 인증방식  (0) 2011.07.15
[JSON] json text to json Object  (0) 2011.06.28
[WEB] http://www.asciiflow.com/ - Ascii Flow Diagram  (0) 2011.06.21
반응형
페이스북 사진첩 : http://www.facebook.com/media/set/?set=a.264272026919217.76120.100000092649952&type=1

2011년 8월 14일 새벽 5시 응암동 본가에서 출발.
여주휴게소에서 커피한잔 마시고 기름 넣고, 계속 달려 치악휴게소에서 물한잔 먹고.
영주 소수서원 도착. 소수서원 둘러보고, 근처에 있는 영주 석교리 석불상 보고.



석교리 석불상은 과수원 사이에 있어서 길에서 찾기가 쉽지 않다. 근처 주민에게 물어서 찾아 봄,
부석사로 이동.
부석사는 공사중이고 안개로 그 멋진 풍광을 보지는 못했지만, 그래도, 배흘림 기둥 멋짐.



부석사 나와서 봉화 북지리 마애여래좌상(국보)를 봤다.
역시 국보 이구나 하는 생각이 들게 하는 불상이었음.

그 길로 나와 풍기를 지나서 영주 신암리 마애삼존석불을 보러갔다.
넓은 들판에 논 사이에 있는 석불도 보물로 지정되어 있다.


영주 시내로 이동. 2개 남아있는 불상은 시내에 있었다.
영주 가흥리에 있는 영주 가흥리 마애여래좌상은 큰 강변 도로 옆에 있다.

그 모습이 참 인상적이었다 . 강 건너편 마을을 내려다 보고 있는 느낌이 좋았다.
그 앞에 제단이 있어서 누군가 향을 피우고 밥도 올려두었다. 
영수 세무서 근처에서 점심을 먹고, 특산품이 들어간 음식은 아니었다.
식사 후 세무서 옆 영주 공공도서관내에 있는 영주 영주동 석불입상을 봤다. (영주리석불입상)



그 길로 고속도로가 아닌 국도로  죽령도로를 따라 단양으로 넘어갔다.
산 높은 굽이 길이 옛 선비들이 한양을 가기위해 힘들게 올라다녔음을 말해주고 있다.
죽령 고개를 넘으면 바로 단양.  단양 대강 하나로 마트에서 음료를 하나 사서 마시는데
강 건너편을 보니 오토캠핑복들이 와글와글 한것이 탠트촌이 아주 북세통이었다.

단양 대명리조트 옆에 있는 단양청소년 수련관에서 자유수영을~
둘이 합해서 입장료가 4000원.
50m레인에 사람도 별로 없고 한적하니 물놀이 기구를 제외하면 오션월드보다 더 좋더라.
1시간정도 수영을 하고 서울로 이동하기로 함.
고속도로가 아닌 국도로 이동( 단양 ~ 제천 ~ 충주 ~ 충북음성 ~ 일죽 ~ 이천)하다가
이천IC로 올라타서 동서울, 구리를 거쳐 집으로.
충북음성에서 이천 IC지날때까지 엄청난 폭우를 만나서 천신만고 끝에 서울로 왔다.







반응형
반응형


여행하면 성공한다
국내도서>자기계발
저자 : 김영욱,장준수
출판 : 라이프콤파스 2011.05.10
상세보기


반응형
반응형
전날 동네 엉터리 생고기에서 한우 반마리 드시고 급 취침. 아침 수영 마치고, 부여 박물관으로 고고씽. 부여박물관  특별기획전을 보기 위해서이다.  출발하고 삼청동 파리바게트 들려 빵과 커피를 산후 경부고속도로로 이동.
피서철 휴가 시작이라서 이른 시간인데, 차가 경부선에 무지 많다.

경부선에서 충남~논산간 고속도로로 옮겨타니까 차는 막히지 않았으나 갑자기 내리는 비로 깜짝 놀라고.
중간에 갈림목에서 잘 타야  엉뚱한데 안가고 부여로 잘 갈 수 있다.
부여 IC 를 지나니 완전 시골이~~~ 생각해보니 부여는 군소재지 이다.
백제의 수도였는데 참. 지금은 어렵군.

부여박물관에서 부여 마지막 부흥시대의 주인공 "무왕" 특별기획전을 보았다. 그렇게 크지 않지만 나름 의미는 있는듯. 서동요의 주인공이다.
제 2 전시실에서 봤던 국보 제287호 백제금동대향로는 감동이었다. 모조품도 아닐뿐더러 주조로 어떻게 그렇게 만들었는지 신기할 따름이다.


박물관을 나와 인근의 궁남지로 향했는데, 한창 축제중이었다. 연꽃이 그렇게 많을 줄이야~ 이 인근의 모든 사람이 다 모인듯하다. 나름 체험행사도 아기자기하게 연못 주변으로 잘 되어 있었다. 


연못 한 바퀴 걷고, 구드래돌쌈밥 집으로~ 돌솥밥인데 맛집은 아니지만 부여에서 오래 되었다기에 한번은 가봐야 할 거 같아서. 주물럭돌솥밥을 먹었다. 아뿔사, 다른건 다 국내산인데 돼지고기는 필리핀산.....

밥은 먹었고 이젠 어딜 가볼까 하다가, 날씨도 약간 흐리고 해서 대천 방향으로~
무량사로 향했다. 길 찾기가 좀 어려운. 올레 네비게이션으로 열심히 찾아서 겨우 도착.
낮은 계곡이지만 시원한 소리가 난다.
김시습부도도 있다는데, 뭐 일단 무량사 극락전으로~
무량사 극락전은 이층 누각으로 되어있으며, 얼핌 화엄사와 비슷한가 라는 생각도 해봤지만 아니란다. 극락전은 삼장보살탱 과 후불탱이 문화재로 지정되어 있다. 안에 들어가 절을 올리고 난후 앉아서 위를 올려다보니 정말 세월의 깊이가 느껴지는구나.
참, 입장료를 받는다.



그리고, 대천이 30km 이내의 거리에 있었지만 대천으로 가기엔 날씨가 별로여서 "성주사지"로 향했다. 처음에 네비로 검색했을때 "성주사"로 검색했더니 30분 정도 걸린다고 나오다가 "성주사지"로 검색하니까 10분도 안걸리는 거리이다. 성주사지에 도착해보니 정말이지 옛 절터는 정말 자리가 좋다는걸 다시 한번 느끼면서.
근처에 휴양림도 있고 정말 좋아보였다. 근데 이 근처에는 석탄이 나나보다. 뭔가 개울바닥이 시커먼건이 신기하다.
성주사지는 정말 대지가 넒고. 9000평 정도 된다고 한다.
대웅전의 계단 양식이 넓게 펴지는 형식이며 불상을 놓았던 단도 아주 큰것이 그대로 있었다.
보령이나 부여 이 근처에 온다면 꼭 한번은 들려봐야 할 곳이 아닌가 한다.



그렇게 짧은 여정을 마치고 집으로~ 보령을 지나 서해안 고속도로를 탔는데, 행담도 지나서 화성휴게서 부터 엄청 정체란다. 교통정보 표지판을 보니 발안 으로 나가라는데, 일단 발안IC 로 나와서 톨게이트에서 서울 어떻게 가냐고 물어보니 좌회전해서 신호등 4개 지나 비봉으로 향하란다. 그렇게 비봉으로 갔는데, 어떻하지 하고 생각하다 교차로를 지나쳤을때 군포, 안양 표지판이. ㅋㅋㅋ 서울까지 직진이다. 그렇게 9시 전에 집에 도착할수 있었다. 다음엔 요 라인을 이용해야 겠다.

짧은 부여여행. 끝.

Galley : http://www.facebook.com/media/set/?set=a.253641194648967.74095.100000092649952&type=1

2011.07.23 부여( 부여박물관 ~ 궁남지 ~ 무량사 ~ 성주사지  )








반응형

+ Recent posts