JSX란 무엇인가요?
가독성이 좋도록 기존 자바스크립트 문법을 이용한 유사 자바스크립트의 확장된 버전의 언어이다.
React란 무엇인가요?
UI를 만들기 위한 선언적인 자바스크립트 라이브러리이다. 컴포넌트라는 코드의 레고 블록을 이용해 복잡한 UI를 구성한다.
React를 사용하는 이유는 무엇인가요?
DOM을 직접 조작하지 않고 가상돔을 이용함으로써 코드가 간결해지고, 유지보수가 용이해진다. 재사용 가능한 컴포넌트를 사용함으로써 재사용성이 높아진다.
CRA란 무엇인가요?
Create-React-App 줄임말으로 리액트 프로젝트를 시작하는데 필요한 개발 환경을 세팅 해주는 도구이다.
컴포넌트란 무엇인가요?
프로그래밍에서 독립된 모듈은 다 컴포넌트라 하고, 특히 리액트에서는 재사용 가능한 UI를 말한다.
React Sass란 무엇인가요? 사용하는 이유는 무엇인가요?
css의 전 처리기 중 하나로 코드 중복을 줄일 수 있다. 또한 일반적인 프로그래밍 기법인 변수화/함수화(+네스팅) 같은 기능으로 유지보수성이 css보다 뛰어나다.
React Router란 무엇인가요? 사용하는 이유는 무엇인가요?
라우터는 특별한 라이브러리이자 컴포넌트이다. 다른 컴포넌트로 이동 가능하도록 해준다.
라이브러리와 프레임워크의 차이점은 무엇인가요?
mock data를 사용하는 이유는 무엇인가요?
프론트엔드 개발을 진행하려는데 필요한 백엔드 API가 완성이 안 되었을 경우에 백엔드 API가 완성 될 때까지 기다리는 게 아니라 mock data를 만들어 데이터가 들어오는 상황을 미리 대비하고, 데이터에 맞게 UI가 의도한대로 구현되는지 먼저 확인하기 위해 사용한다.
SPA란 무엇인가요?
SPA(Single Page Application)는 페이지가 하나인 어플리케이션을 말하며 새로운 페이지를 로드하지 않고 하나의 페이지 안에서 필요할 데이터만 가져오는 형태를 가진다.
useEffect는 무엇인가요?
리액트의 컴포넌트가 렌더링 이후에 어떤 일을 수행해야 하는지 설정해주는 함수로, 렌더링, 변수의 값, 혹은 오브젝트가 달라지게 되면 그것을 인지하고 업데이트 해준다. useEffect는 콜백 함수를 부르게 되며 변경 사항에 따라 하나 또는 여러 개의 함수들을 동작시킬 수 있다.
함수형 컴포넌트에서 side effect를 발생해야하는 경우는 언제인가요?
데이터 가져오기, 구독(subscription) 설정하기, 수동으로 React 컴포넌트의 DOM을 수정하는 것까지 이 모든 것이 sideEffect이다. React가 DOM을 업데이트한 뒤 추가로 코드를 실행해야 하는 경우가 있다. 네트워크 리퀘스트, DOM 수동 조작, 로깅 등은 정리(clean-up)가 필요 없는 경우들이다.
state와 props의 차이는 무엇인가요?
state를 선언하기 위해서 어떤 훅을 사용하나요?
함수형 컴포넌트 안에 state를 추가하고 싶을 때 훅을 사용하는데 useState는 가장 기본적인 훅으로서 함수형 컴포넌트에서도 가변적인 상태를 지니고 있을 수 있게 해준다. 하나의 useState 함수는 하나의 상태 값만 관리할 수 있기 때문에 만약 컴포넌트에서 관리해야 할 상태가 여러개라면 useState를 여러번 사용하면 된다.
React의 특징(으로 시작해서 연계 질문 계속 가능)
컴포넌트 기반의 라이브러리
헤더, 메인 콘텐츠, 버튼, 사이드바 메뉴 같은 것들을 헤더 컴포넌트, 사이드바 컴포넌트와 같이 하나의 컴포넌트로 묶어서 관리할 수 있다. 따라서 리액트를 개발하다가 특정 부분에서 오류가 생기면 그 컴포넌트만 수정하여 사용할 수 있어 코드의 재사용성과 유지보수성을 증가시켜준다.
Virtual DOM
React에서는 인터랙션이 발생하게 되면 바로 브라우저의 DOM에 접근하여 변화를 반영하는 것이 아니라 Virtual DOM에 한 번 렌더링하고, 이를 기존의 DOM과 비교하여 변화가 필요한 곳만 렌더링한다. 이런 작업을 통해 실제 브라우저에서 DOM의 조작을 최소화해줄 수 있고 이것은 곧 성능 문제로 직결되므로 중요할 수밖에 없다.
단방향 데이터 흐름
리액트는 데이터의 흐름이 한 방향으로만 흐른다. 데이터가 내려가기만 하고 밑에서 데이터를 올려줄 수 없기 때문에 부모의 데이터를 바꾸기 위해서는 state를 이용해야 한다.
map 함수가 무엇인지 설명해주세요.
map 함수는 배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환하는 메소드이다.
버튼을 클릭했을 때 alert 창을 띄우고 싶습니다. 리액트에서 어떻게 구현할까요?
컴포넌트 내에서 alert 창을 띄우는 메소드를 정의한다. 그리고 버튼 태그에 onClick 이벤트를 추가하고 그 안에 메소드 이름을 추가해주면 된다.
Virtual DOM이란 무엇인가요?
가상 돔(Virtual DOM)은 이전 UI 상태를 메모리에 유지해서, 변경될 UI의 최소 집합을 계산하는 기술이다. 이 기술 덕분에 불필요한 UI 업데이트는 줄고, 성능은 좋아진다.
리액트에서 단방향 데이터 흐름이란 무엇인가요?
위(부모 요소)에서 아래(자식 요소)로만 props를 통해 데이터가 전달된다. 이러한 점의 이점은 데이터의 흐름이 일정하기 때문에 debugging에 용이하다.
fetch 함수는 무엇인가요?
코드리뷰란 무엇인가요? 코드리뷰는 왜 필요한가요?
코드리뷰라 함은 간단히 말해, 내가 작성한 코드를 제3자가 검토하는 것이다. 이를 통해 더 나은 퀄리티의 코드로 거듭나는 것 뿐 아니라, 새로운 기술적인 지식을 얻을 수도 있고 혹은 내가 해결해야 하는 문제에 대해 새로운 관점을 습득 할 수도 있다.
json이란 무엇인가요?
네트워크를 통해 데이터를 주고받는 데 자주 사용되는 경량 데이터 형식이다. 변화하는 데이터를 넣음으로서 웹페이지가 항상 같은 내용이 아닌 변화되는 데이터에 따라 달라지는 동적 변화가 일어나는 웹사이트를 만들 수 있다.
json 목 데이터와 javascript 변수로 만든 목 데이터의 차이에 대해 설명해주세요.
JSON Object는 JS Engine 메모리 안에 있는 데이터 구조이고, JSON은 객체의 내용을 기술하기 위한 text 파일이라는 점이 다르다.
인증 인가 흐름에 대해서 설명해주세요.
인증 : 사용자가 누구인지 확인하는 절차
등록된 아이디와 비밀번호를 입력한다.
암호화되어 DB에 저장된 사용자의 비밀번호가 서로 일치하는지 비교한다.
2-A. 일치하면 로그인한다.
2-B. 일치하지 않을 시, 로그인에 실패한다.
로그인에 성공하면, Access Token을 클라이언트에 전송한다.
최초 로그인 성공 후, 다음부터는 Access Token을 첨부하여 서버에 요청을 전송함으로써 매번 로그인하는 과정을 생략할 수 있다.
인가 : 사용자가 요청하는 요청을 실행할 수 있는 권한 여부를 확인하는 절차
인증(인가가 아닌 인증이다!!) 절차를 통해, Access Token을 생성한다. 이 토큰은 사용자의 정보를 담은 상태이다. (ex. 사용자 아이디 값)
사용자가 요청을 보낼때, Access Token을 첨부하여 보낸다.
서버는 해당 Access Token을 복호화하고, 정보를 얻는다. (Access Token에 담긴 정보)
얻은 정보를 사용하여, DB에서 사용자 권한을 확인한다.
A. 사용자의 권한이 확인되면, 해당 요청을 처리하도록 한다.
B. 권한이 없다면, 에러코드를 출력한다. 일반적으로 Unauthorized Response(401) 에러코드를 출력한다.