Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
61712d2
로그인 페이지 팝업 알림, 폴더 정리, 전반적인 코드 간결화
kangyeon0413 Jun 9, 2026
8fd28b5
중복된 이메일 팝업알림, modal.css로 분리
kangyeon0413 Jun 9, 2026
268aeed
login.js삭제 -> login.html에 인라인코드로 작성
kangyeon0413 Jun 9, 2026
04547cd
아이콘,버튼 간격 고정, css파일 수정
kangyeon0413 Jun 9, 2026
84d5029
모바일 태블릿 브라우저 크기 조절 실패
kangyeon0413 Jun 9, 2026
638a761
header max-width 1920px->1200px로 수정
kangyeon0413 Jun 9, 2026
738585c
articleService, productService정답본으로 교체
kangyeon0413 Jun 18, 2026
2d4a284
js파일 정답본과 합본
kangyeon0413 Jun 18, 2026
1874f3e
리액트 작업 시작, src폴더 생성후 style폴더안에 css파일 이동, components,pages폴더 생성
kangyeon0413 Jun 18, 2026
952e30d
pages에 html코드 내용 옮기기, components에 Header.jsx추가
kangyeon0413 Jun 18, 2026
a13bd82
login.jsx, signup.jsx 추가 signup.css도 추가
kangyeon0413 Jun 18, 2026
fdfd591
items.jsx, index.css,constant.js수정
kangyeon0413 Jun 18, 2026
d96b8a3
productservice.js,main.jsx,items.css 수정
kangyeon0413 Jun 18, 2026
9b2062c
상품 페이지 기초 틀 작성(베스트상품, 일반상품, 하단부분 페이지 넘기기버튼 작성
kangyeon0413 Jun 18, 2026
f82bea5
상품 등록하기, 최신순/조회순, 검색할 상품을 입력하세요 칸 코드 작성
kangyeon0413 Jun 18, 2026
40c49fd
커스텀 hook사용, 이어진 자잘한 오류 수정
kangyeon0413 Jun 19, 2026
8b09fc7
자유게시판, 중고마켓 버튼 생성
kangyeon0413 Jun 19, 2026
a4e4b9a
Header.jsx 홈버튼 경로 수정
kangyeon0413 Jun 19, 2026
ac395d7
중고마켓 페이지 url path /items로 수정
kangyeon0413 Jun 28, 2026
042d0db
상품페이지 이미지 디폴트값으로 대체
kangyeon0413 Jun 28, 2026
bbf3339
중고마켓 상단 네비게이션바 색상 변경, 상품 등록하기 버튼 클릭시 /registration으로 이동
kangyeon0413 Jun 28, 2026
7abe070
Registration.jsx,css 작성
kangyeon0413 Jun 28, 2026
1a35afc
home.jsx /items 경로 location.href->navigate('/items') 리액트 코드로 변경
kangyeon0413 Jun 28, 2026
f0bb1de
등록버튼 활성화 후 연결 작업, 라우트 추가
kangyeon0413 Jun 28, 2026
6678311
product.js에 _id,createAt,updateAt 필드 추가
kangyeon0413 Jun 29, 2026
a0efd7f
상품등록,수정,삭제api수정/에러처리 상태코드 리턴 설정
kangyeon0413 Jun 29, 2026
4885f13
mongoDB작업 완료,연결 성공
kangyeon0413 Jun 29, 2026
947fafa
start 스크립트 추가
kangyeon0413 Jun 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*

node_modules
dist
dist-ssr
*.local

# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

node_modules

.env
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"liveServer.settings.port": 5501
}
51 changes: 9 additions & 42 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,49 +1,16 @@
# 🐼 판다마켓 프로젝트
# React + Vite

> _이 저장소는 판다마켓 프로젝트의 프론트엔드 코드를 관리하는 곳입니다. 프로젝트를 클론하여 개발 환경을 설정하고, 각 브랜치에서 해당 스프린트 미션을 수행해 주세요!_ 🛠️
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.

## 소개
Currently, two official plugins are available:

안녕하세요! 판다마켓 프로젝트에 오신 것을 환영합니다! 🥳
판다마켓은 따뜻한 중고거래를 위한 커뮤니티 플랫폼이에요. 여러분은 이곳에서 상품을 등록하고, 다른 사용자들과 소통하며, 자유롭게 이야기를 나눌 수 있어요. 매주 스프린트 미션을 통해 기능을 하나씩 만들어 가며 성장해 나가는 여정을 함께해요. 🚀
- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Oxc](https://oxc.rs)
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/)

![PandaMarket](https://github.com/user-attachments/assets/3784b99f-73c9-4349-a9a9-92b2a7563574)
_위 이미지는 판다마켓의 대표 이미지입니다._ 📸
## React Compiler

## 스프린트 미션이란? 🤔
The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation).

스프린트 미션은 **하나의 개인 프로젝트를 길게 진행하면서, 그 과정에서 주기적으로 피드백을 받을 수 있는 시스템**이에요. 각 스프린트마다 배운 이론을 적용해 보고, **멘토님께 코드 리뷰를 받아가며 실력을 쑥쑥 키워갈 수 있는 중요한 개인 과제**랍니다. 💪
## Expanding the ESLint configuration

## 주요 기능 ✨

1. **상품 등록**: 내가 가진 물건을 올리고, 사진과 설명을 추가해 직접 판매할 수 있어요!
2. **문의 댓글**: 상품에 대한 궁금한 점이나 의견을 자유롭게 남길 수 있답니다. 📝
3. **자유게시판**: 다양한 주제로 친구들과 이야기를 나누고, 정보를 공유할 수 있는 공간이에요! 🗣️

## 프로젝트 브랜치 구조 🏗️

프로젝트는 단계별로 나뉘어 있고, 각 스프린트 미션에 맞는 브랜치가 있어요. 각 브랜치를 통해 체계적으로 개발하며 학습할 수 있어요. 🎯

### 브랜치 설명

1. **basic (part1): 스프린트 미션 1 ~ 3 FE 요구사항**

- 기본적인 웹 애플리케이션 기능 구현을 위한 초기 브랜치입니다. HTML, CSS, JavaScript 등을 사용해 기본을 다집니다.
- **스프린트 미션 1부터 4까지**의 프론트엔드 내용을 포함하고 있어요.

2. **react (part2): 스프린트 미션 5 ~ 6 FE 요구사항**

- React 라이브러리를 사용해 프론트엔드 기능을 구현하는 브랜치입니다. 컴포넌트 기반 아키텍처와 상태 관리를 배웁니다.
- **스프린트 미션 5부터 6까지, 그 이후**의 프론트엔드 내용을 포함하고 있어요.
- 만약 스프린트 미션 9부터 프론트엔드 코드를 Next가 아닌 React로 구현하고 싶다면 react 브랜치를 사용해요.

3. **next (part3,4): 스프린트 미션 7 FE 요구사항~**

- Next.js를 사용해 서버 사이드 렌더링(SSR)과 정적 사이트 생성(SSG) 등 고급 기능을 구현합니다.
- **스프린트 미션 7부터** 시작하는 프론트엔드 내용을 포함하고 있어요.
- 만약 스프린트 미션 8부터 프론트엔드 코드를 React가 아닌 Next로 구현하고 싶다면 next 브랜치를 사용해요.


---

본 프로젝트는 [코드잇](https://www.codeit.kr)의 소유이며, 교육 목적으로만 사용됩니다. © 2026 Codeit. All rights reserved.
If you are developing a production application, we recommend using TypeScript with type-aware lint rules enabled. Check out the [TS template](https://github.com/vitejs/vite/tree/main/packages/create-vite/template-react-ts) for information on how to integrate TypeScript and [`typescript-eslint`](https://typescript-eslint.io) in your project.
20 changes: 20 additions & 0 deletions constant/constant.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/**
* 내부 API 서비스의 호스트 주소를 가르킵니다.
*
* ArticleService 및 ProductService 에서 내부 서비스를 호출 할 때, 반복적으로 사용되므로 공통 상수로 분리합니다.
*
* 값을 환경변수로 분리하여 관리하는 경우, 아래의 장점을 누릴 수 있으므로 살펴보시면 좋습니다.
*
* - 코드수정 없이 프로덕션, 스테이지, 로컬 환경별로 값을 다르게 가져갈 수 있습니다.
* - 코드수정 없이 프로그램이 참조하는 값을 인프라 레벨에서 빠르게 변경할 수 있습니다.
*
* 환경변수를 설정하는 방법은 아래 2가지가 있습니다.
* - 프로젝트 내 작성된 환경변수 파일을 작성하고 "dotenv" 라이브러리를 사용하여 읽어오기
* - 서버 컴퓨터의 환경변수를 직접 설정하기
*
* 전자의 경우에는 관리가 편리하고, 후자의 경우에는 환경변수 값이 코드에 노출되지 않아 보안상의 이점이 있습니다.
* 양쪽 방법은 서로 혼용하여 사용할 수 있으므로, 각 데이터의 성격에 따라 적절히 사용하시면 됩니다.
*
* ex) 민감한 시크릿 키는 인프라 레벨의 환경변수로 설정하고, API 주소와 같은 공개 정보는 프로젝트 내 환경변수 파일로 설정
*/
export const API_HOST = 'http://localhost:3000';
21 changes: 21 additions & 0 deletions eslint.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import js from '@eslint/js'
import globals from 'globals'
import reactHooks from 'eslint-plugin-react-hooks'
import reactRefresh from 'eslint-plugin-react-refresh'
import { defineConfig, globalIgnores } from 'eslint/config'

export default defineConfig([
globalIgnores(['dist']),
{
files: ['**/*.{js,jsx}'],
extends: [
js.configs.recommended,
reactHooks.configs.flat.recommended,
reactRefresh.configs.vite,
],
languageOptions: {
globals: globals.browser,
parserOptions: { ecmaFeatures: { jsx: true } },
},
},
])
18 changes: 18 additions & 0 deletions html/faq.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>FAQ - 판다마켓</title>

<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-01VFKQS9WR"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-01VFKQS9WR');
</script>
</head>
<body>
</body>
</html>
129 changes: 129 additions & 0 deletions html/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
<!DOCTYPE html>
<html lang="ko">

<head>
<meta charset="UTF-8">
<title>판다마켓</title>

<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-01VFKQS9WR"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-01VFKQS9WR');
</script>

<link rel="stylesheet" href="../css/reset.css">
<link rel="stylesheet" href="../css/index.css">
</head>

<body>

<!-- 헤더 -->
<div class="header">
<div class="inner">
<a class="logoLink" href="/">
<img src="../img/panda_logo.png" alt="판다마켓 로고">
<span>판다마켓</span>
</a>
<button class="loginButton" onclick="location.href='./login.html'">로그인</button>
</div>
</div>

<!-- 히어로 배너 -->
<div class="hero">
<div class="inner">
<div class="heroText">
<h1>일상의 모든 물건을<br>거래해 보세요</h1>
<button class="shopButton" onclick="location.href='/items'">구경해보러 가기</button>
</div>
<img class="heroImage" src="../img/panda_home.png" alt="판다 홈 이미지">
</div>
</div>

<!-- 피처 섹션 -->
<div class="featuresWrap">

<!-- 인기 상품 -->
<div class="featureRow">
<div class="inner">
<img class="featureImage" src="../img/panda_body1.png" alt="인기 상품">
<div class="featureText">
<p class="featureLabel">Hot Item</p>
<h2>인기 상품을<br>확인해 보세요</h2>
<p>가장 HOT한 중고거래 물품을<br>판다 마켓에서 확인해 보세요</p>
</div>
</div>
</div>

<!-- 상품 검색 (이미지 오른쪽) -->
<div class="featureRow reverse">
<div class="inner">
<img class="featureImage" src="../img/panda_body2.png" alt="상품 검색">
<div class="featureText">
<p class="featureLabel">Search</p>
<h2>구매를 원하는<br>상품을 검색하세요</h2>
<p>구매하고 싶은 물품은 검색해서<br>쉽게 찾아보세요</p>
</div>
</div>
</div>

<!-- 상품 등록 -->
<div class="featureRow">
<div class="inner">
<img class="featureImage" src="../img/panda_body3.png" alt="상품 등록">
<div class="featureText">
<p class="featureLabel">Register</p>
<h2>판매를 원하는<br>상품을 등록하세요</h2>
<p>어떤 물건이든 판매하고 싶은 상품을<br>쉽게 등록하세요</p>
</div>
</div>
</div>

</div>

<!-- 하단 신뢰 섹션 -->
<div class="trust">
<div class="inner">
<h2>믿을 수 있는<br>판다마켓 중고 거래</h2>
<img class="trustImage" src="../img/panda_footer.png" alt="판다마켓 중고 거래">
</div>
</div>

<!-- 푸터 -->
<div class="footer">
<div class="inner">

<div class="footerLeft">codeit-2024</div>

<div class="footerCenter">
<a class="footerLink" href="/privacy">Privacy Policy</a>
<a class="footerLink" href="/faq">FAQ</a>
</div>

<div class="footerRight">
<!-- 페이스북 -->
<a class="snsLink" href="https://www.facebook.com" target="_blank">
<img src="../img/ic_facebook.png" alt="페이스북">
</a>
<!-- 트위터 -->
<a class="snsLink" href="https://www.twitter.com" target="_blank">
<img src="../img/ic_twitter.png" alt="트위터">
</a>
<!-- 유튜브 -->
<a class="snsLink" href="https://www.youtube.com" target="_blank">
<img src="../img/ic_youtube.png" alt="유튜브">
</a>
<!-- 인스타그램 -->
<a class="snsLink" href="https://www.instagram.com" target="_blank">
<img src="../img/ic_instagram.png" alt="인스타그램">
</a>
</div>

</div>
</div>

</body>

</html>
103 changes: 103 additions & 0 deletions html/items.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>상품 목록 - 판다마켓</title>

<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-01VFKQS9WR"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-01VFKQS9WR');
</script>

<link rel="stylesheet" href="../css/reset.css">
<link rel="stylesheet" href="../css/items.css">
</head>
<body>

<!-- 헤더 -->
<div class="header">
<div class="inner">
<a class="logoLink" href="/">
<img src="../img/panda_logo.png" alt="판다마켓 로고">
<span>판다마켓</span>
</a>
<button class="loginButton" onclick="location.href='./login.html'">로그인</button>
</div>
</div>

<!-- 히어로 섹션 -->
<div class="hero">
<div class="inner">
<h1>일상의 모든 물건을<br>거래해 보세요</h1>
<button class="shopButton">구경해보러 가기</button>
<img class="heroImage" src="../img/panda_home.png" alt="판다 홈 이미지">
</div>
</div>

<!-- 메인 컨텐츠 -->
<div class="main">
<div class="inner">
<!-- Hot Item 섹션 -->
<div class="featureSection">
<h2>Hot Item</h2>
<p>인기 상품을 확인해 보세요</p>
</div>

<!-- 상품 그리드 -->
<div class="itemsGrid">
<div class="itemCard">
<img src="../img/panda_logo.png" alt="상품 이미지">
<h3>상품 이름</h3>
<p class="price">10,000원</p>
</div>
<div class="itemCard">
<img src="../img/panda_logo.png" alt="상품 이미지">
<h3>상품 이름</h3>
<p class="price">10,000원</p>
</div>
<div class="itemCard">
<img src="../img/panda_logo.png" alt="상품 이미지">
<h3>상품 이름</h3>
<p class="price">10,000원</p>
</div>
<div class="itemCard">
<img src="../img/panda_logo.png" alt="상품 이미지">
<h3>상품 이름</h3>
<p class="price">10,000원</p>
</div>
</div>
</div>
</div>

<!-- 푸터 -->
<div class="footer">
<div class="inner">
<div class="footerLeft">codeit-2024</div>
<div class="footerCenter">
<a class="footerLink" href="/privacy">Privacy Policy</a>
<a class="footerLink" href="/faq">FAQ</a>
</div>
<div class="footerRight">
<a class="snsLink" href="https://www.facebook.com" target="_blank">
<img src="../img/ic_facebook.png" alt="페이스북">
</a>
<a class="snsLink" href="https://www.twitter.com" target="_blank">
<img src="../img/ic_twitter.png" alt="트위터">
</a>
<a class="snsLink" href="https://www.youtube.com" target="_blank">
<img src="../img/ic_youtube.png" alt="유튜브">
</a>
<a class="snsLink" href="https://www.instagram.com" target="_blank">
<img src="../img/ic_instagram.png" alt="인스타그램">
</a>
</div>
</div>
</div>

</body>
</html>
Loading