2025/02/05: 5개의 글

[React] Axios Interceptor

Posted by nkjok
2025. 2. 5. 15:38 낙서장[1]/1. React
반응형

엑시오스 인터셉터는 HTTP 요청과 응답을 가로채서 처리할 수 있는 기능입니다. 인터셉터를 사용하면 요청 전, 응답 전에 추가 작업을 수행할 수 있습니다. 이를 통해 요청과 응답을 수정하거나, 오류 처리, 로깅 등 다양한 용도로 사용할 수 있습니다.

용도

  1. 인증 헤더 추가: 요청 전에 인증 헤더를 추가하여 보호된 API 요청을 수행할 수 있습니다.
  2. 오류 처리: 요청이나 응답에서 오류가 발생했을 때 처리할 수 있습니다.
  3. 로그 생성: 요청과 응답을 로깅하여 디버깅이나 모니터링에 사용할 수 있습니다.
  4. 헤더 수정: 요청과 응답의 헤더를 수정하여 필요한 정보를 추가할 수 있습니다.

기능 동작 방식

엑시오스 인터셉터는 요청과 응답을 가로채기 전에 실행되는 함수를 정의합니다. 이 함수는 요청이나 응답을 수정하거나, 새로운 작업을 수행할 수 있습니다.

예시

javascript
import axios from 'axios';

// 요청 인터셉터
axios.interceptors.request.use(function (config) {
  // 요청 전 작업 처리
  console.log('Request:', config);
  return config;
}, function (error) {
  // 요청 에러 처리
  return Promise.reject(error);
});

// 응답 인터셉터
axios.interceptors.response.use(function (response) {
  // 응답 전 작업 처리
  console.log('Response:', response);
  return response;
}, function (error) {
  // 응답 에러 처리
  return Promise.reject(error);
});

위 예시에서는 요청과 응답을 가로채서 콘솔에 로그를 출력합니다. 이와 같은 방식으로 인터셉터를 사용하여 요청과 응답을 처리할 수 있습니다.

이 외에도 인터셉터를 사용하여 다양한 작업을 수행할 수 있으며, 커스텀 인스턴스에서도 인터셉터를 추가할 수 있습니다.

반응형

[React] 싱글플레이어 애플리케이션 단점 세션초기화

Posted by nkjok
2025. 2. 5. 12:41 낙서장[1]/1. React
반응형

브라우저 새로고침 시 정보 초기화 문제와 쿠키로 관리하는 방법

싱글플레이어 애플리케이션에서 사용자가 브라우저를 새로 고침할 때 모든 정보가 새로 업데이트되어 초기화되는 문제는 자주 발생하는 단점입니다. 이로 인해 사용자는 로그인 이전 상태로 되돌아가게 되며, 이는 사용자 경험에 부정적인 영향을 미칠 수 있습니다. 이러한 문제를 해결하기 위해 쿠키를 사용하여 정보를 관리하는 방법이 있습니다.

문제 설명

브라우저 새로고침 시 모든 정보가 새로 업데이트되면서 사용자의 로그인 상태와 같은 중요한 정보도 초기화됩니다. 이는 사용자가 다시 로그인해야 하는 불편함을 초래하며, 싱글플레이어 애플리케이션에서 자주 발생하는 문제입니다.

쿠키로 문제 해결

이 문제를 해결하기 위해 쿠키를 사용하여 사용자의 상태 정보를 저장하고 관리할 수 있습니다. 쿠키는 작은 데이터 파일로, 사용자의 브라우저에 저장되어 웹사이트가 사용자의 상태 정보를 유지할 수 있도록 도와줍니다.

  1. 로그인 상태 저장: 사용자가 로그인할 때 쿠키에 로그인 상태 정보를 저장합니다. 이를 통해 브라우저를 새로 고침하더라도 사용자가 로그인된 상태를 유지할 수 있습니다.
  2. javascript
    document.cookie = "username=JohnDoe; path=/; max-age=3600";
    
  3. 쿠키 읽기: 브라우저가 새로 고침될 때 쿠키를 읽어 사용자의 로그인 상태를 확인합니다. 쿠키에 저장된 정보를 기반으로 사용자의 상태를 복원합니다.
  4. javascript
    function getCookie(name) {
        let matches = document.cookie.match(new RegExp(
          "(?:^|; )" + name.replace(/([\.$?*|{}\(\)
    
    
 

\\\/\+^])/g, '\\$1') + "=([^;]*)" )); return matches ? decodeURIComponent(matches[1]) : undefined; }

let username = getCookie('username'); if (username) { console.log("Welcome back, " + username); }

 
3. **로그아웃 처리**:
사용자가 로그아웃할 때 쿠키를 삭제하여 로그인 상태를 초기화합니다.
```javascript
document.cookie = "username=; path=/; max-age=0";

쿠키를 사용하면 브라우저 새로고침 시에도 사용자의 상태를 유지할 수 있어 사용자 경험을 개선할 수 있습니다. 이를 통해 싱글플레이어 애플리케이션의 단점을 보완하고, 사용자에게 일관된 서비스를 제공할 수 있습니다.

이와 같은 방법으로 쿠키를 활용하여 브라우저 새로고침 시 정보 초기화 문제를 효과적으로 관리할 수 있습니다. 쿠키를 사용한 상태 관리는 애플리케이션의 유지 보수성을 높이고, 사용자가 애플리케이션을 더 편리하게 사용할 수 있도록 도와줍니다.

반응형

[React] Promise 객체 비동기 작업의 세 가지 상태

Posted by nkjok
2025. 2. 5. 12:25 낙서장[1]/1. React
반응형

자바스크립트에서 Promise 객체는 비동기 작업을 처리하는 데 유용한 객체입니다. Promise 객체는 비동기 작업의 성공 또는 실패를 나타내는 세 가지 상태를 가집니다. 각 상태에 대해 상세히 설명드릴게요.

1. 대기 상태 (Pending)

Promise 객체가 생성되고 나서 비동기 작업이 아직 완료되지 않은 상태입니다. 이 상태에서는 아직 결과값이 결정되지 않았으며, 성공 또는 실패가 확정되지 않은 상태입니다.

2. 이행 상태 (Fulfilled)

Promise 객체가 성공적으로 작업을 완료하여 결과값을 반환한 상태입니다. 이 상태에서는 then() 메서드의 첫 번째 콜백 함수가 실행되어 결과값을 처리합니다.

javascript
const promise = new Promise((resolve, reject) => {
    resolve('Success');
});

promise.then(value => {
    console.log(value); // "Success"
});

3. 거부 상태 (Rejected)

Promise 객체가 작업을 완료하지 못하고 오류를 반환한 상태입니다. 이 상태에서는 catch() 메서드의 콜백 함수가 실행되어 오류를 처리합니다.

javascript
const promise = new Promise((resolve, reject) => {
    reject('Error');
});

promise.catch(error => {
    console.log(error); // "Error"
});

상태 전이

Promise 객체는 상태가 한 번 정해지면 더 이상 다른 상태로 전이되지 않습니다. 즉, Pending 상태에서 Fulfilled 또는 Rejected 상태로만 전이될 수 있으며, 한 번 Fulfilled 또는 Rejected 상태로 전이되면 그 이후에는 상태가 변경되지 않습니다.

이러한 상태 관리를 통해 Promise는 비동기 작업의 성공 또는 실패를 효과적으로 처리할 수 있습니다.

반응형

[React] 리덕스(Redux)는 JavaScript 애플리케이션의 상태(state) 관리를 위한 예측 가능한 상태 컨테이너

Posted by nkjok
2025. 2. 5. 10:42 낙서장[1]/1. React
반응형

리덕스(Redux)는 JavaScript 애플리케이션의 상태(state) 관리를 위한 예측 가능한 상태 컨테이너입니다. 리덕스는 주로 리액트(React)와 함께 사용되지만, 다른 JavaScript 프레임워크 및 라이브러리와도 함께 사용할 수 있습니다. 리덕스의 주요 기능과 용도는 다음과 같습니다

주요 기능

  1. 중앙 집중식 상태 관리:
    • 리덕스는 애플리케이션의 전체 상태를 하나의 중앙 집중식 스토어(store)에서 관리합니다. 이는 상태가 예측 가능하고 쉽게 추적될 수 있도록 합니다.
  2. 상태 불변성 유지:
    • 리덕스는 상태가 불변(immutable)하도록 합니다. 이는 상태를 직접 변경하는 대신, 새로운 상태 객체를 반환하여 상태를 업데이트하는 방식을 채택합니다. 이를 통해 상태 변화를 추적하고 디버깅하기 쉽습니다.
  3. 액션(action)과 리듀서(reducer):
    • 액션은 상태 변경을 설명하는 객체로, 타입(type)과 페이로드(payload)를 포함할 수 있습니다.
    • 리듀서는 액션을 기반으로 새로운 상태를 생성하는 순수 함수입니다. 현재 상태와 액션을 인자로 받아 새로운 상태를 반환합니다.
  4. 미들웨어(middleware):
    • 리덕스는 미들웨어를 통해 비동기 작업(예: API 호출)이나 로깅과 같은 사이드 이펙트(side effects)를 처리할 수 있습니다. 대표적인 미들웨어로는 redux-thunk와 redux-saga가 있습니다.

사용 용도

  1. 상태 관리:
    • 리덕스를 사용하면 컴포넌트 간의 상태 공유가 쉬워집니다. 모든 컴포넌트가 중앙 스토어에서 상태를 읽고 업데이트할 수 있어, 상태가 일관되게 유지됩니다.
  2. 디버깅:
    • 리덕스 개발 도구(DevTools)를 사용하면 상태 변경 내역을 추적하고 디버깅할 수 있습니다. 이는 상태 변화와 관련된 문제를 쉽게 해결할 수 있게 도와줍니다.
  3. 비동기 작업 처리:
    • 리덕스 미들웨어를 사용하여 API 호출과 같은 비동기 작업을 관리할 수 있습니다. 이는 애플리케이션의 비동기 로직을 더 명확하고 구조적으로 유지할 수 있게 합니다.

리덕스의 작동 원리

  1. 액션 생성: 사용자가 애플리케이션 내에서 어떤 작업을 수행하면, 액션이 생성됩니다.
  2. javascript
    const action = { type: 'INCREMENT', payload: 1 };
    
  3. 액션 디스패치: 생성된 액션은 디스패치(dispatch) 함수를 통해 스토어에 전달됩니다.
  4. javascript
    store.dispatch(action);
    
  5. 리듀서 실행: 스토어는 현재 상태와 액션을 리듀서에 전달하여 새로운 상태를 생성합니다.
  6. javascript
    const reducer = (state = initialState, action) => {
        switch (action.type) {
            case 'INCREMENT':
                return { ...state, count: state.count + action.payload };
            default:
                return state;
        }
    };
    
  7. 새로운 상태 저장: 리듀서가 반환한 새로운 상태가 스토어에 저장되고, 이를 구독하고 있는 컴포넌트들이 업데이트됩니다.

이와 같은 방식으로 리덕스는 애플리케이션의 상태를 효율적으로 관리하고 예측 가능한 상태 변화를 보장합니다. 리덕스를 사용하면 애플리케이션의 복잡한 상태 관리 로직을 더 쉽게 유지하고 확장할 수 있습니다.

반응형

[React] 리액트(React)에서 훅(Hook)

Posted by nkjok
2025. 2. 5. 10:41 낙서장[1]/1. React
반응형

리액트(React)에서 훅(Hook)은 함수형 컴포넌트 내에서 상태(state)와 생명 주기(lifecycle) 기능을 사용할 수 있게 하는 기능입니다. 훅은 다음과 같은 주요 기능들을 제공합니다:

1. useState

상태 관리를 위해 사용됩니다. 함수형 컴포넌트에서 상태를 추가하고 사용할 수 있게 합니다.

javascript
const [state, setState] = useState(initialState);

2. useEffect

생명 주기 메서드를 대체하는 훅으로, 컴포넌트가 렌더링될 때와 업데이트될 때 특정 작업을 수행할 수 있게 합니다.

javascript
useEffect(() => {
    // 작업 수행
    return () => {
        // 정리 작업 수행
    };
}, [dependencies]); // 종속성 배열

3. useContext

컨텍스트를 사용하여 컴포넌트 트리 전체에서 값을 공유할 수 있게 합니다.

javascript
const value = useContext(MyContext);

4. useReducer

useState 대신 복잡한 상태 로직을 처리할 때 사용됩니다.

javascript
const [state, dispatch] = useReducer(reducer, initialState);

5. useMemo

성능 최적화를 위해 사용되며, 특정 값이 변경될 때만 메모이제이션된 값을 다시 계산합니다.

javascript
const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);

6. useCallback

성능 최적화를 위해 사용되며, 특정 값이 변경될 때만 콜백 함수를 다시 생성합니다.

javascript
const memoizedCallback = useCallback(() => {
    doSomething(a, b);
}, [a, b]);

7. useRef

참조를 사용하여 DOM 요소나 변수 등을 접근하고 관리할 수 있게 합니다.

javascript
const myRef = useRef(initialValue);

8. useLayoutEffect

useEffect와 유사하지만, 모든 DOM 변형 후 동기적으로 작동합니다. 레이아웃을 변경하는 작업에 적합합니다.

javascript
useLayoutEffect(() => {
    // 작업 수행
}, [dependencies]);

이 훅들은 리액트의 함수형 컴포넌트에서 상태 관리와 생명 주기 메서드를 사용하는 데 매우 유용합니다. 

반응형