Skip to content

Feat 43 : 검색 기능 UI 구현#44

Merged
shinwokkang merged 8 commits intodevfrom
feat-43
Jan 27, 2026
Merged

Feat 43 : 검색 기능 UI 구현#44
shinwokkang merged 8 commits intodevfrom
feat-43

Conversation

@bini0918
Copy link
Contributor

💡 To Reviewers

  • 해당 브랜치에서 새롭게 설치한 라이브러리가 있다면 함께 명시해 주세요.
  • 리뷰어가 코드를 이해하는 데 도움이 되는 정보나 참고사항이 있다면 자유롭게 작성해 주세요.

🔥 작업 내용 (가능한 구체적으로 작성해 주세요)

  • 검색 모달 컴포넌트 추가
  • 검색 결과 UI 구현
  • 책이야기 책 선택하기 모달 컴포넌트 추가
  • 반응형 구현

🤔 추후 작업 예정

📸 작업 결과 (스크린샷)

  • 작업 결과를 보여주는 스크린샷을 첨부해 주세요.
스크린샷 2026-01-27 오전 3 49 38 스크린샷 2026-01-27 오전 3 49 56 스크린샷 2026-01-27 오전 3 50 16 스크린샷 2026-01-27 오전 3 51 56 스크린샷 2026-01-27 오전 3 52 23 스크린샷 2026-01-27 오전 3 53 11 스크린샷 2026-01-27 오전 3 54 01 스크린샷 2026-01-27 오전 3 55 52

🔗 관련 이슈

@coderabbitai
Copy link

coderabbitai bot commented Jan 26, 2026

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • 🔍 Trigger a full review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@gemini-code-assist
Copy link

Summary of Changes

Hello @bini0918, 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은 검색 기능, 책이야기 관리, 소식 표시 등 핵심 사용자 인터페이스를 대폭 개선하고 새로운 기능을 도입하는 데 중점을 둡니다. 다양한 기기에서 일관된 사용자 경험을 제공하기 위해 반응형 디자인을 전반적으로 적용했으며, 모달, 내비게이션, 댓글 섹션 등 여러 새로운 컴포넌트를 추가하여 콘텐츠 상호작용 기능을 확장했습니다.

Highlights

  • 검색 기능 UI 구현: 검색 모달 컴포넌트, 검색 결과 UI, 책이야기 책 선택하기 모달 컴포넌트 등 검색 관련 UI가 구현되었습니다.
  • 반응형 디자인 적용: 다양한 화면 크기에 맞춰 UI가 유연하게 반응하도록 반응형 디자인이 적용되었습니다. 이를 위해 새로운 CSS 브레이크포인트 변수가 추가되었고, 여러 컴포넌트의 레이아웃과 크기가 조정되었습니다.
  • 새로운 페이지 및 컴포넌트 추가: 책 상세 페이지, 소식 상세 및 목록 페이지, 검색 결과 페이지, 책이야기 상세 및 작성 페이지 등 여러 핵심 페이지가 추가되었습니다. 또한, 스토리 내비게이션, 댓글 섹션, 하단 내비게이션 바, 검색 모달 등 다양한 재사용 가능한 UI 컴포넌트들이 새롭게 구현되었습니다.
  • SVG 에셋 대량 추가: 화살표, 책 샘플 이미지, 스토리 추가, 내비게이션 아이콘, 닫기, 검색, 공유, 메뉴 점, 신고, 답글, 알라딘 링크, 삼각형 등 다양한 아이콘 및 이미지에 사용될 새로운 SVG 파일들이 대량으로 추가되었습니다.
  • 기존 컴포넌트 개선: 책이야기 카드, 책 선택 박스, 책이야기 상세 정보, 뉴스 목록, 검색 결과 카드 등 기존 컴포넌트들이 새로운 기능과 반응형 디자인을 지원하도록 업데이트되었습니다.

🧠 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

@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

이 풀 리퀘스트는 검색 기능 UI 구현, 책 이야기 상세 페이지, 글 작성 페이지, 소식 페이지, 하단 내비게이션 바 등 다양한 UI 요소를 추가하고 기존 컴포넌트에 반응형 디자인을 적용했습니다. 새로운 SVG 아이콘들이 추가되었고, 더미 데이터가 여러 페이지에서 활용되어 UI 개발에 중점을 둔 것을 알 수 있습니다. 전반적으로 사용자 경험을 개선하고 다양한 화면 크기에 대응하기 위한 노력이 돋보입니다.

Comment on lines +132 to +141
<div className="relative w-[12px] h-[12px] d:w-[18px] d:h-[18px]">
<Image
src="/triangle.svg"
alt="next"
fill
className="object-contain"
/>
</div>
<div className="d:subhead_4_1 text-Gray-7">글 상세보기</div>
</div>

Choose a reason for hiding this comment

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

medium

현재 breadcrumb의 triangle.svg 이미지 크기가 태블릿(t:) 뷰포트에서 반응형으로 설정되어 있지 않습니다. 데스크톱(d:) 크기만 지정되어 있어 태블릿에서 아이콘이 너무 작게 보일 수 있습니다. 태블릿 뷰포트에서도 적절한 크기를 지정하여 일관된 사용자 경험을 제공하는 것이 좋습니다.

Suggested change
<div className="relative w-[12px] h-[12px] d:w-[18px] d:h-[18px]">
<Image
src="/triangle.svg"
alt="next"
fill
className="object-contain"
/>
</div>
<div className="d:subhead_4_1 text-Gray-7">글 상세보기</div>
</div>
<div className="relative w-[12px] h-[12px] t:w-[12px] t:h-[12px] d:w-[18px] d:h-[18px]">

return (
<div className="mx-auto w-full max-w-[1400px] px-4">
<div className="flex justify-center items-center mt-7 mb-6">
<div className="relative w-full h-[297px] t:h-[468px]" style={{ maxWidth: 'clamp(339px, 100%, 1040px)' }}>

Choose a reason for hiding this comment

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

medium

인라인 스타일로 maxWidthclamp 함수를 사용하여 지정했습니다. TailwindCSS를 사용하고 있으므로, 일관성을 위해 이 스타일을 TailwindCSS 클래스로 변환하거나, TailwindCSS 설정에 사용자 정의 유틸리티 클래스를 추가하여 관리하는 것이 좋습니다. 이는 코드의 일관성과 유지보수성을 높이는 데 도움이 됩니다.

Suggested change
<div className="relative w-full h-[297px] t:h-[468px]" style={{ maxWidth: 'clamp(339px, 100%, 1040px)' }}>
<div className="relative w-full h-[297px] t:h-[468px] max-w-[clamp(339px,100%,1040px)]">

Comment on lines +18 to +21
{ id: '1', name: 'hy_0716', subscribingCount: 17, subscribersCount: 32 },
{ id: '2', name: 'hy_0716', subscribingCount: 17, subscribersCount: 32 },
{ id: '3', name: 'hy_0716', subscribingCount: 17, subscribersCount: 32 },
{ id: '4', name: 'hy_0716', subscribingCount: 17, subscribersCount: 32 },

Choose a reason for hiding this comment

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

medium

users 더미 데이터가 컴포넌트 내부에 직접 정의되어 있습니다. 이 데이터를 별도의 더미 데이터 파일(예: src/data/dummyUsers.ts)로 분리하여 컴포넌트의 가독성을 높이고 데이터 관리를 중앙화하는 것을 고려해 볼 수 있습니다.

Comment on lines +41 to 43
<h2 className="pb-4 body_1 leading-7 text-zinc-800">
소식
</h2>

Choose a reason for hiding this comment

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

medium

섹션 제목에 body_1 클래스를 사용하고 있습니다. body_1은 본문 텍스트에 적합한 스타일이며, 섹션 제목으로는 시각적 계층 구조를 명확히 하기 위해 subhead_1 또는 subhead_2와 같은 더 큰 폰트 크기와 강조된 스타일을 사용하는 것이 더 적절할 수 있습니다. 이는 사용자에게 콘텐츠의 중요도를 더 잘 전달할 수 있습니다.

Suggested change
<h2 className="pb-4 body_1 leading-7 text-zinc-800">
소식
</h2>
<h2 className="pb-4 subhead_2 leading-7 text-zinc-800">

Comment on lines +51 to +53
<h2 className="pb-2 body_1 leading-7 text-zinc-800">
독서모임
</h2>

Choose a reason for hiding this comment

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

medium

섹션 제목에 body_1 클래스를 사용하고 있습니다. body_1은 본문 텍스트에 적합한 스타일이며, 섹션 제목으로는 시각적 계층 구조를 명확히 하기 위해 subhead_1 또는 subhead_2와 같은 더 큰 폰트 크기와 강조된 스타일을 사용하는 것이 더 적절할 수 있습니다. 이는 사용자에게 콘텐츠의 중요도를 더 잘 전달할 수 있습니다.

Suggested change
<h2 className="pb-2 body_1 leading-7 text-zinc-800">
독서모임
</h2>
<h2 className="pb-2 subhead_2 leading-7 text-zinc-800">

</div>

{/* 햄버거 */}
<div className="relative shrink-0 ml-2" ref={menuRef}>

Choose a reason for hiding this comment

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

medium

메뉴 버튼의 alt 속성으로 "메뉴"를 사용하고 있습니다. 이는 스크린 리더 사용자에게 버튼의 목적을 명확하게 전달하지 못할 수 있습니다. "메뉴"보다는 "더보기" 또는 "옵션"과 같이 버튼이 수행하는 동작을 더 잘 설명하는 텍스트를 사용하는 것이 접근성 측면에서 더 좋습니다.

            <Image src="/menu_dots.svg" alt="더보기" width={24} height={24} />

onClick={() => setMenuOpen(!menuOpen)}
className="cursor-pointer "
>
<Image src="/menu_dots.svg" alt="메뉴" width={24} height={24} />

Choose a reason for hiding this comment

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

medium

메뉴 버튼의 alt 속성으로 "메뉴"를 사용하고 있습니다. 이는 스크린 리더 사용자에게 버튼의 목적을 명확하게 전달하지 못할 수 있습니다. "메뉴"보다는 "더보기" 또는 "옵션"과 같이 버튼이 수행하는 동작을 더 잘 설명하는 텍스트를 사용하는 것이 접근성 측면에서 더 좋습니다.

              <Image src="/menu_dots.svg" alt="더보기" width={24} height={24} />

onClick={() => setMenuOpen(!menuOpen)}
className="p-1 cursor-pointer"
>
<Image src="/menu_dots.svg" alt="메뉴" width={20} height={20} />

Choose a reason for hiding this comment

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

medium

메뉴 버튼의 alt 속성으로 "메뉴"를 사용하고 있습니다. 이는 스크린 리더 사용자에게 버튼의 목적을 명확하게 전달하지 못할 수 있습니다. "메뉴"보다는 "더보기" 또는 "옵션"과 같이 버튼이 수행하는 동작을 더 잘 설명하는 텍스트를 사용하는 것이 접근성 측면에서 더 좋습니다.

Suggested change
<Image src="/menu_dots.svg" alt="메뉴" width={20} height={20} />
<Image src="/menu_dots.svg" alt="더보기" width={20} height={20} />

Comment on lines +25 to +46
const searchResults = [
{
id: 1,
imgUrl: "/booksample.svg",
title: "어린 왕자",
author: "김개미, 연수",
detail: "최대 500(넘어가면...으로)",
},
{
id: 2,
imgUrl: "/booksample.svg",
title: "어린 왕자",
author: "김개미, 연수",
detail: "최대 500(넘어가면...으로)",
},
{
id: 3,
imgUrl: "/booksample.svg",
title: "어린 왕자",
author: "김개미, 연수",
detail: "최대 500(넘어가면...으로)",
},

Choose a reason for hiding this comment

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

medium

searchResults 더미 데이터가 컴포넌트 내부에 직접 정의되어 있습니다. 이 데이터를 별도의 더미 데이터 파일로 분리하여 컴포넌트의 가독성을 높이고 데이터 관리를 중앙화하는 것을 고려해 볼 수 있습니다.

Comment on lines +21 to +26
const recommendedBooks = [
{ id: 1, imgUrl: "/booksample.svg", title: "책 제목", author: "작가작가작가" },
{ id: 2, imgUrl: "/booksample.svg", title: "책 제목", author: "작가작가작가" },
{ id: 3, imgUrl: "/booksample.svg", title: "책 제목", author: "작가작가작가" },
{ id: 4, imgUrl: "/booksample.svg", title: "책 제목", author: "작가작가작가" },
];

Choose a reason for hiding this comment

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

medium

recommendedBooks 더미 데이터가 컴포넌트 내부에 직접 정의되어 있습니다. 이 데이터를 별도의 더미 데이터 파일로 분리하여 컴포넌트의 가독성을 높이고 데이터 관리를 중앙화하는 것을 고려해 볼 수 있습니다.

@shinwokkang shinwokkang merged commit e02d0f6 into dev Jan 27, 2026
1 check passed
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