| http | https | |
|---|---|---|
| 포트 | 기본 포트 80 | 기본 포트 443 |
| 용도 | 이전 텍스트 기반 웹 사이트 | 모든 최신 웹 사이트 |
| 보안 | 추가 보안 기능 없음 | 퍼블릭 키 암호화에 SSL 인증서 사용 |
| 장점 | 인터넷을 통한 통신 지원 | 신뢰성 및 검색엔진 순위 개선 |
http : 암호화 되지 않은 데이터를 전송한다.
https : http 요청 및 응답을 SSL 및 TLS 기술에 결합한다.
프로그램은 순차, 분기, 반복, 참조로 구성된다.
함수형 프로그래밍의 장점
1. 상태가 없기 때문에 사이드 이펙트가 없다.
2. 재사용성이 높다.
3. 코드가 짧고 간결하다.
함수형 프로그래밍의 단점
1. 변수조작이 되지 않는다.
2. 함수를 잘개 쪼개야한다. 때문에 많아져서 복잡해진다.
3. 많은 숙련도가 요구된다.
명령형 프로그래밍 : 문제를 어떻게 해결해야 하는지 컴퓨터에게 명령을 내리는 방법
let a = [1, 2, 3, 4, 5];
for(let i = 0; i < 5; i++) {
if (a[i] % 2 === 0) {
console.log(a[i]);
}
}
선언형 프로그래밍 : 무엇을 해결해야 할지에 집중하고 해결방법은 컴퓨터에 위임하는 방법
[1, 2, 3, 4, 5]
.filter((item) => item % 2 ===0)
.forEach((item) => console.log(item));
javaScript는 멀티패러다임이 가능하므로 둘다 사용하자!
객체지향의 객체는 현실에 있는 것을 추상화한 것
(현실에 존재하는 것을 코드로 옮기는 것이 아니다!)
추상이란 사물이 지니고 있는 여러 측면중 특정한 부분만 보는 것을 의미한다.
자바스크립트의 객체 : 클래스 기반 언어처럼 속성(Attribute)과 행위(Method)를 정의할 수 있다.
// 객체 리터럴
const person = {
name: "송인재",
move : function(destination) {
console.log(`${name}`이(가) 이동합니다.);
},
};
// Object 생성자 함수
const person = new Object();
person.name = "송인재";
person.move = function(destination) {
console.log(`${name}`이(가) 이동합니다.);
};
// 생성자 함수
function Person(name, company, move) {
this.name = name;
this.move = function(destination) {
console.log(`${name}`이(가) 이동합니다.);
};
}
function Person(name, company, move) {
this.name = name;
Person.protype.getName = function() {
return this.name;
};
Person.protype.setName = function(name) {
this.name = name;
};
}
const song = new Person("송인재");
const kim = new Person("김인재");
console.log(song); // Person { name: '송인재" }
console.log(Person.constructor); // [Function, Function]
console.log(Person.__proto__); // [Function]
console.log(kim.constructor); // [Function: Person]
console.log(song.__proto__); // Person { getName : [Function], setName: [Function] }
function Person(name) {
this.name = name;
}
Person.prototype.getName = function () {
return this.name || "인재";
}
function Korean(name) {}
Korean.prototype = new Person();
const song = new Person("송인재");
const kim = new Korean("김인재");
console.log(song.getName()); // 송인재
console.log(kim.getName()); // 인재
function Person(name) {
this.name = name;
}
Person.prototype.getName = function () {
return this.name || "인재";
}
function Korean(name) {
Person.apply(this, arguments);
}
Korean.prototype = new Person();
Korean.prototype.setName = function(name) {
this.name = name;
};
const song = new Person("송인재");
const kim = new Korean("김인재");
console.log(song.getName()); // 송인재
console.log(kim.getName()); // 김인재
kim.setName("이인재");
console.log(kim.getName()); // 이인재
const song = {
name: "송인재",
getName: function() {
return this.name;
},
};
const kim = Object.create(song);
kim.name = "김인재";
console.log(song.getName()); // 송인재
console.log(kim.getName()); // 김인재
console.log(lee.__proto__); // {}
console.log(kim.__proto__); // { name: "송인재", getName: [Function: getName] }
Cookie
- 클라이언트에서 저장, 관리하는 데이터들, 브라우저를 닫아도 데이터를 유지할 수 있다.
- 서버에서 Set-Cookie를 응답 헤더로 내려주면 클라이언트는 받아서 저장한다.
- 클라이언트에서 자체적으로 조작할 수 있다.
- 각 상태에 수명을 정할 수 있다.
Set-Cookie
쿠키의 취약점
Session
- HTTP Session Id를 식별자로 사용자를 구분한다.
- 클라이언트는 HTTP Session Id를 쿠키 형태로 저장한다.
- 서버 자체적으로 기록하고 관리한다.
세션의 문제점
Web Storage
- 클라이언트에 데이터를 저장하기 위한 새로운 방법
- HTML5부터 등장했다.
- 쿠키에서 하기 힘든 것들을 지원하기 위해 등장했다.
- Local Storage와 Session Storage가 있다.
Local Storage
Session Storage
IndexedDB