728x90
반응형

 

useSession

ex.

import { useSession, signIn, signOut } from "next-auth/react";

function MyComponent() {
  const { data: session } = useSession();

  if (session) {
    return (
      <>
        <p>Signed in as {session.user.email}</p>
        <button onClick={() => signOut()}>Sign out</button>
      </>
    );
  }
  return (
    <>
      <p>Not signed in</p>
      <button onClick={() => signIn()}>Sign in</button>
    </>
  );
}

: Next.js의 인증 라이브러리인 next-auth에서 제공하는 후긍로, 사용자의 세션 정보를 관리하고 접근할 수 있으며, 현재 로그인된 사용자의 세션 데이터를 가져올 수 있고, 로그인 상태를 확인하고 이에 따라 UI를 조건부 렌더링 할 수 있음.

로그인 상태에 따라 다른 UI를 렌더링 하며, signIn함수와  signOut함수를 통해 로그인과 로그아웃을 처리함.

 

 

 

useRouter

ex.

import { useRouter } from "next/router";

function MyComponent() {
  const router = useRouter();

  const handleClick = () => {
    router.push("/about"); // "/about" 페이지로 이동
  };

  return (
    <div>
      <p>Current path: {router.pathname}</p>
      <button onClick={handleClick}>Go to About Page</button>
    </div>
  );
}

: next.js에서 제공하는 훅으로, 라우터 객체에 접근할 수 잇게 해줌. 이를 통해 페이지 전환, 쿼리 파라미터 접근, 현재 경로 정보 등을 얻을 수 있음. useRouter로 현재 경로와 같은 라우팅 정보를 가져올 수 있으며, router.push로 프로그램적 페이지 이동이 가능함.

 

특징

1. 페이지 이동 : 프로그램적으로 페이지를 이동하거나, 쿼리 파라미터를 변경할 수 있음.

2. 라우팅 정보 접근 : 현재 경로, 쿼리 파라미터, 페이지 간 전환 등의 라우팅 정보를 얻을 수 있음.

 

✏ 쿼리 파라미터(Query Parameters)

: 웹 애플리케이션에서 URL을 통해 서버로 데이터를 전달하기 위해 사용되는 방법. 쿼리 파라미터는 주로 클라이언트가 서버에 특정 요청을 보낼 때 추가 정보를 전달하거나 필터링, 검색, 페이지네이션 등의 목적을 위해 사용됨.

 

구조

기본 구조

ex.

http://example.com/page?parameter1=value1&parameter2=value2

: URL에서 쿼리 파라미터는 물음표(?)로 시작하며, 키=값 쌍의 형태로 지정됨. 여러 개의 쿼리 파라미터는 앰퍼샌드(&)로 구분됨.

 

예시.

https://example.com/search?query=javascript&sort=asc&page=2

query=javascript : query라는 파라미터에 javascript라는 값을 전달함.

sort=asc : sort라는 파라미터에 asc라는 값을 전달하여 데이터를 오름차순으로 정렬하라는 의미.

page=2 :  page라는 파라미터에 2라는 값을 전달하여 2번째 페이지의 데이터를 요청함.

 

사용 사례

1. 검색 : 사용자가 입력한 검색어를 서버로 전달하여 관련된 데이터를 필터링함.

2. 필터링 : 특정 조건에 맞는 데이터를 필터링하기 위해 사용됨.

3. 정렬 : 데이터를 특정 기준에 따라 정렬함.

4. 페이지네이션 : 대량의 데이터를 나눠서 보여줄 때, 특정 페이지의 데이터를 요청함.

5. API 요청 : API에서 특정 데이터를 요청할 때 쿼리 파라미터를 사용하여 원하는 데이터를 가져옴.

 

 

 

clsx

: css 클래스 이름을 조건에 따라 쉽게 조합할 수 있도록 도와주는 작은 Javascript 유틸리티.

예를 들어, 여러 클래스를 조건부로 적용하거나, 배열이나 객체 형태의 클래스를 사용할 수 있음.

 

ex.

import clsx from 'clsx';

const isActive = true;
const buttonClass = clsx('btn', {
  'btn-active': isActive,
  'btn-disabled': !isActive,
});

// buttonClass는 "btn btn-active"로 설정됩니다.

 

 

 

format (date-fns)

: Javascript의 날짜를 다루기 위한 라이브러리로, format 함수는 날짜를 특정 형식으로 포맷팅하는 데 사용됨.

 

ex.

import { format } from 'date-fns';

const date = new Date();
const formattedDate = format(date, 'yyyy-MM-dd');
console.log(formattedDate); // "2024-08-09"

//여기서의 format 함수는 현재 날짜를 년-월-일 형식으로 반환

 

 

 

쿠키

:웹 브라우저에 저장되는 작은 데이터 조각으로, 클라이언트와 서버 간의 상태나 세션 정보를 저장하는데 사용됨.

쿠키는 서버가 클라이언트에 설정하고, 이후 클라이언트가 해당 서버로 요청할 때마다 자동으로 포함됨.

도메인, 경로, 만료일, 보안 플래그 등을 설정할 수 있음

 

 

 

세션

: 서버에 저장되는 사용자별 데이터의 집합. 세션은 서버에서 관리되며 ,클라이언트는 세션 ID를 통해 자신의 세션에 접근함. 세션은 일반적으로 클라이언트가 서버와 상호작용하는 동안 상태를 유지하기 위해 사용되며, 세션 ID는 쿠키로 관리되기도 함.

 

 

 

쿠키와 세션의 차이

1. 저장 위치

쿠키  : 클라이언트(브라우저) 측에 저장

세션 : 서버 측에 저장

 

2. 보안

쿠키: 클라이언트 측에 저장되므로 상대적으로 보안에 취약함. 만료 기간을 지정할 수 있음.

세션 : 서버 측에서 관리되며, 상대적으로 보안성이 높음. 일반적으로 브라우저를 닫으면 세션이 종료됨.

 

3. 사용 목적

쿠키 : 사용자의 설정이나 로그인 상태 유지 등 클라이언트 측 정보를 저장.

세션 : 사용자 로그인 정보 등 보안이 필요한 상태를 서버 측에서 유지

 

 

 

가상 DOM (Virtual DOM)이 렌더링 시 기여하는 방식

: 가상 DOM은 실제 DOM의 가벼운 사본을 메모리에 유지하여 React와 같은 프레임워크에서 빠르고 효율적인 업데이트를 가능하게 함. 

변화가 발생하면 가상 DOM은 이를 기존 가상 DOM과 비교하여 최소한의 변경사항을 실제 DOM에 반영함. 이를 diffing 알고리즘이라 하며, 실제 DOM 조작보다 훨씬 빠르게 수행됨.

가상 DOM 덕분에 React는 효율적으로 UI를 업데이트 할 수 있으며, 불필요한 DOM 변경을 줄여 성능을 최적화 함.

 

 

 

HTTP와 HTTPS

HTTP : Hyper Text Transfer Protocol의 약자로, 웹 브라우저와 서버 간에 하이퍼텍스트 문서(HTML)을 전송하는 프로토콜. HTTP는 기본적으로 텍스트를 암호화하지 않고 전송하므로 보안에 취약.

 

HTTPS : Hyper Text Transfer Protocol Secure의 약자로, HTTP에 SSL/TLS 프로토콜을 추가하여 데이터를 암호화하여 전송함. 이는 보안성과 무결성을 보장함.

 

 

✏ SSL / TLS 프로토콜

: SSL(보안 소켓 계층, Secure Sockets Layer)와 TLS(전송 계층 보안, Transport Layer Security)는 인터넷을 통해 전송되는 데이터의 보안을 강화하기 위한 암호화 프로토콜임. SSL은 원래 1990년대 중반에 넷스케이프(Netscape)에서 개발되었으며, TLS는 그 후속 버전으로 SSL의 개선된 버전임. 현재 SSL 3.0 이후의 버전은 더 이상 사용되지 않고 있으며, 대부분의 시스템에서는 TLS 프로토콜이 사용됨.

 

SSL/TLS의 주요 기능

1. 암호화 (Encryption) : 데이터를 전송하기 전에 암호화하여, 중간에 가로채어도 원래의 내용을 이해할 수 없도록 함.

2. 인증 (Authentication) : 서버와 클라이언트가 서로 신뢰할 수 있는지 확인함. 이를 위해 SSL/TLS는 디지털 인증서를 사용하여 서버의 신원을 확인함.

3. 데이터 무결성 (Integrity) : 전송 중 데이터가 변경되거나 손상되지 않았는지 확인함.

 

작동방식 (핸드셰이크 과정(Handshake)

1. 클라이언트 헬로(Client Hello) : 클라이언트가 서버에 접속을 시도하고, 사용 가능한 암호화 방식, TLS 버전, 무작위 값(Random Value) 등을 서버에 보냄

2. 서버 헬로 (Server Hello) : 서버는 클라리언트의 요청을 받아들이고, 선택한 암호화 방식, 인증서, 무작위 값 등을 클라이언트에게 보냄.

3. 서버 인증서 전송 (Server Certificate) : 서버는 자신의 공개키(Public Key)가 포함된 인증서를 클라이언트에게 보냄.

4. 세션 키 생성 (Session Key Generation) : 클라이언트는 서버의 공개키로 데이터를 암호화한 후, 이 데이터와 함께 세션 키를 생성하여 서버로 보냄. 서버는 자신의 개인키(Private Key)로 이를 복호화 함.

5. 대칭키 암호화 (Encrypted Communication) : 이후의 통신은 세션 키를 사용한 대칭 키 암호화 방식으로 진행되어, 빨고 안전하게 데이터를 전송함.

 

 

 

HTTP와 HTTPS의 차이

1. 보안

HTTP : 암호화되지 않은 텍스트 전송으로 보안에 취약

HTTPS : SSL/TLS를 통해 데이터를 암호화하여 보안성 확보.

 

2. 포트 번호

HTTP : 기본 포트는 80

HTTPS : 기본 포트는 443

 

3.  성능

HTTPS는 암호화/복호화 과정이 추가되므로 HTTP보다 약간 느릴 수는 있지만, 현대 웹에서는 이 차이가 거의 무시할 수 있을 정도로 줄어들었음.

 

 

✏ 암호화 / 복호화

: 암호화(Encryption)는 평문(Plain Text)을 암호문(Cipher Text)으로 변환하여, 인가되지 않은 사용자가 데이터를 읽응ㄹ 수 없도록 보호화는 과정. 반대로 복호화(Decryption)는 암호문을 다시 평문으로 변환하는 과정.

 

암호화의 종류

1.  대칭키 암호화(Symmetric Key Encryption)

: 하나의 키를 사용하여 데이터를 암호화하고 복호화합니다. 이 키는 암호화와 복호화에 동일하게 사용되므로, 키의 관리와 보호가 매우 중요합니다.

ex.  AES(Advanced Encryption Standard)

 

2. 비대칭키 암호화(Asymmetric Key Encryption):

서로 다른 두 개의 키(공개키와 개인키)를 사용하여 데이터를 암호화하고 복호화합니다. 공개키로 데이터를 암호화하고, 이에 대응하는 개인키로 복호화할 수 있습니다.

ex.  RSA(Rivest-Shamir-Adleman)

 

암호화/복호화의 과정 예시

대칭키 암호화

1. 데이터 "Hello World"를 대칭키로 암호화하면, 예를 들어 "aX1cE9!"와 같은 암호문이 생성됩니다.

2. 수신자는 동일한 대칭키로 "aX1cE9!"를 복호화하여 원래의 "Hello World"를 얻습니다.

 

비대칭키 암호화

1. 서버는 자신의 공개키를 클라이언트에게 제공하고, 클라이언트는 이 공개키로 데이터를 암호화합니다.

2. 암호화된 데이터는 서버의 개인키를 사용해 복호화됩니다.

 

 

프로토콜

: 컴퓨터 네트워크에서 데이터를 교환하는 규칙과 절차의 집합. 네트워크 프로토콜은 서로 다른 시스템 간의 통신을 가능하게 하며, 이를 통해 데이터를 정확하고 일관되게 전달할 수 있음.

네트워크 환경에서 다양한 종류의 통신을 관리하고 제어하는 중요한 규칙을 정의하며, 이를 통해 네트워크 내에서 일관성 있고 신뢰성 있는 데이터 전송이 가능함.

 

ex.

HTTP/HTTPS : 웹에서 하이퍼텍스트 문서를 전송하기 위한 프로토콜

FTP : 파일을 서버와 클라이언트 간에 전송하기 위한 프로토콜

SMTP : 이메일을 전송하기 위한 프로토콜

TCP/IP : 인터넷 프로토콜 스위트로, 데이터 전송을 위한 기본적인 프로토콜 집합.

728x90
반응형

bcrypt

: 비밀번호 해싱(hash) 알고리즘으로, 보안을 강화하기 위해 사용됨. 비밀번호를 직접 저장하는 대신 해시된 값을 저장하여, 데이터 유출 시에도 원래 비밀번호를 유추하기 어렵게 만듦.

 

특징

1. 가변적인 해상 라운드 : bcrypt는 해싱을 여러 번 반복하여 해시 값을 생성함. 라운드 수를 늘릴수록 연산이 복잡해지고, 해킹 시도를 더욱 어렵게 만듦.

2. 솔트(salt / 소금 아님) 추가 : 솔트는 비밀번호 해싱 과정에 추가되는 임의의 데이터로, 같은 비밀번호라도 다른 해시값을 생성하여 무차별 대입 공격을 방어함.

3. 비밀번호 검증 : bcrypt는 저장된 해시 값과 입력된 비밀번호의 해시 값을 비교하여 일치 여부를 확인함.

 

 

 

해싱(Hashing)

: 임의 길이의 데이터를 고정 길이의 해시 값으로 변환하는 과정. 이때 사용되는 함수가 해시 함수(hash function)임. 해시 함수는 입력 데이터(보통 텍스트, 파일, 또는 문자열)를 받아서 고정된 크기의 고유한 데이터 출력(해시 값 또는 해시 코드)을 생성함.

 

특징

1: 고정된 길이의 출력 : 입력 데이터의 크기와 상관없이 해시 함수는 항상 고정된 길이의 해시 값을 반환함.

2. 비가역성 : 해시 함수의 중요한 특성 중 하나는 비가역성임. 즉, 해시 값을 가지고 원래 데이터를 역으로 추측하거나 복원하는 것은 거의 불가능함. 이 때문에 해싱은 비밀번호 저장이나 데이터 무결성 검증에 유용함.

3. 빠른 연산 속도 : 해시 함수는 입력 데이터를 매우 빠르게 처리할 수 있어야 함. 이 속성 덕분에 해싱은 대량의 데이터 처리와 검색에서 효율적임.

 

용도

1: 비밀번호 저장 : 데이터베이서에 비밀번호를 평문으로 저장하는 것은 매우 위험함. 해싱을 통해 비밀번호를 고정 길이의 해시 값으로 변환해 저장하면, 데이터베이스가 해킹되더라도 원래 비밀번호를 쉽게 알 수 없음.

2. 데이터 무결성 검증 : 파일 전송이나 데이터 백업 시 해시 값을 생성해두고, 나중에 동일한 해시 값을 다시 계산해 비교함으로써 데이터가 손상되거나 변조되지 않았는지 확인할 수 있음.

3. 데이터 검색 및 인덱싱 : 해시 테이블은 키-값 쌍을 매우 효율적으로 저장하고 검색하는 자료구조로, 데이터베이스나 캐시 시스템에서 많이 사용됨.

 

bcrypt와 해싱

bcrypt는 단순한 해싱 알고리즘과는 달리, 해싱 과정에 솔트(salt)를 추가하고 여러 번의 해싱 라운드를 적용하여 보안을 덩욱 강화함. 솔트는 해시 충돌 방지와 비밀번호 해시의 유일성을 보장하기 위해 사용됨. 동일한 비밀번호라도 서로 다른 솔트를 사용하면 전혀 다른 해시 값이 생성됨.

 

비밀번호 검증

: bcrypt를 사용하면 해싱된 비밀번호와 사용자 입력 비밀번호를 비교할 때도 안전하게 비교할 수 있음. 이는 입력된 비밀번호를 동일한 방법으로 해싱하여 저장된 해시 값과 일치하는지 확인하는 방식으로 이루어짐.

 

 

 

비가역성

: 해시 함수의 중요한 특성 중 하나로, 입력 데이터를 해시 함수에 통과시켜 해시 값을 얻는 것은 쉽지만, 그 해시 값을 이용해 원래의 입력 데이터를 역으로 계산하는 것은 불가능하거나 매우 어렵다는 의미.

 

특징

한 방향성 : 해시 함수는 데이터를 한 방향으로만 처리할 수 있음. 즉, 원본 데이터에서 해시 값을 생성하는 것은 가능하지만, 생성된 해시 값만으로 원본 데이터를 복원할 수는 없음.

 

중요성

1. 비밀번호 저장 : 비가역성 덕분에 해시 함수는 비밀번호 저장에 매우 유용함. 예를 들어, 비밀번호를 해시로 변환하여 데이터베이스에 저장하면, 데이터베이스가 해킹되더라도 해시 값만으로는 원래의 비밀번호를 알아낼 수 없음.

2. 데이터 무결성 보장 : 파일이나 메시지를 전송할 때, 데이터를 해시화하여 보내면 수신자는 동일한 해시 값을 계산해 원본 데이터가 변조되지 않았는지 확인할 수 있음. 비가역성 덕분에 공격자는 해시 값을 보고 원본 데이터를 재구성하여 변조하는 것이 매우 어려움.

 

비가역성을 통한 보안 강화

1. 솔트와 해싱 : 비가역성을 강화하기 위해 솔트라는 무작위 데이터를 추가하여 해싱함. 솔트는 동일한 입력 값에도 다른 해시 값을 생성하게 만들어, 비가역성을 더욱 강화함.

2. 암호학적 해시 함수 : 비가역성을 가진 해시 함수는 암호학적 해시 함수라고 불리며, 주로 보안이 중요한 응용 프로그램에서 사용됨. 대표적인 암호학적 해시 함수로는 SHA-256, SHA-3, bcrypt 등이 있음.

 

한계

1. 충돌 공격 : 이론적으로는 두 개의 서로 다른 입력 값이 동일한 해시 값을 생성하는 경우가 있을 수 있음. 이를 해시 충돌이라 하며, 암호학적 해시 함수는 이러한 충돌이 발생할 확률을 극도로 낮추어 비가역성을 유지함.

2. 무차별 대입 공격 (Brute Force Attack) : 비가역성은 해시 값만으로 원본을 직접 복원할 수 없게 하지만, 공격자가 모든 가능한 입력 값을 해싱해보는 방식으로 원본을 찾아낼 수도 있음. 이런 공격을 방지하기 위해 bcrypt 같은 알고리즘은 해시 생성 속도를 인위적으로 느리게 만들어 공격을 어렵게 함.

 

 

 

useStat와 async, await의 차이

useStae : React 훅으로, 컴포넌트의 상태를 관리하는데 사용됨. 상태 값과 해당 값을 변경할 수 있는 함수를 반환하며, 컴포넌트의 상태가 변경될 때 컴포넌트를 다시 렌더링함.

async  : Javascript에서 비동기 작업을 간편하게 처리하기 위한 구문임. async 함수가 비동기 작업을 수행함을 명시하며 자동으로 promise를 반환함.

await : async 함수 내부에서 사용되며, promise가 해결될 때까지 함수의 사용을 일시중지 시킴.

 

차이점

1. 작동 방식

: useState는 react의 상태관리 훅이며, 값의 변경을 감지하고 컴포넌트를 재렌더링하지만, async / await는 비동기 작업을 순차적으로 처리하고, 비동기 함수의 결과를 기다릴 때까지 사용됨.

 

2. 사용 영역

: useState는 react 컴포넌트에서 상태를 관리하는데 사용되지만, async / await는 비동기 코드를 처리하는 모든 Javascript 코드에서 사용됨.

 

 

 

JavScript와 TypeScript의 차이점

 

Javascript

: 웹 개발에서 널리 사용되는 프로그래밍 언어로, 동적이며 타입 검사 없이 코드를 작성할 수 있음. 

 

특징

1. 동적 타이핑 : 변수의 타입을 미리 지정하지 않고, 런타임에 결정됨.

2. 유연성 : 코드 작성이 간단하지만, 런타임 오류 발생 가능성이 높음.

 

 

Typescript

: javascript에 정적 타입 검사를 추가한 상위 언어로 , 컴파일 타임에 오류를 잡아낼 수 있음.

 

특징

1. 정적 타이핑 : 변수와 함수의 타입을 미리 정의하여, 코드 안정성과 유지보수성을 높임.

2 . 향상된 IDE(통합 개발 환경) 지원: 코드 자동 완성, 타입 추론, 코드 리팩토링(기존 코드의 동작을 변경하지 않으면서 코드의 구조를 개선하여 가독성, 유지보수성 등을 향상시키는 작업) 등이 개선됨.

3. Javascript 호환성 : Typescript는 Javascript로 컴파일 되며, 기존 Javascript 코드와 함께 사용할 수 있음.

 

 

차이점

1. 타입 시스템 : Javascript는 동적 타이핑을 사용하는 반면, Typescript는 정적 타이핑을 사용함.

2. 개발 경험 : Typescript는 더 나은 개발자 경험을 제공하며, 특히 대규모 프로젝트에서 오류를 줄이고 코드 품질을 유지하는데 도움이 됨.

 

 

✏ IDE (통합 개발 환경)

:Integrated Development Environment의 약자로, 소프트웨어 개발을 위한 통합 도구 모음. 

코드 편집기, 컴파일러 또는 인터프리터, 디버거, 빌드 자동화 도구 등을 하나의 통합된 환겨에서 제공하여 개발자들이 효율적으로 작업할 수 있게 함.

 

주요 기능

1. 코드 작성 및 편집 : 코드 편집기에서 다양한 언어를 지원하며, 구문 강조(syntax highlighting) 및 자동 완성 기능을 제공.

2. 디버깅 : 코드에서 오류를 찾고 수정할 수 있는 디버거를 포함함.

3. 버전 관리 :Git 같은 버전 관리 시스템과 통합되어, 코드의 변경 사항을 추적하고 협업할 수 있게 해줌.

 

ex. Visual Studio Code, IntelliJ IDEA, Eclipse, PyCharm

 

 

✏ 코드 리팩토링 (Code Refactoring)

: 기존 코드의 동작을 변경하지 않으면서, 코드의 구조를 개선하여 가독성, 유지보수성, 성능을 향상 시키는 작업

 

목적

1. 가독성 향상 : 코드를 더 읽기 쉽고 이해하기 쉽게 만듦.

2. 유지보수성 개선 : 코드의 복잡도를 줄여 수정이나 추가 작업이 쉽게 이루어질 수 있도록 함.

3. 버그 감소 : 복잡한 코드를 단순화 하여 잠재적인 오류를 줄임.

 

ex. 함수 이름 변경, 코드 중복 제거, 메서드 추출

 

 

✏ 타입 추론

: 컴파일러가 명시적으로 타입을 선언하지 않아도, 변수나 함수의 타입을 자동으로 추론하는 기능. TypeScript와 같은 정적 타입 언어에서 많이 사용됨.

 

장점

1. 코드 간결화 : 개발자가 명시적으로 타입을 선언하지 않아도 되므로, 코드를 더 간결하게 작성할 수 있음.

2. 오류 방지 : 컴파일러가 타입을 추론해주므로, 잘못된 타입 사용을 방지할 수 있음.

 

ex. 

let num = 10; // 컴파일러가 num의 타입을 자동으로 number로 추론

 

 

✏ 로깅 (Logging)

: 애플리케이션의 동작이나 상태를 기록하는 작업. 로깅을 통해 시스템의 동작을 추적하고, 오류 발생 시 원인을 분석할 수 있음.

 

용도

1. 디버깅 : 프로그램이 어떻게 실행되고 있는지 확인하기 위해 로깅을 사용함.

2. 모니터링 : 시스템의 상태를 모니터링하고, 예기치 않은 동작이나 오류를 감지함.

3. 감사 로그 : 중요한 작업이나 이벤트의 기록을 남겨, 나중에 참조할 수 있게 함.

 

ex. 

console.log("User logged in:", userId);

 

 

 

React와 Redux, Next.js의 차이

 

React

: 사용자 인터페이스(UI)를 구축하기 위한 Javascript 라이브러리임. 컴포넌트를 기반으로 UI를 구성하고, 상태 관리를 통해 동적인 웹 애플리케이션을 만듦.

 

특징

1. 컴포넌트 기반 : UI를 재사용 가능한 컴포넌트로 분할하여 관리함.

2. 상태 관리 : useState, useReducer 등을 통해 상태를 관리함.

3. 가상 DOM : 변경 사항을 최소화 하여 성능을 최적화 함.

 

 

Redux

: 애플리케이션의 상태를 전역적으로 관리하기 위한 상태 관리 라이브러리임. React와 함께 자주 사용됨.

 

특징

1. 전역 상태 관리 : 모든 컴포넌트가 접근할 수 있는 단일 상태 저장소를 유지함.

2. 액션과 리듀서 : 상태 변경은 액션(action)을 통해 수행되며, 리듀서(reducer)가 새로운 상태를 반환함.

3. 미들웨어 : 비동기 작업이나 로깅 같은 추가 기능을 위해 미들웨어를 사용할 수 있음.

 

 

✏ 미들웨어 (Middleware)

: 애플리케이션의 요청(Request)과 응답(Response) 사이에 위치하여, 요청을 처리하거나 응답을 조작하는데 사용되는 함수. 주로 서버 측 애플리케이션에서 사용됨.

 

용도

1. 요청 처리 : 인증, 권한 검사, 데이터 변환, 로깅 등을 수행.

2. 응답 처리 : 응답 데이터의 변환, 캐싱, 압축 등을 수행

3. 라우팅 : 요청이 올바른 핸들러에 도달하도록 경로를 설정함.

 

 

 

Next.js

: React를 기반으로 한 프레임워크로, 서버 사이드 렌더링(SSR)과 정적 사이트 생성(SSG)를 지원함. SEO 최적화와 빠른 페이지 로딩을 위한 기능을 제공함.

 

특징

1. 서버 사이드 렌더링(SSR) : 초기 페이지를 서버에서 렌더링하여, SEO와 초기 로딩 속도를 개선함.

2. 정적 사이트 생성(SSG) : 빌드 타임에 HTML 파일을 생성하여 빠른 로딩을 지원함.

3. 파일 기반 라우팅 : 페이지 파일을 생성하는 것만으로 자동으로 라우팅이 설정됨.

 

✏ SEO (검색 엔진 최적화)

: Search Engine Optimization의 약자로, 웹사이트나 웹페이지를 검색 엔진 결과에서 더 높은 순위에 노출시키기 위한 다양한 최적화 기법을 말함.

 

목적

1. 트래픽 증가 : 검색 엔진에서 더 많은 사용자가 웹사이트를 발견할 수 있도록 하여, 트래픽을 늘림.

2. 가시성 향상 : 특정 키워드에 대해 웹 사이트의 가시성을 높여, 관련 검색에서 상위에 노출되도록 함.

 

주요 요소

1. 키워드 최적화 : 사용자가 검색할 가능성이 높은 키워드를 페이지 콘텐츠에 적절히 포함시킴.

2. 메타 태그 : 제목, 설명 등 메타 정보를 최적화하여 검색 엔진이 페이지를 올바르게 이해할 수 있도록 함.

3. 콘텐츠 품질 : 유익하고 가치있는 콘텐츠를 제공하여, 사용자의 만족도를 높임.

 

 

✏ SEO 최적화

: SEO의 여러 요소들을 체계적으로 적용하여, 검색 엔진에서 웹사이트 순위를 높이기 위한 과정을 의미.

 

방법

1. 모바일 친화성 : 모바일 사용자에게도 최적화 된 경험을 제공하기 위해 반응형 디자인을 적용함.

2. 페이지 속도 개선 : 페이지 로딩 시간을 단축하여 사용자 경험을 개선하고, 검색 엔진에서의 평가를 높임.

3. 백링크 구축 : 신뢰할 수 있는 다른 웹사이트로부터의 링크(백링크)를 얻어, 사이트의 권위를 높임.

 

 

 

React → Redux에서의 개선점

1. 전역 상태 관리의 일관성

: Redux는 애플리케이션의 전역 상태를 단일 스토어에서 관리함. 이로 인해 상태의 흐름이 일관되고 예측 가능하게 됨. 모든 상태 변경은 액션(Action)을 통해 이루지며, 이 액션이 리듀서(Reducer)를 통해 상태를 업데이트 함. 이 구조 덕분에 상태 변경이 투명하게 이루어지고, 디버깅이 용이함.

반면, React는 useState와 useReducer는 각각의 컴포넌트에 국한된 상태 관리를 제공하며, 전역 상태 관리에는 적합하지 않을 수 있음. 여러 컴포넌트 간에 상태를 공유해야하는 경우, React의 상태 관리 도구만으로는 복잡성이 증가할 수 있음.

 

2. 미들웨어 지원

: Redux는 강력한 미들웨어 생태계를 가지고 있음. Redux Thunk나 Redux Saga와 같은 미들웨어를 사용하면, 비동기 작업을 처리하거나 로깅, 분석, API 호출 등의 부가적인 작업을 상태 관리와 함께 통합적으로 처리할 수 있음. 이는 복잡한 애플리케이션에서 특히 유용함.

React의 상태 관리만으로는 이러한 미들웨어 기능을 자연스럽게 구현하기 어려울 수 있음. useEffect를 사용해 비동기 작업을 처리할 수는 있지만 Redux가 제공하는 만큼의 확장성과 일관성은 없음. 

 

3. 상태의 불변성 및 데이터 흐름

: Redux는 상태가 불변성을 유지하도록 설계되어 있음. 모든 상태 변경은 새로운 상태 객체를 반환하도록 강제됨. 이러한 불변성 원칙은 복잡한 상태 구조를 가진 애플리케이션에서 상태의 추적과 버그 예방에 도움을 줌.

 

React의 useState와 useReducer도 불변성을 유지할 수 있도록 코딩할 수는 있지만, 이는 개발자의 책임에 달려있음. 복잡한 상태를 관리할 때, Redux처럼 체계적인 방식이 없는 경우 상태 관리가 혼란스러워질 수 있음.

 

4. 대규모 애플리케이션에서의 확장성

: Redux는 대규모 애플리케이션에서 확장성이 뛰어남. 전역 상태가 증가하더라도 Redux의 아키텍처는 상태 관리가 체계적으로 이루어지도록 도와줌. 또한, 여러 개발자들이 협업할 때 상태 관리와 관련된 규칙이 명확하게 정의되어 있어 작업이 수월함.

반면, React의 상태 관리 도구만으로는 규모가 커질수록 상태 관리가 복잡해지고 관리하기 어려워질 수 있음.

 

 

 

React → Next. js에서의 개선점

1. SSR과 SSG 지원

: Next.js는 React의 클라이언트 사이드 렌더링(CSR) 외에도 서버 사이드 렌더링(SSR)과 정적 사이트 생성(SSG)을 지원하여 SEO와 성능을 크게 개선함.

 

2. 파일 기반 라우팅

: Next.js는 라우팅을 자동화하여, React의 수동 라이팅 설정보다 개발을 단순화 함.

 

3. 데이터 페칭

: Next.js는 getStaticProps, getServerSideProps와 같은 함수로 데이터 패칭을 간소화 하여, React의 데이터 패칭 로직보다 효율적이고 체계적인 방식을 제공함.

 

✏ 데이터 패칭

: 애플리케이션이 외부 소스 (ex. API, 데이터베이스, 파일 등)에서 데이터를 요청하고 받아오는 과정을 말함. 주로 웹 애플리케이션에서 서버로부터 데이터를 가져와 사용자에게 보여줄 때 사용됨.

728x90
반응형

의존성 배열

: useEffect 훅에서 특정 상태나 값이 변경될 때만 부수효과(side Effect)가 실행되도록 제어하는 배열.

이 배열은 useEffect의 두 번째 인자로 전달됨.

 

동작 방식

: 의존성 배열이 비어 있으면, useEffect는 컴포넌트가 처음 마운트 될 때 한 번만 실행됨.

특정 값들이 배열에 포함되어 있으면, 그 값들이 변경될 때마다 useEffect가 실행됨.

배열을 생략하면, useEffect는 컴포넌토가 매번 렌더링될 때마다 실행됨.

 

ex.

import React, { useState, useEffect } from 'react';

function MyComponent() {
  const [count, setCount] = useState(0);

  useEffect(() => {
    console.log('Count changed:', count);
  }, [count]); // count가 변경될 때만 useEffect 실행

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>Increment</button>
    </div>
  );
}

이 코드에서 useEffect는 count 값이 변경될 때마다 실행됨.

 

 

 

메서드 바인딩(Method Binding)

: 객체의 메서드를 해당 객체에 묶어주는 작업을 의미.

특히 React의 클래스형 컴포넌트에서 이벤트 핸들러나 다른 메서드를 사용할 때 this 키워드를 올바르게 참조하기 위해 메서드를 바인딩 해야하는 경우가 있음.

 

바인딩의 필요성

: javascript에서 this는 호출 방식에 따라 달라짐. 클래스 메서드가 이벤트 핸들러로 사용될 때 this가 메서드를 호출한 객체(ex. 버튼 클릭 이벤트)로 설정될 수 있음. 이를 방지하고, 항상 클래스 인스턴스를 참조하게 하기 위해 바인딩이 필요함.

 

ex.

class MyComponent extends React.Component {
  constructor(props) {
    super(props);
    this.state = { count: 0 };

    // 메서드를 바인딩하지 않으면, this.increment에서 this가 undefined가 됨
    this.increment = this.increment.bind(this);
  }

  increment() {
    this.setState({ count: this.state.count + 1 });
  }

  render() {
    return (
      <button onClick={this.increment}>Increment</button>
    );
  }
}

여기서 increment 메서드(주로 카운터와 같은 기능을 구현할 때, 현재 값을 하나 증가시키는 역할을 함)는 this.increment.bind(this)를 통해 현재 인스턴스에 묶여야 함.

 

 

자동 바인딩 (화살표 함수 사용)

: 클래스 필드 문법을 사용해 메서드를 화살표 함수로 정의하면, 자동으로 바인딩 됩니다. 화살표 함수는 정의된 시점의 this를 유지함.

이 방식을 사용하면 코드가 더 간결해지고, 바인딩 실수를 줄여줌.

 

ex.

class MyComponent extends React.Component {
  state = { count: 0 };

  // 화살표 함수를 사용하면, 자동으로 바인딩됨
  increment = () => {
    this.setState({ count: this.state.count + 1 });
  }

  render() {
    return (
      <button onClick={this.increment}>Increment</button>
    );
  }
}

 

 

함수형 컴포넌트에서 바인딩

:this 키워드가 없으므로, 바인딩이 필요하지 않음. 이벤트 핸들러는 그냥 함수로 정의하고 필요에 따라 useState, useReducer, useRef 등을 사용해 상태를 관리함.

 

ex. 

import React, { useState } from 'react';

function MyComponent() {
  const [count, setCount] = useState(0);

  const increment = () => {
    setCount(count + 1);
  };

  return (
    <button onClick={increment}>Increment</button>
  );
}

 

 

 

렌더링

: 컴포넌트가 화면에 표시되는 과정. React에서는 렌더링이 새로운 UI를 계산하고, 이를 실제 DOM에 반영하는 과정을 의미함. 렌더링은 컴포넌트의 상태(state)나 속성(props)이 변경될 때마다 발생함.

 

과정

1. 초기 렌더링 : 컴포넌트가 처음 화면에 나타날 때 발생함.

2. 재렌더링 : 상태나 속성이 변경될 때, 변경될 내용을 반영하기 위해 컴포넌트가 다시 렌더링 됨.

3. 정적 렌더링 :  정적인 HTML 파일을 브라우저가 로드하여 UI를 처음으로 그릴 때 발생함.

 

최적화

: 불필요한 재렌더링을 방지하기 위해 React.memo, useMemo, useCallback과  같은 최적화 기법을 사용할 수 있음.

 

 

 

useRef

: React의 훅(hook) 중 하나로, 참조(ref / 특정 DOM 요소나 값에 접근할 수 있는 방법)를 관리하기 위해 사용됨. 

useRef는 주로 직접 DOM 요소에 접근할 때 유용하며, 상태 업데이트 없이 값이 변해야 하는 경우에 사용됨.

예를 들어, 입력 필드에 포커스를 설정하거나 스크롤 위치를 제어할 때 사용할 수 있음.

 

반환값

: { current: value } 형태의 객체를 반환함. 이 객체는 컴포넌트가 렌더링 될 때마다 유지되며, 참조된 값은 current 속성을 통해 접근할 수 있음.

ex.

import React, { useRef } from 'react';

function FocusInput() {
  const inputRef = useRef(null);

  const handleFocus = () => {
    inputRef.current.focus(); // input 요소에 포커스 설정
  };

  return (
    <div>
      <input ref={inputRef} type="text" />
      <button onClick={handleFocus}>Focus the input</button>
    </div>
  );
}

→ useRef로 생성한 inputRef는 <input> 요소에 대한 참조를 유지하며, 버튼을 클릭하면 handleFocus 함수가 호출되고, inputRef.current.focus( )를 통해 입력 필드에 포커스가 설정 됨.

 

값 저장 및 유지

: useRef는 렌더링 간 값이 변하더라도, 컴포넌트가 다시 렌더링 되지 않도록 하는 방법으로 사용할 수 있음.

 

ex.

import React, { useRef, useState } from 'react';

function Timer() {
  const [count, setCount] = useState(0);
  const countRef = useRef(count);

  const handleClick = () => {
    countRef.current = countRef.current + 1;
    setCount(countRef.current); // 상태 업데이트
  };

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={handleClick}>Increment</button>
    </div>
  );
}

→ countRef.current에 값을 저장하면 상태처럼 작동하지만, 값이 업데이트되더라도 컴포넌트가 자동으로 다시 렌더링 되지 않습니다. (이 방법은 컴포넌트가 렌더링될 때마다 값을 재계산할 필요가 없을 때 유용함)

 

특성 및 주의사항

1. 렌더링과 무관한 값 관리 : useRef의 값은 컴포넌트의 렌더링과 무관하게 유지됨. 따라서 상태를 업데이트 할 필요 없이, 값만을 저장하고 싶을 때 사용할 수 있음.

2. 상태와의 차이점 : useState는 상태가 변경될 때마다 컴포넌트가 재렌더링 되는 반면, useRef는 값이 변경되어도 컴포넌트가 재렌더링 되지 않음.

3. DOM 접근의 대안 : useRef는 클래스형 컴포넌트에서 사용되던 React.createRef의 함수형 컴포넌트 대안임. 주로 DOM에 직접 접근해야 할 때 사용됨.

4. 실시간 변수 저장 : 상태를 사용하지 않고, 컴포넌트의 렌더링과 무관하게 실시간으로 값이 변경되어야 하는 경우에 유용함.

 

 

 

 

728x90
반응형

async

ex.

async function fetchData() {
  let response = await fetch('https://api.example.com/data');
  let data = await response.json();
  console.log(data);
}

: javascript에서 비동기 함수를 정의할 때 사용하는 키워드. 이 키워드가 붙은 함수는 항상 promise를 반환함.

비동기 작업을 처리하기 위해 await와 함께 사용됨.

 

✏ 비동기 작업

: 코드가 실행되는 동안 다른 작업이 완료될 때까지 기다리지 않고, 즉시 다음 작업을 처리하는 방식. 이는 코드가 멈추지 않고 계속 실행될 수 있도록 함. 비동기 작업은 주로 IO 작업 (ex. 파일 읽기/쓰기, 네트워크 요청)에서 사용됨.

 

 

 

await

ex.

async function fetchData() {
  let response = await fetch('https://api.example.com/data');
  let data = await response.json();
  console.log(data);
}

: async 함수 내부에서 사용되며, promise가 해결될 때까지 코드 실행을 잠시 멈추고 기다림. await는 promise의 결과값을 반환함.

 

✏ promise 

: javascript에서 비동기 작업을 관리하기 위한 객체. 비동기 작업이 완료되었을 때, 성공(resolve) 또는 실패(reject) 상태를 나타냄. promise는 세 가지 상태를 가짐. then, catch, finally 메서드를 사용하여 작업의 성공, 실패, 완료 상태를 처리함.

1. Pending (대기중) : 작업이 아직 완료되지 않은 상태.

2. Fulfilled (이행됨) : 작업이 성공적으로 완료된 상태.

3. Rejected (거부됨) : 작업이 실패한 상태.

 

 

 

catch

ex.

async function fetchData() {
  let response = await fetch('https://api.example.com/data');
  let data = await response.json();
  console.log(data);
}

: promise가 거부(reject) 되었을 때 실행할 콜백 함수를 지정함. 즉, 예외처리에 사용됨. promise 체인이나 try ... catch 블록에서 사용됨.

 

✏ promise 체인

: 여러 개의 비동기 작업을 순차적으로 처리하기 위해 then, catch를 연속적으로 연결하는 방식. 각 then 메서드는 이전 promise의 결과를 받아서 처리함.

 

 

 

finally

ex.

fetch('https://api.example.com/data')
  .then(response => response.json())
  .catch(error => console.error('Error:', error))
  .finally(() => console.log('Fetch attempt finished'));

:promise가 해결(resolve)되든 거부(reject)되든 상관없이 마지막에 실행할 코드를 정의함. then이나 catch 다음에 사용됨.

 

 

 

globalThis

ex.

globalThis.myVariable = 42;
console.log(window.myVariable); // 브라우저 환경에서 42 출력

: javascript의 전역 객체를 참조함. 브라우저 환경에서는 widow로, Node.js에서는 global로 매핑됨. ES2020에서 도입됨. 즉, 환경에 상관없이 전역 객체에 접근할 때 사용됨.

 

✏ 전역 객체

: javascript 환경에서 모든 전역 변수와 함수를 포함하는 특수한 객체. 전역 객체는 javascript 코드의 어디에서나 접근할 수 있으며, 환경에 따라 이름과 동작이 조금씩 다름.

 

▶ 브라우저 환경에서의 전역 객체 - window

=> 모든 전역 변수와 함수는 사실 window 객체의 속성으로 존재함.

브라우저에서 제공하는 API (ex. alert, document, loaction 등)도 모두 window 객체의 일부임. HTML 문서의 전역 변수나 함수를 선언하면, 이는 window 객체의 속성으로 자동 추가됨.

ex.

var myVar = 10;
function myFunction() {
  console.log("Hello, world!");
}

console.log(window.myVar); // 10 출력
window.myFunction(); // "Hello, world!" 출력

 

✏ 브라우저 환경

: 웹 브라우저에서 javascript 코드가 실행되는 환경을 의미함. 브라우저는 HTML, CSS, Javascript를 처리하며 window, document와 같은 전역 객체를 제공함.

 

✏ Node.js에서 global 매핑

: global 객체는 Node.js 환경에서의 전역 객체임. 브라우저 환경에서의 window 객체와 유사한 역할을 함.  Node.js에서 전역 변수나 함수를 정의할  때 사용됨.

 

 

 

then

ex.

fetch('https://api.example.com/data')
  .then(response => response.json())
  .then(data => console.log(data));

: promise가 해결(resolve) 될 때 실행할 콜백 함수를 지정함. 비동기 작업이 성공했을 때 사용됨.

 

✏ 콜백 함수

: 다른 함수에 인수로 전달되는 함수. 특정 작업이 완료된 후에 실행되도록 설계됨. 비동기 작업이나 이벤트 처리에 자주 사용됨. 즉, 작업이 완료되었을 때 후속 작업을 처리하기 위해 사용됨.

 

 

 

throw

ex.

function checkValue(value) {
  if (value < 0) {
    throw new Error('Value cannot be negative');
  }
  return value;
}

try {
  checkValue(-1);
} catch (error) {
  console.error(error.message); // "Value cannot be negative"
}

: 예외를 발생시킬 때 사용됨. 주로 try ... catch 블록에서 사용되며, 특정 오류 조건이 발생했을 때 예외를 던짐. 즉, 원하는 조건에서 예외를 발생시킴.

 

 

 

toast

ex.

import { toast } from 'react-toastify';

function notify() {
  toast('Hello, this is a toast notification!');
}

: 주로 사용자에게 일시적으로 정보를 표시하는 UI 컴포넌트를 말함. 알림 메시지를 표시할 때 사용됨. 일반적으로 라이브러리 (ex. react-toastify)를 통해 구현됨. 즉, 사용자에게 중요한 메시지를 짧게 보여줄 때 사용됨.

 

✏ UI 컴포넌트

:웹 애플리케이션이나 모바일 애플리케이션에서 사용자 인터페이스를 구성하는 독립적인 재사용 가능 단위.

버튼, 입력 필드, 모달 창, 카드, 네비게이션 바 등이 UI 컴포넌트에 해당함.

 

▶ 특징

1. 재사용성 : 컴포넌트는 여러 번 사용될 수 있음.

2. 독립성 : 각 컴포넌트는 다른 부분과 독립적으로 작동하며, 필요한 데이터나 상태만을 관리함.

3. 조합 가능성 : 여러 개의 작은 컴포넌트를 조합하여 복잡한 UI를 구성할 수 있음.

 

 

 

try

ex. 

try {
  let result = riskyOperation();
  console.log(result);
} catch (error) {
  console.error('An error occurred:', error);
}

: 예외가 발생할 수 있는 코드 블록을 감싸는데 사용됨. 예외가 발생하면 catch 블록으로 제어가 넘어감.

 

 

 

useEffect

ex.

useEffect(() => {
  // 이 코드 블록은 컴포넌트가 처음 렌더링된 후 실행됩니다.
  console.log('Component mounted or updated');

  // 선택적으로 clean-up 함수를 반환할 수 있습니다.
  return () => {
    console.log('Component will unmount or clean up before re-running effect');
  };
}, [/* dependencies */]); // 빈 배열: 마운트/언마운트 시 한 번만 실행

: React의 함수형 컴포넌트에서 부수효과(컴포넌트의 렌더링과 직접 관련이 없는 작업)를 처리하기 위해 사용되는 훅.

▶  부수효과의 예 : 데이터 fetching, DOM 조작, 구독 관리 등이 있음.

 

▶ 특징

1. 컴포넌트가 렌더링 될 때마다 기본적으로 실행됨.

2. 의존성 배열을 통해 어떤 값이 변경될 때만 실행할지 지정할 수 있음.

3. 컴포넌트가 "언마운트" 되거나, 특정 효과가 다시 실행되기 전에 정리 작업을 수행할 수 있음.

→ 언마운트 : 컴포넌트가 DOM에서 제거되는 과정. react는 컴포넌트를 완전히 제거하고, 메모리를 해제하며 관련된 리소스나 이벤트 리스너들을 정리함.

 

의존성 배열에 값들을 전달하면, 해당 값들이 변경될 때만 useEffect가 실행됨.

빈 배열을 전달하면 해달 useEffect는 컴포넌트가 처음 마운트 될 때 한번만 실행되고 이후에는 실행되지 않음.

의존성 배열을 생략하면, 컴포넌트가 렌더링 될 때마다 useEffect가 실행됨.

 

✏ 의존성 배열

ex.

import React, { useState, useEffect } from 'react';

function Counter() {
  const [count, setCount] = useState(0);

  useEffect(() => {
    document.title = `Count: ${count}`;

    return () => {
      console.log('Clean-up code, e.g., removing event listeners');
    };
  }, [count]); // count가 변경될 때마다 이 효과가 실행됨

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>Click me</button>
    </div>
  );
}

 

: React의 useEffect 훅에서 특정 상태나 값이 변경될 때만 부수효과가 실행되도록 제어하는 배열.

이 배열은 useEffect의 두 번째 인자로 전달됨.

 

 

 

usestate

ex.

import { useState } from 'react';

function Counter() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>Click me</button>
    </div>
  );
}

: react의 훅(hook)으로, 함수형 컴포넌트에서 상태(state)를 관리할 수 있게 해줌. 상태값과 그 상태를 업데이트 하는 함수를 반환함. 즉, 상태 관리가 필요한 함수형 컴포넌트에서 사용됨.

 

✏ 함수형 컴포넌트

: React에서 UI를 렌더링 하기 위해 사용되는 컴포넌트 유형. 기존 클래스형 컴포넌트와 달리 상태(state)와 생명주기 메서드를 함수 내에서 사용할 수 있도록 훅을 제공함.

 

✏ 생명주기 메서드

: 컴포넌트가 생성되고 업데이트 되며, 삭제되는 과정에서 특정 시점에 호출되는 메서드들. 

컴포넌트의 상태나 UI를 변경하거나, 외부 리소스를 정리하는 등의 작업을 할 수 있음.

 

 React에서의 생명주기 메서드

: 클래스형 컴포넌트에서 생명주기 메서드를 사용함. 함수형 컴포넌트에서는 useEffect 훅을 통해 비슷한 기능을 구현할 수 있음.

주요 생명주기 메서드

- constructor : 컴포넌트가 처음 생성될 때 호출됨. 초기 상태를 설정하거나 클래스 "메서드를 바인딩"할 때 사용됨.→ 메서드 바인딩 : 객체의 메서드를 해당 객체에 묶어주는 작업을 의미함.

 

- componentDidMount : 컴포넌트가 처음 렌더링 된 후에 호출됨. API 호출, 타이머 설정 등 초기 데이터 로드와 같은 부수효과( side Effect)를 처리할 때 사용됨.

 

- componentDidUpdate : 컴포넌트가 업데이트 된 후에 호출됨. 이전 상태와 현재 상태를 비교하여 필요한 추가 작업을 할 수 있음.

 

- componentWillUnmont : 컴포넌트가 DOM에서 제거되기 전에 호출됨. 타이머나 이벤트 리스너 등 정리가 필요한 작업을 처리함.

+ Recent posts