Skip to content

[feat] 시연(데모) 계정 로그인 기능 추가#252

Merged
dbjoung merged 9 commits intodevelopfrom
refactor/dbjoung
Feb 24, 2026
Merged

[feat] 시연(데모) 계정 로그인 기능 추가#252
dbjoung merged 9 commits intodevelopfrom
refactor/dbjoung

Conversation

@dbjoung
Copy link
Collaborator

@dbjoung dbjoung commented Feb 24, 2026

#️⃣ 연관된 이슈

#251

📝 작업 내용

시연(데모) 계정 로그인 기능 추가

🖼️ 스크린샷 (선택)

UI 변경 등 시각적으로 확인할 수 있는 내용이 있다면 첨부해주세요

💬 리뷰 요구사항 (선택)

리뷰어가 특히 봐주었으면 하는 부분이 있다면 작성해주세요

@dbjoung dbjoung self-assigned this Feb 24, 2026
@dbjoung dbjoung added the 💡 feature 기능 구현 관련 label Feb 24, 2026
@dbjoung dbjoung linked an issue Feb 24, 2026 that may be closed by this pull request
1 task
@github-actions
Copy link

🤖 AI Code Review

View results

🧠 요약

  • 이 PR은 시연(데모) 계정 로그인 기능을 추가하며, 로그인 프로세스의 비동기 처리 및 사용자 피드백을 개선합니다.
  • 주요 리스크는 비동기 처리 중 에러 핸들링과 상태 관리의 일관성입니다.

⚠️ 세부 코드 리뷰

  • [src/features/auth/pages/LoginPage.tsx:14-35]

    • 문제 설명: onSubmit 함수에서 로그인 요청을 처리하는 방식이 중복되어 있습니다.
    • 원인: fetchLogin 함수가 이메일과 비밀번호를 받아 로그인 요청을 처리하는데, onSubmit에서도 같은 로직을 반복하고 있습니다.
    • 개선 방안: onSubmit에서 fetchLogin을 호출하여 중복 코드를 제거하고, 코드의 가독성을 높입니다.
    • 코드 예시:
      const onSubmit = async (e: SyntheticEvent<HTMLFormElement, SubmitEvent>) => {
        e.preventDefault();
        setSubmitting(true); // 중복 클릭 방지
        const form = new FormData(e.target as HTMLFormElement);
        const email = String(form.get('email') || '');
        const password = String(form.get('password') || '');
        await fetchLogin(email, password);
      };
  • [src/lib/utils/authRequest.ts:96]

    • 문제 설명: 에러 발생 시 setToken('', '');을 호출하여 토큰을 초기화하고 있습니다.
    • 원인: 이 로직이 모든 에러에 대해 실행되므로, 비정상적인 상황에서도 토큰이 초기화될 수 있습니다.
    • 개선 방안: 특정 에러 상황에서만 토큰을 초기화하도록 조건을 추가합니다. 예를 들어, 인증 오류인 경우에만 초기화합니다.
    • 코드 예시:
      if (err.response?.status === 401) {
        setToken('', '');
      }
  • [src/features/dashboard/components/TimeSlot.tsx:55]

    • 문제 설명: 텍스트가 "접수 마감"에서 "공고 마감"으로 변경되었습니다.
    • 원인: 이 변경은 단순한 텍스트 수정으로, 기능적 문제는 없습니다.
    • 개선 방안: 변경된 텍스트가 의도한 대로 UI에 반영되었는지 확인합니다. 추가적인 변경 사항이 없다면 이 부분은 긍정적으로 평가할 수 있습니다.

🧪 테스트 제안

  • LoginPage 컴포넌트에 대한 테스트를 작성하여:
    • 정상적인 이메일과 비밀번호로 로그인 시 성공적으로 토큰이 설정되는지 확인합니다.
    • 데모 계정 로그인 버튼 클릭 시 fetchLogin이 올바르게 호출되는지 검증합니다.
    • 잘못된 로그인 시도에 대한 에러 핸들링이 제대로 작동하는지 확인합니다.

🔧 자동 수정 가능 예시

  • onSubmit 함수의 중복 코드를 제거하는 스니펫:
    const onSubmit = async (e: SyntheticEvent<HTMLFormElement, SubmitEvent>) => {
      e.preventDefault();
      setSubmitting(true);
      const form = new FormData(e.target as HTMLFormElement);
      const email = String(form.get('email') || '');
      const password = String(form.get('password') || '');
      await fetchLogin(email, password);
    };

이러한 개선 사항을 통해 코드의 가독성과 유지보수성을 높일 수 있습니다.

@github-actions
Copy link

🧪 Vercel Preview: https://jobda-q2n7fj2r9-aeujoungs-projects.vercel.app

Copy link
Member

@seung-in-Yoo seung-in-Yoo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

혼자서도 열심히 하고 계시네요 ㅋㅋㅋㅋㅋㅋ 굳굳입니다~!

@github-actions
Copy link

🤖 AI Code Review

View results

🧠 요약

  • 이 PR은 시연(데모) 계정 로그인 기능을 추가하는 작업으로, 로그인 기능의 비동기 처리 및 UI 요소가 변경되었습니다.
  • 주요 리스크는 비동기 처리 중 에러 핸들링이 부족할 수 있으며, 상태 관리와 관련된 부분에서 불필요한 리렌더링이 발생할 가능성이 있습니다.

⚠️ 세부 코드 리뷰

  • [src/features/auth/pages/LoginPage.tsx:14-35]

    • 문제 설명: onSubmit 함수 내에서 setSubmitting(true)를 호출한 후, fetchLogin을 호출하기 전에 setSubmitting(false)를 호출하지 않음.
    • 원인: 로그인 요청이 실패할 경우, submitting 상태가 true로 남아있어 사용자가 다시 로그인 시도를 할 수 없음.
    • 개선 방안: 로그인 요청 후 성공 또는 실패에 따라 setSubmitting(false)를 호출하여 상태를 초기화해야 함.
    • 코드 예시:
      const onSubmit = async (e: SyntheticEvent<HTMLFormElement, SubmitEvent>) => {
        e.preventDefault();
        setSubmitting(true);
        const form = new FormData(e.target as HTMLFormElement);
        const email = String(form.get('email') || '');
        const password = String(form.get('password') || '');
        
        try {
          await fetchLogin(email, password);
        } catch (error) {
          // 에러 처리 로직 추가 (예: alert)
        } finally {
          setSubmitting(false); // 항상 상태를 초기화
        }
      };
  • [src/lib/utils/authRequest.ts:96]

    • 문제 설명: 에러 발생 시 setToken('', '');을 호출하여 토큰을 초기화함.
    • 원인: 이 로직은 API 요청이 실패할 때마다 토큰을 초기화하게 되어, 사용자가 로그인 상태를 유지하지 못하게 할 수 있음.
    • 개선 방안: 에러 발생 시 토큰 초기화 로직을 제거하거나, 특정 에러 상황에서만 초기화하도록 조건을 추가해야 함.
    • 코드 예시:
      if (err.name === 'UnauthorizedError') {
        setToken('', ''); // 특정 에러 상황에서만 초기화
      }
  • [src/features/auth/pages/LoginPage.tsx:30-35]

    • 문제 설명: fetchLogin 함수가 client 변수를 사용하고 있지만, 해당 변수가 정의되지 않음.
    • 원인: useAuthedClient 훅을 통해 클라이언트를 가져와야 하는데, 이를 사용하지 않음.
    • 개선 방안: useAuthedClient를 사용하여 클라이언트를 가져오고, fetchLogin에 전달해야 함.
    • 코드 예시:
      const client = useAuthedClient();

🧪 테스트 제안

  • 로그인 버튼 클릭 시 정상적으로 로그인 요청이 이루어지는지 확인하는 테스트 케이스를 작성합니다.
  • 로그인 실패 시 사용자에게 적절한 에러 메시지가 표시되는지 확인하는 테스트 케이스를 추가합니다.
  • 데모 로그인 버튼 클릭 시, 데모 계정으로 로그인 요청이 정상적으로 이루어지는지 검증합니다.

🔧 자동 수정 가능 예시

const onSubmit = async (e: SyntheticEvent<HTMLFormElement, SubmitEvent>) => {
  e.preventDefault();
  setSubmitting(true);
  const form = new FormData(e.target as HTMLFormElement);
  const email = String(form.get('email') || '');
  const password = String(form.get('password') || '');

  try {
    await fetchLogin(email, password);
  } catch (error) {
    // 에러 처리 로직 추가
  } finally {
    setSubmitting(false);
  }
};

이 리뷰를 통해 코드의 안정성과 사용자 경험을 개선할 수 있을 것입니다.

@github-actions
Copy link

🧪 Vercel Preview: https://jobda-izst600m8-aeujoungs-projects.vercel.app

@github-actions
Copy link

🤖 AI Code Review

View results

🧠 요약

  • 이 PR에서는 데모 계정 로그인 기능을 추가하였으며, 관련된 환경 변수 설정 및 로그인 페이지의 UI 변경이 포함되어 있습니다.
  • 주요 리스크는 다음과 같습니다:
    1. 환경 변수 노출 위험: 데모 계정의 이메일과 비밀번호가 환경 변수로 설정되며, 이 값들이 잘못 관리될 경우 보안 문제가 발생할 수 있습니다.
    2. 비동기 처리 및 에러 핸들링: 로그인 과정에서의 에러 처리 및 사용자 피드백이 충분히 구현되지 않았을 수 있습니다.
    3. 상태 관리 및 성능: setSubmitting 상태 관리가 적절히 이루어지지 않으면, 사용자 경험에 부정적인 영향을 미칠 수 있습니다.

⚠️ 세부 코드 리뷰

  • [src/features/auth/pages/LoginPage.tsx:14-14]

    • 문제: onSubmit 함수에서 setSubmitting(true)가 중복 호출될 수 있음.
    • 원인: fetchLogindemoLogin 함수에서 모두 setSubmitting(true)를 호출하고 있어, 중복 클릭 방지 로직이 불완전함.
    • 개선 방안: setSubmittingfetchLogindemoLogin 함수의 시작 부분에서만 호출하도록 수정.
    const fetchLogin = async (email: string, password: string) => {
        setSubmitting(true);
        try {
            const result = await login({ email, password }, client);
            setToken(result.accessToken, result.refreshToken);
        } catch (error) {
            // 에러 처리 로직 추가
        } finally {
            setSubmitting(false);
        }
    };
  • [src/lib/utils/authRequest.ts:96-96]

    • 문제: setToken('', ''); 호출이 에러 발생 시 항상 실행됨.
    • 원인: 에러 발생 시 토큰을 초기화하는 로직이 포함되어 있어, 사용자가 로그인 후에도 토큰이 초기화될 수 있음.
    • 개선 방안: 에러 상황에 따라 적절한 에러 핸들링 로직을 추가하고, 필요 시에만 setToken을 호출하도록 수정.
    if (err.name === 'UnauthorizedError') {
        setToken('', ''); // 특정 에러에 대해서만 토큰 초기화
    }
  • [src/features/auth/pages/LoginPage.tsx:35-35]

    • 문제: demoLogin 함수에서 환경 변수를 직접 사용하고 있음.
    • 원인: 환경 변수를 직접 사용하는 것은 테스트 및 유지보수에 어려움을 줄 수 있음.
    • 개선 방안: 환경 변수를 가져오는 로직을 별도의 함수로 분리하여 재사용 가능하도록 개선.
    const getDemoCredentials = () => ({
        email: import.meta.env.VITE_DEMO_EMAIL as string,
        password: import.meta.env.VITE_DEMO_PASSWORD as string,
    });
    
    const demoLogin = async () => {
        setSubmitting(true);
        const { email, password } = getDemoCredentials();
        await fetchLogin(email, password);
    };

🧪 테스트 제안

  • 유닛 테스트: fetchLogindemoLogin 함수에 대한 유닛 테스트를 작성하여, 올바른 이메일과 비밀번호로 로그인 시 성공적으로 토큰이 설정되는지 확인합니다.
  • 통합 테스트: 로그인 페이지에서 실제 UI를 통해 로그인 및 데모 로그인 버튼 클릭 시, 올바른 API 호출과 상태 변화가 발생하는지 검증합니다.

🔧 자동 수정 가능 예시

  • 아래와 같이 fetchLogindemoLogin 함수를 개선한 코드 스니펫을 적용할 수 있습니다.
const fetchLogin = async (email: string, password: string) => {
    setSubmitting(true);
    try {
        const result = await login({ email, password }, client);
        setToken(result.accessToken, result.refreshToken);
    } catch (error) {
        // 에러 처리 로직 추가
    } finally {
        setSubmitting(false);
    }
};

const getDemoCredentials = () => ({
    email: import.meta.env.VITE_DEMO_EMAIL as string,
    password: import.meta.env.VITE_DEMO_PASSWORD as string,
});

const demoLogin = async () => {
    const { email, password } = getDemoCredentials();
    await fetchLogin(email, password);
};

이러한 개선을 통해 코드의 안정성과 유지보수성을 높일 수 있습니다.

@github-actions
Copy link

🧪 Vercel Preview: https://jobda-7w3rg20bo-aeujoungs-projects.vercel.app

@github-actions
Copy link

🤖 AI Code Review

View results

🧠 요약

  • 이 PR은 시연(데모) 계정 로그인 기능을 추가하며, 환경 변수 설정 및 로그인 페이지의 UI 변경을 포함하고 있습니다.
  • 주요 리스크는 비동기 처리와 상태 관리의 일관성, 환경 변수의 안전한 사용, 그리고 코드의 가독성입니다.

⚠️ 세부 코드 리뷰

  • [src/features/auth/pages/LoginPage.tsx:14-35]

    • 문제 설명: fetchLogin 함수에서 console.log(email, password);가 포함되어 있습니다.
    • 원인: 디버깅 용도로 사용된 console.log는 프로덕션 환경에서 불필요한 로그를 남길 수 있습니다.
    • 개선 방안: 로그를 제거하거나, 필요시 로깅 라이브러리를 사용하여 환경에 따라 로그 레벨을 조정하도록 합니다.
    • 코드 예시:
      const fetchLogin = async (email: string, password: string) => {
          try {
              const result = await login({ email, password }, client);
              setToken(result.accessToken, result.refreshToken);
          } catch (error) {
              // 에러 핸들링 로직 추가
          }
      };
  • [src/features/auth/pages/LoginPage.tsx:31-31]

    • 문제 설명: setSubmitting(true);demoLogin 함수와 onSubmit 함수 모두에 존재합니다.
    • 원인: 중복된 상태 업데이트는 코드의 가독성을 떨어뜨리고, 유지보수성을 저하시킬 수 있습니다.
    • 개선 방안: 상태 업데이트를 별도의 함수로 분리하여 중복을 줄입니다.
    • 코드 예시:
      const handleSubmit = async (email: string, password: string) => {
          setSubmitting(true);
          await fetchLogin(email, password);
      };
      
      const demoLogin = async () => {
          const email = import.meta.env.VITE_DEMO_EMAIL as string;
          const password = import.meta.env.VITE_DEMO_PASSWORD as string;
          await handleSubmit(email, password);
      };
      
      const onSubmit = async (e: SyntheticEvent<HTMLFormElement, SubmitEvent>) => {
          e.preventDefault();
          const form = new FormData(e.target as HTMLFormElement);
          const email = String(form.get('email') || '');
          const password = String(form.get('password') || '');
          await handleSubmit(email, password);
      };
  • [src/lib/utils/authRequest.ts:96]

    • 문제 설명: 에러 발생 시 setToken('', '');을 호출하여 토큰을 초기화하고 있습니다.
    • 원인: 이 로직은 에러 발생 시 사용자에게 불필요한 상태 변경을 초래할 수 있습니다.
    • 개선 방안: 에러 핸들링을 보다 세분화하여, 특정 에러에 대해서만 토큰을 초기화하도록 합니다.
    • 코드 예시:
      if (err.name === 'UnauthorizedError') {
          setToken('', '');
      }

🧪 테스트 제안

  • demoLoginonSubmit 함수에 대한 유닛 테스트를 작성하여, 올바른 이메일과 비밀번호가 전달되는지, 상태가 적절히 업데이트되는지를 검증합니다.
  • 에러 핸들링 로직에 대한 테스트를 추가하여, 다양한 에러 상황에서의 동작을 확인합니다.

🔧 자동 수정 가능 예시

  • 중복된 상태 업데이트를 제거하는 함수 리팩토링을 자동으로 적용할 수 있는 스니펫:
const handleSubmit = async (email: string, password: string) => {
    setSubmitting(true);
    await fetchLogin(email, password);
};

이 리뷰를 통해 코드의 가독성과 유지보수성을 높일 수 있으며, 비즈니스 로직의 일관성을 유지할 수 있습니다.

@github-actions
Copy link

🧪 Vercel Preview: https://jobda-dqdym5zr5-aeujoungs-projects.vercel.app

@github-actions
Copy link

🤖 AI Code Review

View results

🧠 요약

  • 이 PR은 데모 계정 로그인 기능을 추가하는 작업으로, 환경 변수 설정과 로그인 페이지의 UI 변경이 포함되어 있습니다.
  • 주요 리스크는 비밀번호와 이메일을 환경 변수로 관리하는 부분에서 보안 취약점이 발생할 수 있으며, 로그인 처리 로직에서 에러 핸들링이 부족할 수 있습니다.

⚠️ 세부 코드 리뷰

  • [src/features/auth/pages/LoginPage.tsx:14-14]

    • 문제: setSubmitting(true);demoLogin 함수와 onSubmit 함수 모두에서 호출되고 있습니다.
    • 원인: 중복된 코드로 인해 유지보수성이 떨어질 수 있습니다.
    • 개선 방안: 중복된 로직을 별도의 함수로 분리하여 코드 중복을 줄입니다.
    • 코드 예시:
      const handleSubmitting = () => {
        setSubmitting(true);
      };
      
      const demoLogin = async () => {
        handleSubmitting();
        const email = import.meta.env.VITE_DEMO_EMAIL as string;
        const password = import.meta.env.VITE_DEMO_PASSWORD as string;
        await fetchLogin(email, password);
      };
      
      const onSubmit = async (e: SyntheticEvent<HTMLFormElement, SubmitEvent>) => {
        e.preventDefault();
        handleSubmitting();
        const form = new FormData(e.target as HTMLFormElement);
        const email = String(form.get('email') || '');
        const password = String(form.get('password') || '');
        await fetchLogin(email, password);
      };
  • [src/lib/utils/authRequest.ts:96-96]

    • 문제: 에러 발생 시 setToken('', '');을 호출하여 토큰을 초기화하고 있습니다.
    • 원인: 이 로직이 모든 에러에 대해 실행되므로, 실제로 토큰을 초기화할 필요가 없는 경우에도 호출될 수 있습니다.
    • 개선 방안: 에러의 종류에 따라 조건부로 토큰 초기화를 수행하도록 수정합니다.
    • 코드 예시:
      if (err.name === 'UnauthorizedError') {
        setToken('', '');
      }
  • [src/features/dashboard/components/TimeSlot.tsx:55-55]

    • 문제: "접수 마감"이라는 텍스트가 "공고 마감"으로 변경되었습니다.
    • 원인: UI 텍스트 변경으로 인해 사용자 혼란을 초래할 수 있습니다.
    • 개선 방안: 변경된 텍스트가 실제 비즈니스 로직과 일치하는지 확인하고, 필요시 문서화합니다.
    • 코드 예시: 해당 부분은 비즈니스 요구사항에 따라 변경된 것이므로, 추가적인 수정이 필요하지 않을 수 있습니다.

🧪 테스트 제안

  • 데모 로그인 테스트: 데모 계정으로 로그인 시, 실제 API 호출이 이루어지고 토큰이 정상적으로 설정되는지 확인하는 테스트를 작성합니다.
  • 에러 핸들링 테스트: 로그인 시 잘못된 자격 증명으로 인한 에러 발생 시, 적절한 에러 메시지가 사용자에게 표시되는지 확인합니다.

🔧 자동 수정 가능 예시

  • 중복된 setSubmitting(true); 호출을 함수로 분리하는 스니펫:
    const handleSubmitting = () => {
      setSubmitting(true);
    };

이 리뷰를 통해 코드의 유지보수성과 가독성을 높일 수 있으며, 에러 핸들링을 강화하여 보안성을 높일 수 있습니다.

@github-actions
Copy link

🧪 Vercel Preview: https://jobda-r1t7z3r9x-aeujoungs-projects.vercel.app

@github-actions
Copy link

🤖 AI Code Review

View results

🧠 요약

  • 이 PR은 데모 계정 로그인 기능을 추가하며, 환경 변수 설정 및 로그인 페이지의 UI 변경이 포함되어 있습니다.
  • 주요 리스크는 비동기 처리 및 에러 핸들링의 적절성, 상태 관리의 일관성, 그리고 코드의 가독성입니다.

⚠️ 세부 코드 리뷰

  • [src/features/auth/pages/LoginPage.tsx:14-35]

    • 문제: onSubmit 함수에서 중복된 코드가 존재합니다. 로그인 처리 로직이 fetchLogin 함수로 분리되었지만, onSubmit 내에서 여전히 setSubmitting을 두 번 호출하고 있습니다.
    • 원인: 코드 중복으로 인해 유지보수성이 떨어지고, 향후 수정 시 실수할 가능성이 높습니다.
    • 개선 방안: setSubmitting 호출을 fetchLogin 함수 내에서 처리하도록 수정하여 중복을 제거합니다.
    • 코드 예시:
      const fetchLogin = async (email: string, password: string) => {
        setSubmitting(true);
        try {
          const result = await login({ email, password }, client);
          setToken(result.accessToken, result.refreshToken);
        } catch (error) {
          // 에러 처리 로직 추가
        } finally {
          setSubmitting(false);
        }
      };
  • [src/lib/utils/authRequest.ts:96]

    • 문제: 에러 발생 시 setToken('', '');을 호출하여 토큰을 초기화하고 있습니다.
    • 원인: 에러 발생 시 토큰을 초기화하는 것이 항상 적절하지 않을 수 있으며, 이로 인해 사용자 경험이 저하될 수 있습니다.
    • 개선 방안: 에러의 종류에 따라 토큰 초기화 여부를 결정하도록 수정합니다. 예를 들어, 인증 오류인 경우에만 초기화하도록 합니다.
    • 코드 예시:
      if (err.name === 'UnauthorizedError') {
        setToken('', '');
      }
  • [src/features/dashboard/components/TimeSlot.tsx:55]

    • 문제: "접수 마감"이라는 텍스트가 "공고 마감"으로 변경되었습니다.
    • 원인: 이 변경이 의도된 것인지 확인이 필요합니다. 만약 의도된 변경이라면, 관련된 문서나 주석을 추가하여 다른 개발자들이 이해할 수 있도록 해야 합니다.
    • 개선 방안: 변경의 의도를 주석으로 명시하거나, 관련된 이슈를 링크하여 추적 가능하도록 합니다.
    • 코드 예시:
      // 공고 마감으로 변경된 이유: [관련 이슈 링크]

🧪 테스트 제안

  • fetchLogin 함수에 대한 단위 테스트를 작성하여, 올바른 이메일과 비밀번호로 로그인 시 토큰이 설정되는지 확인합니다.
  • 에러 발생 시 토큰이 초기화되는지, 그리고 적절한 에러 메시지가 사용자에게 표시되는지 검증하는 테스트를 추가합니다.
  • 데모 로그인 버튼 클릭 시, 올바른 이메일과 비밀번호로 로그인 요청이 발생하는지 확인하는 통합 테스트를 작성합니다.

🔧 자동 수정 가능 예시

  • fetchLogin 함수의 중복 제거를 위한 자동 수정 스니펫:
const fetchLogin = async (email: string, password: string) => {
  setSubmitting(true);
  try {
    const result = await login({ email, password }, client);
    setToken(result.accessToken, result.refreshToken);
  } catch (error) {
    // 에러 처리 로직 추가
  } finally {
    setSubmitting(false);
  }
};

이러한 피드백을 통해 코드의 가독성과 유지보수성을 높이고, 사용자 경험을 개선할 수 있습니다.

@github-actions
Copy link

🧪 Vercel Preview: https://jobda-4blxcfgs2-aeujoungs-projects.vercel.app

@github-actions
Copy link

🤖 AI Code Review

View results

🧠 요약

  • 이 PR은 시연(데모) 계정 로그인 기능을 추가하는 작업으로, 환경 변수 설정 및 로그인 페이지의 UI 변경이 포함되어 있습니다.
  • 주요 리스크는 비밀번호와 이메일을 환경 변수로 관리하는 부분에서 보안 취약점이 발생할 수 있으며, 로그인 처리 로직에서 에러 핸들링이 누락될 수 있습니다.

⚠️ 세부 코드 리뷰

  • [src/features/auth/pages/LoginPage.tsx:14-35]

    • 문제 설명: fetchLogin 함수에서 로그인 요청 후 토큰을 설정하는 부분이 있습니다.
    • 원인: 로그인 요청이 실패할 경우 에러 핸들링이 부족하여 사용자에게 피드백을 제공하지 않습니다.
    • 개선 방안: 로그인 실패 시 사용자에게 에러 메시지를 보여줄 수 있도록 에러 핸들링을 추가합니다.
    const fetchLogin = async (email: string, password: string) => {
        try {
            const result = await login({ email, password }, client);
            setToken(result.accessToken, result.refreshToken);
        } catch (error) {
            openAlertModal({ message: '로그인에 실패했습니다. 다시 시도해주세요.', type: 'error' });
        }
    };
  • [src/lib/utils/authRequest.ts:96]

    • 문제 설명: API 요청에서 에러가 발생했을 때 setToken('', '');을 호출하여 토큰을 초기화합니다.
    • 원인: 이 부분은 에러 발생 시 토큰을 초기화하는 것이 적절하지 않을 수 있습니다. 예를 들어, 네트워크 오류나 서버 오류 등으로 인해 토큰이 유효하지 않을 수 있습니다.
    • 개선 방안: 에러의 종류에 따라 적절한 처리를 하도록 수정합니다.
    if (err.response && err.response.status === 401) {
        setToken('', '');
    }
  • [src/features/dashboard/container/LongViewContainer.tsx:11-22]

    • 문제 설명: detailUrl prop이 필수로 설정되어 있습니다.
    • 원인: detailUrl이 필요하지 않은 경우도 있을 수 있으므로 선택적으로 변경하는 것이 좋습니다.
    • 개선 방안: detailUrl을 선택적으로 변경하고, 해당 prop이 제공될 때만 DetailButton을 렌더링하도록 수정합니다.
    detailUrl?: string;
    ...
    {detailUrl && <DetailButton className="mb-[15px]" url={detailUrl} />}

🧪 테스트 제안

  • 로그인 페이지에서 데모 계정으로 로그인 시도 후, 올바른 토큰이 설정되는지 확인하는 테스트를 작성합니다.
  • 로그인 실패 시 에러 메시지가 화면에 표시되는지 확인하는 테스트를 추가합니다.

🔧 자동 수정 가능 예시

  • 로그인 처리 로직에서 에러 핸들링을 추가하는 스니펫:
const fetchLogin = async (email: string, password: string) => {
    try {
        const result = await login({ email, password }, client);
        setToken(result.accessToken, result.refreshToken);
    } catch (error) {
        openAlertModal({ message: '로그인에 실패했습니다. 다시 시도해주세요.', type: 'error' });
    }
};

이 리뷰를 통해 코드의 안정성과 사용자 경험을 개선할 수 있습니다.

@github-actions
Copy link

🧪 Vercel Preview: https://jobda-kb2lrbhz7-aeujoungs-projects.vercel.app

@dbjoung dbjoung merged commit 88afdcf into develop Feb 24, 2026
3 checks passed
@dbjoung dbjoung deleted the refactor/dbjoung branch February 24, 2026 10:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

💡 feature 기능 구현 관련

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEAT] 시연 계정 로그인 버튼 생성

2 participants