: React의 상태 관리 아키텍처 패턴. 데이터 흐름을 단방향으로 유지해 어플리케이션 상태를 예측 가능하게 만든다. (중앙 집중식 상태 관리)
Flux 패턴을 사용하는 대표적인 상태 관리 라이브러리 : Redux
반대되는 개념인
Atomic 패턴을 사용하는 대표적인 상태 관리 라이브러리에는zustand등이 있다.
: Redux를 개량한 것. 코드는 더 적게, Redux를 더 편리하게 사용하기 위해 만든 라이브러리
: axios.create()로 생성하는 커스텀 axios 객체
공통 설정(baseURL, headers 등)을 사전 정의해두고, API 요청 시 재사용하기 위한 용도로 사용한다. (interceptor 설정 가능)
import axios from "axios";
export const api = axios.create({
baseURL: "https://api.example.com",
timeout: 5000,
headers: {
"Content-Type": "application/json",
},
});
// 사용 예시
import { api } from "./axiosInstance";
const getUser = async () => {
const res = await api.get("/users/1");
return res.data;
};
: 요청 혹은 응답을 가로채어 로직을 삽입할 수 있는 기능
등의 작업을 인터셉터를 통해 처리할 수 있다.
// 요청 가로채기
api.interceptors.request.use(
(config) => {
const token = localStorage.getItem("accessToken");
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
},
(error) => Promise.reject(error)
);
// 응답 가로채기
api.interceptors.response.use(
(response) => {
// 응답 데이터 구조 단일화
return response.data;
},
(error) => {
const { status } = error.response;
if (status === 401) {
// 토큰 만료 처리 등
console.warn("인증 만료 - 로그아웃 필요");
}
return Promise.reject(error);
}
);
// api/client.ts
import axios from "axios";
const client = axios.create({
baseURL: import.meta.env.VITE_API_URL,
timeout: 7000,
});
client.interceptors.request.use((config) => {
const token = sessionStorage.getItem("accessToken");
if (token) config.headers.Authorization = `Bearer ${token}`;
return config;
});
client.interceptors.response.use(
(res) => res.data,
(err) => {
if (err.response?.status === 401) {
// refreshToken 로직 수행 가능
}
return Promise.reject(err);
}
);
export default client;
: Redux에서 비동기를 다루기 위해 사용되는 리덕스 미들웨어
Thunk 함수를 반환하는 함수, 즉 객체가 아닌 함수를 반환할 수 있도록 허용해주는 미들웨어
dispatch(함수) → 함수실행 → 함수안에서 dispatch(객체)
: 기본 hook 만으로는 중복되는 로직을 효율적으로 관리하기 어렵기 때문에, 개발자가 직접 Hook을 만들어서 사용하게 되는데, 이를 Custom hook 이라고 한다.
재사용 가능 로직을 구현하기 위해 사용됨.use 로 시작해야하며 hook 규칙을 준수해야 한다. (컴포넌트 최상위에서 호출 등등): 짧은 시간 동안 연속해서 같은 이벤트가 발생했을 때 과도한 이벤트 핸들러 호출을 방지하기 위한 기법
구현 시
setTimeout,setInterval,클로저를 사용하는데, 이때 정리(clean up 함수 작성)가 제대로 이루어지지 않으면메모리 누수가 발생할 수 있다.
- 메모리 누수 : 필요하지 않은 메모리를 계속 점유하고 있는 현상
: 짧은 시간 동안 연속해서 같은 이벤트가 발생했을 때, 이벤트들을 일정 시간 단위로 그룹화하여 그룹의 처음 or 마지막 핸들러만 호출되도록 하는 것. 일정 시간 간격으로 이벤트 핸들러 호출
무한 스크롤에 많이 사용
: 짧은 시간 동안 연속해서 같은 이벤트가 발생했을 때, 마지막 이벤트로부터 일정 시간이 경과한 후에 한 번만 호출하도록 하는 것
resize 이벤트, 입력값 실시간 검색에 많이 사용
인증(Authentication) : 서비스를 이용하려는 유저가 등록된 유저인지 확인하는 절차인가(Authorization) : 특정 리소스에 접근할 수 있는 권한이 있는지 확인하는 절차http 프로토콜 통신의 특징
- 무상태 (stateless) : 서버는 클라이언트의 상태를 기억하지 않으므로, 각 요청마다 서버에서 요구하는 모든 상태 정보를 담아서 요청해야 한다.
- 비연결성 (connectionless) : 서버와 클라이언트는 연결되어 있지 않다. 서버 입장에서는 매번 새로운 요청이다. 따라서 최소한의 서버 자원으로 서버를 유지할 수 있게 해준다.
쿠키(cookie) : 서버와 클라이언트 간의 지속적인 데이터 교환을 위해 만들어진 key-value 형식의 저장소.
- 별도로 삭제하거나 유효기간이 만료되지 않는 이상 서버와 통신할 때 자동으로 주고 받게 된다
세션(sesstion) : 사용자와 서버 간의 연결이 활성화된 상태를 의미한다. (인증이 유지되고 있는 상태
토큰(token) : 클라이언트에서 보관하는 암호화된 인증 정보를 의미한다.
- 서버에서 사용자 인증 정보를 보관할 필요가 없기 때문에 서버 부담을 줄일 수 있다.
JWT (JSON Web Token) 이 있다.: JSON Web Token. 웹에서 인증 수단으로 사용되는 토큰
위조 방지)리소스 접근 인가를 받기 위해 사용되는 토큰을
Access Token,Refresh Token으로 만료된 Access Token을 재발급.
Refresh Token도 만료된 상태라면 재인증 필요
: Amazon S3는 확장성, 데이터 가용성, 보안 및 성능을 제공하는 스토리지 서비스. 쉽게 말해 구글 드라이브처럼 파일 저장 서비스