Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
609f45b
Initial commit from Create Next App
sungahChooo Nov 12, 2025
09cc55a
first commit
sungahChooo Nov 12, 2025
ed37f4d
Revise README with project and team details
sungahChooo Nov 12, 2025
619faf1
Add design mockup section to README
sungahChooo Nov 12, 2025
cb4d527
Update design link in README.md
sungahChooo Nov 13, 2025
0318f32
Update issue templates
sungahChooo Nov 13, 2025
d6232c9
Add pull request template in Korean
sungahChooo Nov 13, 2025
4fbba41
[#1]feat: 투표 페이지 개발
baekseungsun Nov 13, 2025
49a8b3d
[#1]refactor: 데모데이 투표 화면 마진 개선
baekseungsun Nov 13, 2025
cf0cf0c
chore: 개발 환경 세팅
sungahChooo Nov 13, 2025
227fcd6
Merge branch 'main' of https://github.com/DiggIndieTeam/next-vote-22nd
sungahChooo Nov 13, 2025
1aedfa1
[#2]feat: 랜딩페이지 구현
sungahChooo Nov 13, 2025
03c1233
[#2] login 페이지 구현
sungahChooo Nov 14, 2025
433ce21
[#2] feat: Register페이지 구현
sungahChooo Nov 14, 2025
fc475b1
[#2] style: Register페이지 스타일 변경
sungahChooo Nov 14, 2025
62a3fc1
[#2] refact: input 섹션 컴포넌트화
sungahChooo Nov 14, 2025
74eec4c
[#2]feat: 로그인 처리 개발
sungahChooo Nov 14, 2025
9ba9145
[#2] feat: 로그인 후 화면 구현
sungahChooo Nov 15, 2025
8f5674a
[#2] feat: 회원가입 기능 구현
sungahChooo Nov 15, 2025
824d18c
[#4]feat: 파트장/데모데이 투표 개발
baekseungsun Nov 15, 2025
13cd4e4
Merge pull request #3 from DiggIndieTeam/feat/login
sungahChooo Nov 15, 2025
8d0bfc1
[#4]refactor: 화면 크기 조정
baekseungsun Nov 15, 2025
9ce71f9
[#4]refactor: 레이아웃 수정
baekseungsun Nov 15, 2025
456c911
[#4]refactor: 애니메이션 수정
baekseungsun Nov 15, 2025
338e2df
Merge branch 'dev' into feat/partDemoVote
baekseungsun Nov 15, 2025
8790762
[#4]refactor: global css 수정
baekseungsun Nov 15, 2025
b15bf6d
Merge branch 'feat/partDemoVote' of https://github.com/DiggIndieTeam/…
baekseungsun Nov 15, 2025
b2cba27
[#4]refactor: partVote 에러 수정
baekseungsun Nov 15, 2025
39e36af
Merge pull request #5 from DiggIndieTeam/feat/partDemoVote
baekseungsun Nov 15, 2025
54bc3ea
[#7]refactor: FE, BE 투표 애니매이션 수정
baekseungsun Nov 15, 2025
5a7599c
Merge pull request #8 from DiggIndieTeam/refactor/animation
baekseungsun Nov 15, 2025
fd207a1
chore: 라우팅 구조화
sungahChooo Nov 15, 2025
e17cc3b
fix: use client 선언 추가
sungahChooo Nov 15, 2025
34b62b4
fix: 파일 내 함수명오류로 인한 무제 해결
sungahChooo Nov 15, 2025
dfe2354
fix: 대소문자 미구분으로 인한 문제 해결
sungahChooo Nov 15, 2025
4347fc1
fix: import 경로 문제 해결
sungahChooo Nov 15, 2025
893072f
fix: import 경로 문제 재해결
sungahChooo Nov 15, 2025
bf9bf52
fix: 파일명 대문자로 변경
sungahChooo Nov 16, 2025
506e97f
fix: SubmitButton파일명 변경
sungahChooo Nov 16, 2025
5f60050
chore: .next 폴더 삭제 후 재빌드
sungahChooo Nov 16, 2025
cec8db6
chore: 캐시 삭제 후 재빌드
sungahChooo Nov 16, 2025
731da9a
fix: 충돌을 피하기 위한 폴더 구조 변경
sungahChooo Nov 16, 2025
84c4a90
fix: 파일 경로 충돌 방지를 위한 폴더 재구조화
sungahChooo Nov 16, 2025
79fe2ca
fix: 폴더 변경 시 발생한 오류 해결
sungahChooo Nov 16, 2025
1680afa
chore: 복제된 폴더 및 페이지삭제
sungahChooo Nov 16, 2025
73e3abd
fix: 폴더 재구조화
sungahChooo Nov 16, 2025
fc5c070
fix: 라우팅 충돌 오류 해결
sungahChooo Nov 16, 2025
d22d187
fix: import 문 수정
sungahChooo Nov 16, 2025
3dd5b78
chore: 캐시 삭제 후 재배포
sungahChooo Nov 16, 2025
86307e7
chore: import 방식 변경
sungahChooo Nov 16, 2025
323b3da
Normalize lib filenames and fix exports casing for cross-platform builds
sungahChooo Nov 16, 2025
08b2480
fix: 데모 데이투표 라우팅 오류 수정
sungahChooo Nov 18, 2025
255bf98
Merge remote-tracking branch 'upstream/main' into dev
sungahChooo Nov 18, 2025
10fb351
Merge pull request #1 from DiggIndie/dev
sungahChooo Nov 29, 2025
8041d95
chore: zod 라이브러리 설치
sungahChooo Dec 18, 2025
7364baf
feat: 로그인 유효성 검사 기능 구현
sungahChooo Dec 18, 2025
3c8c671
feat: 회원가입 유효성 검사
sungahChooo Dec 18, 2025
2793f17
fix: 로그인 유효성 검사 버그 해결
sungahChooo Dec 18, 2025
9123311
feat: 로그인 API 연결
sungahChooo Dec 19, 2025
a6dd954
feat: 회원가입 api 연동
sungahChooo Dec 19, 2025
f0c5cc6
feat: 비로그인 상태 시 투표 페이지 접근 불가 기능
sungahChooo Dec 19, 2025
6eced26
feat:로그아웃 API 연동
sungahChooo Dec 19, 2025
dc6d75f
feat: 결과 화면 API 연동 완료
baekseungsun Dec 19, 2025
f8ab2ca
Merge pull request #2 from DiggIndie/feat/logout
sungahChooo Dec 20, 2025
fdb158b
feat: 득표수 표기
baekseungsun Dec 20, 2025
99f669b
Merge branch 'dev' into feat/result
baekseungsun Dec 20, 2025
10af1c8
Merge pull request #3 from DiggIndie/feat/result
baekseungsun Dec 20, 2025
18a13b9
refactor: 로그인/투표 api 오류 해결
baekseungsun Dec 20, 2025
8539d3f
Merge pull request #4 from DiggIndie/refactor/API
sungahChooo Dec 20, 2025
7f07650
fix: 로그아웃 API 연동 오류 수정
sungahChooo Dec 20, 2025
af403e9
Merge pull request #5 from DiggIndie/refact/logout
sungahChooo Dec 20, 2025
7ef0dbd
chore: next.js 최신 업데이트
sungahChooo Dec 20, 2025
99d79fb
파트 결과 페이지 컴포넌트화
sungahChooo Dec 20, 2025
7c09b5c
chore: update next.js to fix CVE"
sungahChooo Dec 20, 2025
94bd4d2
chore: update next.js
sungahChooo Dec 20, 2025
ee60e11
Fix React Server Components CVE vulnerabilities
vercel[bot] Dec 20, 2025
22ef1ce
Merge pull request #1 from baekseungsun/vercel/react-server-component…
baekseungsun Dec 20, 2025
361d6c3
Merge branch 'main' into dev
baekseungsun Dec 20, 2025
db67d26
refactor: 데모데이 득표수
baekseungsun Dec 21, 2025
06b9545
Merge pull request #7 from DiggIndie/refactor/results
baekseungsun Dec 21, 2025
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
32 changes: 32 additions & 0 deletions .github/ISSUE_TEMPLATE/커스텀-이슈-템플릿.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
---
name: 커스텀 이슈 템플
about: 해당 이슈 생성 템플릿을 사용하여 이슈를 생성해주세요.
title: "[♻️ refactor /✨ feat /\U0001F41B bug /\U0001F527 fix] 이슈 제목"
labels: ''
assignees: ''

---

---
name: 이슈 생성 템플릿
about: 해당 이슈 생성 템플릿을 사용하여 이슈를 생성해주세요.
title: "[♻️ refactor /✨ feat /🐛 bug /🔧 fix]
이슈 제목"
labels: ''
assignees: ''

---

📌 이슈 내용
------------
이슈를 설명해주세요.


📝 작업 내용
------------
- [ ] 작업 1
- [ ] 작업 2


✨ 참고 사항
------------
31 changes: 31 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# PR 템플릿
### 체크리스트!
- [ ] ✅ base가 dev가 맞나요?
- [ ] 🔀 PR 제목의 형식을 잘 작성했나요?
- [ ] 🧹 불필요한 코드는 제거했나요?
- [ ] 💭 이슈는 등록했나요?
- [ ] 🏷️ 라벨은 등록했나요?


### 작업 내역
<!-- 어떻게 문제를 해결하였는지 -->




### 피드백을 받고 싶은 부분
<!-- 작업 후 기대 동작(스크린샷) -->




### PR 특이 사항
<!-- 어떤 부분에 리뷰어가 집중하면 좋을까요? -->




### 특이 사항 :
Issue Number: 자신이 개발 전에 올린 이슈번호

#### close: 자신이 개발 전에 올린 이슈번호
41 changes: 41 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/.pnp
.pnp.*
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/versions

# testing
/coverage

# next.js
/.next/
/out/

# production
/build

# misc
.DS_Store
*.pem

# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*

# env files (can opt-in for committing if needed)
.env*

# vercel
.vercel

# typescript
*.tsbuildinfo
next-env.d.ts
8 changes: 8 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

60 changes: 60 additions & 0 deletions .idea/codeStyles/Project.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions .idea/codeStyles/codeStyleConfig.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/inspectionProfiles/Project_Default.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 12 additions & 0 deletions .idea/next-vote-22nd.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/prettier.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 12 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{

"arrowParens": "always",
"bracketSpacing": true,
"endOfLine": "lf",
"printWidth": 120,
"semi": true,
"singleQuote": true,
"tabWidth": 2,
"trailingComma": "all",
"useTabs": false
}
2 changes: 2 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
{
}
Binary file added 7주차 PR.docx
Binary file not shown.
Binary file added 7주차PR - 2.docx
Binary file not shown.
96 changes: 10 additions & 86 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,92 +1,16 @@
# next-vote-22nd
# Team DiggIndie

## **서론**
## 팀원

안녕하세요! 프론트엔드 운영진 권동욱입니다. 🍀
벌써 마지막 과제에 도달했네요. 이번 스터디는 특별히 **백엔드 팀원들과 함께하는 협업 과제**로 준비했습니다.
- **Front-end**
- 백승선
- 조성아

현대 웹 개발에서는 REST API가 데이터 통신의 핵심으로 자리 잡으면서, 프론트엔드와 백엔드 간의 협업이 더욱 중요해졌습니다. 백엔드는 API를 통해 데이터를 제공하고, 프론트엔드는 이를 기반으로 사용자 경험을 책임집니다. 따라서 API를 잘 활용하고 백엔드 개발자와 원활히 소통하는 능력은 필수적인 스킬입니다.
## 프로젝트 소개

이번 과제는 앞으로 팀 프로젝트에서 **실제로 백엔드와 협업하기 전 연습을 해보는 기회**입니다. Next.js를 활용해 **투표 기능**을 가진 애플리케이션을 제작하면서 백엔드와의 소통, 역할 분담, 데이터 흐름을 다루는 경험을 쌓아 보세요. 이 경험은 추후 팀 프로젝트에서 더욱 원활한 협력을 가능하게 할 것입니다.
- 투표 시스템 개발
- 백엔드/프론트엔드 협업 프로젝트

여러분의 멋진 결과물을 기대하며 마지막 과제를 응원합니다. 화이팅! 🔥
## 디자인 시안

---

## **과제**

### **목표**

- REST API를 활용하여 서버와의 통신 방식을 이해합니다.
- JavaScript의 비동기 처리 방식(`async/await`, Promise)을 익힙니다.
- API 문서를 바탕으로 백엔드와 소통하는 방법을 학습합니다.
- 팀 내 협업을 통해 효율적인 역할 분담을 고민하고 적용합니다.

---

### **기한**

- **2025년 12월 20일 토요일**까지 2차 필수 구현 사항까지 전부 적용된 최종 결과물을 제출해주세요.

---

### **1차 필수 구현 사항**

1. **프로젝트 세팅**
- Next.js의 특성을 고려하여 효과적인 폴더 구조를 고민해 봅니다.
- API 통신, 스타일링, 전역 상태 관리 및 기타 라이브러리 등을 팀원과 상의하여 세팅합니다.
- **Github organization을 사용합니다.**

2. **퍼블리싱**
- 프로젝트에 필요한 모든 화면을 퍼블리싱합니다.
- 다양한 디바이스에서 최적의 사용자 경험을 제공하기 위해 반응형 디자인을 적용합니다.

3. **로그인 기능**
- 사용자는 아이디와 비밀번호를 입력하여 로그인할 수 있습니다.
- 로그인 시 JWT를 통해 인증을 처리합니다.
- 아이디 또는 비밀번호가 틀렸을 경우, 에러 메시지를 표시합니다.
- 로그아웃 기능을 구현합니다.
- **백에서 서버 배포가 안 되었을 경우**에는 다음 주로 넘겨도 괜찮습니다.

### **2차 필수 구현 사항**

1. **투표 기능**
- 로그인한 사용자는 투표에 참여할 수 있습니다.
- 각 후보에 대한 투표 수를 실시간으로 확인할 수 있습니다.
- 사용자는 한 번만 투표할 수 있으며, 중복 투표를 방지합니다.

2. **후보 목록 조회**
- 모든 사용자는 후보자의 목록과 상세 정보를 확인할 수 있습니다.
- 후보자의 이름, 사진, 소개 등을 표시합니다.

3. **투표 결과 조회**
- 투표 종료 후, 모든 사용자는 최종 투표 결과를 확인할 수 있습니다.
- 각 후보자의 득표 수와 득표율을 시각적으로 표현합니다.

4. **에러 처리**
- 서버 오류, 네트워크 문제 등 다양한 에러 상황에 대한 처리를 구현합니다.
- 사용자에게 이해하기 쉬운 에러 메시지를 제공합니다.

---

### **디자인 참고**

다음의 리소스를 참고해 UI/UX를 개선해보세요:
- [디자인 레퍼런스1](https://www.figma.com/design/7xoPYTjMHcwPk2yl92Eynx/%ED%98%91%EB%8F%99%EA%B3%BC%EC%A0%9C-%EB%A0%88%ED%8D%BC%EB%9F%B0%EC%8A%A4?node-id=0-1&node-type=canvas)
- [디자인 레퍼런스2](https://www.figma.com/design/XpKkyWcguIFY9QzWWJHOyL/%ED%98%91%EB%8F%99%EA%B3%BC%EC%A0%9C-%EB%A0%88%ED%8D%BC%EB%9F%B0%EC%8A%A4?node-id=0-1)
- [디자인 레퍼런스3](https://www.figma.com/design/12WK4MEhjwNmt89HkRu8Gp/%EB%B0%94%EB%A6%AC%EB%B0%94%EB%A6%AC-%ED%88%AC%ED%91%9C)
- [디자인 레퍼런스4](https://www.figma.com/design/qsTGeBRrKWiWE04eVOTFQ9/CEOS-CupfeeDeal-Vote?node-id=38-503&p=f&t=sM5p1Gw4hA5G5H5D-0)

20기 과제
- [CupfeeDeal](https://github.com/CEOS-Developers/next-vote-20th/pull/6)
- [케이크WAY](https://github.com/CEOS-Developers/next-vote-20th/pull/5)
- [페달지니](https://github.com/CEOS-Developers/next-vote-20th/pull/2)

21기 과제
- [프로메사](https://github.com/CEOS-Developers/next-vote-21th/pull/3)
- [하니홈](https://github.com/CEOS-Developers/next-vote-21th/pull/5)

### **선택 사항**

- API 요청 방식은 자유롭게 선택 가능 (예: Fetch API, axios 등).
- 최신 자바스크립트 스타일에 익숙해지기 위해 `Promise.then()` 대신 `async/await`를 사용해 보세요.
[디자인 시안](https://www.figma.com/design/XpKkyWcguIFY9QzWWJHOyL/%ED%98%91%EB%8F%99%EA%B3%BC%EC%A0%9C-%EB%A0%88%ED%8D%BC%EB%9F%B0%EC%8A%A4?node-id=4-201&t=lChN9ofzhVOO7A64-0)
38 changes: 38 additions & 0 deletions api/client.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import axios from 'axios';
import { useAuth } from '@/auth/authStore';

const API_BASE = process.env.NEXT_PUBLIC_BASE_URL;

// 인증 필요 없는 API
export const apiPublic = axios.create({
baseURL: API_BASE,
withCredentials: true, // refresh token 쿠키 전송
});

// 인증 필요한 API
export const apiPrivate = axios.create({
baseURL: API_BASE,
withCredentials: true,
});

// 요청 인터셉터: 토큰 자동 부착
apiPrivate.interceptors.request.use((config) => {
const token = useAuth.getState().getToken();
if (token) {
config.headers = config.headers ?? {};
config.headers.Authorization = `Bearer ${token}`;
}
return config;
});

// 응답 인터셉터: 401 → 로그아웃 유도 (필요 시 확장: 리프레시 등)
apiPrivate.interceptors.response.use(
(res) => res,
(err) => {
if (err?.response?.status === 401) {
useAuth.getState().logout();
// 여기서 라우터 접근이 어려우므로, 화면에서는 isAuthed false로 자연스런 리다이렉트 유도
}
return Promise.reject(err);
},
);
Loading