Skip to content

deploy: 3.2.0 배포 #300

Merged
wonellyho merged 6 commits intomainfrom
develop
Feb 18, 2026
Merged

deploy: 3.2.0 배포 #300
wonellyho merged 6 commits intomainfrom
develop

Conversation

@wonellyho
Copy link
Collaborator

🚀 배포 정보

배포 일시: 2026.02.18 19.20

📋 배포 체크리스트

배포 전

  • 빌드 성공 확인
  • 타입 체크 통과
  • Lint 검사 통과
  • 환경변수 설정 확인
  • API 연동 테스트
  • 관련 이슈/PR 머지 완료

배포 후

  • 배포 성공 확인
  • 주요 기능 동작 확인
  • 에러 모니터링
  • 성능 지표 확인
  • 롤백 계획 수립

⚠️ 주의사항

@github-actions github-actions bot added component 컴포넌트 관련 변경 page 페이지 관련 변경 documentation labels Feb 18, 2026
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @wonellyho, 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은 3.2.0 버전 배포를 목표로 하며, 비디오 피드백 페이지의 사용자 경험을 크게 향상시키는 데 중점을 둡니다. 주요 변경 사항으로는 비디오 재생 중 실시간 리액션을 시각적으로 표시하는 기능과 댓글 섹션의 구조적 개선, 그리고 모바일 환경에서의 레이아웃 최적화가 포함됩니다. 이를 통해 사용자는 더욱 직관적이고 반응성 높은 피드백 환경을 경험할 수 있습니다.

Highlights

  • 배포 준비: 버전 3.2.0 배포를 위한 변경사항이 포함되었습니다.
  • 비디오 리액션 버블 추가: 영상 재생바 위에 현재 구간의 리액션을 요약하여 보여주는 ReactionBubble 컴포넌트가 새로 추가되었습니다.
  • 댓글 섹션 리팩토링: 비디오 상세 페이지의 댓글 섹션이 CommentList 컴포넌트로 분리되었고, 댓글 관련 로직이 개선되었습니다.
  • 모바일 레이아웃 개선: 모바일 환경을 위한 FeedbackMobileLayout이 도입되어 반응형 디자인이 강화되었습니다.
  • 비디오 위치 고정 로직 개선: 비디오 플레이어의 위치 고정 로직이 ResizeObserver와 스크롤 이벤트 리스너를 활용하여 더욱 견고하게 업데이트되었습니다.
Changelog
  • docs/api-connect.md
    • API 레이어 구조 설명에 마크다운 코드 블록 펜스를 추가하여 가독성을 높였습니다.
  • src/components/comment/Comment.tsx
    • 댓글 컴포넌트의 배경색 로직을 수정하여, 활성화 상태이지만 편집 중이 아닐 때 bg-gray-100 클래스를 제거했습니다.
  • src/components/feedback/video/ReactionBubble.tsx
    • 영상 재생바 위에 현재 구간의 리액션을 요약하여 표시하는 ReactionBubble 컴포넌트를 새로 추가했습니다.
    • 현재 재생 시간 ±windowMs 범위 내의 리액션을 표시하고, 상위 3개까지 노출하며, 4개 이상일 경우 '...'으로 축약하는 기능을 구현했습니다.
    • '...' 클릭 시 팝오버로 전체 5종의 리액션을 표시하도록 했습니다.
  • src/pages/VideoDetailPage.tsx
    • 기존의 Comment 컴포넌트 직접 렌더링을 CommentList 컴포넌트로 대체하여 댓글 목록 관리를 중앙화했습니다.
    • 모바일 뷰를 위한 FeedbackMobileLayout 컴포넌트를 도입하여 반응형 디자인을 개선했습니다.
    • 새로 추가된 ReactionBubble 컴포넌트를 비디오 플레이어에 통합하여 리액션 표시 기능을 추가했습니다.
    • 댓글 관련 상태(답글 작성, 편집) 및 함수들을 CommentList 컴포넌트의 props로 전달하도록 리팩토링했습니다.
    • 비디오 플레이어의 위치 고정 로직을 ResizeObserverscroll 이벤트 리스너를 활용하여 개선하고, 모바일 전용 플레이스홀더(mobilePlaceholderRef)를 추가했습니다.
    • CommentProvideruseMemo를 사용한 댓글 컨텍스트 로직을 제거했습니다.
    • useIsDesktop 훅을 사용하여 데스크톱/모바일 환경에 따른 조건부 렌더링 및 동작을 구현했습니다.
    • 새 댓글 작성 후 해당 댓글로 스크롤하는 로직을 scrollToCommentId 상태 변수를 사용하여 관리하도록 변경했습니다.
Activity
  • wonellyho 님이 3.2.0 버전 배포를 위한 변경사항을 포함하는 Pull Request를 생성했습니다.
  • PR 설명에 배포 전/후 체크리스트가 포함되어 있어, 체계적인 배포 프로세스를 따르고 있음을 알 수 있습니다.
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.

@wonellyho wonellyho merged commit ea597bb into main Feb 18, 2026
10 of 11 checks passed
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

이 PR은 비디오 상세 페이지의 반응형 레이아웃을 개선하고 컴포넌트 구조를 리팩터링하는 중요한 변경 사항을 포함하고 있습니다. 데스크톱과 모바일 뷰를 분리하고, CommentList와 같은 재사용 가능한 컴포넌트를 도입하여 코드의 가독성과 유지보수성을 크게 향상시켰습니다. 몇 가지 추가적인 개선을 위해 코드에 의견을 남겼습니다. 전반적으로 훌륭한 작업입니다.

Comment on lines +34 to +43
useEffect(() => {
if (!isPopoverOpen) return;
const handleClick = (e: MouseEvent) => {
if (popoverRef.current && !popoverRef.current.contains(e.target as Node)) {
setIsPopoverOpen(false);
}
};
document.addEventListener('mousedown', handleClick);
return () => document.removeEventListener('mousedown', handleClick);
}, [isPopoverOpen]);
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

팝오버 외부 클릭을 감지하는 useEffect 로직은 여러 컴포넌트에서 재사용될 가능성이 높습니다. 이 로직을 useOnClickOutside와 같은 커스텀 훅으로 추출하면 컴포넌트의 코드가 더 간결해지고, 다른 곳에서도 쉽게 재사용할 수 있어 유지보수성이 향상됩니다. 예를 들어, useOnClickOutside(popoverRef, () => setIsPopoverOpen(false)); 와 같이 사용할 수 있습니다.

Comment on lines +288 to +302
const timers = [0, 50, 100, 200].map((delay) => setTimeout(updatePosition, delay));

const observer = new ResizeObserver(updatePosition);
if (desktopPlaceholderRef.current) observer.observe(desktopPlaceholderRef.current);
if (mobilePlaceholderRef.current) observer.observe(mobilePlaceholderRef.current);

window.addEventListener('resize', updatePosition);
updatePosition();
return () => window.removeEventListener('resize', updatePosition);
}, [isLoading]);
window.addEventListener('scroll', updatePosition, true);

return () => {
timers.forEach(clearTimeout);
observer.disconnect();
window.removeEventListener('resize', updatePosition);
window.removeEventListener('scroll', updatePosition, true);
};
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

여러 setTimeout을 사용하여 위치를 업데이트하는 것은 레이아웃이 안정화되기를 기다리는 방식으로 보입니다. 이는 코드를 복잡하게 만들고 잠재적으로 불안정할 수 있습니다.

ResizeObserver가 이미 초기 렌더링 시 크기 변경을 감지할 수 있으므로, 여러 타이머 대신 requestAnimationFrame을 사용하여 다음 프레임에서 위치를 한 번만 업데이트하는 것이 더 깔끔하고 효율적인 방법일 수 있습니다.

Suggested change
const timers = [0, 50, 100, 200].map((delay) => setTimeout(updatePosition, delay));
const observer = new ResizeObserver(updatePosition);
if (desktopPlaceholderRef.current) observer.observe(desktopPlaceholderRef.current);
if (mobilePlaceholderRef.current) observer.observe(mobilePlaceholderRef.current);
window.addEventListener('resize', updatePosition);
updatePosition();
return () => window.removeEventListener('resize', updatePosition);
}, [isLoading]);
window.addEventListener('scroll', updatePosition, true);
return () => {
timers.forEach(clearTimeout);
observer.disconnect();
window.removeEventListener('resize', updatePosition);
window.removeEventListener('scroll', updatePosition, true);
};
const rafId = requestAnimationFrame(updatePosition);
const observer = new ResizeObserver(updatePosition);
if (desktopPlaceholderRef.current) observer.observe(desktopPlaceholderRef.current);
if (mobilePlaceholderRef.current) observer.observe(mobilePlaceholderRef.current);
window.addEventListener('resize', updatePosition);
window.addEventListener('scroll', updatePosition, true);
return () => {
cancelAnimationFrame(rafId);
observer.disconnect();
window.removeEventListener('resize', updatePosition);
window.removeEventListener('scroll', updatePosition, true);
};

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

Labels

component 컴포넌트 관련 변경 documentation page 페이지 관련 변경

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants