Skip to content

Conversation

@caseBread
Copy link
Member

요약

구현 사항

  • 치즈네컷 다운로드 버튼 클릭 시
  • 앨범 생성 > 날짜 피커, 오늘 이후 날짜 disabled
  • 사진 상세페이지 진입 로딩 느림
  • 치즈네컷 다운로드 / 공유하기 로딩 시간 왜 다른지?

📸 스크린샷

Need Review

  • ~ 부분 이렇게 구현했어요, 피드백 부탁해요!

Reference

📜 리뷰 규칙

Reviewer는 아래 P5 Rule을 참고하여 리뷰를 진행합니다.
P5 Rule을 통해 Reviewer는 Reviewee에게 리뷰의 의도를 보다 정확히 전달할 수 있습니다.

  • P1: 꼭 반영해주세요 (Comment)
  • P2: 적극적으로 고려해주세요 (Comment)
  • P3: 웬만하면 반영해 주세요 (Comment)
  • P4: 반영해도 좋고 넘어가도 좋습니다 (Approve)
  • P5: 그냥 사소한 의견입니다 (Approve)

@caseBread caseBread self-assigned this Jan 20, 2026
@vercel
Copy link

vercel bot commented Jan 20, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Review Updated (UTC)
fe Ready Ready Preview, Comment Jan 20, 2026 5:26pm

@caseBread caseBread merged commit e659e95 into main Jan 20, 2026
4 checks passed
@caseBread caseBread deleted the fix/1vQA branch January 20, 2026 17:26
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @caseBread, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

이 PR은 베타 테스트 전 QA 과정에서 발견된 문제들을 수정하고 사용자 경험을 개선하기 위한 변경 사항들을 포함합니다. 주요 변경 사항으로는 날짜 선택기의 유효성 검사 로직 강화, 4컷 이미지 다운로드 시 로딩 상태 표시, 사용자 행동 분석을 위한 Google Analytics 이벤트 추적 추가, 그리고 UI 텍스트 및 스피너 컴포넌트의 유연성 향상이 있습니다.

Highlights

  • 날짜 선택기 개선: ScrollableDatePicker 컴포넌트가 minDate 및 maxDate 속성을 더 정확하게 처리하도록 로직이 업데이트되어, 년, 월, 일 변경 시 유효한 날짜 범위 내에서만 선택되도록 했습니다.
  • 4컷 이미지 다운로드 로딩 상태 추가: 4컷 이미지 다운로드 기능에 다운로드 시작 시 로딩 상태를 표시하고 완료 시 해제하는 로직을 추가했습니다.
  • Google Analytics 이벤트 추적 추가: 앨범 참가자 초대 버튼 클릭 시 및 앨범 사이드바가 열릴 때 Google Analytics 이벤트를 추적하도록 구현했습니다.
  • UI 텍스트 및 스피너 컴포넌트 개선: DateXInput 컴포넌트 내 버튼 텍스트를 '시작하기'에서 '확인'으로 변경했으며, Spinner 컴포넌트에 color 및 size 속성을 추가하여 재사용성을 높였습니다.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

베타 테스트 전 QA를 위한 수정 사항들을 리뷰했습니다. 전반적으로 QA 항목들을 잘 반영하셨습니다. 몇 가지 코드 개선 사항을 제안드립니다. scrollable-date-picker에서는 헬퍼 함수들을 useCallback으로 메모이징하고 순수 함수를 컴포unlimited 밖으로 빼내어 성능과 가독성을 높일 수 있습니다. ScreenAlbum4Cut에서는 중복 코드를 리팩토링하여 유지보수성을 개선할 여지가 있습니다. ScreenAlbumSidebar에서는 useEffect의 의존성 배열에 누락된 값이 있어 수정이 필요합니다. 마지막으로 Spinner 컴포넌트의 기본값이 변경되었는데, 이 부분이 의도된 것인지 확인하고 관련 주석을 수정할 필요가 있어 보입니다. 자세한 내용은 각 파일의 리뷰 코멘트를 참고해주세요.

Comment on lines +40 to +47
useEffect(() => {
if (isOpen) {
trackGaEvent(GA_EVENTS.view_albumsidebar, {
album_id: albumId,
access_type: informData?.myRole === 'MAKER' ? 'creator' : 'member',
});
}
}, [isOpen]);
Copy link
Contributor

Choose a reason for hiding this comment

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

high

useEffect의 의존성 배열에 albumIdinformData가 누락되었습니다. trackGaEvent 콜백 함수가 이 값들을 사용하므로, 의존성 배열에 추가하여 isOpen 상태가 변경될 때 뿐만 아니라 albumIdinformData가 변경될 때도 이벤트가 올바르게 추적되도록 해야 합니다.

Suggested change
useEffect(() => {
if (isOpen) {
trackGaEvent(GA_EVENTS.view_albumsidebar, {
album_id: albumId,
access_type: informData?.myRole === 'MAKER' ? 'creator' : 'member',
});
}
}, [isOpen]);
useEffect(() => {
if (isOpen) {
trackGaEvent(GA_EVENTS.view_albumsidebar, {
album_id: albumId,
access_type: informData?.myRole === 'MAKER' ? 'creator' : 'member',
});
}
}, [isOpen, albumId, informData]);

Comment on lines +136 to +141
const clamp = (value: number, min: number, max: number) =>
Math.min(Math.max(value, min), max);

const getDaysInMonth = (year: number, month: number) => {
return new Date(year, month, 0).getDate();
};
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

clampgetDaysInMonth 함수는 컴포넌트의 상태나 props에 의존하지 않는 순수 함수입니다. 컴포넌트 외부로 옮겨서 매 렌더링마다 함수가 재생성되는 것을 방지하는 것이 좋습니다. 이는 코드 가독성을 높이고 약간의 성능 개선 효과를 가져올 수 있습니다.

Comment on lines +143 to +170
const getMinMonthForYear = (year: number) => {
if (minDate && year === minYear) {
return minDate.getMonth() + 1;
}
return 1;
};

const getMaxMonthForYear = (year: number) => {
if (maxDate && year === maxYear) {
return maxDate.getMonth() + 1;
}
return 12;
};

const getMinDayForMonth = (year: number, month: number) => {
if (minDate && year === minYear && month === minDate.getMonth() + 1) {
return minDate.getDate();
}
return 1;
};

const getMaxDayForMonth = (year: number, month: number) => {
const daysInMonth = getDaysInMonth(year, month);
if (maxDate && year === maxYear && month === maxDate.getMonth() + 1) {
return Math.min(daysInMonth, maxDate.getDate());
}
return daysInMonth;
};
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

이 헬퍼 함수들은 minDate, maxDate와 같은 props에 의존합니다. React.useCallback으로 메모이제이션하여 매 렌더링마다 함수가 재생성되는 것을 방지하면 성능을 최적화할 수 있습니다. 이전 제안에 따라 getDaysInMonth를 컴포넌트 외부로 옮기면 getMaxDayForMonth의 메모이제이션이 더 효과적입니다.

  const getMinMonthForYear = React.useCallback((year: number) => {
    if (minDate && year === minYear) {
      return minDate.getMonth() + 1;
    }
    return 1;
  }, [minDate, minYear]);

  const getMaxMonthForYear = React.useCallback((year: number) => {
    if (maxDate && year === maxYear) {
      return maxDate.getMonth() + 1;
    }
    return 12;
  }, [maxDate, maxYear]);

  const getMinDayForMonth = React.useCallback((year: number, month: number) => {
    if (minDate && year === minYear && month === minDate.getMonth() + 1) {
      return minDate.getDate();
    }
    return 1;
  }, [minDate, minYear]);

  const getMaxDayForMonth = React.useCallback((year: number, month: number) => {
    const daysInMonth = getDaysInMonth(year, month);
    if (maxDate && year === maxYear && month === maxDate.getMonth() + 1) {
      return Math.min(daysInMonth, maxDate.getDate());
    }
    return daysInMonth;
  }, [maxDate, maxYear, getDaysInMonth]);

Comment on lines +6 to +9
export default function Spinner({
color = '#ffffff', // 기본값 (tailwind primary-400 정도)
size = 64,
}: SpinnerProps) {
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

스피너의 기본 크기가 32px (h-8 w-8)에서 64px로, 기본 색상이 primary-400에서 흰색 (#ffffff)으로 변경되었습니다. 이 변경 사항이 의도된 것인지 확인이 필요합니다. 만약 의도된 변경이 아니라면 이전 값으로 되돌리는 것을 고려해 보세요. 또한, 7번 줄의 주석 // 기본값 (tailwind primary-400 정도)은 현재 기본값인 #ffffff과 일치하지 않아 혼란을 줄 수 있으므로 수정이 필요합니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants