Light Tutorial Django
Studybee 3주차 - 가볍게 배우는 장고!!
Django를 이용해 블로그를 만들기 전에 가볍게 Django에 대해 알아보고 익숙해져 봅시다.
**http://www.studybee.kr 에서 운영하는 '초심자를 위한 웹개발' 클래스에서 만드는 교재이며,
장고를 이용해 간단하게 블로그를 만드는 것을 목표로 하고 있습니다.
Java web development 10 (draft)
자바 웹 개발 시작하기
(10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)
2012. 1. 18
벌써 2년도 넘은 자료지만
그래도 필요하신분이 있을지 몰라서...
(지금보니 2년사이 많은것을 배운것 같네요 ㅎㅎ)
사실 마지막 주차는 발표자료 마무리가 부족하다.
그 당시 뭔가 급한일이 있어서;;; (일꺼라 추측)
지금와서 문서에 손을 대기는 좀 그래서 부족하지만 수정없이 배포한다.
Light Tutorial Django
Studybee 3주차 - 가볍게 배우는 장고!!
Django를 이용해 블로그를 만들기 전에 가볍게 Django에 대해 알아보고 익숙해져 봅시다.
**http://www.studybee.kr 에서 운영하는 '초심자를 위한 웹개발' 클래스에서 만드는 교재이며,
장고를 이용해 간단하게 블로그를 만드는 것을 목표로 하고 있습니다.
Java web development 10 (draft)
자바 웹 개발 시작하기
(10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)
2012. 1. 18
벌써 2년도 넘은 자료지만
그래도 필요하신분이 있을지 몰라서...
(지금보니 2년사이 많은것을 배운것 같네요 ㅎㅎ)
사실 마지막 주차는 발표자료 마무리가 부족하다.
그 당시 뭔가 급한일이 있어서;;; (일꺼라 추측)
지금와서 문서에 손을 대기는 좀 그래서 부족하지만 수정없이 배포한다.
Adied 2014, 봄싹 세미나에서 발표한 `Resource Handling in Spring MVC`의 발표자료입니다.
주요 내용으로 Spring MVC에서 정적 자원(css, js, etc)을 다루는 방법을 다루고 있습니다.
데모 코드 : https://github.com/arawn/resource-handling-in-springmvc
Adied 2014, 봄싹 세미나에서 발표한 `Resource Handling in Spring MVC`의 발표자료입니다.
주요 내용으로 Spring MVC에서 정적 자원(css, js, etc)을 다루는 방법을 다루고 있습니다.
데모 코드 : https://github.com/arawn/resource-handling-in-springmvc
알아봅시다, Polymer: Web Components & Web AnimationsChang W. Doh
GDG Korea WebTech : 시작하세요, Polymer, Oct, 11, 2014.
Let's learn about specifications before diving into Polymer:
- Web Components
- Web Animations
This slide includes resources from HTML5Rocks, Polymer and PolyTechnic.
1. 1. Drag and Drop
2. application cache
3. web storage
4. web worker
5. geolocation
2. •1999년에 이미 마이크로소프트사의 인터넷 익스플로러에서에서
구현했던 기능.
•HTML5에서 API를 이용하여 구현하고 있기 때문에 다른 애플리케이션과
데이터를 주고받기 쉬워졌고 그만큼 애플리케이션 개발이 쉬워졌다.
•페이지 안에서 콘텐츠 이동, 페이지 사이, 페이지와 다른 프로그램
사이에도 드래그 가능
•드래그 대상, 드롭 대상, 이동할 콘텐츠 정보 등 필요
•웹 환경에서는 지금까지 전용 API는 제공되지 않고 유사 구현을 위해
복잡한 자바스크립트
이벤트(mouse 관련 이벤트를 직접 구현함)를 다루어야 했다
http://html5demos.com/drag
3.
4. 데이터 유형
데이터 유형을 나타내는데 임의로 데이터 유형을 정의해서 사용할 수도 있지만
MIME 문자열을 이용할 수도 있다.
다른 애플리케이션과 데이터를 주고받을 수 있다.
예) 메일에 파일을 첨부할 때 시스템에 있는 파일을 손쉽게 메일로 드래그해서
첨부할 수 있다.
•text/plain 또는 text : 단순 문자열
•text/uri-list : 사이트 주소(URL). 주소가 하나일 경우 간단하게 URL이라고 쓰기도
한다.
•file : 다른 애플리케이션에 파일을 드래그앤드롭할 때 사용한다.
5. 5Do it! HTML5+CSS3
IE의 임시 인터넷 파일
한번 접속했었던 사이트의 이미지,
미디어 복사본 저장
애플리케이션 캐시와 비슷한 개념
오프라인 사용이 불가능
6. 6Do it! HTML5+CSS3
웹에 접속할 수 없는 상황에서도 애플리케이션 실행되어야.
오프라인 브라우징 : 오프라인 상태에서도 사용자가 사이트를 둘러볼 수 있다.
속도 : 캐시된 리소스들이 로컬에 있기 때문에 좀더 빠르게 로딩할 수 있다.
서버 로딩 줄임 : 리소스 변경이 있을 경우에만 서버에서 리소스를 다운로드하면
된다.
<장점>
9. 9Do it! HTML5+CSS3
CACHE MANIFEST
# VERSION 10
NETWORK:
http://robertnyman.com/html5/offline/offline.html
CACHE:
offline.html
base.css
FALLBACK:
online.css offline.css
<manifest 파일>
온라인일 때 액세스할 파일
10. 10Do it! HTML5+CSS3
CACHE MANIFEST
# VERSION 10
NETWORK:
http://robertnyman.com/html5/offline/offline.html
CACHE:
offline.html
base.css
FALLBACK:
online.css offline.css
오프라인일 때 액세스할 파일
<manifest 파일>
11. 11Do it! HTML5+CSS3
CACHE MANIFEST
# VERSION 10
NETWORK:
http://robertnyman.com/html5/offline/offline.html
CACHE:
offline.html
base.css
FALLBACK:
online.css offline.css
<manifest 파일>
지정한 파일이 없을 경우
사용할 파일
12. 12Do it! HTML5+CSS3
<html manifest=“offline.manifest”>
• 애플리케이션 캐시가 만들어지면 페이지가 한번 로딩된 후로는 리소스가 자동으로
캐시에 저장됨.
• manifest 파일이 수정되었을 경우에만 서버로부터 파일을 가져옴.
• (IE 임시 인터넷 파일은 사이트에 접속할 때마다 임시 인터넷 파일을 갱신함)
서버에서 MIME 타입을 추가해야 함
13. 13Do it! HTML5+CSS3
캐시 자동 업데이트
•manifest 파일을 수정하면 애플리케이션 캐시를 자동으로 업데이트한다
•manifest 파일에는 여러 리소스 파일이 나열되어 있는데 리소스 파일이
수정된 것은 manifest 파일과는 상관이 없으므로 리소스 파일이
수정됐다고 해서 애플리케이션 캐시가 자동 업데이트되지는 않는다.
•이전 버전과 비교해 봐서 manifest 파일의 내용이 달라진게 없다면 이
경우에도 애플리케이션 캐시는 자동 업데이트 되지 않는다.
•manifest 파일의 수정 날짜를 바꾸는 것 역시도 업데이트로 취급하지
않는다.
•애플리케이션 캐시를 자동 업데이트하려면 반드시 manifest 파일의
내용을 수정해야 한다.
16. “클라이언트에 데이터를 저장한다”
'키/ 값' 쌍으로 데이터를 저장하고 키를 기반으로
데이터를 조회한다.
영원히 저장할 수 있는 공간과 임시로 저장할 수 있는
공간을 따로 두고 있어서 필요에 맞게 선택할 수 있다.
17. 17Do it! HTML5+CSS3
•같은 사이트에서 둘 이상의 탭을 열면 둘 이상의 트랜잭션을 추적하기 어렵다.
•보안 문제를 일으키기 쉽다.
•하나의 사이트에서 저장할 수 있는 최대 쿠키 수는 20 개이다. 그리고 하나의
사이트에서 저장할 수 있는 최대 쿠키 크기는 4KB 로 제한되어 있다.
브라우저 쿠키(cookie)의 단점
18. 18Do it! HTML5+CSS3
•쿠키와 마찬가지로 웹 스토리지의 데이터들도 웹 사이트를 서핑하고 난 후,
브라우저 탭을 닫고 난 후, 또는 브라우저를 빠져나오고 난 후에 저장된다.
•쿠키와 다른 점은 웹 스토리지의 데이터들은 사용자가 일부러 보내지 않는 한 웹
서버로 전송되지 않는다는 것이다. (경량 모바일에 적당)
•텍스트 뿐만 아니라 객체 정보를 저장할 수 있다.
•쿠키는 만료 일자가 있지만 웹 스토리지의 경우에는 만료일자가 없다.
•두 가지 스토리지 모두 도메인당 5MB 정도의 데이터를 저장할 수 있다.
19. 웹 스토리지
세션 스토리지
로컬 스토리지
세션 스토리지
세션 동안의 데이터를 기억하고 있다.
탭(또는 창)을 닫으면 데이터가 삭제된다.
seesionStorage라는 객체를 이용해 저장하고 검색한다.
로컬 스토리지
세션이 끝나도 계속 기억하고 있다.
탭(또는 창)을 닫았다 열어도 데이터 남아있다.
localStorage라는 객체를 이용해 저장하고 검색한다.
21. sessionStorage.setItem(key, value);
저장
var item = sessionStorage.getItem(key);
검색
ex) sessionStorage.setItem(1, ‘이것은 예제 문장입니다’);
ex) var item=sessionStorage.getItem(1);
alert(item);
localStorage.setItem(key, value);
var item = localStorage.getItem(key);
25. function savetheSession(){
var first = document.getElementById("first");
var thevalue = first.value;
sessionStorage.setItem(1, thevalue);
gettheSession();
}
function gettheSession(){
var data;
var thediv = document.getElementById("displaysession");
data = sessionStorage.getItem(1);
if (data){
thediv.innerHTML = "저장된 값: "+data;
}
}
26. function savetheSession(){
var first = document.getElementById("first");
var thevalue = first.value;
sessionStorage.setItem(1, thevalue);
gettheSession();
}
function gettheSession(){
var data;
var thediv = document.getElementById("displaysession");
data = sessionStorage.getItem(1);
if (data){
thediv.innerHTML = "저장된 값: "+data;
}
}
해당 id 요소 가져오기
값 가져오기
키 1에 해당 값 저장하기
값 가져와서 화면에 보여주는 함수 호출
key가 1인 데이터의 값 가져오기
innerHTML을 이용해서 문장에 값 보여주기
27. function savetheLocal(){
var second = document.getElementById("second");
var thevalue = second.value;
localStorage.setItem(1, thevalue);
gettheLocal();
}
function gettheLocal(){
var data;
var thediv = document.getElementById("displaylocal");
data = localStorage.getItem(1);
if (data){
thediv.innerHTML = "저장된 값:"+data;
}
}
29. 29Do it! HTML5+CSS3
기존 웹 페이지는 단일 쓰레드 모드
오래 걸리는 스크립트를 수행하면 기다려야 한다.
다른 UI 작업을 할 수 없다.
But, 웹 워커를 사용하면
웹 페이지에서도 멀티 쓰레드 가능
오래 걸리는 쓰레드를 실행하는 동안, 백그라운드 쓰레드에서 스크립트 실행
35. 35Do it! HTML5+CSS3
웹 워커는 Worker 객체를 통해 실행된다.
워커를 만들려면 워커 쓰레드를 실행할 스크립트 파일의 경로 지정
<script>
var worker;
function createWorker () {
worker = new Worker("worker.js");
}
36. 36Do it! HTML5+CSS3
워커에 메시지를 보낼 때는 postMessage 메서드를 호출
document.getElementById("start-worker").onclick = function ()
{
createWorker();
worker.postMessage(document.getElementById("worker-
start-value").value);
}
37. 37Do it! HTML5+CSS3
•워커에서 onmessage 이벤트 핸들러로 받는다.
•워커에서 실행할 파일(worker.js) 파일의 맨 처음에서
onmessage를 이용해 크리에이터에서 보낸 이벤트를 받는다.
(worker.js 파일)
onmessage = function (event) {
var i=event.data;
for (n=1000001; i<n; i++) {
postMessage(i);
};
};
38. 38Do it! HTML5+CSS3
워커에서 필요한 작업을 모두 마치면 워커에서 크리에이터로
결과값을 보내야 한다.
postMessage 메서드를 사용합니다.
(worker.js 파일)
onmessage = function (event) {
var i=event.data;
for (n=1000001; i<n; i++) {
postMessage(i);
};
};
39. 39Do it! HTML5+CSS3
크리에이터에서 onmessage 이벤트 핸들러를 사용한다.
worker.onmessage = function (event) {
document.getElementById("worker-results").innerHTML =
event.data;
};
40. 40Do it! HTML5+CSS3
워커에서 런타임 오류가 발생하면 onerror 이벤트 핸들러가 호출된다.
worker.onerror = function (event) {
document.getElementById("worker-results").innerHTML = "An
error occurred";
};
41. 41Do it! HTML5+CSS3
워커를 중간에 종료하려면(“stop worker” 버튼을 누르면) 워커의
terminate 메서드를 호출한다.
워커 쓰레드는 작업을 종료하지 않은 상태에서 멈춘다.
document.getElementById("stop-worker").onclick = function () {
if (worker) {
worker.terminate();
}
};
42. 42Do it! HTML5+CSS3
현재 위치에 대한 위도, 경도 같은 위치 정보를 얻을 수 있다.
HTML 5 는 위치 정보와 관련한 Geolocation 스펙을 포함하고 있다
(엄밀히 말하자면 이 스펙은 HTML Working Group 과 분리되어
있는 Geolocation Working Group에 의해 표준화가 진행되고 있다고
한다)
44. 위치 정보는 사용자 동의가 있어야 한다
웹 응용프로그램이 나의 정보를 이렇게 쉽게 얻어 갈 수 있는 것인가?
만일 그렇다면 굉장한 사회적(?) 문제가 될 것이다
따라서 사용자의 위치 정보는 반드시 사용자의 허가를 받아서 수집할 수 있도록 되어있다
브라우저에서 Geolotion API를 이용해서 위치 정보를 액세스 하려고 하면,
아래 보는 바와같이 사전 동의를 구하게 된다.(파이어폭스 예)
만일 동의를 하지 않게 되면 나의 위치정보를 웹 응용프로그램이 알 수 없게 되는 것이다
45. 45Do it! HTML5+CSS3
① 지오로케이션 서비스를 사용할 수 있는 브라우저인지 체크
if (navigator.gelocation) {
/* 지오로케이션 API 소스 작성 */
}
else {
alert("이 브라우저에서는 지오로케이션 서비스를 사용할 수 없습니다.");
}
② 현재 위치 확인 – getCurrentPosition 메서드
③ 현재 위치 계속 확인 – watchPosition 메서드
지오로케이션 API는 window.navigator 객체의 자식 객체인 geolocation 객체를
통해 실행된다.
46. 사용자의 현재 위치를 알아내려면 getCurrentPoition 메서드 호출.
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition, onError);
navigator.geolocation.watchPosition(showPosition);
} else {
onError();
}
function showPosition(position) { .... }
function onError() { ... }
47. 사용자 위치의 변화를 계속해서 추적하려면 watchPosition 메서드 이용
업데이트되는 위치 정보를 일정하게 호출하도록 설정한다.
정확한 값이 반환되지 않을 경우 오류 호출.
var watchID =
navigator.geoloacation.watchPosition(function(position) {
do_something(position.coords.latitude,position.coords.longitude);
});
48. 48Do it! HTML5+CSS3
사용자 위치 설명 – position 객체 이용
timestamp : 위치를 가져온 시간
coords : nsIDOMGeoPositionCoords 객체를 이용해 좌표 표시
latitude 사용자 위치의 위도
longitude 사용자 위치의 경도
altitude 사용자 위치의 표고. 표고를 지원하지 않는 장비에서는 0
accuracy 위치 정보의 오차
altitudeAccuracy 표고 정보의 오차. 표고를 지원하지 않는 장비에서는 0
heading 사용자의 진행 방향
speed 사용자가 움직이는 속도. m/s로 표시
nsIDOMGeoPositionCoords 객체의 속성
address : 나라나 시, 거리 등 주소를 표시하는nsIDOMGeoPositionAddress
객체
49. getCurrentPositio 메서드나 watchPosition 메서드를 호출하는 동안 다음과
같이 오류 콜백을 실행할 수 있습니다.
function errorCallback(PositionError error);
필드 설명
code 다음의 에러 코드 중 하나
UNKNOWN_ERROR
인터페이스에 있는 다른 오류 코드로는 정의할 수 없는 오류로
인해 위치 인식 프로세스가 실패했을 때. (상수값 0)
PERMISSION_DENIED
애플리케이션이 지오로케이션 API를 사용할 권한이 없어서 위
치 인식 프로세스가 실패했을 때. (상수값 1)
POSITION_UNAVAILABLE
위치 인식 프로세스에 사용된 하나 이상의 위치 제공자가 내부
오류를 유발하여 프로세스가 실패했을 때. (상수값 2)
TIMEOUT
새로운 Position 객체를 성공적으로 가져오기 전에 지정한 최대
시간이 모드 흘렀을 때. (상수값 3)
message
로그와 디버깅을 위해 사람이 읽을 수 있는 오류 메시지를 표시
함.