Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ Fix/develop deploy ] Develop branch deploy 에러 픽스 #34

Merged
merged 1 commit into from
Jun 9, 2024

Conversation

soomin9106
Copy link
Collaborator

💜 작업 내용

  • Cloudflare build command pnpm 기반으로 변경 pnpx @cloudflare/next-on-pages —experimental-minify
  • lint error fix 를 통한 배포 에러 픽스

✅ PR Point

  • 원래 npx ~ 로 써도 되었었는데, pnpm 을 안쓰고 npm 을 빌드 도구로 쓰고 있다.. 라는 에러가 나서 커멘드 변경 했습니다!
  • 빌드 중에 제 파일들에서 unused import 관련 에러가 나서 pnpm eslint —fix . 를 통해 픽스 해주었습니다

import { cn } from "@shared/utils/cn";

import { Toaster } from "@shared/components/ui/toaster"
import "./globals.css";

export const metadata: Metadata = {
title: "FEW",
Copy link

Choose a reason for hiding this comment

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

이 패치 코드를 살펴보니 몇가지 사항들을 제안 드리고 싶습니다:

  1. import문의 순서: 이는 실질적인 실행에 직접적인 영향을 미치지는 않지만, 일반적으로 외부 모듈, 내부 모듈, CSS 모듈 등을 그룹화하여 정렬하는 것이 가독성과 유지 관리에 도움이 됩니다. 따라서 "./globals.css"의 위치를 원래대로 돌려주는 것이 좋을 수 있습니다.

  2. 커밋 메시지: 제공된 패치에는 커밋 메시지가 없습니다. 좋은 커밋 메시지는 복잡한 수정을 추적하거나 어떤 변경이 왜 이루어졌는지 이해하는 데 도움이 됩니다. 적절한 커밋 메시지를 추가해 주시기 바랍니다.

  3. 코드 테스트: 변경 사항이 기존 소스 코드에 부정적인 영향을 미치지 않는지 확인하기 위해 코드를 꼭 테스트해야 할 것입니다. 본 패치에서는 제거되거나 추가된 요소가 없기 때문에 크게 문제되지 않을 수 있지만, 수정 사항이 크게 반영될 경우에는 특히 중요합니다.

  4. 자바스크립트 또는 리액트의 문법에 관해 특별히 언급할 내용이 없습니다. 제공된 코드는 깔끔하게 정리되어 있으며, import 문도 적절하게 사용된 것 같습니다.

모든 변경 사항을 테스트 하고 검토하기 위해 일반적으로 코드 리뷰를 수행하는 것이 중요합니다. 이 과정은 버그를 걸러내고 체계적으로 코드를 개선하는 데 도움이 됩니다.

import SubscribeBottomBar from "@main/components/SubscribeBottomBar";
import { SUBSCRIBE_TITLES} from "@main/constants/main";
import { useSubscribeForm } from "@main/hooks/useSubscribeForm";

const SUBSCRIBE_POPUP_TITLE = (
<div className="text-black h3-bold text-lg">
Copy link

Choose a reason for hiding this comment

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

이 패치를 간단히 보면, 코드에서 많은 import들이 제거되었습니다. 몇 가지 점을 살펴보아야 합니다:

  • 사용되지 않는 Component와 Constant(예, Input, Button, EMAIL_CONTROL 등)를 import하는 것이 제거되어서 좋습니다. 이는 성능 향상에 도움이 됩니다.

  • 그러나 이러한 변경들은 이 파일에서 해당 dependencies가 실제로 사용되지 않았는지 확인해야 합니다. 어떠한 dependency가 제거된 후의 코드에서 필요하다면, 정상적인 작동을 방해할 수 있습니다.

  • 또한 참고로 이 패치는 하나의 컴포넌트만으로 전체 코드의 실행이나 기능에 어떤 영향을 미칠지 알 수 없습니다. 근본적인 문제가 있지 않은 한 (예, memory leak), 개별 컴포넌트 레벨에서만 코드 검토를 하는 것은 유용하지만, 전체 애플리케이션 또는 전체 시스템의 컨텍스트에서도 코드 검토를 해야 합니다.

개선사항은:

  • 만일 'useSubscribeForm' hook이 SUBSCRIBE_TITLES constant를 사용한다면, 'useSubscribeForm'을 정의하는 곳에서 SUBSCRIBE_TITLES를 import하는 것이 더 나을 수 있습니다.

  • 'SUBSCRIBE_POPUP_TITLE' 변수가 사용되지 않은 것 같으니 이를 확인하십시오. 사용되지 않는다면 제거하는 것이 더 낫습니다.

import AnswerContextButton from "@quiz/components/AnswerContextButton";
import { QuizProvider } from "@quiz/context/quizContext";

export default function QuizPage() {
return (
Copy link

Choose a reason for hiding this comment

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

이 코드 패치에서는 별다른 이슈나 버그를 식별하기 어렵습니다. 그러나 아래에 몇 가지 점을 고려해 보세요:

  1. 순서 변경: QuizProvider의 임포트 위치가 변경되었습니다. 일반적으로 이것은 큰 문제가 되지 않으나, import 순서에 특별한 스타일 가이드라인이 있다면 해당 기준에 맞추는 것이 좋습니다.

  2. Context 사용: 우리는 여기서 QuizProvider가 어떻게 사용되는지 보지 못합니다. QuizProviderQuizPage 컴포넌트 내에서 필요하거나 만약 여기서 어떤 context를 전달한다면, 적절하게 감싸 주어야 합니다.

  3. 테스트: 변동 사항은 작지만, 테스트가 연장선상에 있는지 확인하는 것이 중요합니다. 빌드가 제대로 수행되고, 페이지가 예상대로 렌더링되는지 확인하세요.

  4. 문서화: 패치가 작더라도 향후 원인 추적을 돕기 위해 이력에 어떠한 변경을 가하였는지 설명하는 주석을 추가하는 것이 좋다는 점을 기억하세요.

import * as useToastModule from '@shared/components/ui/use-toast'; // import as module
import { useToast } from '@shared/components/ui/use-toast';
import { EmailSubscribeFormData } from '@main/types';
import { fireEvent, render, screen } from '@testing-library/react';

// Mock the useSubscribeForm hook
const mockOnSubmit = vi.fn();
Copy link

Choose a reason for hiding this comment

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

아래는 코드 리뷰 결과입니다.

  • 코드의 의존성 import 순서가 깔끔하게 정리되어있습니다. 관련 라이브러리를 그룹화하고, 적절한 주석 사용을 통해 가독성을 보장하도록 작업했습니다.
  • 하지만, 'useForm', 'Control'와 같은 몇 가지 항목을 'react-hook-form'에서 임포트하는 것처럼 보이나 실제로 사용되지 않았습니다. 필요하지 않은 경우 삭제하는 것이 좋습니다.
  • 또한 '@main/hooks/useSubscribeForm'과 '@shared/components/ui/use-toast' 모듈을 참조하던 코드가 제거된 것을 확인할 수 있습니다. 이 변경이 맞는지 검토해야 합니다. 만약 이들이 필요하다면 다시 import 해야 하며, 더 이상 필요하지 않다면 해당 참조를 완전히 제거해야 합니다.
  • 'mockOnSubmit'은 '{}.fn()' 형태로 초기화되었으나, '{}'는 'Vi'에 매핑되어 있습니다. 원래 의도한 바가 무엇인지 확인할 필요가 있습니다. 만약 jest mock function을 만들고 싶었다면, 저 함수는 'jest.fn()'의 형태를 가져야 합니다.
  • 마지막으로, 코드에서 에러 처리 방식이나 예외 상황에 대한 처리가 보이지 않습니다. 함수 실패에 대비하는 로직이 필요할 수 있습니다.

리뷰 이외에도 단위 테스트 및 통합 테스트를 진행하여 코드의 기능을 확인하고 문제가 없는지 검증해보는 것이 좋습니다.

import { Input } from "@shared/components/ui/input";

import { EMAIL_CONTROL, SUBSCRIBE_ANNOUCE, SUBSCRIBE_TITLES,SUBSCRIBE_USER_ACTIONS } from "@main/constants/main";
import { useSubscribeForm } from "@main/hooks/useSubscribeForm";

export default function SubscribeBottomBar() {
const { form, onSubmit } = useSubscribeForm();
Copy link

Choose a reason for hiding this comment

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

이 코드 패치를 기반으로한 코드 리뷰는 다음과 같습니다:

  1. 불러온 모듈 및 컴포넌트의 순서를 변경하여 관련성 및 가독성을 향상시켰습니다. 그러나 이것은 개발자 사이의 팀-별로 다르기 때문에 이런 식으로 조직화 하는 것이 적합한지 반드시 확인해야 합니다.

  2. useSubscribeForm 훅에서 form 객체와 onSubmit 함수를 받습니다. 이 함수가 적절하게 error handling 되었는지 확인해야 합니다.

  3. 주어진 코드만으로는 구체적인 버그 위험을 평가하기 어렵습니다. useSubscribeForm 훅이 예상대로 동작하는지, 결국 이루고자 하는 작업에 대한 부정확성을 유발하는지 꼼꼼히 검토해야 합니다.

  4. SubscribeBottomBar함수에서 반환되는 JSX가 보이지 않습니다. 이 부분이 누락되었거나 해당 부분에서 발생할 수 있는 문제들을 점검하는 것이 중요합니다.

더 나은 코드 리뷰를 위해 전체 코드 컨텍스트를 제공하는 것이 중요합니다. 이렇게 하면 코드의 각 부분이 서로 어떻게 상호작용하고 사용되는지에 대한 더 나은 이해를 통해, 문제점을 알아채는 데 도움이 될 것입니다.

import { emailSubscribeSchema } from '@main/schemas';
import { EmailSubscribeFormData } from '@main/types';

import { zodResolver } from '@hookform/resolvers/zod';

export const useSubscribeForm = () => {
const { toast } = useToast();
Copy link

Choose a reason for hiding this comment

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

이 코드 패치에는 버그 위험을 직접적으로 나타내는 요소가 없습니다. 들여쓰기, 문법, 순서 등은 더 깔끔하게 처리되었습니다.

다음과 같은 몇 가지 제안 사항을 고려해보십시오:

  1. 결정적인 변수의 사용: 이 변경사항에서 toast를 가져와만 사용하는 것으로 보입니다. 저는 이 함수에서는 토스트를 사용하여 메세지를 표출하거나 에러 핸들링하는 로직이 추가되었다고 추정합니다. 따라서 그에 대한 세부 상황이나 사용 케이스를 보지 않으면 정확히 분석하기 어렵습니다.

  2. 변경사항 주석화: 이러한 종류의 패치에서는 수정 내용을 설명하는 주석이 동반되어야 한다고 생각합니다. 그렇게 함으로써 다른 개발자들이 변동 사항을 보다 쉽게 이해할 수 있습니다.

  3. 테스트 작성: 아직 프로젝트에 테스트가 없다면, useForm hook이 올바르게 작동하는지 확인하기 위한 테스트 작성을 고려해 볼 만 합니다.

  4. Hook 및 기타 의존성의 관리: 이 새로운 구현에서 특정 라이브러리나 hook에 대한 의존성이 증가했음을 확인할 수 있습니다. 이에 따라 필요에 따라 향후 관리 및 업데이트를 고려해야 합니다.

마지막으로, 모든 코드 리뷰는 개발자의 서로 다른 스타일 및 프로젝트 요구 사항에 따라 달라질 수 있으므로, 제안된 것들은 일반적인 지침으로 간주해야합니다.

import { z } from "zod"

import { EMAIL_CONTROL } from "@main/constants/main"

export const emailSubscribeSchema = z.object({
email: z
.string()
Copy link

Choose a reason for hiding this comment

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

이 코드 패치를 빠르게 검토하면 다음과 같습니다:

  1. 이 패치는 EMAIL_CONTROL 임포트 문을 다른 위치로 이동하는 것 외에는 많은 변경사항을 포함하고 있지 않습니다. 커밋 메시지나 주석도 없으므로 이 변경이 필요한 이유가 명확하지 않습니다. 일관성을 유지하기 위해 모든 파일에서 임포트 규칙을 따르는 것이 중요합니다.

  2. emailSubscribeSchemaz.string()만 체크하며, 이는 입력값이 문자열인지 확인합니다. 이메일 형식 검증(validation)이 없습니다. z.string().email() 등을 사용해서 이메일 형식을 검증하는 추가 로직을 고려해 보십시오.

  3. 이 코드의 나머지 부분에 대한 정보가 없으므로, 다른 버그 리스크를 이해하거나 개선 제안을 할 수 없습니다. 특히 EMAIL_CONTROL 상수가 어떻게 사용되는지, 에러 핸들링은 어떻게 이루어지는지에 대한 정보가 필요합니다.

결국 이 구문의 사용 목적과 전체 파일 또는 프로젝트 문맥에 따라 추가로 적절한 리뷰가 가능합니다.

import { z } from 'zod';

import { emailSubscribeSchema } from '@main/schemas';

export type variantType = "default" | "destructive" | "outline" | "secondary" | "ghost" | "link"
export type EmailSubscribeFormData = z.infer<typeof emailSubscribeSchema>; No newline at end of file
Copy link

Choose a reason for hiding this comment

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

코드 리뷰 결과는 다음과 같습니다:

  1. 코드의 논리에 대해서는 크게 문제가 보이지 않습니다. 코드 패치 부분을 보면, emailSubscribeSchema 모듈의 임포트 위치를 변경하였는데, 이는 일반적으로 별다른 문제를 일으키지 않습니다.

  2. 그러나 한 가지 주의할 점은, 파일의 마지막에 개행 문자 ('\n')가 없다는 것입니다. 이는 일부 도구에서 경고를 발생시킬 수 있습니다. 많은 코딩 스타일 가이드에서는 파일의 마지막에 빈 줄을 포함시키는 것을 권장합니다.

개선 제안:

  • 파일의 마지막에 새로운 라인을 추가하면, 이 문제를 해결할 수 있을 겁니다.

import { cn } from "@shared/utils/cn";

import { Slot } from "@radix-ui/react-slot";

const buttonVariants = cva(
"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
{
Copy link

Choose a reason for hiding this comment

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

이 코드 패치는 본질적으로 임포트 구문의 순서를 개선하고 있습니다. 따라서 버그 위험을 생성하는 것은 없어 보입니다. 일반적으로 임포트 순서의 체계적인 관리는 가독성과 코드 관리에 도움이 됩니다.

그러나, 여기에 대해 고려해볼 수 있는 몇 가지 사항들이 존재합니다:

  1. 사용하지 않는 import가 있는지 확인하세요: 현재 모듈에서 실제로 모든 임포트된 모듈이 사용되는지 확인하세요. 사용되지 않는 import는 소스 코드 변경 시 혼동을 줄 수 있으므로 삭제하는 것이 좋습니다.

  2. 어떤 기준으로 임포트 순서를 변경한 것인지 확인하실 필요가 있습니다. 예를 들어, 임포트의 순서가 특정 규칙(예: 알파벳순)에 따라 정렬되는 경우, 이 규칙을 문서화하고 일관되게 따르는 것이 중요합니다.

  3. 자동화된 linting 도구를 사용하여 이렇게 기본적인 코드 수정 사항을 자동화하는 것도 추천드립니다. ESLint 같은 도구들은 세부적인 구현 수준까지의 문제를 잡아내 수 있기 때문에 큰 도움이 될 것입니다.

마지막으로, 이 패치가 어떤 기능적인 변화를 수반하는 것인지 그리고 테스트 코드가 이에 따라 업데이트 되었는지 확인해보는 것이 중요합니다.

DialogTitle,
DialogDescription,
DialogTrigger,
}
Copy link

Choose a reason for hiding this comment

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

여기 코딩 리뷰 결과를 전해드립니다:

  1. 명시적 import 사용: import * as React from "react" 는 너무 광범위하게 import 하는 것인데, 실제로 필요한 것으로만 import 하는 것이 좋습니다. 예를 들어, import React from 'react'import { useState } from 'react'같은 방식으로 사용하는 것이 좋습니다.

  2. 문서화: 함수 및 컴포넌트에 주석을 달아 해당 코드의 동작을 설명하는 것이 좋습니다. 이는 다른 사람이 코드를 이해하는데 도움이 됩니다.

  3. export 순서가 변경되었습니다. 만약 이 순서가 중요한 API 일관성을 위한 것이라면 원래대로 유지하는 것이 좋습니다.

코드의 어떤 부분도 모듈 또는 기능에서 볼 때 버그의 위험성은 나타나지 않습니다.

물론, 이러한 코드 리뷰는 그 지점에서만의 생각일 뿐, 전체 프로젝트 맥락을 고려하지 않았습니다. 이 패치는 전체 프로그램에 어떠한 영향을 끼치는지 확인하기 위해 전체 코드 베이스를 고려하는 것이 중요합니다.

FormItem,
FormLabel,
FormMessage,
useFormField,
}
Copy link

Choose a reason for hiding this comment

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

이 코드 패치를 통해 구현한 내용과 그 로직은 명확하지 않기 때문에 전체적인 버그의 우려성을 제대로 평가하기는 어렵습니다. 하지만 이 패치의 일부 변경점들은 다음과 같이 분석될 수 있습니다:

  1. @radix-ui/react-label, @radix-ui/react-slot, cn 함수의 import 위치가 바뀌었습니다. JavaScript에서 모듈 임포트 순서는 로직에 영향을 주지 않습니다.

  2. export 구문이 재배열되었습니다. 이것은 단순히 스타일적인 측면 또는 개인의 기호에 따른 것일 수 있으며, 함수나 변수의 동작에는 영향을 주지 않습니다.

관련된 변경될 로직이 있는 경우에는 이 코드의 문제점을 더 자세히 알 수 있을 것입니다. 또한 커피스크립트 코드의 가독성은 팀이 설정한 코딩 컨벤션에 따라 차이가 날 수 있습니다.

현재 코드 상태에서는 큰 문제점이 나타나지 않았지만 가능한 한 import * as MyModule 대신 필요한 요소만 가져 오루록(import { MyComponent } from 'my-module')하는 것이 좋습니다. 이렇게 하면 번들 크기를 줄이고 tree shaking을 더 효과적으로 할 수 있습니다.

import { cva, type VariantProps } from "class-variance-authority"

import { cn } from "@shared/utils/cn"

import * as LabelPrimitive from "@radix-ui/react-label"

const labelVariants = cva(
"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
)
Copy link

Choose a reason for hiding this comment

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

이 코드 패치를 검토하면서 몇 가지 사항을 주목했습니다:

  1. 모듈 임포트 순서: 보통의 코딩 스타일 가이드라인에 따르면 외부 라이브러리에서 가져온 모듈은 파일의 상단에 위치하는 것이 좋습니다. @radix-ui/react-label 의 임포트는 변경한 위치가 적절합니다.

  2. 사용하지 않는 변수: type VariantProps는 이 코드에서 사용되지 않아 보입니다. 필요 없다면 제거해야 합니다.

  3. 함수/클래스 문서화: 이 코드에서 'cva'와 'cn'함수의 역할이나 동작 방식에 대한 설명이 부족합니다. 이런 중요 함수에 대해서는 주석 형태의 문서화가 필요합니다.

  4. 에러 처리: 'cva'와 같은 함수 호출에서 발생할 수 있는 예외나 오류에 대한 처리 로직이 없습니다. 가능한 에러 상황에 대해 고민하고 해결 방안을 마련하는 것이 좋습니다.

  5. 표현의 분리 및 재사용: "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70" 같은 문자열 값은 특정 스타일을 지칭하는 것으로 보입니다. 그런 스타일 정의는 외부로 분리하여 재사용이 가능하도록 하는 것이 좋습니다.

굉장히 단순한 분류와 관련된 부분을 제외하고는 이 코드 패치에 심각한 버그 위험은 없어 보입니다!

ToastDescription,
ToastClose,
ToastAction,
ToastViewport,
}
Copy link

Choose a reason for hiding this comment

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

이 코드 패치를 통해, 라이브러리에서 요소들을 재조직하려는 것으로 보입니다. 변경된 코드에 명확한 오류나 버그의 위험은 없어 보입니다. 하지만 이는 이미 있는 코드가 올바르게 작동한다고 가정할 때입니다.

다음은 고려해볼 몇 가지 사항들입니다:

  1. import * as ToastPrimitives from "@radix-ui/react-toast": 'ToastPrimitives'에서 모든 것을 가져오는 대신 필요한 함수 또는 변수 만 import 하는 것이 좋습니다. 이렇게 하면 사용하지 않는 코드를 제거하여 번들 크기를 줄일 수 있습니다.

  2. 모듈을 내보낼 때 순서가 변경되었습니다. 이것은 스타일에 의존하는 부분일 수 있지만, 일관성이 중요합니다. 기존 코드와 어떤 정렬 규칙을 따르고 있는지 확인하십시오.

  3. 기능 테스트를 통해 모든 수정이 기대대로 작동하는지 확인하세요. 특히 re-exported 항목들이 적절히 처리되고 있는지에 주목하십시오.

  4. 마지막으로, 기여자가 이러한 수정을 한 이유에 대한 설명이나 커밋 메시지가 추가되면 도움이 될 것입니다.

@@ -191,4 +191,4 @@ function useToast() {
}
}

export { useToast, toast }
export { toast,useToast }
Copy link

Choose a reason for hiding this comment

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

코드 패치는 굉장히 작은 변화를 담고 있지만, 그럼에도 별다른 버그 위험이나 품질 문제는 발견되지 않았습니다. 변경된 것은 useToasttoast 의 내보내기 순서뿐이며, 이는 일반적으로 내보내는 객체에 영향을 주지 않습니다. 하지만, 커밋 메시지 또는 관련 문서에서 이 변경의 이유를 명확하게 설명해두면 협업하는 다른 개발자들에게 도움이 될 것입니다.

그리고 코드 스타일링 측면에서 { toast,useToast } 대신 { toast, useToast } 형식으로 띄어쓰기를 일관성있게 유지하는 것이 좋습니다. 일관된 코드 스타일링은 코드의 가독성과 유지 관리를 향상시킵니다.

@Happhee
Copy link
Collaborator

Happhee commented Jun 9, 2024

아하...! unused import 관련 에러가 문제가 될수도 있군요. 맞네요 제가 회사에서도 이부분때문에 한번 배포에러 발생한적있었는데 ㅠ.ㅠ 해결해주셔서 감사합니다!

@soomin9106 soomin9106 merged commit 1acc222 into develop Jun 9, 2024
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants