지식 보충을 위해 조금씩 정리를 해보자! #7
Name: 쿠키의 이름 (보통 key값으로 원할때 특정 쿠키의 값을 가져올 수 있다.)
Value: 쿠키의 저장된 값
Expires/Max-Age: 쿠키의 삭제 시간
Domain: 쿠키가 사용되는 도메인을 지정
Path: 쿠키를 반환할 경로를 설정, 설정된 경우 Path가 일치하는 경우에만 쿠키를 전송한다.
Secure: 보안 연결 설정
HttpOnly: Http외에 다른 통신 사용 가능 설정
Session Cookie: 만료시간을 설정하고 메모리에만 저장되며, 브라우저 종료시 쿠키를 삭제한다.
Persistent Cookie: 장기간 유지되는 쿠키( Max-Age설정)로서, 파일로 저장되어 브라우저 종료와 관계 없이 사용 가능하다.
Secure Cookie: Https 에서 사용하고 쿠키의 정보를 암호화한다.
Third-Party Cookie: 방문한 도메인과 다른 도메인의 쿠키로, 보통 광고 배너를 관리 할때 유입경로를 추적하기 위해 사용한다.
Cookie의 MaxAge 옵션은 쿠키를 얼마나 유지할 것인지를 결정하고, Expires 옵션은 언제 폐기할 것인지 지정하는 옵션이다.
Expires의 경우, 브라우저는 설정된 유효 일자까지 쿠키를 유지하다가, 해당 일자가 도달하면 쿠키를 자동으로 삭제한다. 이때 쿠키의 유효 일자는 반드시 GMT(Greenwich Mean Time) 포맷으로 설정되어야 한다.
max-age는 expires 옵션의 대안으로, 쿠키 만료 기간을 설정할 수 있게 한다. 현재부터 설정하고자 하는 만료일시까지의 시간을 초로 환산한 값을 설정한다.
두 옵션을 동시에 설정하면 MaxAge가 더 높은 우선 순위로 적용된다.
이 두 옵션중 하나라도 설정하지 않으면 해당 쿠키는 브라우저가 닫힐 때 폐기 되기 때문에 쿠키를 빠르게 폐기하고 싶다면 옵션을 설정하지 않는 것이 좋고, 쿠키를 계속 사용하고 싶다면 두 옵션 중에 하나라도 설정해주는 것이 좋다.
순수 함수에 대한 정의를 내리자면 동일한 인자가 전달되면 항상 동일한 결과를 반환하는 함수(코드 블록)다.
순수 함수는 동일한 매개변수가 주어지면 항상 결과를 반환해야하고, 원래 목적과 다른 효과(side effect) 를 만들지 말아야한다.
자바스크립트의 객체, 배열, 함수는 참조 타입(reference type)이다. 참조 타입은 그 값이 저장되는 것이 아니라, 그 값을 저장하고 있는 주소를 담고 있다.
만약 어떤 객체(또는 다른 참조타입)를 함수의 인자로 보내고, 함수 안에서 인자로 주어진 객체의 내용을 변경하면, 원본 객체도 그 값이 변하게 된다.
다시 말해, 외부에서 정의된 참조 타입을 함수 내부에서 변경시키는 것이다.
// impure addToCart mutates existing cart
const addToCart = (cart, item, quantity) => {
cart.items.push({
item,
quantity
});
return cart;
};
test('addToCart()', assert => {
const msg = 'addToCart() should add a new item to the cart.';
const originalCart = {
items: []
};
const cart = addToCart(
originalCart,
{
name: "Digital SLR Camera",
price: '1495'
},
1
);
const expected = 1; // num items in cart
const actual = cart.items.length;
assert.equal(actual, expected, msg);
assert.deepEqual(originalCart, cart, 'mutates original cart.');
assert.end();
});
// Pure addToCart() returns a new cart
// It does not mutate the original.
const addToCart = (cart, item, quantity) => {
const newCart = lodash.cloneDeep(cart);
newCart.items.push({
item,
quantity
});
return newCart;
};
test('addToCart()', assert => {
const msg = 'addToCart() should add a new item to the cart.';
const originalCart = {
items: []
};
// deep-freeze on npm
// throws an error if original is mutated
deepFreeze(originalCart);
const cart = addToCart(
originalCart,
{
name: "Digital SLR Camera",
price: '1495'
},
1
);
const expected = 1; // num items in cart
const actual = cart.items.length;
assert.equal(actual, expected, msg);
assert.notDeepEqual(originalCart, cart,
'should not mutate original cart.');
assert.end();
});
순수 함수가 가지는 가장 큰 매력은 바로 실행되는 시점과 상관없이 항상 동일한 결과를 만들어내는 것이다. 순수 함수는 누가 언제 실행시키든 항상 동일한 기능을 수행한다. 다르게 말하면 멀티스레드 환경에서든 비동기적인 상황에서든 언제나 안전하게 믿고 사용할 수 있다. 반면 순수하지 않은 함수는 외부에 정의되어 있는 요소에 따라 결과가 판이하게 바뀌기 때문에 어떤 결과를 만들어 낼지 예측이 불가능하다.
순수 함수는 예측이 가능한 결과를 반환하기 때문에 다른 순수 함수들과 조합해서 사용하기가 용이하다. 즉 재사용성이 좋다고 말할 수 있고 대체적으로 하나의 기능에 충실하기 때문에 응집도가 매우 높아 유지보수가 편리한 부분도 있다.
결론적으로, 순수 함수를 사용하면 특정 함수가 다른 함수에 미치는 예기치 못한 영향을 최소화할 수 있다. 또한 함수를 만들고 실행할 때 어떤 결과값을 리턴할지 예측할 수 있다는 장점이 있다.
출처: