2015년 7월 24일 금요일

HTML5 Intermediate 5일

* 서버와 클라이언트의 MVC 모델


* Client의 MVC 모델을 구현한 라이브러리: Backbone, Angular JS.

* JS는 모든 것이 객체이다. function 도 객체임.
- 함수, 변수 등을 선언하면 window 객체의 멤버가 되어 Global하게 사용할 수 있음.

* 일반 JS 메소드에서 this는 window 객체임. --> window를 생략할 수 있으므로 함수처럼 보이는 것임.
- 엄밀히 말하면 JS에서는 함수라는 것이 없음. 함수처럼 보이는 애들은 모두 메소드이며 특정 경우 객체를 생략할 수 있으므로 함수로 보이는 것임.
- 생략된 객체는 경우에 따라 달라짐. 보통의 경우는 windows 객체이며, Worker의 JS 파일에서는 Worker를 의미함.
- Worker JS에 다음과 같은 코드가 있다고 할 때 postMessage()는 worker의 것을 호출함.
function loadHandler() {
if( xhr.status === 200 ) {
/* 여기서 this는 xhr 객체임. 따라서 this.postMessage()로 호출하면 안됨. */
postMessage( new Protocol(2, xhr.responseText) );
}
else {
postMessage( new Protocol(2, '통신 오류 발생: ' + xhr.status) );
}
}
xhr.addEventListener('load', loadHandler);
-

* 이벤트 핸들러에서 this를 사용하면 그 이벤트 핸들러를 추가한 객체를 의미함.
- btn.onclick = function() { this. ~ } ==> this는 btn임.

* 서버와 통신 방식 비교

방식Req-ResAsyncbidirection
formXXX
AJAXOX
Web SocketOOO

* Web Socket은 클라이언트의 표준임.

* Web Socket은 기본적으로 utf8을 이용함.

* Web Socket 서버 라이브러리 JavaDoc (tomcat 7.0)
- http://tomcat.apache.org/tomcat-7.0-doc/websocketapi/index.html

* Web Socket Binary 통신은
- AJAX에서 파일을 주고 받을 때와 같이 사용됨.
- blob 이라는 놈을 사용해야 함.

* 포커스를 잃을 때 발생하는 이벤트: blur
* 포커스를 얻을 때 발생하는 이벤트: focus

* Drag & Drop 하려면 draggable 속성이 true이여야 함. 이 속성은 모든 Tag에 적용될 수 있음.



저작자: Yes, 상업적 이용: No, 컨텐츠 변경: No

2015년 7월 23일 목요일

HTML5 Intermediate 4일

* 팝업창에서 부모 창을 나타내는 객체: window.opener
- 부모 창에서 iframe 윈도우 객체: iframeTag.contentWindow
- 부모 창에서 팝업창 윈도우 객체: 
--> window.open(URL, name, features, replace)의 리턴값이 팝업창의 윈도우 객체임.
- 각 윈도우 객체의 postMessage()로 해당 윈도우에게 메시지를 보낼 수 있음.

* Cross Domain
- 보낼 window의 핸들을 얻을 수 있는 경우에만 가능

* Web Worker
- worker thread는 웹 페이지에서 발생하는 이벤트를 받거나 직접 핸들링 할 수 없음.
- worker thread에는 window 객체가 없음 --> UI 작업에 제한이 따름.
- 메인 쓰레드에서 사용자 인터페이스 및 UI 작업을 하고 오래 걸리는 작업 등을 worker thread로 처리.

* BOM : Browser Object Model. 자바스크립에서 브라우저를 핸들링하기 위하여 제공되는 객체의 모델.
- window: 다음의 브라우저 관련 객체를 제공
-- document
-- location
-- history
-- navigator
-- screen

* Main 스레드 <--> Worker 쓰레드 간 통신: Cross-Domain의 API와 동일하게 사용할 수 있음.
- postMessage() 할 때 객체 자체를 보낼 수 있음. 어짜피 같은 브라우저에서 실행되는 것이므로 가능.

* 일반 함수에서 this는 window 객체임. Worker용 JavaScript 파일에서 this는 Worker임.

* Worker 스레드에서 사용할 수 있는 window 객체
- XMLHttpRequest
- create other web workers --> 권장하지 않음.
- applicationCache : offline web cache 기능 제공 객체. 서버와의 데이터 동기화 작업을 수행함.
- navigator : 브라우저 자체의 정보 제공 객체. Worker에서는 geolocation 정보는 가져올 수 없음.
- location : 브라우저의 주소창. 이를 이용하여 URL 정보 등을 알 수 있음. Worker에서는 페이지 전환을 시킬 수 없음.
- setTimeout method
- clearTimeout method
- setInterval method
- clearInterval method
- importScripts method : importScripts('경로명', '파일명', '경로명', '파일명', ....)

* GET 방식에서 파라미터에 한글을 지원하려면
- Tomcat 서버의 server.xml 파일에서 <Connector> 부분에 URIEncoding 방식을 추가해야 함.
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8" />

* Web Cache
- window.applicationCache 존재 여부로 지원 여부를 알 수 있음.
- Manifest 파일을 생성: Cache할 정보를 담고 있음.
- <html manifest='notes.manifest'> 와 같이 지정하면 notes.manifest를 브라우저가 받아 옴.
- Web Cache되는 컨텐츠는 동일 서버에 있는 것만 가능함.
- 외부 리소스를 참조하는 경우라면 로컬 서버에 가져다가 놓아야 함.
- manifest 파일은 다음과 같아야 함.
CACHE MANIFEST <-- 꼭 이 문장으로 시작
# v = 1.0.0 <-- 버전 정보. 이 값이 바뀜에 따라 캐싱이 다시 이루어짐.
./style.css <-- 여기부터 캐시할 리소드들을 쭉 나래비 함.
./notes.js
- <html manifest='notes.manifest'> 가 등록된 HTML 파일 당연히 캐시됨으로 위에 명시할 필요 없음. 명시해도 됨.
- 개발자 도구 다음에서 확인 가능.
- window.applicationCache의 update()를 호출해야 변경 내용을 새로 받음.
- Web Cache을 이용할 때는 업데이트 가능한 상태로 컨텐츠를 배포해야 함. 중요!!!
- Offline에서 Online이 되는 순간 업데이트 되도록 할 수 있음. navigator 객체 이용. navigator.onLine로 Online 여부를 확인할 수 있음.
- window.addEventListener('online', onlineHandler); 이용하여 Online으로 바뀌었는지 여부 확인 가능


저작자: Yes, 상업적 이용: No, 컨텐츠 변경: No

Eclipse에 등록된 Tomcat 서버 설정 변경

Servers 창에서 등록된 서버 더블 클릭하면 다음과 같은 Tomcat 설정 화면이 나타남.
이 화면에서 포트 등 설정을 변경할 수 있음.




저작자: Yes, 상업적 이용: No, 컨텐츠 변경: No

2015년 7월 22일 수요일

HTML5 Intermediate 3일

* Web Cache: Offline에서도 Web App을 사용할 수 있도록 데이터를 저장하는 기능
--> Client Storage로 가능해졌음.

* localStorage의 값 navigation: localStorage.lengh, localStorage.key(index) 이용.

* localStorage의 변경 이벤트
- window.addEventListener('storage', onChanged);
- function onChanged(event) { ... }
- event의 속성 중 key, oldValue, newValue, url(변경한 URL) 이용

* localStorage 데이터 저장 위치: Chrome Windows의 경우
- C:\Users\icore\AppData\Local\Google\Chrome\User Data\Profile 1\Local Storage
- 버전 및 사용자에 따라 조금 달라지.

* Custom Attribute:
- XXX.setAttribute('data-id', value) 와 같이 지정
- 단, 'data-'로 시작하여야 함.
- 설정: setAttribute(key, value)
- 값 가져오기: getAttribute(key), XXX['data-YYY']와 같이 사용할 수 없음.
- 제거: removeAttribute(key)

* 태그의 형태 구분: 다음 참조.
var notesClickHandler = function(event) {
/* 자식 노드 중 li 태그만 처리하고자 할 경우 아래와 같이 함.
* event.target : 실제 이벤트를 발생시킨 객체
* contructor 속성이 객체를 생성하기 위한 모든 정보를 가지고 있음.
*/
if(event.target.constructor === document.createElement('li').constructor) {
loadNote(event.target.getAttribute('data-id'));
}
};

* Indexed DB
var req = window.indexedDB.open('simpleDB', 1); /* (이름, 버전) */
/* 세 개의 이벤트 핸들러 */
req.addEventListener('success'); /* 정상적으로 오픈한 경우 */
req.addEventListener('upgradeneeded'); /* 생성하려는 DB가 없는 경우 발생. */
req.addEventListener('error'); /* 오픈 시 오류가 발생한 경우 */




저작자: Yes, 상업적 이용: No, 컨텐츠 변경: No

2015년 7월 21일 화요일

HTML5 Intermediate 2일

audio 태그 예제

* addEventListener의 마지막 인수 : event bubbling, event capturing 여부 지정.
- bubbling 시 자식이 이벤트를 처리해도 부모에게 전파됨.

* 객체의 속성 존재 여부 판단: if( navigator.geolocation ) --> if( 'geolocation' in navigator )

* JavaScript에서
- 100 OR 200 ==> 100 - 처리과정: 100 --> OR --> 끝 ==>100
- 100 AND 200 ==> 200 - 처리과정: 100 --> AND --> 200 --> 끝 ==> 200

* Client Storage
1. Web Storage: Key-Value 형태. 복잡한 데이터를 담기에는 역부족.
2. Web SQL: 크롬과 사파리에 구현되어 있으며 sqllite3로 구현. 특정 제품에 종속된다는 이유로 HTML5 표준 스펙에서 빠짐. 모질라 계열(파이어 폭스)에서 반대함.
3. Indexed DB: Web SQL이 스펙에서 빠지면서 포함됨. 객체 저장소 제공. 저장된 객체에 인덱스를 부여하여 빨리 찾을 수 있도록 함.

* Web Storage:
- localStorage: 도메인 별로 값을 영구 저장하는 저장소. 변경 이벤트 제공 --> 동기화 작업 가능. 같은 도메인의 여러 어플리케이션에서 공유할 수 있음.
- sessionStorage: 임시 저장소. 한 어플리케이션에서 사용하는 임시 데이터. 다른 어플리케이션에서 이 값을 읽을 수 없음. Browser를 닫았을 때 값이 없어지며, 같은 Browser 인스턴스에서 F5로 갱신하거나 다른 곳에 다녀와도 지워지지 않음.
- 둘 다 window 객체의 속성으로 제공됨.
- 둘을 사용하기 위한 API는 동일함.
- 기본적인 API
-- storage.setItem(key, value) : 데이터 저장. key는 문자열, value도 문자열.
-- storage.getItem(key) : 데이터 반환
-- removeItem(key) : 데이터 제거
-- clear() : 데이터 모두 제거. 주의해서 사용해야 함!!

* window 객체의 메소드 및 속성을 사용할 때는 'window.' 쓰지 않아도 됨.

* JavaScript 객첵 생성 방법
1. 암시적 방법
var obj = { name: '홍길동', age: 24, married: true }

2. 명시적 방법
function People() {
  this.name = '홍길동';
  this.age = 24;
  this.married = true;
}
var obj = new People();

* JSON --> Object : JSON.parse(JSON 문자열)
* Object --> JSON : JSON.stringify( object )

* JavaScript의 Type: 총 6가지임
- Primitive Type: string, number, boolean
- Reference Type: function, object(Array 포함)
- undefined
- 이 중 function, undefined는 JSON으로 표현 안됨.

저작자: Yes, 상업적 이용: No, 컨텐츠 변경: No