본문 바로가기

반응형
[코드잇 스프린트 풀스택 4기] Next.js를 사용하는 이유 Next.js란?React 라이브러리의 프레임워크.React를 사용하면 되는데 왜 또 Next.js를?Next.js를 사용하는 가장 큰 이유는 바로 SSR(Server Side Rendering)때문이다.물론 React에서도 SSR 구현이 가능은 하지만 굉장히 복잡한 일인데, Next.js는 이 SSR을 보다 쉽게 구현할 수 있도록 도와준다.왜 SSR이 필요한가?가장 중요한 필요성은 SEO(검색 엔진 최적화)이다.이전 포스트에서도 설명했듯 CSR은 최초에 빈 HTML문서를 서버에서 응답해주므로 검색엔진에 콘텐츠가 노출되기 어렵다.그러나 Next.js의 SSR은 최초 원하는만큼 렌더링된 HTML을 응답하고 이후에 부족한 부분을 다시 렌더링할 수 있고 이에 SSG방식까지 생성가능하므로 상대적으로 큰 이점이 ..
[코드잇 스프린트 풀스택 4기] 웹 페이지 랜더링 방식 CSR, SSR, SSG CSR(Client-side Rendering)CSR는 클라이언트(브라우저)에서 페이지를 렌더링하는 방식으로, React와 Vue 등이 이 방식을 사용 CSR의 동작 방식1. 클라이언트가 특정 페이지를 요청2. 서버에서는 빈 HTML 문서를 클라이언트에 전달3. 클라이언트가 HTML 문서에 함께 포함된 정적 리소스(CSS, 이미지 등), 번들 자바스크립트 파일을 다운로드4. 클라이언트에서 번들 자바스크립트 파일을 실행. (자바스크립트에 의해 페이지가 렌더링되며, 이 때 사용자는 렌더링된 페이지를 볼 수 있음,  아직 API에서 데이터를 받아오지 않았기 때문에 로딩(빈 화면) 혹은 임시 데이터 표시)5. 페이지 렌더링이 완료된 후, (useEffect 내의) API 요청 코드가 실행6. API에서 받아온 ..
[코드잇 스프린트 풀스택 4기] 관계형 데이터 베이스 데이터를 테이블의 형태로 관리하는 데이터베이스 모델로, 각 테이블들은 관계로 연결되어 있다. 현재 가장 보편화된 모델이다.MySQL, Oracle, PostgreSQL….장점데이터 일관성과 무결성 보장DB용량이 noSQL에 비해 적다?표준화된 SQL을 사용하므로 학습이 쉽다데이터 처리 속도가 빠르다복잡한 쿼리에 적합단점대규모 데이터 처리에 한계가 있다.테이블 간의 관계가 복잡해질 수록 성능이 저하될 가능성이 있다.스키마 수정이 어렵다.수평적 확장에 한계가 있다.
[코드잇 스프린트 풀스택 4기] 데이터 베이스 정규화란 정규화(Normalization)란정규화의 기본 목표는 테이블간에 중복된 데이터를 허용하지 않는 것이다. 이로써 무결성을 유지할 수 있으면 DB의 저장 용량 역시 줄일 수 있다.제 1 정규화테이블 컬럼이 원자값(하나의 값)을 갖도록 테이블을 분해하는 것제 2 정규화제 1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것완전 함수 종속이란, (기본키가 복합키일 경우) 기본키의 부분 집합이 결정자가 되어서는 안 된다는 것을 의미한다.제 3 정규화제 2정규화를 진행한 테이블에 대해 이행적 종속이 없도록 테이블을 분해하는 것이행적 종속이란, A→B가 성립하고 B→C가 성립할 때 A→C가 성립하는 것을 말한다.이런 경우 A와 B, B와 C로 묶어 테이블을 2개로 분리해야 한다.BCN..
[코드잇 스프린트 풀스택 4기] 리액트 생명 주기(Life Cycle)란 함수형 컴포넌트 라이프 사이클 리액트의 컴포넌트는 생명 주기(이하 라이프 사이클)를 가진다. 라이프 사이클이란 컴포넌트가 생성되고 사용되고 소멸되기까지의 일련의 과정을 말하며 이 라이프 사이클 동안 특정 시점에서 자동으로 호출되는 이벤트가 있는데 이를 라이프 사이클 이벤트라고 한다.리액트는 이 라이프 사이클 이벤트를 기반으로 컴포넌트의 동작을 제어하고 작업 수행을 향상시키는 사용자 정의 로직을 구현할 수 있다. 예를 들면 재렌더링 여부를 정할 수 있는 이벤트를 통해 불필요한 렌더링을 방지할 수 있으며 이외에도 원하는 시점에 서버에서 데이터를 가져오거나 DOM이벤트 또는 다른 프론트엔드 라이브러리와 통합할 때 사용할 수 있다.3가지 이벤트 분류Mounting리액트 엘리먼트(컴포넌트 클래스의 인스턴스)를 D..
[코드잇 스프린트 풀스택 4기] 리액트 배열 렌더링 시 key를 지정해야 하는 이유 리액트에서는 컴포넌트가 state변경, 이벤트 발생 등에 의해 렌더링 될때 virtual DOM을 통해 이전의 렌더링 결과와 새로운 렌더링 결과를 비교하고 변경된 부분만 재렌더링한다. 이때 배열도 마찬가지로 각 원소를 하나씩 비교하여 변경된 부분을 감지하게 되는데 이때 배열의 key가 어떤 요소가 변경이 되어 재렌더링이 필요한지를 식별하는데에 필요한 역할을 하게 된다.그런데 배열의 Index를 사용하여 key를 지정하게 되면 문제가 발생한다. 배열의 index는 배열의 수정에 의해 변경될 수 있기 때문에 엘리먼트를 구분하는 고유한 값이 될 수 없기 때문이다. 또한 배열이 변경되면 각각의 엘리먼트들이 재렌더링되므로 불필요한 렌더링을 발생시킬 수 있다.물론 배열이 절대 변경될 가능성이 없다면 사용해도 좋겠으..
[코드잇 스프린트 풀스택 4기] 리액트 useMemo, useCallback 모두 리액트에서 ‘메모이제이션’을 담당하는 hook**메모이제이션(memoization)**이란 동일한 계산을 반복해야할 때 계산의 결과를 캐싱하고 이를 재사용하도록 하는 기술불필요한 계산을 줄여줌성능향상, 코드 간결성useMemo메모이제이션된 값을 반환하는 리액트 hookconst memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);첫번째 인자는 값을 연산하고 반환하는 함수, 두번째 인자는 의존성 배열렌더링 시 의존성 배열값의 변경 여부에 따라 실행의존성 배열이 없으면 렌더링할 때마다 매번 실행컴포넌트내에 특정 변수가 변경되었을 때에만 실행되면 되는 코드가 있을 경우 useMemo를 사용하면 불필요한 함수 실행을 줄일 수 있음주의할 점..
[코드잇 스프린트 풀스택 4기] 리액트(React)의 렌더링 방식 리액트 렌더링이란컴포넌트의 props와 state를 기반으로 UI를 구성하고 이를 통하여 어떤 DOM결과물을 브라우저에게 제공할 것인지 계산하는 일련의 과정 리액트에서 렌더링이 일어나는 경우최초 렌더링리렌더링클래스형 컴포넌트의 setState가 실행되는 경우클래스형 컴포넌트의 forceUpdate가 실행되는 경우함수형 컴포넌트의 useState의 setter가 실행되는 경우함수형 컴포넌트의 useReducer의 dispatch가 실행되는 경우컴포넌트의 key props가 변경되는 경우props가 변경되는 경우부모 컴포넌트가 렌더링되는 경우 리액트 렌더링 과정컴포넌트 트리의 최상단 루트로부터 아래로 내려가며 업데이트가 필요한 컴포넌트를 찾는다.업데이트가 필요한 컴포넌트를 만나면 클래스형 컴포넌트는 클래스 ..

반응형