목차


이슈 #1: Next.js에서 Redux-Saga 설정

1. 이슈 상황

항목 내용
발생 환경 Next.js 프로젝트에서 Redux-Saga 미들웨어 설정 시
증상 Redux 스토어 설정, Saga 미들웨어 연결, 환경별 DevTools 분기 필요
영향 범위 전체 앱 상태 관리

2. 해결 방안 후보

방안 장점 단점
A. next-redux-wrapper 사용 Next.js 공식 권장 패턴, 설정 간편 추가 라이브러리
B. 직접 Provider 설정 라이브러리 의존성 없음 보일러플레이트 증가
C. Redux Toolkit 간결한 코드, 공식 권장 기존 Saga 패턴 수정 필요

3. 선택한 해결법

선택: A안 (next-redux-wrapper)

// store/configureStore.js
import { createWrapper } from "next-redux-wrapper";
import { createStore, applyMiddleware, compose } from "redux";
import { composeWithDevTools } from "redux-devtools-extension";
import createSagaMiddleware from "@redux-saga/core";
import rootSaga from "../sagas";
import rootReducer from "../reducers";

// 커스텀 로거 미들웨어 (개발 환경 전용)
const loggerMidleware = () => (next) => (action) => {
  if (process.env.NEXT_PUBLIC_ENV === "development") {
    console.log(action);
  }
  next(action);
  return;
};

const configureStore = () => {
  const sagaMiddleware = createSagaMiddleware();
  const middlewares = [sagaMiddleware, loggerMidleware];

  // 환경별 DevTools 분기
  const enhancer =
    process.env.NEXT_PUBLIC_ENV === "production"
      ? compose(applyMiddleware(...middlewares))
      : composeWithDevTools(applyMiddleware(...middlewares));

  const store = createStore(rootReducer, enhancer);
  store.sagaTask = sagaMiddleware.run(rootSaga);

  return store;
};

const wrapper = createWrapper(configureStore, {
  debug: process.env.NEXT_PUBLIC_ENV === "development",
});

export default wrapper;

_app.js에서 적용:

// pages/_app.js
import wrapper from "../store/configureStore";

const App = ({ Component }) => {
  return (
    <>
      <Head>
        <meta charSet="utf-8" />
        <title>한국가이던스</title>
      </Head>
      <Component />
    </>
  );
};

export default wrapper.withRedux(App);

4. 선택 이유

관점 이유
Next.js 통합 next-redux-wrapper로 Next.js 앱에 Redux 간편 연결
환경별 분기 개발 환경에서만 DevTools, 로거 활성화
미들웨어 확장 Saga + 커스텀 로거 순차 적용
디버깅 개발 환경에서 모든 액션 콘솔 로깅

이슈 #2: 반응형 DatePicker 구현

1. 이슈 상황

항목 내용
발생 환경 예약 날짜 선택 UI
증상 데스크톱에서는 달력 전체 표시, 모바일에서는 팝업 형태가 적합
영향 범위 예약 날짜 선택 페이지

2. 해결 방안 후보