웹소켓 이전 요청 방식 웹소켓이 나오기전에 전형적인 웹 요청 방식은 client -> server로의 단방향 요청이다. 이전에는 이러한 방식이 문제가 되지 않았으나 점차 웹서비스와 기술이 다양해지면서 server -> client측으로 데이터를 전송할 수 있는 방법이 필요해졌다. 허나, http 통신 특성상 한번 통신을 하면 연결이 끊기기때문에 서버에서 데이터를 먼저 보낼수 있는 방법은 존재하지 않아 Polling, Long Polling, Streaming 와 같은 방식들 사용하여 비슷한 효과를 낼 수 있었다. WebSocket 사용자와 서버 사이의 양방향 연결 채널을 구성하는 HTML5 프로토콜이다. WebSocket API를 통해 서버로 메시지를 보내고 요청 없이 응답을 받아오는 것이 가능하다. 그..
이글은 https://medium.com/compass-security/samesite-cookie-attribute-33b3bfeaeb95의 내용을 기반으로 번역했습니다. 1. Same Site? SameSite는 브라우저가 사이트 간 요청과 함께 쿠키를 보내지 못하게한다. 주요 목표는 출처 간 정보 유출의 위험을 완화하는 것이다. 또한 크로스 사이트 요청 위조 공격(CSRF공격)에 대한 보호 기능도 제공한다. 플래그의 가능한 값은 Lax 또는 Strict이다. 2. 사용 예시 만약 인터넷 뱅킹을 사용하고 있는데 해당 사이트 거래 양식이 사이트 간 요청 위조 취약점에 취약한 것으로 가정한다. 인터넷 뱅킹 사용자(피해자)가 로그인(인증)이 되어 세션쿠키가 생성되어있다. 이때 공격자가 이메일, 트위터, 페..
동기(synchronous) 및 비동기(asynchronous) 동기 방식 - 하나의 요청이 처리되는 동안 다른 요청이 처리되지 못하며 요청이 완료되어야만 다음 처리가 가능한 방식. (ex. java) 비동기 방식 - 하나의 요청 처리가 완료되기 전에 제어권을 다음 요청으로 넘겨 Blocking 되지 않으며 다음 요청을 처리 하는 방식. (ex. nodejs) NodeJS 비동기 IO를 지원하며 Single-Thread 기반으로 동작하는 서버. 클라이언트의 요청을 비동기로 처리하기 위하여 이벤트가 발생하며 Event Loop가 처리. Event Loop가 처리하는 동안 제어권은 다음 요청으로 넘어가고 처리가 완료되면 Callback을 호출하여 처리완료를 호출측에 알려준다. 올바른 사용 환경 각 단위 작업..
Prototype? 의미 prototype: 원형, 견본 어떠한 객체가 만들어지기 위해 그 객체의 모태가 되는 오브젝트를 의미한다. 모든 함수 객체의 생성자는 prototype 프로퍼티를 가지고 있다. 객체 생성 함수는 생성자로 대응되며 각 객체에서 공유되어 사용할 프로퍼티 및 함수는 prototype 객체에 넣어서 사용한다. 객체 생성시 new키워드를 사용하여 생성한다. // 생성자 함수 function Person (name) { // 이름을 객체에 초기화한다. this.name = name; } // 객 객체에서 공유될 함수인 getName()을 prototype에 정의한다. Person.prototype.getName = function () { return this.name; } const pe..
ECMA Script? 자바스크립트는 1995년 넷스케이프 웹 브라우져에서 웹페이지에 동적인 요소를 구현하기 위해서 발명 됨. 이후 많은 브라우져를 지원하면서 자바스크립트가 공통적으로 잘 작동하기 위해서 표준 규격이 필요하게됨. Ecma 인터내셔널에 의해 제정된 ECMA-262 기술 규격에 의해 정의된 범용 스크립트 언어. 스크립트 언어가 준수해야 하는 규칙, 세부 사항 및 지침을 제공한다. JavaScript는 ECMAScript 사양을 준수하는 범용 스크립팅 언어이다. ECMA Script 지원이 상이한 이유 JavaScript 엔진에는 Google Chrome의 V8, Mozilla Firefox의 SpiderMonkey와 같이 여러 종류가 존재함. 새로운 버전의 ECMAScript를 발표한다고해서..
객체? 실생활에서 우리가 인식할 수 있는 사물로 이해할 수 있음. 일반적으로 여러 데이터와 함수로 이뤄진다. 객체란 이름(key)과 값(value)으로 구성된 프로퍼티(property)의 정렬되지 않은 집합. var person = { name: 'Park Jin', age: 31, introduce: function() { return 'my name is ' + this.name + ' and my age is ' + this.age } }; console.log('person.name :: ', person.name); // person.name :: Park Jin console.log('person.age :: ', person.age); // person.age :: 31 console.log..