Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
52525a8
chore: spring boot 초기 설정
ba2slk Nov 24, 2025
9871103
fix: 빌드 오류 수정
ba2slk Nov 24, 2025
f33b6f6
feat : 파일 구조 세팅
gilbert09031 Nov 24, 2025
3644396
feat: Member 엔티티 추가
ba2slk Nov 24, 2025
b9ccb86
feat: 회원가입 및 JWT 로그인 구현
ba2slk Nov 29, 2025
02b9e62
feat: 전역 예외처리 구현
ba2slk Nov 29, 2025
bbe0b3a
Merge pull request #1 from CEOS-22nd-CatchUP/feat/auth
ba2slk Nov 29, 2025
49c7f19
feat : 투표 기능 구현
gilbert09031 Dec 10, 2025
279bb6e
chore: swagger 설정
ba2slk Dec 18, 2025
5232c0f
Merge pull request #2 from CEOS-22nd-CatchUP/feat/vote
ba2slk Dec 18, 2025
8e2e53e
chore: application.yml 환경변수 마스킹
ba2slk Dec 18, 2025
4f8e04d
Merge pull request #3 from CEOS-22nd-CatchUP/feat/swagger
ba2slk Dec 18, 2025
d8bc9b4
chore: cors 설정
ba2slk Dec 20, 2025
12b8e30
Merge pull request #4 from CEOS-22nd-CatchUP/feat/cors
ba2slk Dec 20, 2025
97b24ac
refactor : 후보자 응답 형식 수정
gilbert09031 Dec 20, 2025
8fff2e7
chore: 오타 수정
ba2slk Dec 20, 2025
0336e81
feat : Member Status 엔드포인트 추가
gilbert09031 Dec 20, 2025
0041dee
Merge remote-tracking branch 'origin/master'
gilbert09031 Dec 20, 2025
c20ba48
chore: front Origin 추가
ba2slk Dec 20, 2025
0b61440
feat : Member Status 엔드포인트 추가
gilbert09031 Dec 20, 2025
96647eb
feat: /me 응답에 part 추가
ba2slk Dec 20, 2025
a626e2f
fix: 회원가입 시 team 매핑
ba2slk Dec 20, 2025
536e94f
fix: Team 매핑 관련 회원가입 오류 수정
ba2slk Dec 20, 2025
828cd89
feat: 총 득표수 집계 api 추가
ba2slk Dec 20, 2025
bbef05a
chore: 임시 팀 목록 추가
ba2slk Dec 20, 2025
979470f
fix: 후보 팀 목록 조회 api 수정
ba2slk Dec 20, 2025
bc3ac4d
feat: 투표 결과 조회 api 분리
ba2slk Dec 21, 2025
c096b4f
docs: README 작성
ba2slk Dec 22, 2025
80364ea
docs: README 수정
ba2slk Dec 22, 2025
c8f74e4
docs: 데모 url 추가
ba2slk Dec 22, 2025
65f09d3
chore: 오타 수정
ba2slk Dec 22, 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
3 changes: 3 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
/gradlew text eol=lf
*.bat text eol=crlf
*.jar binary
39 changes: 39 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
HELP.md
.gradle
build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**/build/
!**/src/test/**/build/

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
bin/
!**/src/main/**/bin/
!**/src/test/**/bin/

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
out/
!**/src/main/**/out/
!**/src/test/**/out/

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/

### VS Code ###
.vscode/

.env
35 changes: 35 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,37 @@
# spring-vote-22nd
ceos back-end 22nd voting service project

[CEOS 22기 파트장 & 팀 투표 하러 가기](https://next-vote-22nd-inky.vercel.app/)

## Swagger
https://ceos-22nd-catchup.github.io/swagger-ui/

## ERD
<img width="1453" height="906" alt="image" src="https://github.com/user-attachments/assets/5241ad10-47b1-4118-b647-10e80ed5dc1a" />

## 기능
### 로그인
- JWT
- AccessToken 기반
- 일회성 서비스임을 고려하여 RefreshToken 및 로그아웃 미구현

### 회원가입
- 아이디, 비밀번호, 이메일, 파트, 이름, 팀
- 아이디와 이메일 중복 여부는 회원가입 요청 시점에서 일괄 검사
- 파트와 팀은 각각 PartType과 TeamType으로 정의해서 일관성 확보

### 투표
- 레포지토리 단에서 득표 순으로 내림차순 정렬하여 반환.
- 파트장 투표와 팀 투표는 반드시 로그인한 사용자만 가능.
- 한 아이디 당 한 번만 투표 가능 (1인 1표).
- 투표 페이지에 접근할 수는 있지만, 투표에 참여할 수는 없음.
- 파트장 투표 시 본인의 파트에 해당하는 파트장 투표만 가능함.
- 프론트엔드에서 로그인한 사용자의 파트 소속을 확인해서 애초에 백엔드 투표 페이지에 접근할 수 없도록 조치함.
- 다만 백엔드에서도 이를 검증하는 로직을 추가하였음.
- 데모데이 투표 시 본인이 속한 팀에는 투표를 할 수 없음.

## 서버 배포 전략
- OCI 인스턴스
- 수동 배포
- Spring과 MySQL 서버만 필요한 간단한 구조였음
- 이미 OCI 환경에 기존에 구축한 환경으로 서버를 구동하기 충분했기 때문에 Github Action을 통한 Docker 컨테이너 기반 배포 자동화를 도입하지는 않았음
53 changes: 53 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
plugins {
id 'java'
id 'org.springframework.boot' version '3.5.7'
id 'io.spring.dependency-management' version '1.1.7'
}

group = 'com.ceos22nd'
version = '0.0.1-SNAPSHOT'
description = 'ceos 22nd voting system'

java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}

configurations {
compileOnly {
extendsFrom annotationProcessor
}
}

repositories {
mavenCentral()
}

dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.6'


compileOnly 'org.projectlombok:lombok'

runtimeOnly 'com.mysql:mysql-connector-j'

annotationProcessor 'org.projectlombok:lombok'

testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'

testRuntimeOnly 'org.junit.platform:junit-platform-launcher'

implementation 'io.jsonwebtoken:jjwt-api:0.11.5'
runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.5'
runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.5'
}

tasks.named('test') {
useJUnitPlatform()
}
Binary file added gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
7 changes: 7 additions & 0 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
248 changes: 248 additions & 0 deletions gradlew

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

Loading