섹션3 기술면접 준비를 하기위해 정리를 간단하게 하려고한다.
1. 재귀
간단하게 말하면 재귀는 자기 자신을 호출하는 함수이다.
자신의 복사본을 호출하여 더 작은 문제를 풀게함으로써 문제를 해결
위의 단계를 재귀 단계라고 한다. 재귀 단계는 더 많은 수의 재귀 단계를 만들 수 있다.
매 단계보다 함수는 원본 문제보다 조금 더 단순한 문제를 가지고 자기 자신을 호출
장점
- 직관적이며 간단하게 구현할 수 있다.
- 깊이 우선 탐색, 분할 정복 등 많은 알고리즘에서 사용되는 기초개념
단점
- 재귀 함수의 종료조건을 설정해주지않으면 무한루프에 빠질 수 있다.
- 재귀 호출의 깊이가 너무 깊어지면 너무 많은 메모리를 사용
- 불필요한 반복 연산을 하게 될 가능성이 있다.
2. Redux
리덕스는 그냥 쉽게말해서 데이터를 중앙집권화시켜서 데이터를 사용 및 관리를 편리하게 만드는 라이브러리이다.
리덕스를 사용하지않고 props drilling으로 상위 컴포넌트에서 모든 것을 관리하고
아래의 하위컴포넌트에게 내려주는 것은 앱의 크기가 커지면
상위컴포넌트의 코드가 너무 길어지기 때문에 유지보수가 매우 힘들어진다.
따라서 리덕스를 사용하면, 스토어를 사용하여 상태를 컴포넌트 구조의 바깥으로 놓고,
스토어를 중간자로 두고 리듀서는 액션을 받아서 스토어의 상태를 업데이트하거나, 상태가 업데이트 되었을 때
구독해놓은 컴포넌트는 새로운 상태를 전달받는다.
따라서, 여러 컴포넌트를 거쳐서 받아올 필요없이 아무리 깊숙한 하위 컴포넌트라고 해도
직속 부모에게서 받아오는것처럼 상태값을 골라서 받아올 수 있다는 것이다.
3. 인증 / 보안
쿠키
쿠키는 클라이언트가 http요청을 할때 stateless한 특징때문에
서버입장에서는 매번 요청이 독립적이기 때문에, 이미 방문했던 브라우저를 식별하기 어렵다.
따라서 쿠키를 통해 브라우저에 특정값을 심어두고, 다음요청때 쿠키를 보고 어떤 브라우저인지
식별하기 위해 사용된다.
Expires, MaxAge
그러나 이러한 정보가 너무 오래 유지되면 보안 문제가 발생할 수 있습니다.
따라서, 쿠키에 수명을 지정해줄 수 있다.
Expires, MaxAge라는 두가지 옵션이 있다.
Expires는 만료되는 시간을 설정하는 것이다. 예를들어, date를 이용하여
5월9일이라고 지정해두면 5월9일에 쿠키가 제거되는 것이다.
MaxAge는 쿠키를 얼마동안 유지할 것인지를 설정하는 것이다.
MaxAge는 초단위이기 때문에 예를 들어, 기한을 하루로 설정해준다면 (60*60*24)로 설정해주어야한다.
4. Custom Component
Styled-Components
Styled Components를 사용해보고 느낀점은
기존에는 css파일을 밖에 두고 각각 태그나 class, id를 가져다가 썻지만,
styled-components는 동일한 컴포넌트에서 컴포넌트 이름을 쓰듯 스타일을 지정하는 것이 많이 어색했다.
하지만 쓰다보니까 기존에는 id, class 이름을 중복되게 작성하면 안되었고, 이름들도 상당히 헷갈렸는데
그럴일이 없었기 때문에 쓰는 이유를 알 수 있었다.
useRef
리액트에서는 DOM을 직접 건드리지 못하기 때문에 useRef를 사용한다.
useRef는 원하는 특정 DOM을 직접 선택해서 컨트롤 할 수 있게 해주는 Hook이다.
엘리먼트의 크기를 가져오거나, 스타일변경, 포커스 등의 작업을 할 때 사용된다.
5. UI / UX
UX는 사용자 경험이라는 뜻으로 최종 사용자가 회사, 서비스 및 제품과 상호작용하는 모든 측면을 포함한다.
즉, 사용자가 어떤 시스템, 서비스, 제품 등을 직.간접적으로 이용하면서 느끼는 총체적 경험이다.
UI는 상호작용과 의사소통을 원활하게 해주는 접점에 존재하는것이다.
즉, 사용자가 사용하는 서비스나 제품의 화면 안에 모든 것을 의미한다.
사용자가 마주하게 되는 디자인, 레이아웃을 아우르는 개념이다.
6. 시맨틱태그
시맨틱 태그는 의미가 있는 태그를 말한다. 예를들면 header, main, footer 이런 태그들이 시맨틱 태그이다.
사용하는 이유는 그냥 시맨틱태그없이 div를 써버리면 된다고 생각할 수 있지만,
시맨틱태그를 사용함으로써 검색엔진 최적화, 쉬운 소스코드 구조화, 코드 가독성 향상 등의
많은 장점이 있기 때문에 시맨틱 태그를 사용할 수 있는 부분은 사용하는게 좋다.
7. 네트워크 심화
IP 프로토콜의 한계
IP프로토콜은 두 사용자가 패킷 교환 방식으로 정보를 주고받을때 사용하는 통신 규약이다.
이의 한계로는 비연결성, 비신뢰성이 있다.
패킷을 받을 대상이없거나 서비스 불능 상태여도 클라이언트는 서버의 상태를 파악할 방법이 없기 때문에
패킷을 그대로 전송하게 된다. 이것이 비연결성이다.
또한, 데이터를 전달하던 중 패킷이 중간에 소실되더라도 클라이언트는 이를 알 수 있는 방법이 없기 때문에
패킷의 순서가 바뀌거나 소실된 상태로 도착할 수도 있게된다. 이것이 비신뢰성이다.
HTTP 프로토콜의 특징
HTTP는 클라이언트가 서버에 요청을 보내면 서버는 그에 대해 응답을 보내는 클라이언트 서버 구조로 이루어져있다.
이는 무상태성, 비연결성의 특징을 가지고 있다. 무상태성은 서버가 클라이언트의 상태를 기억하지 않는다는 것이다. 즉, 상태 기억의 주체가 클라이언트가 되는 것이고, 중간에 요청을 처리하는 서버가 바뀌어도 클라이언트가 상태를 잘 담아서 요청을 보내면 응답을 제대로 받을 수 있다. 서버가 바뀌어도 응답에 문제가없다는 것은 필요에 따라 서버를 무한히 증설할 수 있다는 의미이다.
비연결성은 요청과 응답을 주고 받은 후에 서버와의 연결을 끊는 것이다. 서버와의 연결을 지속하지 않고 필요할 때만 연결하기 때문에 최소한의 자원만 사용하게 되는 장점이 있다. 하지만 여러 요청을 보낼 때 매번 서버 연결과 종료를 반복하기 때문에 비효율적이라는 한계가 있다. HTTP 1.1버전에서는 지속연결을 활용하여 이를 해결한다.