Skip to content

[7주차] JobDri 이윤서 & 구민교 과제 제출합니다.#7

Open
yiyoonseo wants to merge 42 commits into
CEOS-Developers:masterfrom
yiyoonseo:develop
Open

[7주차] JobDri 이윤서 & 구민교 과제 제출합니다.#7
yiyoonseo wants to merge 42 commits into
CEOS-Developers:masterfrom
yiyoonseo:develop

Conversation

@yiyoonseo
Copy link
Copy Markdown

@yiyoonseo yiyoonseo commented May 17, 2026

링크

📄노션 링크
🔗배포 링크
🎨피그마 링크

초기 세팅

디자인 시스템과 컴포넌트는 JobDri의 디자인 시스템과 컴포넌트를 사용했습니다.
API 또한 JobDri의 명세서를 사용했습니다.
(API연동을 해뒀으나 현재 CORS에러로 인해 정상적으로 작동하지 못합니다...ㅠㅠ)

페이지 설명

  • 로그인 페이지
    • 이메일과 비밀번호를 입력해 로그인할 수 있는 페이지입니다.
    • 로그인 성공 시 토큰을 저장하고 메인 페이지로 이동합니다.
  • 회원가입 페이지
    • 이메일 인증, 이름 선택, 비밀번호 설정 단계로 구성된 회원가입 페이지입니다.
    • 가입 완료 시 로그인 상태로 메인 페이지에 진입합니다.
  • 메인 페이지
    • 로그인 후 진입하는 메인 허브 페이지입니다.
    • CEOS VOTE 헤더와 함께 투표하기, ABOUT US 메뉴 카드를 제공해 주요 페이지로 이동할 수 있도록 구성했습니다.
  • 투표 페이지
    • 후보자 목록을 카드 형태로 보여주고, 각 후보의 프로필 페이지로 이동할 수 있는 프로필 보기 버튼을 제공합니다.
    • 사용자는 후보를 선택한 뒤 투표할 수 있으며, 투표 완료 후에는 후보별 득표 수와 퍼센트를 결과 그래프로 확인할 수 있습니다.
    • 이미 투표한 후보는 체크 배지와 강조 색상으로 표시되며, 다시 투표하기 기능을 통해 투표 상태를 초기화할 수 있습니다.
    • 사실 예시 투표 페이지를 보지 못하고 뽀로로 투표 페이지를 만들어 버렸습니다.. 백과의 연결을 위해 다음 주에 수정 할 예정입니다..
  • 프로필 상세 페이지
    • 투표 후보의 상세 정보를 확인하는 페이지입니다.
    • 후보 이미지, 이름, 종족, 성별, 사는 곳, 친한 친구, 상세 설명을 카드 형태로 구성했습니다.
  • ABOUT US 페이지
    • 프로젝트 팀 정보를 보여주는 소개 페이지입니다.
  • 로그아웃 모달
    • 헤더의 로그아웃 버튼 클릭 시 확인 모달이 열리도록 구현했습니다.
    • 취소하기, 로그아웃하기 버튼을 제공하고, 배경 클릭 또는 Esc 키로 모달을 닫을 수 있게 했습니다.

기능 설명

  • 반복되는 UI를 Button, TextOnlyButton, IconOnlyButton, CompleteBadge, AppHeader 등 공통 컴포넌트로 분리해 재사용성을 높였습니다.
  • 로그인/회원가입/로그아웃 모달처럼 독립적인 UI를 컴포넌트화 하였습니다.
  • 타입은 types, 데이터 처리 로직은 services, 디자인 토큰은 styles로 분리해 파일 역할을 정리했습니다.

반응형 작업

  • 공통 .app-container를 만들어 데스크톱에서는 최대 1200px, 모바일에서는 350px 기준으로 콘텐츠 폭을 제한했습니다.
  • 모바일 기준점은 863px 이하, 태블릿 구간은 864px~1279px로 나누어 레이아웃을 조정했습니다.
  • 모바일에서는 후보 카드 크기, 이미지 크기, 버튼 여백, 섹션 간격을 줄여 화면 밀도를 조정했습니다.
  • 프로필 이미지는 aspect-ratio를 적용해 화면 크기에 따라 비율이 깨지지 않도록 처리했습니다.
  • 로그아웃 모달도 모바일에서 너비와 그림자, 버튼 간격을 조정해 작은 화면에서도 안정적으로 보이도록 했습니다.
  • image
image image

느낀점 및 배운점 (민교)

이번 과제를 하면서 페이지를 구현하는 것뿐만 아니라, 컴포넌트와 파일 구조를 어떻게 나누는지가 전체 코드의 유지보수성에 큰 영향을 준다고 느꼈습니다. 버튼, 헤더, 배지, 모달처럼 여러 곳에서 반복되는 요소를 공통 컴포넌트로 분리하니 코드가 더 정리되고 재사용하기 쉬워졌습니다.

반응형 작업을 하면서는 모바일 화면만 따로 대응하는 것이 아니라, 전체 화면 크기에 따라 레이아웃이 어떻게 변해야 하는지를 더 많이 고려하게 되었습니다. 기기마다 화면 사이즈가 다르기 때문에 구체적인 수치를 고정으로 넣기보다는 vh 같은 상대 단위를 활용해 화면에 보이는 높이나 크기를 조절하는 것이 더 자연스러웠습니다. 또한 화면이 커질 때 컴포넌트 자체도 비율에 맞춰 함께 커지게 할지, 아니면 컴포넌트 크기는 유지하고 바깥 여백만 늘어나게 할지 고민하게 되었습니다. 같은 요소라도 화면 크기에 따라 배치 방식, 간격, 크기가 달라져야 더 안정적인 UI가 된다고 느꼈습니다.

그리고 프론트엔드 작업을 해나가며 피그마 작업을 할 때도 화면이나 컨테이너를 만들 때마다 반응형을 함께 생각하게 되었습니다. 이전에는 결과적으로 보이는 화면 위주로 디자인하고 구조까지 깊게 고려하지 못했는데, 팀의 디자이너분들이 요소의 구조, 반응형, 컴포넌트의 재사용성을 매번 고려해 컨테이너와 컴포넌트를 만드는 과정을 보며 많이 배울 수 있었습니다. 이제는 박스 하나를 만들 때도 사이즈가 어떻게 변해야 하는지, 레이아웃은 어떻게 잡아야 하는지, 다른 화면에서도 재사용할 수 있는지를 함께 생각하게 되었습니다.

이번 작업을 통해 기능 구현뿐만 아니라 UI/UX 관점에서도 배우는 점이 많았습니다. 화면을 보기 좋게 만드는 것에서 끝나는 것이 아니라, 실제 사용성과 유지보수성, 반응형 구조까지 고려해야 더 완성도 있는 프론트엔드 작업이 된다는 것을 알 수 있었던 것 같습니다.

느낀점 및 배운점 (윤서)

배포 과정에서 깃 설정이 꼬여 문제가 있었습니다.
해결하는데 시간이 꽤 오래 걸려 애를 먹었습니다.

내용이 조금 길어 링크 첨부합니다.
정리

yiyoonseo and others added 30 commits May 13, 2026 00:35
…in_signup-ui

Feat: CEOS-Developers#2 로그인, 회원가입 모달 구현
Fix: Vercel rootDirectory 설정 추가
Copy link
Copy Markdown

@GirimNam GirimNam left a comment

Choose a reason for hiding this comment

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

7주차 코드리뷰를 함께 하게 되어 영광입니다!


return () => window.clearTimeout(timer);
}, [router]);

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

랜딩페이지 이후 메인 페이지로 라우팅시킨게 너무 좋은 것 같습니다!

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

버튼 컴포넌트들을 한 곳에서 관리하는게 너무 효율적이고 좋은거 같아요!

Comment on lines +127 to +132
<Button
label={poll.votedCandidateId ? "다시 투표하기" : "투표하기"}
size="large"
className="flex-1"
onClick={handleVoteButtonClick}
/>
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

후보를 선택하지 않았을 때 handleVoteButtonClick 내부에서 동작은 막고 있지만, 버튼에는 active 조건이 따로 없어서 UI상으로는 활성화된 것처럼 보일 수 있을 것 같아요!

</div>

{error && <p className="text-cap12-med text-red-primary">{error}</p>}
</div>
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

현재는 이메일/비밀번호가 비어 있는지만 확인하고 있어서, 이메일 형식 검증 등 검증 조건이 늘어난다면 Zod 같은 schema validation을 적용해 검증 로직을 분리하는 것도 좋을 거 같아요!

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.

3 participants