#1. 데이터 읽기, 쓰기
1. 쿠키(Cookie)
1) 쿠키(Cookie)란?
- 사용자의 웹 브라우저에 저장되는 텍스트 데이터이다. (키와 값)
- 모든 사용자가 각각 자신만의 정보를 저장할 수 있기 때문에 개인화 기능을 구현하는데 활용될 수 있다.
- 사용자 인증이 유효한 시간을 명시할 수 있고, 유효 시간이 정해지면 브라우저가 종료되어도 유지된다.
- 클라이언트에 300개 까지 저장 가능하고, 하나의 도메인당 20개의 값만 가질 수 있다.
- 이름과 값은 모두 URLEncoding 처리 되어야 한다. (영어, 숫자는 제외)
- 오늘 본 상품, 오늘 하루 이 창 열지 않음 등에 쓰인다.
<div>
<select name="cookie_name" id="cookie_name">
<option value="name">name</option>
<option value="age">age</option>
</select>
<select name="cookie_time" id="cookie_time">
<option value="">None</option>
<option value="0">0</option>
<option value="5">5s</option>
<option value="10">10s</option>
<option value="30">30s</option>
</select>
<input type="text" id="cookie_var" />
<button type="button" id="save">save</button>
</div>
document.querySelector("#save").addEventListener("click", e => {
// 선택한 쿠키 이름 가져오기
const cookieName = document.querySelector("#cookie_name");
const cookieNameChoose = cookieName[cookieName.selectedIndex].value;
// 선택한 쿠키의 유효시간 가져오기
const cookieTime = document.querySelector("#cookie_time");
const cookieTimeChoose = cookieTime[cookieTime.selectedIndex].value;
// 저장할 쿠키의 내용
const cookieVar = document.querySelector("#cookie_var");
const cookieVarValue = cookieVar.value;
// 쿠키에 저자할 정보의 문자열 구성 -> "user=John; path=/; max-age=3600"
let cookie_str = encodeURIComponent(cookieNameChoose) + "=" + encodeURIComponent(cookieVarValue) + ";";
cookie_str += "path=/;";
// 선택된 값이 있다면
if(cookieTimeChoose) {
cookie_str += "max-age=" + cookieTimeChoose + ";";
}
// 쿠기에 값을 대입
document.cookie = cookie_str;
});
2) 쿠키의 구성 요소
- 이름 : 각각의 쿠키를 구별하는데 사용되는 이름
- 값 : 쿠키의 이름과 관련된 값
- 유효시간(expires) : 쿠키의 유지시간
- 유효시간은 초단위로 기록한다.
- 유효시간이 설정되지 않으면 브라우저를 닫기 전 까지 데이터가 유지된다.
- 0으로 설정하면 즉시 삭제된다.
- 0보다 큰 숫자로 설정하면 해당 초가 지나기 전까지는 브라우저를 재시작 하더라도 저장된 정보가 유지된다.(오늘하루 열지않음)
- 도메인 : 쿠키를 전송할 도메인
- 쿠키는 기본적으로 저장된 도메인에서만 유효하다.
- www.naver.com 에서 저장한 쿠키는 blog.naver.com 에서는 식별되지 않는다.
- ".naver.com" 도메인을 설정하면, 앞에 붙는 호스트 이름에 상관 없이 쿠키가 공유 된다.
- 패밀리 사이트간에 정보 공유를 위해 많이 사용된다. (통합로그인)
- 경로(path) : 쿠키를 전송할 요청 경로
- 경로는 해당 쿠키값을 읽고 쓸 수 있는 특정 폴더 경로를 지정할 수 있다.
- 일반적으로 " / " 만 지정하여 사이트 전역에서 쿠키가 유효하게 설정한다.
3) 장점
- 대부분의 브라우저가 지원한다.
- 서버의 저장공간이 절약된다.
4) 단점
- 매 HTTP 요청마다 포함되어 api 호출로 서버에 부담이 된다.
- 페이지 이동시마다 백엔드에 무조건 모든 쿠키가 전송된다.
- 쿠키의 용량이 작다. (하나당 4KB)
- 암호화로 존재하지 않는다.
- 사용자 정보의 안정성이 보장되지 않는다.
- 그래서 노출되도 상관없는 데이터를 저장한다.
2. 웹 스토리지
1) 웹스토리지(Web Storage)란?
- 쿠키의 단점을 보완해 HTML5 에서 추가된 기술로 로컬스토리지와 세션스토리지로 구분된다.
- 웹스토리지는 key와 value의 형태로 이루어진다.
- 웹스토리지는 클라이언트에 대한 정보를 저장한다.
- 웹스토리지는 로컬에만 정보를 저장하고, 쿠키는 서버와 로컬에 정보를 저장한다.
// 키에 데이터 쓰기
localStorage.setItem("key", value);
// 키로 부터 데이터 읽기
localStorage.getItem("key");
// 키의 데이터 삭제
localStorage.removeItem("key");
// 모든 키의 데이터 삭제
localStorage.clear();
// 저장된 키/값 쌍의 개수
localStorage.length;
※ 세션스토리지는 localStorage를 sessionStorage로 바꾸기면 하면된다.
ex) sessionStorage.setItem("key", value);
※ 원래는 window.localStorage(sessionStorage) 를 사용해야 하지만, window 객체는 당연하게 쓰이는 느낌이기 때문에 줄여서 localStorage로 접근할 수 있다.
2) 장점
- 서버에 불필요한 데이터를 저장하지 않는다. (백엔드에 전송되지 않는다.)
- 저장 가능한 데이터의 용량이 크다. (약 5MB, 브라우저마다 차이가 있다.)
3) 단점
- HTML5를 지원하지 않는 브라우저에서는 사용할 수 없다. (거의 없다고 봐도 무방하다.)
4) 로컬스토리지
- 클라이언트에 대한 정보를 반영구적으로 저장하고, 브라우저를 종료해도 데이터가 유지된다.
- 브라우저 자체에 반영구적으로 데이터가 유지되지만, 도메인이 다른 경우에는 로컬 스토리지에 접근할 수 없다.
- 자동 로그인 저장에 주로 쓰인다.
5) 세션스토리지
- 각 세션마다 데이터가 개별적으로 저장된다.
- 브라우저에서 여러개의 탭을 실행하면 탭마다 개별적으로 데이터가 저장
- 세션 종료시(브라우저를 닫을 경우) 클라이언트에 대한 정보를 삭제한다.
- 같은 도메인이라도 세션이 다르면 데이터에 접근할 수 없다.
- 입력 폼 정보 저장, 비로그인 장바구니 등에 쓰인다.
#2. window 객체
1. window 객체란?
1) 전역객체의 window
- 브라우저 안의 모든 요소들이 소속된 객체의 최상위에 있기 때문에 어디서든 접근이 가능하다.
- 우리가 선언하는 변수나 함수는 다 window 객체의 프로퍼티가 된다.
- 그럼에도 앞에 window를 붙이지 않는데, 그 이유는 말 그대로 페이지 내에 있는 모든 객체를 다 포함하기 때문에 생략가능하다.
2) 브라우저의 window
- 일반적으로 우리가 열고 있는 브라우저 창을 의미하고, 이 창을 제어하는 다양한 메서드를 제공한다.
2. window 객체의 종류
종류 | 설명 |
window | 브라우저 창 객체, BOM의 최상위 객체 |
location | 주소표시줄 객체 |
screen | 운영체제 화면 객체 |
history | 방문기록 객체 |
navigator | 브라우저 정보 객체 |
document | 문서 객체(body태그부분을 의미) |
1) window 속성의 종류
속성 종류 | 설명 |
closed | 창이 닫혀 있는지 열여있는지를 불리언 으로 반환한다. 닫혀 있으면 true, 열려있으면 false를 반환 |
innerHeight | 창의 콘텐츠 영역 높이를 반환한다. - 스크롤바나 제목표시줄 등은 제외 |
innerWidth | 창의 콘텐츠 영역 넓이를 반환한다. - 스크롤바나 제목표시줄 등은 제외 |
length | 현재 창의 아이프레임 개수를 숫자로 반환 |
outerHeight | 창의 모든 인터페이스 요소(스크롤바 등)를 포함한 높이를 반환 |
outerWidth | 창의 모든 인터페이스 요소(스크롤바 등)를 포함한 넓이를 반환 |
pageXOffset | 현재 문서가 창의 왼쪽에서 얼마나 스크롤되어 있는지를 픽셀 수치로 반환 |
pageYOffset | 현재 문서가 창의 위쪽에서 얼마나 스크롤되어 있는지를 픽셀 수치로 반환 |
parent | 아이프레임으로 되어 있는 페이지의 부모가 되는 페이지를 선택하는 속성 |
screenLeft | 창이 화면 좌측을 기준으로 얼마만큼 떨어져 있는지 좌표를 반환 |
screenTop | 창이 화면 상단을 기준으로 얼마만큼 떨어져 있는지 좌표를 반환 |
screenX | 창이 화면 좌측을 기준으로 얼마만큼 떨어져 있는지 좌표를 반환 |
screenY | 창이 화면 상단을 기준으로 얼마만큼 떨어져 있는지 좌표를 반환 |
self | 현재 창을 반환 |
top | 현재 창의 최상위 브라우저 창을 반환 |
2) window 메서드의 종류
메서드 종류 | 설명 |
close( ) | 창을 닫는 메서드 (매개변수 없음) |
moveBy(x,y) | 창을 상대적으로 이동시키는 메서드 |
moveTo(x,y) | 창을 절대적으로 이동시키는 메서드 |
open(url,name,specs,replace) | 새창 혹은 새탭으로 창을 여는 메서드 |
print( ) | 현재 창을 인쇄할 수 있는 창을 띄워주는 메서드 |
resizeBy(w,h) | 창 사이즈를 상대적으로 변경시키는 메서드 |
resizeTo(w,h) | 창 사이즈를 절대적으로 변경시키는 메서드 |
scrollBy(x,y) | 창의 스크롤바 위치를 상대적으로 이동시키는 메서드 |
scrollTo(x,y) | 창의 스크롤바 위치를 절대적으로 이동시키는 메서드 |
stop( ) | 창이 로드되는 것을 멈추는 메서드 (IE 및 Edge는 사용안됨) |
※ window의 open 메서드
window.open(url,name,specs,replace);
// 사용 예시
const popup = window.open("https://www.naver.om", "", "width=300, height=500, scrollbars=no, toolbar=no, menubar=no, status=no, location=no");
- 매개변수 종류
매개변수 종류 | 설명 | |
URL | 창으로 띄울 주소를 담는 매개변수 | |
name |
창이 띄워질 위치(대상)을 지정하는 매개변수 | |
_blank | URL의 주소가 새창 혹은 새탭으로 띄워진다. (기본값) | |
_parent | 아이프레임의 부모가 되는 페이지로 URL주소가 띄워진다. | |
_slef | 현재 페이지로 URL주소가 띄워진다. (주소가 바뀜) | |
_top | 로드되는 모든 frameset으로 URL주소가 띄워진다. | |
name | 새창으로 띄워진 곳의 이름을 작성하면 그곳에서 url 주소가 띄워진다. | |
specs 대부분의 옵션 값은 yes || no 로 지정한다. 위치나 크기만 픽셀단위로 지정 |
띄워지는 창에 대한 옵션을 설정, 쉼표로 아이템을 구분해서 작성한다. window.open("주소", "_blank", "옵션=값, 옵션=값", true); |
|
height | 창의 높이를 지정하는 옵션, 최소값은 100으로 처리 | |
left | 창의 왼쪽 좌표를 지정하는 옵션, 음수는 지정되지 않음 | |
location | 주소표시줄을 표시할지 지정하는 옵션, 오페라브라우저에만 사용가능 피싱 사이트를 방지하기 위해 브라우저 개발사들이 지원하지 않고 있다. |
|
menubar | 메뉴바를 표시할지 지정하는 옵션 | |
scrollbars | 스크롤바를 표시할지 지정하는 옵션 | |
resizable | 창 사이즈를 변경할지 지정하는 옵션 | |
status | 상태표시줄을 표시할지 지정하는 옵션 | |
titlebar | 타이틀바를 표시할지 지정하는 옵션 | |
toolbar | 브라우저 툴바를 표시할지 지정하는 옵션 | |
top | 창의 상단 좌표를 지정하는 옵션, 음수는 지정되지 않음 | |
width | 창의 가로폭을 지정하는 옵션, 최소사이즈는 100으로 처리 | |
replace | url로 작성한 주소를 새항목으로 만들지, history 목록의 현재 항목으로 대체할지를 지정 -true : history 목록의 현재 문서로 대체 -false : 주소를 새 항목으로 대체 |
'국비수업 > JavaScript' 카테고리의 다른 글
[Javascript] Ajax / JSON-Server (0) | 2022.04.02 |
---|---|
[Javascript] 라이브러리 활용 (0) | 2022.04.01 |
[Javascript] Form 요소 (0) | 2022.03.28 |
[Javascript] HTML 생성하기 (0) | 2022.03.25 |
[Javascript] HTML 제어하기 & 연습문제 (0) | 2022.03.24 |