JavaScript
[JavaScript] - AJAX / sort,map,filter / 웹스토리지 / switch ~ case
nam_ji
2023. 12. 13. 13:17
자바스크립트 (JavaScript) 기초
AJAX (Asynchronous JavaScript And XML)
- AJAX란
- 자바스크립트의 라이브러리 중 하나이며, Asynchronous JavaScript And XML(비동기식 자바스크립트와 xml)의 약자입니다.
- 브라우저가 가지고 있는 XMLHttpRequest 객체를 이용해서 전체 페이지를 새로 고치지 않고도 페이지의 일부만을 위한 데이터 로드 기법이며 자바스크립트를 이용한 비동기 통신, 클라이언트와 서버간에 XML 데이터를 주고받는 기술입니다.
- 자바스크립트를 통해서 서버에 데이터를 요청하는 것이라고 생각하면 됩니다.
- AJAX 사용을 가능하게 만드는 것들
- HTML
- DOM
- JavaScript
- XMLHttpRequest
- Etc
- AJAX로 할 수 있는 것
- AJAX 네트워크 기술을 이용하여 클라이언트에서 서버로 데이터를 요청하고 그에 대한 결과를 돌려받을 수 있습니다.
- 클라이언트란
서버에서 정보를 가져와서 사용자에게 보여줄 수 있고 사용자와 상호작용할 수 있는 소프트웨어를 일컫습니다. - 서버란
네트워크 상에서 접근할 수 있는 프로그램으로서 어떤 자료들에 대한 관리나 접근을 제어해주는 프로그램을 말합니다. 서버는 일반적으로 사용자가 직접적으로 사용하지 않습니다.
- 클라이언트란
- AJAX 네트워크 기술을 이용하여 클라이언트에서 서버로 데이터를 요청하고 그에 대한 결과를 돌려받을 수 있습니다.
- AJAX를 사용하는 이유
- 단순하게 WEB 화면에서 무언가 부르거나 데이터를 조회하고 싶은 경우, 페이지 전체를 새로고침하지 않기 위해 사용한다고 볼 수 있습니다.
- 기본적으로 HTTP 프로토콜은 클라이언트쪽에서 Request를 보내고 서버쪽에서 Response를 받으면 이어졌던 연결이 끊기게 되어 있습니다. 그래서 화면의 내용을 갱신하기 위해서는 다시 Request를 하고 Response를 하며 페이지 전체를 갱신하게 됩니다. 하지만 이렇게 할 경우, 엄청난 자원 낭비와 시간 낭비를 초래할 것입니다.
- AJAX는 HTML 페이지 전체가 아닌 일부분만 갱신할 수 있도록 XMLHttpRequest 객체를 통해 서버에 Request합니다. 이 경우, JSON이나 XML형태로 필요한 데이터만 받아 갱신하기 때문에 그만큼의 자원과 시간을 아낄 수 있습니다.
- AJAX의 장점
- 웹페이지의 속도가 향상됩니다.
- 서버의 처리가 완료될 떄까지 기다리지 않고 처리가 가능합니다.
- 서버에서 Data만 전송하면 되므로 전체적인 코딩의 양이 줄어듭니다.
- 기존 웹에서는 불가능했던 다양한 UI를 가능하게 해줍니다. (Flickr의 경우, 사진의 제목이나 태그를 페이지의 리로드 없이 수정할 수 있습니다.)
- AJAX의 단점
- 히스토리 관리가 되지 않습니다.
- 페이지 이동없는 통신으로 인한 보안상의 문제가 있습니다.
- 연속으로 데이터를 요청하면 서버 부하가 증가할 수 있습니다.
- XMLHttpRequest를 통해 통신하는 경우, 사용자에게 아무런 진행 정보가 주어지지 않습니다.
(요청이 완료되지 않았는데 사용자가 페이지를 떠나거나 오작동할 우려가 발생하게 됩니다.) - AJAX를 쓸 수 없는 브라우저에 대한 문제 이슈가 있습니다.
- HTTP 클라이언트의 기능이 한정되어 있습니다.
- 지원하는 Charset이 한정되어 있습니다.
- Script로 작성되므로 디버깅이 용이하지 않습니다.
- 동일-출처 정책으로 인하여 다른 도메인과는 통신이 불가능합니다. (Cross-Domain 문제)
- AJAX의 진행과정
- XMLHttpRequest Object를 만듭니다.
- Request를 보낼 준비를 브라우저에게 시키는 과정입니다.
- 이것을 위해서 필요한 Method를 갖춘 Object가 필요합니다.
- Callback 함수를 만듭니다.
- 서버에서 Response가 왔을 때 실행시키는 함수입니다.
- HTML 페이지를 업데이트 합니다.
- Open a Request
- 서버에서 Response가 왔을 때 실행시키는 함수입니다.
- HTML 페이지를 업데이트 합니다.
- Send the Request
- XMLHttpRequest Object를 만듭니다.
- jQuery를 이용한 AJAX 기본 문법
<!doctype html>
<html lang="ko">
<head>
<meta charset = utf-8">
<title>ajax</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.7.1.min.js" integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" crossorigin="anonymous"></script>
<link href="main.css" rel="stylesheet">
</head>
<body>
<!--서버란 간단하게 설명하면 데이터를 주고 받을 수 있게 하는 프로그램
1. 어떤 데이터를 요청할지
2. 어떤 방법으로 요청할지
-----------------------
1. 데이터 url
2. Get인지 Post인지
$.post('url') || $.get('url') 이렇게 작성
$.get('url').done(function(){}).fail(function(){})
제이쿼리.겟요청('url입력').요청성공시(함수대로실행(){}().실패할시(함수대로실행(){})
$.post('url', {key : value}).done(function(){}).fail(function(){})
제이쿼리.포스트요청('url입력', 보내고 싶은 값).요청성공시(함수대로실행(){}).실패시(함수대로실행(){})-->
<script>
$.get('url').done(function(data) {
console.log(data);
}).fail(function() {
console.log('실패함');
});
</script>
</body>
</html>
sort, map, filter
- sort() 함수란
- 배열의 요소를 정렬하는데 사용하는 함수입니다.
- sort()는 기본적으로 유니코드 값으로 정렬하기 때문에 원하는 정렬을 하기 위해서 조금 응용을 해야합니다.
- sort를 이용하여 오름차순과 내림차순을 할 수 있는 코드를 보여드리겠습니다.
-
var array = [7,3,5,2,40]; // 오름차순 array.sort(function(a, b) { return a - b; }); console.log(array); // 내림차순 array.sort(function(a, b) { return b - a; }); console.log(array);
- sort 함수의 원리는 배열의 값을 비교할 수 있게 콜백 함수에 2개의 파라미터를 지정합니다.
- a - b를 했을 때 양수가 반환되면 a의 값이 오른쪽으로 b의 값이 왼쪽으로 정렬됩니다.
- a - b를 했을 때 0이 반환되면 순서를 바꾸지 않고 정렬됩니다.
- a - b를 했을 때 음수가 반환되면 a의 값이 왼쪽으로 b의 값이 오른쪽으로 정렬됩니다.
- 이걸 이용하여 b - a를 하게 되면 반대로 내림차순을 만들어 볼 수 있습니다.
- fliter() 함수란
- 배열의 요소를 콜백 함수를 사용하여 원하는 조건에 따라 필터링하는 함수입니다.
- 필터링된 배열을 반환합니다.
-
var array1 = [7,3,5,2,40]; var array2 = array1.filter(function(a) { return a < 4; }); console.log(array2);
- 필터함수는 필터링 된 데이터를 다른 배열에 담아서 반환해야 합니다.
- 배열에서 값을 가져올 수 있게 콜백 함수에 파라미터를 지정합니다.
- return문에 내가 필터링 하고 싶은 조건을 작성하면 새로 만든 배열에 담아서 출력해 볼 수 있습니다.
- map() 함수란
- 배열을 처리해서 새로운 배열로 반환하기 위한 함수입니다.
- map() 함수에 전달되는 콜백 함수는 "각 요소를 변환하여 새로운 배열로 매핑(Mapping)하는 역할을 한다"라고 말합니다. 이렇게 매핑된 결과를 새로운 배열로 반환하기 때문에 이 함수의 이름이 "map"으로 정해졌습니다.
-
var array3 = [7,3,5,2,40]; var array4 = array3.map(function(a) { return a * 4; }); console.log(array4);
- map() 함수는 새로운 배열에 담아서 출력해야 합니다.
- 기존 배열에서 값을 가져오기 위해 콜백 함수에 파라미터를 지정합니다.
- return문에 파라미터를 이용하여 연산식을 작성하고
- 새롭게 지정한 배열을 출력해 보면 return문이 연산된 새 배열을 볼 수 있습니다.
웹스토리지
- 웹스토리지란
- 웹스토리지는 해당 도메인과 관련된 특정 데이터를 서버가 아니라 클라이언트에 저장할 수 있도록 하는 기능입니다. HTML5에 도입된 새로운 기능입니다.
- 웹스토리지의 특징
- 키와 값의 쌍 형태로 데이터를 저장합니다.
- 서버에 전송되지 않아 서버에 부담이 가지 않습니다. (자바스크립트 내에서 수행)
- 필요한 경우메나 꺼내 쓰는 것이라 자동 전송의 위험성이 없습니다.
- 도메인 단위로 접근이 제한되는 특성을 가지고 있습니다.
즉, 다른 도메인은 요청해도 값을 주지 않습니다. (CSRF 안전) - 5KB까지 데이터를 저장할 수 있습니다.
- 유효기간이 존재하지 않습니다.
- 문자형(String) 데이터 타입만 지원합니다.
- 웹스토리지의 종류
- 웹스토리지는 LocalStorage와 Session Storage 2가지로 각각의 고유한 특성을 가지고 있어 필요에 따라 선택적으로 사용하게 됩니다. 이들은 window 객체의 프로퍼티로서 존재하며, 같은 Storage 객체를 상속하기 때문에 동일한 메소드를 가지고 있습니다.
- 웹스토리지 공통 메소드
메소드 설명 setItem (key, value) 키-값 쌍을 보관합니다. getItem(key) 키에 해당하는 값을 받아옵니다. removeItem(key) 키에 해당하는 값을 삭제합니다. clear() 모든 것을 삭제합니다. key(index) 인덱스에 해당하는 키를 받아옵니다. length 저장된 항목의 개수를 가져옵니다.
- 웹스토리지 공통 메소드
- 로컬스토리지 (Local Storage)
- window.localStorage 객체로 브라우저를 종료해도 유지되는 데이터입니다.
- 명시적으로 지우지 않는 한 영구적으로 저장됩니다.
- 도메인별로 생성되어, 서로 다른 브라우저 탭이라도 동일한 도메인이라면 동일한 로컬 스토리지 사용합니다.
- 지속적으로 필요한 정보를 저장할 때 사용합니다. (ex. 자동로그인)
- 확인하는 방법은 개발자 도구(F12)를 열고 application에 들어가면 확인할 수 있습니다.
- 기본문법
-
// localStorage localStorage.setItem('이름', 'nam'); //저장 localStorage.getItem('이름'); // 저장된 자료 가져오기 localStorage.removeItem('이름'); // 저장된 자료 삭제하기 localStorage.setItem('num', [1,2,3]); // array는 강제로 문자로 바꿈 array를 localStorage에 저장하는 방법 var array = [1,2,3]; var newArr = JSON.stringify(array); // JSON 형태로 변환 localStorage.setItem('num1', newArr); // array를 깨지지 않고 원본을 유지해서 저장하는 방법; var arr = localStorage.getItem('num1'); console.log(arr); // array가 아닌 문자이기 때문에 index로 꺼낼 수 없음 arr1 = JSON.parse(arr); // JSON으로 바뀐 array를 다시 array로 돌리는 방법 console.log(arr1[1]); localStorage.removeItem('num'); // key값이 num을 localStorage에서 삭제 localStorage.removeItem('num1'); // key값이 num1을 localStorage에서 삭제 // localStorage에 저장된 데이터의 값을 수정하고 싶을 때는 따로 코드가 없기 때문에 // JSON형태를 원래의 형태로 바꾼 후 // 데이터 수정 후 // 다시 JSON 형태로 변환
-
- window.localStorage 객체로 브라우저를 종료해도 유지되는 데이터입니다.
- 세션스토리지 (Session Storage)
- window.sesstionStorage 객체로 탭/윈도우를 닫기 전까지 유지되는 데이터입니다.
- 탭 / 윈도우 단위로 세션스토리지 생성됩니다.
- window 객체와 동일한 유효 범위 및 생존 기간을 가집니다.
- 탭 / 윈도우를 닫을 시 데이터가 삭제됩니다.
- 같은 도메인이더라도 세션이 다르면 데이터에 접근할 수 없습니다.
- 독립적으로 작동 (다른 세션 스토리지와 서로 영향을 주지 않습니다.
- 잠시 동안 필요한 정보를 저장합니다.(ex. 입력 폼 저장, 일회성 로그인)
- 기본문법 (기본적인 작성법은 Local Storage와 동일합니다.)
-
// localStorage localStorage.setItem('이름', 'nam'); //저장 localStorage.getItem('이름'); // 저장된 자료 가져오기 localStorage.removeItem('이름'); // 저장된 자료 삭제하기 localStorage.setItem('num', [1,2,3]); // array는 강제로 문자로 바꿈 array를 localStorage에 저장하는 방법 var array = [1,2,3]; var newArr = JSON.stringify(array); // JSON 형태로 변환 localStorage.setItem('num1', newArr); // array를 깨지지 않고 원본을 유지해서 저장하는 방법; var arr = localStorage.getItem('num1'); console.log(arr); // array가 아닌 문자이기 때문에 index로 꺼낼 수 없음 arr1 = JSON.parse(arr); // JSON으로 바뀐 array를 다시 array로 돌리는 방법 console.log(arr1[1]); localStorage.removeItem('num'); // key값이 num을 localStorage에서 삭제 localStorage.removeItem('num1'); // key값이 num1을 localStorage에서 삭제 // localStorage에 저장된 데이터의 값을 수정하고 싶을 때는 따로 코드가 없기 때문에 // JSON형태를 원래의 형태로 바꾼 후 // 데이터 수정 후 // 다시 JSON 형태로 변환
-
- window.sesstionStorage 객체로 탭/윈도우를 닫기 전까지 유지되는 데이터입니다.
- 웹스토리지는 LocalStorage와 Session Storage 2가지로 각각의 고유한 특성을 가지고 있어 필요에 따라 선택적으로 사용하게 됩니다. 이들은 window 객체의 프로퍼티로서 존재하며, 같은 Storage 객체를 상속하기 때문에 동일한 메소드를 가지고 있습니다.
Switch ~ Case
- Switch 문이란
- if문과 삼항연산자와 같이 조건에 따라 동작을 수행하는 조건문입니다.
- if문은 참, 것짓으로 조건을 판별하지만 switch문은 다양한 상황(Case)에 따라 실행됩니다.
- 기본문법
-
<!doctype> <html> <head> <meta charset="utf-8"> <title>switch</title> </head> <body> <div id="switch"> <h4>밥</h4> <button>돼지고기</button> <button>소고기</button> <button>오리고기</button> </div> <script> document.querySelector('#switch').addEventListener('click', (e) => { switch (e.target.innerHTML) { case '돼지고기' : alert('돼지고기를 좋아하시네요'); break; case '소고기' : alert('소고기를 좋아하시네요'); break; case '오리고기' : alert('오리고기를 좋아하시네요'); break; default : alert('취향을 선택해 주세요'); break; } }); // switch 기본 문법 // switch (변수) { // case 예상 변수 : // 실행문; // 실행문이 끝났으면 break; // 내가 원하는 만큼 case를 추가하고 // 위 case에 아무것도 해당하지 않는다면 default 작성도 가능 // 만약 break가 없을 시 실행되는 case문 밑의 모든 case문이 다 실행됨 // break 중요 // } //ex) // let sum = 2 + 0; // switch (sum) { // case 1 : // alert ('변수가 1이네요'); // break; // case 2 : // alert ('변수가 2네여'); // break; // case 3 : // alert ('변수가 3이네요'); // break; // default : // alert ('아무것도 해당되지 않아요'); // break; // } </script> </body> </html>
-