레이블이 Study인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Study인 게시물을 표시합니다. 모든 게시물 표시

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

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

2015년 7월 20일 월요일

HTML5 Intermediate 1일

* 주소 구성
http://localhost:8080/html5/hello.html
--> protocol://hostname:port/application/pathname
--> host = hostname:port
--> JavaScript의 location 객체에서 확인할 수 있음.

* URL: host + pathname

* Web Contents 종류
1. static: Web Application은 아님. 정적 컨텐츠 제공. Web Server에서 보통 제공
2. dynamic: Web Application.

* HTML 문서 제일 앞의 <!DOCTYPE html> --> 문서의 유형을 선언

* HTML 문서 구성
1. head: 문서에 대한 정보 제공. 사용할 수 있는 태그는 7가지임.
- meta: 정보 제공. 처리방식 지정
- title: 문서 제목
- link: 외부(혹은 내부) 리소스 연결. 필수요소: rel(형태), href(리소스 위치)
- style: CSS 형태의 View 형식 지정
- script: JavaScript 정의. body에서도 사용 가능
- noscript: JavaScript 사용이 Browser에서 disable 되어 있는 경우에 호출됨. JavaScript는 안된. body에서도 사용 가능.
- base: 로컬 서버 내 리소스의 기준 경로를 지정할 때 이용

2. body: 컨텐츠 제공.

* CSS 적용방식
1. External Style 적용
2. Internal Style 적용
3. Tag에서 Style 적용
--> 사용자 환경에 따른 선택적 View 제공
--> HTML은 View와 관련된 내용을 가지면 유지보수 및 다양한 사용자 환경을 지원할 수 없음.

* Multi-View 적용방법
1. Media Query
2. Navigator 객체 이용하여 user-agent의 정보를 활용함. 운영체제, Browser 정보, 단말기 이름 등.

* body 내 정의된 Script Tag는 정의된 순서에 따라 실행 순서가 결정됨. 해당 Tag Block이 로딩될 때 실행.

* Semantic Tag: header, footer, section, article, aside, nav. 문서의 구성(구조)할 때 사용.
- aside: 현재 컨텐ㅊ의 부가적인 정보 제공.

* Layout Tag: div, span

* href='#' --> dummy link 제공. 공백보다 #가 좋음

* 임의의 텍스트를 제공하는 사이트: http://lipsum.com/

* 대체 이미지 제공 사이트: http://place-hold.it/[width]x[height]

* 모든 Browser에서 제공하는 폰트: Serif, Sans-Serif, monospace

* Selector의 종류 56가지. 조합해서 사용가능.

* CSS 형태
- 선택자 { 스타일 } 과 같이 정의
- 배치나 Layout 관련된 Style은 개발자도 잘 알아야 함.

* 선택자 종류
- 태그 선택자: body, header, ...
- ID 선택자: #myFrom, ...
- Class 선택자: .myClass, ...
- 자손 선택자: body h1 --> 가운데 공백, body 및 body 자손 태그 밑에 있는 모든 h1 태그를 선택함.
- 자식 선택자: body > h1 --> body 바로 밑에 있는 h1 태그를 선택함.

* Web Font Service: 서버가 클라인언트에 제공하는 폰트. Browser에서만 사용되며 시스템에 설치되지는 않음.

* Style 지정 시 순서
margin: 1px 2px 3px 4px; --> top, left, bottom, right를 의미. top 부터 시계방향으로 지정됨.
margin: 0px auto; --> 상하, 좌우; auto는 좌우를 자동으로 조정하는 데 같이 맞추며 가운데로 배치되는 효과가 있음.

* display : [block | inline | none]
- block, inline 태그의 속성을 전환할 때 사용
- none 으로 지정하면 Web Page에서 제거됨. 영역 자체가 없어짐.

* block 요소 태그의 특징
- 특정 영을 갖는다. (사각형 형태)
- 기본적으로 좌우배치만 조정 가능하다.
- 다른 block 요소 태그와 순차적으로 수직 배열 된다.
- 수평 배치하려면 style 중 float: [left|right]를 이용함. float 속성 지정 시 width 속성도 같이 지정해야 함.

* float를 지정하면 이후에 나오는 모든 태그에 영향을 주므로 적당한 시점에 해제할 필요가 있음. clear: [left|right|both] 이용.

* inline 태그
- 자신만의 영역이 없다 --> width, height, layout 관련 속성 없음.
- 부모 태그의 영역에 종속됨.

* Web의 기본 폰트 크기: 16px --> 1em
- 하지만 16px는 너무 커서 12px를 주로 사용하며 0.75em 정도됨.
- 폰트의 크기를 지정할 때는 px 보다 em을 사용하여 사용자 환경에 대비할 수 있도록 해야 함.

* CSS의 vendor prefix
- 표준으로 받아 들여지기 전 각 Browser 벤더들이 정하여 사용하고 있는 스타일을 구분
- 형식: -[벤더 prefix]-
--> -ms- : Internet Explorer
--> -o- : Opera 계열
--> -webkit- : WebKit 엔진 이용. Chrome, Safari
--> -moz- : 모질라 계열. FireFox
- 표준으로 받아 들여진 경우 vendor prefix를 쓸 필요 없지만, Browser에 따라 구현 여부가 다르기 때문에 써 주는 것이 좋다.

* Flash 대체 기술
- canvas
- svg
- css3: 다음 세가지 이용 가능
--> transition
--> transform: rotate, scale,skew, translate
--> animation

* <table> --> <theader> <tbody> <tfooter>로 구분됨. 별도로 지정하지 않으면 <tbody>가 추가되어 입력된 내용 포함된.

* JavaScript에서 false인 것들: 0, '', NaN, null, undefined

* checkbox, radio --> name 속성이 같으면 같은 그룹으로 묶임

* boolean 속성: <input type='checkbox' checked ...>에서 checked같이 단독으로 쓰이는 애들을 말함. 즉, 값이 따로 지정되지 않으며, 속성값을 쓰면 true, 않쓰면 false임. HTML에서는 가능하지만 XML에서는오류이기 때문에 호환성을 위하여 checked='checked'와 같이 사용할 수 있음.

* JavaScript의 유사 배열 객체
- 배열의 성격을 가지고 있는 객체.
- document.querySelectorAll()의 반환 객체가 대표적임.
- 배열과는 다름. 배열인지 유사 배열 객체인지를 확인하려면 Array.isArray(object) 이용. true면 배열, 아니면 객체.
- 객체이기 때문에 for-in을 사용하면 (값이 아니라) 전체 속성값을 순회하게 됨.
- 따라서, 유사 배열 객체는 값을 순회하기 위하여 for-in을 사용할 수 없음.
- obj.length와 obj[index]을 이용해야 함.

* form의 필수 속성
- action: Action을 취할 대상 URL 지정. 지정하지 않으면 현재 page URL로 인식됨.
- method: 값 전달 방식 지정. get, post.

* default event 객체
- <a>, <form> 등에서 따로 지정하지 않아도 자동으로 실행되는 event 처리 루틴.
- 이를 무시하는 방법:
--> 핸들러 함수에서 false를 반환. 하지만 addEventListener()로 추가된 이벤트 핸들러는 안됨. 이 경우는 다음 방법을 이용.
--> function handler(event) 와 같이핸들러 함수 지정 후, event.preventDefault(); 호출


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