Skip to content

Conversation

@DongEun02
Copy link
Contributor

@DongEun02 DongEun02 commented Nov 19, 2025

1) 작업한 이슈번호

SISC1-215

2) 변경 요약 (What & Why)

  • 무엇을 변경했는지: 외부페이지 UI 구현
  • 변경했는지(문제/목표):

3) 스크린샷/동영상 (UI 변경 시)

전/후 비교, 반응형(모바일/데스크톱) 캡쳐

  • Before:
  • After:
image image image image

4) 상세 변경사항 (전부 다)

  • 라우팅/페이지: 임의로 /main으로 라우팅 설정
  • 컴포넌트: 각 페이지 info 부분은 컴포넌트를 생성하여 구현할 예정
  • 상태관리:
  • API 호출:
  • 스타일: 페이지 공통 스타일인 External.module.css
  • 기타:

5) 참고사항

Summary by CodeRabbit

  • New Features

    • 메인, 동아리 소개, 임원진 소개, 포트폴리오 등 외부용 4개 페이지 추가
    • /main 기반의 신규 라우팅 및 네비게이션 메뉴로 페이지 간 이동 지원
  • Style

    • 각 페이지에 적용된 새 레이아웃 및 시각 스타일(전체 화면 레이아웃, 헤더·타이틀·구분선 등)로 UI/UX 개선

@DongEun02 DongEun02 requested a review from gxuoo as a code owner November 19, 2025 16:06
@coderabbitai
Copy link

coderabbitai bot commented Nov 19, 2025

Walkthrough

외부용 페이지 4개(Main, Intro, Leaders, Portfolio)를 신규 추가하고 /main 하위 경로로 라우트를 등록했습니다. 각 페이지는 CSS 모듈을 사용해 스타일링됩니다.

Changes

Cohort / File(s) 변경 요약
라우팅 구성
frontend/src/App.jsx
/main, /main/intro, /main/leaders, /main/portfolio 라우트 추가 및 각 경로에 컴포넌트 매핑
외부 페이지 컴포넌트
frontend/src/pages/external/Main.jsx, frontend/src/pages/external/Intro.jsx, frontend/src/pages/external/Leaders.jsx, frontend/src/pages/external/Portfolio.jsx
4개의 신규 React 컴포넌트 추가. Main.jsx는 배경 이미지, 메뉴 링크, 로고/타이틀을 렌더링; 나머지는 헤더(타이틀+구분선)와 빈 정보 영역 렌더링
스타일 모듈 및 자산
frontend/src/pages/external/External.module.css, frontend/src/pages/external/Main.module.css, frontend/src/pages/external/*
외부 페이지 전용 CSS 모듈 2개 추가(컨테이너/헤더/타이틀/구분선, 메인 레이아웃/이미지/메뉴/정보 섹션). Main 컴포넌트에서 이미지 자산 임포트 포함

Sequence Diagram(s)

sequenceDiagram
    autonumber
    actor User
    participant Router as React Router
    participant App
    participant Main as Main Component
    participant Sub as Intro/Leaders/Portfolio

    User->>Router: 요청 (예: /main 또는 /main/intro)
    Router->>App: 경로 매칭
    App->>Main: /main 렌더링 (기본)
    Main->>User: 메인 화면(메뉴, 로고) 응답

    alt 메뉴 클릭
        User->>Main: 메뉴 링크 클릭 (/main/intro 등)
        Main->>Router: 라우트 변경
        Router->>Sub: 해당 서브페이지 렌더링
        Sub->>User: 서브페이지 응답
    end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20분

  • 주된 변경은 반복적인 패턴의 신규 컴포넌트 및 CSS 추가로 로직 밀도가 낮음.
  • 검토 시 주의할 파일:
    • frontend/src/App.jsx — 라우트 충돌 및 기존 라우팅 흐름과의 호환성
    • frontend/src/pages/external/Main.jsx — 이미지 경로/임포트 유효성 및 링크 경로
    • CSS 모듈들 — 클래스명 충돌 여부 및 빌드에서 CSS 모듈 적용 확인

Possibly related PRs

Suggested labels

FE

Suggested reviewers

  • gxuoo

Poem

🐰 새 길이 뚫리고 페이지가 피어났네,
링크를 따라 춤추며 빛나는 화면들.
CSS 깃털 달고 온화하게 정리된,
작은 당근 하나로 축제를 열어볼게요! ✨

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR 제목이 핵심 변경사항(외부 페이지 UI 구현)을 명확하게 요약하고 있으며, 변경 사항 전체를 정확하게 반영하고 있습니다.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch SISC1-215-FE-external-page-ui

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 5936039 and 4a234a6.

📒 Files selected for processing (1)
  • frontend/src/pages/external/Main.module.css (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • frontend/src/pages/external/Main.module.css

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.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

♻️ Duplicate comments (2)
frontend/src/pages/external/Intro.jsx (1)

3-13: 코드 중복 문제

이 컴포넌트는 Leaders.jsx, Portfolio.jsx와 동일한 구조를 가지고 있습니다. Leaders.jsx에 남긴 리팩토링 제안을 참고하세요.

frontend/src/pages/external/Portfolio.jsx (1)

3-13: 코드 중복 문제

이 컴포넌트도 Intro.jsx, Leaders.jsx와 동일한 구조입니다. Leaders.jsx에 남긴 리팩토링 제안을 참고하세요.

🧹 Nitpick comments (4)
frontend/src/pages/external/Main.module.css (1)

19-23: 선택사항: 반응형 여백 고려

고정 픽셀 값(55px, 108px)은 작은 화면에서 레이아웃이 좁아 보일 수 있습니다.

반응형 단위 사용을 고려하세요:

 .menu {
-  margin-top: 55px;
-  margin-left: 108px;
+  margin-top: clamp(30px, 5vh, 55px);
+  margin-left: clamp(20px, 8vw, 108px);
   box-sizing: border-box;
 }
frontend/src/pages/external/Leaders.jsx (1)

3-13: 코드 중복: Intro, Portfolio와 동일한 구조

Leaders, Intro, Portfolio 컴포넌트가 거의 동일한 구조를 공유하고 있습니다. title prop을 받는 공통 컴포넌트로 추상화하면 유지보수성이 향상됩니다.

공통 컴포넌트를 생성하세요:

// ExternalPageTemplate.jsx
const ExternalPageTemplate = ({ title, children }) => {
  return (
    <div className={styles.container}>
      <div className={styles.header}>
        <span className={styles.title}>{title}</span>
        <hr className={styles.divider} />
      </div>
      <div className={styles.info}>{children}</div>
    </div>
  );
};

그런 다음 각 페이지에서 사용:

// Leaders.jsx
const Leaders = () => {
  return <ExternalPageTemplate title="임원진 소개" />;
};
frontend/src/pages/external/External.module.css (2)

9-10: 선택사항: 고정 퍼센트 높이 대신 유연한 높이 고려

25% 고정 높이는 콘텐츠가 많아지면 잘릴 수 있습니다.

 .header {
   background: url('../../assets/external-detail-image.png') center no-repeat;
-  height: 25%;
+  min-height: 200px;
+  height: clamp(200px, 25vh, 300px);
   display: flex;
   flex-direction: column;

25-27: 선택사항: 고정 너비 대신 반응형 너비

250px 고정 너비는 작은 화면에서 너무 넓을 수 있습니다.

 .divider {
-  width: 250px;
+  width: min(250px, 80vw);
 }
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between dd56304 and 5936039.

⛔ Files ignored due to path filters (3)
  • frontend/src/assets/external-detail-image.png is excluded by !**/*.png
  • frontend/src/assets/external-image.png is excluded by !**/*.png
  • frontend/src/assets/logo.png is excluded by !**/*.png
📒 Files selected for processing (7)
  • frontend/src/App.jsx (1 hunks)
  • frontend/src/pages/external/External.module.css (1 hunks)
  • frontend/src/pages/external/Intro.jsx (1 hunks)
  • frontend/src/pages/external/Leaders.jsx (1 hunks)
  • frontend/src/pages/external/Main.jsx (1 hunks)
  • frontend/src/pages/external/Main.module.css (1 hunks)
  • frontend/src/pages/external/Portfolio.jsx (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
frontend/src/App.jsx (4)
frontend/src/pages/external/Main.jsx (1)
  • Main (6-35)
frontend/src/pages/external/Intro.jsx (1)
  • Intro (3-13)
frontend/src/pages/external/Leaders.jsx (1)
  • Leaders (3-13)
frontend/src/pages/external/Portfolio.jsx (1)
  • Portfolio (3-13)
🔇 Additional comments (5)
frontend/src/App.jsx (2)

18-21: LGTM: 외부 페이지 import 적절

새로운 external 페이지 컴포넌트들이 적절히 import되었습니다.


27-30: LGTM: 라우팅 구조 적절

외부 페이지 라우트가 Layout 밖에 배치되어 있어 네비게이션 없이 독립적으로 렌더링됩니다. 이는 외부 페이지의 의도된 동작으로 보입니다.

frontend/src/pages/external/Main.jsx (2)

6-34: 전반적인 구조 양호

Main 컴포넌트의 구조와 네비게이션 구현이 적절합니다. 내부 라우팅이 올바르게 설정되어 있습니다.


2-3: 검증 완료: 모든 에셋 파일 존재

참조된 이미지 파일들이 모두 실제로 존재합니다:

  • external-image.png
  • logo.png

임포트 경로가 올바르고 파일들이 모두 정상 위치에 있습니다.

frontend/src/pages/external/External.module.css (1)

8-16: 배경 이미지 파일 확인 완료

배경 이미지 파일이 frontend/src/assets/external-detail-image.png에 정상적으로 존재합니다. CSS 경로 참조가 올바릅니다.

Comment on lines +15 to +17
<li>
<Link to="/main/leaders">임원소개</Link>
</li>
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

텍스트 불일치: "임원소개" vs "임원진 소개"

네비게이션 링크 텍스트가 "임원소개"이지만, Leaders.jsx 페이지의 실제 제목은 "임원진 소개"입니다. 일관성을 위해 동일한 텍스트를 사용하세요.

           <li>
-            <Link to="/main/leaders">임원소개</Link>
+            <Link to="/main/leaders">임원진 소개</Link>
           </li>
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<li>
<Link to="/main/leaders">임원소개</Link>
</li>
<li>
<Link to="/main/leaders">임원진 소개</Link>
</li>
🤖 Prompt for AI Agents
In frontend/src/pages/external/Main.jsx around lines 15 to 17, the navigation
link text reads "임원소개" while the Leaders.jsx page title is "임원진 소개"; update the
Link text to exactly match the page title ("임원진 소개") to ensure consistency in
the UI; locate the <Link to="/main/leaders"> element and replace its inner text
with "임원진 소개", then run a quick UI check to confirm the navigation label now
matches the Leaders page title.

Comment on lines 54 to 62
.title {
font-family: DIN Condensed;
font-weight: 700;
font-size: 80px;
line-height: 100%;
letter-spacing: 0%;
color: #ffffff;
margin: 0;
}
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

폰트 로딩 확인 필요

'DIN Condensed' 폰트가 참조되고 있지만 이 파일에서 @font-face 선언이나 import가 보이지 않습니다. 폰트가 로드되지 않으면 fallback 폰트로 렌더링되어 의도한 디자인과 달라질 수 있습니다.

다음 스크립트로 프로젝트 내 폰트 로딩을 확인하세요:


🏁 Script executed:

#!/bin/bash
# DIN Condensed 폰트 참조를 찾아 로딩 위치 확인

rg -n "@font-face" --type=css
rg -n "DIN Condensed" --type=css
rg -n "font-family.*DIN" 

Length of output: 331


폰트 로딩 상황을 더 자세히 파악하기 위해 추가 검증이 필요합니다.


🏁 Script executed:

#!/bin/bash
# Check for @font-face in HTML files and global CSS
echo "=== Checking HTML files for @font-face ==="
rg -n "@font-face" --type=html

echo "=== Checking for font imports in JS/TS files ==="
rg -n "@import.*font" --type=ts --type=tsx --type=js

echo "=== Checking for font-related link tags in HTML ==="
rg -n "link.*font|@import.*http" --type=html

echo "=== Checking root/public CSS files ==="
find frontend/public frontend -maxdepth 2 -name "*.css" -type f

echo "=== Looking for global or index CSS ==="
rg -n "@font-face|DIN" --type=css --glob="**/global*" --glob="**/index*" --glob="**/App*"

echo "=== Checking package.json for font packages ==="
rg -n "font|google-font" package.json

echo "=== Checking CSS module imports ==="
head -20 frontend/src/pages/external/Main.module.css
head -20 frontend/src/components/LoginAndSignUpForm.module.css

Length of output: 1177


폰트 로딩 메커니즘을 확인하기 위해 App.css와 index.css의 전체 내용을 검토하겠습니다.


🏁 Script executed:

#!/bin/bash
# Check the full content of global CSS files
echo "=== Content of frontend/src/index.css ==="
cat frontend/src/index.css

echo -e "\n=== Content of frontend/src/App.css ==="
cat frontend/src/App.css

echo -e "\n=== Searching all CSS files for any font-face ==="
rg -A5 "@font-face" --type=css

Length of output: 460


DIN Condensed 폰트 로딩 메커니즘 추가 필요

프로젝트 전체에서 DIN Condensed 폰트에 대한 @font-face 선언이 없습니다. 현재 frontend/src/index.css에서는 Pretendard 폰트만 로드되고 있으며, frontend/src/pages/external/Main.module.css:55frontend/src/components/LoginAndSignUpForm.module.css:29에서 참조된 DIN Condensed는 로드되지 않아 시스템 기본 폰트로 렌더링됩니다.

  • 80px 크기의 .title 요소에 적용되므로 디자인 의도와 크게 다를 수 있습니다
  • 웹 폰트로 DIN Condensed를 추가하거나, 로드 가능한 폰트로 변경하세요
🤖 Prompt for AI Agents
In frontend/src/pages/external/Main.module.css around lines 54 to 62 the .title
uses "DIN Condensed" but the project never declares or loads that font, so it
falls back to system fonts; either add a proper @font-face declaration (in
frontend/src/index.css or a global CSS) that points to the DIN Condensed webfont
files (woff/woff2) and includes the 700 weight, or switch the font-family to a
loaded/available font (or a defined fallback stack) to ensure the 80px title
renders as intended; place the @font-face at global scope, preload or host the
font files, and verify the weight and font-style match the usage.

Copy link
Contributor

@gxuoo gxuoo left a comment

Choose a reason for hiding this comment

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

고생하셨습니다!

@DongEun02 DongEun02 merged commit 5d0ffb7 into main Nov 22, 2025
1 check passed
@DongEun02 DongEun02 deleted the SISC1-215-FE-external-page-ui branch November 22, 2025 14:44
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