HTTP의 정의와, 두 가지 특성에 대해 설명하시오
HTTPS의 인증서는 어떻게 보안을 하는지
세션과 토큰의 장단점
var, let, const 차이점
자주 사용하는 es6문법에 대해 설명하시오
async await이 발전한 순서
promise는 무엇이고, 세 가지 상태가 어떤건지
REST API란 무엇인가
this의 정의
react에서 function 과 class conponent의 차이
react에서 사용해본 hook에 대해 설명하시오
cors란 무엇인가
서버랑 클라이언트랑 구분되어 있는 이유
객체지향프로그래밍 vs 함수형 프로그래밍의 차이
HTTP는 서버와 클라이언트 간에 데이터를 주고받기 위한 통신규약이다.
비연결성과 무상태성이라는 특성이 있다.
비연결성은 서버와 클라이언트가 응답을 주고받는 순간에만 서로를 인식하고 있고, 응답이 끝난 후에는 서로를 기억하지 못하는 특성이다.
무상태성은 비연결성과 관련이 있는데, 웹페이지에서 어떤 요청과 응답을 해도 해당 정보가 유지되지 않는 특성이다.
HTTPS는 HTTP에 데이터 암호화가 추가된 프로토콜(통신규약)이다.
공개키/개인키 암호화 방식을 이용해 데이터를 암호화하고 있다.
공개키와 개인키는 서로를 위한 1쌍의 키이다.
공개키는 모두에게 공개가능한 키이고, 개인키는 나만 알고 있어야 하는 키이다.
CA : certificate authority ( 인증서 발급기관 )
동작원리는
1.개발회사는 어플리케이션에 HTTPS를 적용하기 위해 CA에게 인증서를 발급받아서,
2.개인키로 암호화를 해서 브라우저에 데이터를 보낸다.
3.그럼 브라우저는 이미 인증서를 발급한 회사의 공개키를 가지고 있어서 복호화를 할 수 있다. (이 과정을 위해 금액을 지불한다.)
4.그리고 공개키로 암호화를 해서 어플리케이션에 데이터를 보내면 개인키로 다시 복호화한다.
때문에 제 3자가 중간에서 탈취해도 암호화가 되어있어서 정보가 유출되지 않는다.
세션
웹브라우저 접속부터 창을 종료할 때까지 유지된다.
(express-session 라이브러리를 이용하여, 유저 아이디가 담긴 세션을 암호화 한 후 쿠키에 담아 전송했었다.)
장점 :
신뢰할 수 있는 유저인지 서버에서 추가로 확인가능
각 클라이언트에게 고유 ID를 부여하여, 정확하게 구분함
민감한 정보는 서버에서 관리해서 쿠키보다 안전함
단점 :
세션을 서버에 저장해서 사용자가 많을 경우, 메모리 소모 크다.
하나의 서버에서만 접속상태를 가지므로 분산에 불리
토큰
장점 : 서버의 부담을 덜어줌. 여러개의 서버를 운영할 때 유용.
단점 : 토큰이 탈취될 가능성이 있다 (만료시간을 둬서 보완)
var은 function 단위.
let, const는 block 단위다.
let은 변수, const는 상수.
var는 다시 재선언해서 할당해도 에러가 뜨지않고 값이 전부 뜬다.
코드량이 많아지는 경우 어디서 값이 바뀌는지 찾을 수 없다.
이를 보완하기 위해 ES6문법으로 let, const가 나왔다.
let은 재선언이 불가하지만 재할당은 가능하다.
const는 재선언도 불가하고 재할당도 불가하다.
기본적으로 const를 우선으로 사용하고, 재할당 필요성이 있는 경우 let을 쓰면된다.
콜백함수 -> promise -> async await
비동기 작업의 결과를 알려주는 객체.
프로미스에는 3가지 상태가 있다. 1. 대기(pending) 2. 이행(fulfilled) 3. 거부(rejected)
프로미스의 인자는 실행함수이다.
return new Promise (resolve, reject) ⇒ {}
(Representational State Transfer)HTTP 통신에서 자원에 대한 CURD 요청을 resource, method 로 하는 방식. 자원의 내용은 JSON, XML 등 다양한 언어로 표기가능.
(메소드 : GET, POST, PUT, PATCH, DELETE)
장점:
HTTP 표준에만 따르면 모든 플랫폼에서 사용가능.
메세지를 읽는 것만으로 메세지 의도 알수있음
서버와 클라 역할이 분명하게 분리되어 있어서 의존성이 줄어들고 개발해야 할 내용 명확
단점:
메소드 형태가 제한적
함수 실행 시 호출 방법에 의해 결정되는 특별한 객체
1. 메소드 호출할 때, 온점 왼쪽에 있는 객체
2. new 키워드 이용할 때 새롭게 생성된 인스턴스 객체
3. call, apply 호출할 때 첫번째 인자로 전달된 객체
화살표함수와 this 같이 쓰지 않기! (this 가 제대로 작동을 안함)
React Hook 은 클래스 컴포넌트를 사용하지 않고,
함수 컴포넌트 내에서 상태를 쓸 수 있는 새로운 기능이다.
useState
const [count, setCount] = useState(0)
로 정의한다.
setCount(count + 1)
방식으로 상태를 업데이트할 수 있다.
useEffect
주로 side effect를 실행시킬 때 사용한다.
두번째 인자가 변경될 때만 작동한다.
빈 배열을 넣으면, componentDidMount처럼 1회만 작동한다.
CORS(cross origin resource sharing). 다른 오리진 간에 리소스를 공유하는 것이다.
같은 오리진끼리 요청하고 응답하는 것은 상관없지만, 오리진이 다르면 해당 정책을 따르게 된다.
브라우저 보안 목적이다.
보통 클라이언트와 서버가 요청과 응답을 주고받을 때 일어난다.
Express 기반의 서버면 cors 모듈을 활용하여, 서버로 요청하는 클라이언트의 오리진을 설정하여 응답을 해줄 수 있다.
하는 역할 다르다.
클라이언트는 필요한 데이터를 요청하는 역할을 하고,
서버는 클라이언트의 요청을 받아 데이터베이스와 통신하여 필요한 데이터를 내보낸다.
객체지향형 프로그래밍
객체지향프로그래밍이란 객체를 이용해서 프로그래밍을 하자는 하나의 방법론이다.
필요한 데이터를 추상화시켜 상태와 기능을 지닌 객체로 만들고 이들을 상호유기적으로 연결시키는 프로그래밍이다.
장점은 코드 재사용이 용이하고, 유지보수가 쉽다. 큰 프로젝트에 적합하다.
함수지향형 프로그래밍
함수형 프로그래밍이란 거의 모든 것을 순수 함수로 나누어 해결하는 기법으로, 작은 문제를 해결하기 위한 함수를 작성하는 프로그래밍이다.
가변데이터와 사이드이펙트를 배제하려고 노력한다.
자바스크립트 세계에서 함수는 일급객체(first-class citizen)다.
잘못되거나 업데이트해야 할 부분이 있으면 댓글로 알려주세요!
피드백에 열려있습니다 :)