-
Notifications
You must be signed in to change notification settings - Fork 30
스프린트 미션 1,2 김지훈 #34
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
devbini
merged 5 commits into
codeit-sprint-fullstack:basic-김지훈
from
jihun5914:basic-김지훈
Apr 8, 2026
The head ref may contain hidden characters: "basic-\uAE40\uC9C0\uD6C8"
Merged
스프린트 미션 1,2 김지훈 #34
Changes from all commits
Commits
Show all changes
5 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,50 +1,51 @@ | ||
| # 🐼 판다마켓 프로젝트 | ||
| # 🐼 판다마켓 프론트엔드 - 김지훈 | ||
|
|
||
| > _이 저장소는 판다마켓 프로젝트의 프론트엔드 코드를 관리하는 곳입니다. 프로젝트를 클론하여 개발 환경을 설정하고, 각 브랜치에서 해당 스프린트 미션을 수행해 주세요!_ 🛠️ | ||
| > **코드잇 클라우드 기반 풀스택 엔지니어 부트캠프** | ||
| > 스프린트 미션 1 & 2 통합 제출 저장소입니다. | ||
|
|
||
| ## 소개 | ||
| ## 🚀 배포 링크 | ||
| * **Netlify 배포 주소**: [https://13-sprint-mission-1-2-kimjihun.netlify.app/] | ||
|
|
||
| 안녕하세요! 판다마켓 프로젝트에 오신 것을 환영합니다! 🥳 | ||
| 판다마켓은 따뜻한 중고거래를 위한 커뮤니티 플랫폼이에요. 여러분은 이곳에서 상품을 등록하고, 다른 사용자들과 소통하며, 자유롭게 이야기를 나눌 수 있어요. 매주 스프린트 미션을 통해 기능을 하나씩 만들어 가며 성장해 나가는 여정을 함께해요. 🚀 | ||
|
|
||
|  | ||
| _위 이미지는 판다마켓의 대표 이미지입니다._ 📸 | ||
|
|
||
| ## 스프린트 미션이란? 🤔 | ||
|
|
||
| 스프린트 미션은 **하나의 개인 프로젝트를 길게 진행하면서, 그 과정에서 주기적으로 피드백을 받을 수 있는 시스템**이에요. 각 스프린트마다 배운 이론을 적용해 보고, **멘토님께 코드 리뷰를 받아가며 실력을 쑥쑥 키워갈 수 있는 중요한 개인 과제**랍니다. 💪 | ||
|
|
||
| ## 주요 기능 ✨ | ||
|
|
||
| 1. **상품 등록**: 내가 가진 물건을 올리고, 사진과 설명을 추가해 직접 판매할 수 있어요! | ||
| 2. **문의 댓글**: 상품에 대한 궁금한 점이나 의견을 자유롭게 남길 수 있답니다. 📝 | ||
| 3. **자유게시판**: 다양한 주제로 친구들과 이야기를 나누고, 정보를 공유할 수 있는 공간이에요! 🗣️ | ||
|
|
||
| ## 프로젝트 브랜치 구조 🏗️ | ||
|
|
||
| 프로젝트는 단계별로 나뉘어 있고, 각 스프린트 미션에 맞는 브랜치가 있어요. 각 브랜치를 통해 체계적으로 개발하며 학습할 수 있어요. 🎯 | ||
|
|
||
| ### 브랜치 설명 | ||
|
|
||
| 1. **basic (part1): 스프린트 미션 1 ~ 3 FE 요구사항** | ||
|
|
||
| - 기본적인 웹 애플리케이션 기능 구현을 위한 초기 브랜치입니다. HTML, CSS, JavaScript 등을 사용해 기본을 다집니다. | ||
| - **스프린트 미션 1부터 4까지**의 프론트엔드 내용을 포함하고 있어요. | ||
| --- | ||
|
|
||
| 2. **react (part2): 스프린트 미션 5 ~ 6 FE 요구사항** | ||
| ## ✅ 스프린트 미션 체크리스트 | ||
|
|
||
| ### [미션 1] 기본 요구사항 | ||
| - [o] UI 라이브러리(React 등) 없이 HTML/CSS만으로 구현 | ||
| - [o] PC 사이즈 디자인 완벽 구현 | ||
| - [o] Netlify를 통한 프로젝트 배포 | ||
| - [o] 루트(`/`) 경로 랜딩 페이지 설정 및 Title "판다마켓" 설정 | ||
| - [o] GAB(Global Navigation Bar) 최상단 고정 (`position: sticky` 활용) | ||
| - [o] 1920px 이상/미만 반응형 레이아웃 및 여백(200px) 처리 | ||
| - [o] 로고, 버튼, SNS 아이콘 등 모든 이동 링크 구현 | ||
| - [o] 클릭 요소에 `cursor: pointer` 설정 | ||
|
|
||
| ### [미션 2] 로그인 & 회원가입 요구사항 | ||
| - [o] 로그인 페이지(`/login`) 및 회원가입 페이지(`/signup`) 구현 | ||
| - [o] 로고 클릭 시 루트 페이지 이동 | ||
| - [o] Input 요소 Focus 시 테두리 색상 변경 (`#3692FF`) 및 Focus out 시 해제 | ||
| - [o] 페이지 간 상호 이동 버튼 구현 (로그인 ↔ 회원가입) | ||
| - [o] 비밀번호 확인용 눈 모양 아이콘 추가 | ||
|
|
||
| ### [심화 요구사항] | ||
| - [o] `reset.css` 설정으로 브라우저 스타일 초기화 | ||
| - [x] 브라우저 폰트 설정에 따른 가변 크기 적용 (`rem` 단위 사용) | ||
| - [x] Palette 컬러값 CSS 변수(`--color-name`) 등록 및 사용 | ||
| - [x] 구글 애널리틱스(GA) 연동 설정 | ||
|
|
||
| - React 라이브러리를 사용해 프론트엔드 기능을 구현하는 브랜치입니다. 컴포넌트 기반 아키텍처와 상태 관리를 배웁니다. | ||
| - **스프린트 미션 5부터 6까지, 그 이후**의 프론트엔드 내용을 포함하고 있어요. | ||
| - 만약 스프린트 미션 9부터 프론트엔드 코드를 Next가 아닌 React로 구현하고 싶다면 react 브랜치를 사용해요. | ||
| --- | ||
|
|
||
| 3. **next (part3,4): 스프린트 미션 7 FE 요구사항~** | ||
| ## ✨ 주요 변경 사항 | ||
| 1. **시맨틱 마크업**: `header`, `main`, `footer` 등 의미 있는 태그를 사용하여 구조를 설계했습니다. | ||
| 2. **반응형 레이아웃**: `max-width: 1920px`를 기준으로 넓은 화면에서도 콘텐츠가 중앙 정렬되도록 구현했습니다. | ||
| 3. **CSS 변수화**: 색상 코드를 변수로 관리하여 일관된 디자인 시스템을 적용했습니다. | ||
| 4. **UX 개선**: 비밀번호 가시성 토글 기능을 추가하여 사용자 편의성을 높였습니다. | ||
|
|
||
| - Next.js를 사용해 서버 사이드 렌더링(SSR)과 정적 사이트 생성(SSG) 등 고급 기능을 구현합니다. | ||
| - **스프린트 미션 7부터** 시작하는 프론트엔드 내용을 포함하고 있어요. | ||
| - 만약 스프린트 미션 8부터 프론트엔드 코드를 React가 아닌 Next로 구현하고 싶다면 next 브랜치를 사용해요. | ||
| --- | ||
|
|
||
| > _스프린트 미션 내 백엔드 요구사항은 [백엔드 레포지토리](https://github.com/codeit-sprint-fullstack/11-sprint-mission-be)의 브랜치에서 관리해주세요_ | ||
| ## 💬 멘토님에게 남길 메시지 | ||
| 안녕하세요 멘토님! 이번 미션을 통해 순수 HTML/CSS만으로 반응형 레이아웃을 잡고, 코멘트를 추가 안하고 작성을 해버려서 AI를 사용해서 코멘트를 작성했습니다 다음부터는 코멘트를 작성해서 파일을 만들겠습니다. 코드 리뷰 부탁드립니다. 감사합니다! | ||
|
|
||
| --- | ||
|
|
||
| 본 프로젝트는 [코드잇](https://www.codeit.kr)의 소유이며, 교육 목적으로만 사용됩니다. © 2026 Codeit. All rights reserved. | ||
| © 2026 Jihun Kim. All rights reserved. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,253 @@ | ||
| /* ========================================= | ||
| 1. 전체 기본 세팅 | ||
| ========================================= */ | ||
|
|
||
| * { | ||
| margin: 0; | ||
| padding: 0; | ||
| box-sizing: border-box; | ||
| } | ||
|
|
||
| a { | ||
| text-decoration: none; | ||
| color: inherit; | ||
| } | ||
|
|
||
| :root { | ||
| --primary-blue: #3692FF; | ||
| --text-dark: #374151; | ||
| --bg-sky: #CFE5FF; | ||
| --bg-white: #fff; | ||
| } | ||
|
|
||
| body { | ||
| font-family: 'Pretendard', sans-serif; | ||
| color: var(--text-dark); | ||
| background-color: #FCFCFC; | ||
| overflow-x: hidden; | ||
| } | ||
|
|
||
| img { | ||
| max-width: 100%; | ||
| display: block; | ||
| } | ||
|
|
||
|
|
||
| /* ========================================= | ||
| 2. 공통 레이아웃 & 글자 스타일 | ||
| ========================================= */ | ||
|
|
||
| .container { | ||
| width: 100%; | ||
| max-width: 1920px; | ||
| margin: 0 auto; | ||
| padding: 0 200px; | ||
| } | ||
|
|
||
| /* gnb-container, footer-container 공통 flex 속성 통합 */ | ||
| .flex-between { | ||
| display: flex; | ||
| justify-content: space-between; | ||
| align-items: center; | ||
| } | ||
|
|
||
| /* 기존 flex-container → flex-center로 명칭 변경 (hero와 충돌 방지) */ | ||
| .flex-center { | ||
| display: flex; | ||
| align-items: center; | ||
| justify-content: center; | ||
| gap: 64px; | ||
| width: 100%; | ||
| max-width: 988px; | ||
| margin: 0 auto; | ||
| } | ||
|
|
||
| .flex-center.reverse { | ||
| flex-direction: row-reverse; | ||
| } | ||
|
|
||
| .text-area { flex: 1; min-width: 300px; } | ||
| .image-area { flex: 1; display: flex; justify-content: center; } | ||
| .image-area img { width: 746px; height: 340px; object-fit: contain; } | ||
|
|
||
| /* h1, h2 공통 속성 묶기 (font-size, font-weight, line-height 중복 제거) */ | ||
| h1, h2 { | ||
| font-size: 40px; | ||
| font-weight: 700; | ||
| line-height: 1.4; | ||
| } | ||
| h1 { margin-bottom: 32px; } | ||
| h2 { margin-bottom: 24px; } | ||
|
|
||
| .tagline { color: var(--primary-blue); font-size: 18px; font-weight: 700; margin-bottom: 12px; } | ||
| .description { font-size: 24px; font-weight: 500; line-height: 1.4; } | ||
|
|
||
|
|
||
| /* ========================================= | ||
| 3. Header | ||
| ========================================= */ | ||
|
|
||
| .gnb { | ||
| position: fixed; | ||
| top: 0; | ||
| width: 100%; | ||
| height: 70px; | ||
| background: var(--bg-white); | ||
| z-index: 9999; | ||
| display: flex; | ||
| align-items: center; | ||
| border-bottom: 1px solid #E5E7EB; | ||
| } | ||
|
|
||
| /* .gnb-container 제거 → .flex-between으로 대체 */ | ||
|
|
||
| .logo { display: flex; align-items: center; gap: 8px; } | ||
|
|
||
| .logo-text { | ||
| color: var(--primary-blue); | ||
| font-size: 25.6px; | ||
| font-weight: 700; | ||
| } | ||
|
|
||
| .login-btn { | ||
| background: var(--primary-blue); | ||
| color: #fff !important; | ||
| padding: 10px 24px; | ||
| border-radius: 8px; | ||
| font-weight: 600; | ||
| } | ||
|
|
||
|
|
||
| /* ========================================= | ||
| 4. Main | ||
| ========================================= */ | ||
|
|
||
| main { padding-top: 70px; } | ||
|
|
||
| /* --- 4-1. 히어로 섹션 --- */ | ||
| .section-hero { | ||
| width: 100%; | ||
| min-width: 1920px; | ||
| height: 540px; | ||
| background-color: var(--bg-sky); | ||
| display: flex; | ||
| justify-content: center; | ||
| } | ||
|
|
||
| /* hero 전용 내부 컨테이너 (공통 container, flex-center 충돌 방지) */ | ||
| .hero-inner { | ||
| position: relative; | ||
| width: 1920px; | ||
| max-width: 1920px; | ||
| height: 540px; | ||
| } | ||
|
|
||
| /* hero 전용 텍스트 영역 (.text-area 덮어쓰기 제거) */ | ||
| .hero-text-area { | ||
| position: absolute; | ||
| top: 240px; | ||
| left: 405px; | ||
| display: flex; | ||
| flex-direction: column; | ||
| align-items: flex-start; | ||
| gap: 32px; | ||
| } | ||
|
|
||
| /* hero h1: body/h1 기본값 중복 선언 제거 */ | ||
| .hero-text-area h1 { | ||
| margin: 0; | ||
| } | ||
|
|
||
| .cta-btn { | ||
| display: flex; | ||
| height: 56px; | ||
| padding: 16px 124px; | ||
| box-sizing: border-box; | ||
| justify-content: center; | ||
| align-items: center; | ||
| gap: 10px; | ||
| border-radius: 9999px; | ||
| background-color: var(--primary-blue); | ||
| color: white !important; | ||
| font-size: 18px; | ||
| font-weight: 600; | ||
| } | ||
|
|
||
| /* hero 전용 이미지 영역 (.image-area 덮어쓰기 제거) */ | ||
| .hero-img-area { | ||
| position: absolute; | ||
| top: 200px; | ||
| left: 769px; | ||
| width: 746px; | ||
| height: 340px; | ||
| display: flex; | ||
| justify-content: center; | ||
| align-items: center; | ||
| } | ||
|
|
||
| .hero-img-area img { | ||
| width: 100%; | ||
| height: 100%; | ||
| object-fit: contain; | ||
| } | ||
|
|
||
| /* --- 4-2. 콘텐츠 섹션들 --- */ | ||
| .section-content { padding: 138px 0; } | ||
| .white-bg { background-color: var(--bg-white); } | ||
|
|
||
| /* --- 4-3. 하단 판다 배너 --- */ | ||
| .banner-container { | ||
| display: flex; | ||
| flex-direction: column; | ||
| align-items: center; | ||
| justify-content: center; | ||
| text-align: center; | ||
| } | ||
|
|
||
|
|
||
| /* ========================================= | ||
| 5. Footer | ||
| ========================================= */ | ||
|
|
||
| .footer { | ||
| background-color: #111827; | ||
| height: 160px; | ||
| display: flex; | ||
| align-items: center; | ||
| } | ||
|
|
||
| /* .footer-container 제거 → .flex-between으로 대체 */ | ||
|
|
||
| .copyright { color: #9CA3AF; } | ||
|
|
||
| .footer-links { display: flex; gap: 32px; } | ||
| .footer-links a { color: #E5E7EB; } | ||
|
|
||
| .sns-group { display: flex; gap: 20px; } | ||
| .sns-group img { width: 20px; height: 20px; } | ||
|
|
||
|
|
||
| /* ========================================= | ||
| 6. 반응형 | ||
| ========================================= */ | ||
|
|
||
| @media (min-width: 1920px) { | ||
| .container { | ||
| padding: 0; | ||
| width: 1520px; | ||
| } | ||
| } | ||
|
|
||
|
|
||
| /* ========================================= | ||
| 7. Input 포커스 | ||
| ========================================= */ | ||
|
|
||
| input { | ||
| border: 1px solid transparent; | ||
| } | ||
|
|
||
| input:focus { | ||
| border: 1px solid var(--primary-blue); | ||
| outline: none; | ||
| } | ||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
☕ Thinking...
음.. 아마 알고 계시겠지만 히어로 섹션인 만큼 반응형 디자인 구축에 있어 큰 역할을 한다 생각해요.
px구조는 화면 구축에 기본적인 요소이기도 하고, 세밀하게 조정하기엔 엄청 좋은 방식이지만,
장기적으로는
flex옵션이나grid옵션도 생각 해 보면 좋을 것 같아요. (해상도가 조금만 바뀌면 모든 레이아웃이 깨져버릴 수 있어서 그래요!)