Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
945a0fa
#1 [Docs] 홈/마이페이지 API 명세 및 ERD 문서 정리 (#2)
Dante0922 Mar 8, 2026
95f60dc
#3 [Docs] Oauth2 ERD 및 API 정의 (#4)
si-zero Mar 10, 2026
062f9fc
[Docs] 배틀, 시나리오, 투표, 태그 ERD 및 API 정의
jucheonsu Mar 11, 2026
6e83da8
#8 [Docs] user/oauth ERD 및 API 명세 정리 (#9)
Dante0922 Mar 11, 2026
deb598f
#7 [Chore] API 공통 응답 구조 및 기본 Config 세팅 (#11)
jucheonsu Mar 12, 2026
301f313
#10 [Docs] Perspective , Like , Comment ERD 및 API 정의 (#12)
HYH0804 Mar 12, 2026
b5efc6e
#13 [Docs] user/oauth API 응답 수정
si-zero Mar 13, 2026
ff0cdb7
#19 [Fix] 공통 응답 API 수정
si-zero Mar 13, 2026
f4da179
#21 [Feat] 사용자 도메인 및 API 구현 (#24)
Dante0922 Mar 14, 2026
8d57f66
#17 [Feat] Perspective 도메인 기능 개발 (#26)
HYH0804 Mar 15, 2026
e212667
#15 [Feat] 배틀, 태그, 투표 도메인 기능 개발 (#28)
jucheonsu Mar 16, 2026
6d63f2f
#18 [Feat] OAuth2.0 연동 및 구현
si-zero Mar 16, 2026
9d5cfe8
#25 [Feat] 관점 생성, 수정 시 GPT 검수 (#31)
HYH0804 Mar 18, 2026
3525090
#29 [Feat] 시나리오 도메인 기능 구현 (#32)
jucheonsu Mar 18, 2026
b37b1b0
#33 [Feat] 관리자 도메인 구축 및 다중 TTS 파이프라인 연동 (#35)
jucheonsu Mar 19, 2026
83d48df
#34 [CI/CD] 인라인 구축 및 자동 배포 설정 (#41)
si-zero Mar 22, 2026
688a528
#37 [Feat] 홈 API 및 공지 조회 기능 구현 (#38)
Dante0922 Mar 22, 2026
51abc56
#44 [Hotfix] 자동 배포 오류 수정 (#45)
si-zero Mar 22, 2026
cca46ae
#42 [Refactor] 전역 식별자 타입 변경 (UUID → Long) 및 BaseEntity 적용 (#47)
jucheonsu Mar 23, 2026
0b32654
#48 [Feat] 전역 API 로깅 및 JwtFilter 예외 응답 로직 구현
si-zero Mar 24, 2026
53a38b8
#46 [Feat] Fish Audio TTS 파이프라인 구축 및 S3 업로드 연동 (#50)
jucheonsu Mar 24, 2026
384b07b
#52 [Hotfix] 스웨거 연결 오류 수정
si-zero Mar 25, 2026
e51e645
#54 [CI/CD] Github Actions 배포 스크립트 개선 (#55)
si-zero Mar 25, 2026
b1251aa
#57 [CI/CD] Github Actions 수동 실행 추가
si-zero Mar 26, 2026
7c6919e
#55 [Hotfix] 특수문자 이스케이프(Escape) 및 데이터 절단 이슈 수정
si-zero Mar 26, 2026
747035f
#43 [Feat] 배틀 · 퀴즈 · 투표 타입 및 관리자 페이지 구현 (#56)
jucheonsu Mar 26, 2026
c9d8c71
#36 [Feat] user 도메인 리팩토링 및 마이페이지 API 구현 (#39)
Dante0922 Mar 28, 2026
fccaeba
#60 [Feat] AdMob 기능 및 SSV 검증 로직 추가 (#61)
si-zero Mar 28, 2026
b7f9fe7
#64 [Feat] Home/MyPage/Search 탭 개선 (#65)
Dante0922 Mar 28, 2026
005ac76
#51 [Refactor] User 엔티티 연결 및 전 도메인 TODO 해소 (#66)
Dante0922 Mar 28, 2026
a2b753e
#67 알림(Notification) 도메인 신설 및 notice 통합 (#68)
Dante0922 Mar 28, 2026
68453d0
#62 [Feat] 흥미로운 배틀 기능 추가 (#70)
HYH0804 Mar 29, 2026
3e2485c
[Hotfix] Home API NPE 수정 및 철학자 이미지 presigned URL 연동
Dante0922 Mar 29, 2026
0fc3f54
[Hotfix] HomeService stream NPE 수정 (#74)
Dante0922 Mar 29, 2026
0cfd73d
#63 [CI/CD] Nginx Reverse Proxy 및 Certbot 기반의 SSL 인증 (#71)
si-zero Mar 29, 2026
e551577
#75 [Hotfix] 브라우저 자체 차단 이슈 수정
si-zero Mar 29, 2026
8fa6b6e
#69 [Feat] S3 보안 처리 및 TTS 재사용 전략 도입, 관리자 폼 개편 및 N+1 개선 (#77)
jucheonsu Mar 29, 2026
29d6cc5
#22 [Rename] PICKE 패키지명 및 앱명 변경
jucheonsu Mar 30, 2026
db689fd
#79 [Chore] Admob API 접근을 위한 보안 예외 처리 및 환경 변수 처리
si-zero Mar 30, 2026
1d9dc15
#79 [Feat] 화이트리스트 추가
si-zero Mar 30, 2026
43214e3
#79 [Fix] 엔드포인트 오타 수정
si-zero Mar 30, 2026
11c4f99
#84 [Feat] UserBattle 도메인 구현 및 TTS 청취 기반 배틀 진행 단계 추적 시스템 도입 (#85)
jucheonsu Mar 30, 2026
f9f646d
#86 [Fix] characterType null 체크 추가 - 미설정 유저 NPE 수정 (#88)
HYH0804 Mar 30, 2026
e0efed2
#83 [Feat] Admob 크레딧 지급 로직 추가
si-zero Mar 30, 2026
3be7bdd
#90 [Comment] 서명 검증 로직 주석 처리
si-zero Mar 30, 2026
8d3b583
#87 [Feat] S3 Presigned URL 리소스 서빙 엔드포인트 도입 및 URL 변환 책임 이전 (#93)
jucheonsu Mar 30, 2026
b1fdc53
#94 [Feat] 관리자 투표 삭제 기능 구현 및 오디오 URL 시나리오 ID 변경 (#95)
jucheonsu Mar 30, 2026
8640a2b
#90 [Comment] Admob 등록 완료로 인한 주석 처리 취소
si-zero Mar 30, 2026
f8f9ee2
#96 [Feat] 시나리오 응답에 배틀 title 추가 및 화자명 자동 매핑 로직 개선 (#97)
jucheonsu Mar 31, 2026
f4b59b2
#98 [Refactor] AdMob 요청 DTO 변경 및 개선
si-zero Mar 31, 2026
abf8e38
#101 [Feat] 배틀 API 고도화, 성능 최적화, 홈 이미지 오류 해결 (#102)
jucheonsu Mar 31, 2026
c614e7f
#100 [Refactor] AdMob 유저ID 변환 코드 리팩토링
si-zero Mar 31, 2026
45c2696
#104 [Feat] 알림 상세·읽음 추적, 회원 탈퇴 사유 저장, 프로필/리캡 응답 개선 (#105)
Dante0922 Apr 1, 2026
1fb2f6b
#106 [Feat] 퀴즈 정답 여부, 토론 기록 고도화, 투표 로직 수정, 오디오 길이 오류 수정 (#107)
jucheonsu Apr 2, 2026
1f24cfc
#108 [Feat] 배틀 카테고리 5개 호출, 사전 투표 여러 번
si-zero Apr 2, 2026
b7da8ce
#111 [Hotfix] 중복 메소드 선언 제거
si-zero Apr 2, 2026
e713cf1
#110 [FIX] 흥미로운 배틀 추천 API 스웨거 에러 (#113)
HYH0804 Apr 2, 2026
d679d2f
[Fix] 관점 삭제 시 FK 제약 조건 위반 오류 수정 (#115)
HYH0804 Apr 2, 2026
5003613
#116 [Feat] 퀴즈 및 투표 API 구현, 배틀 리스트 타입 필터링 적용 및 성능 최적화 (#117)
jucheonsu Apr 2, 2026
3a1efc0
[FIX] 흥미로운 배틀 API Type 필터링 변경 (#119)
HYH0804 Apr 3, 2026
a6b7a0c
#120 [Feat] 홈 API 비회원 접근 지원 및 알림 읽음 여부 개선 (#121)
jucheonsu Apr 3, 2026
57ee6f9
#122 [Hotfix] 구글 소셜 로그인 오류 수정
si-zero Apr 3, 2026
4943712
#124 [Fix] 카카오 디코딩 문제 수정
si-zero Apr 3, 2026
522c6d1
[Feat] 콘텐츠 활동 내역 API 캐릭터 이미지 URL 추가 (#126)
Dante0922 Apr 3, 2026
4e4d474
[Fix] 검색 API BattleType.BATTLE 필터링 추가 (#127)
Dante0922 Apr 3, 2026
82eb968
#128 [Feat] 철학자 유형 계산 옵션 기반 개선, 투표 totalCount 추가, 홈 title/summary 수정 …
jucheonsu Apr 3, 2026
0e8e477
#130 [Feat] 퀴즈/투표 voteCount 캐싱 및 관리자 삭제 API 분리 (#131)
jucheonsu Apr 3, 2026
20cabb2
#114 [Refactor] 댓글 조회 API 설계 수정 (#132)
HYH0804 Apr 3, 2026
1fc5ef7
#133 [Refactor] 관리자 투표 삭제 배틀 단위로 변경 및 퀴즈/투표 타입 검증 추가 (#134)
jucheonsu Apr 3, 2026
7d305a8
#135 [Feat] 회원탈퇴 시 소셜 로그인 기록 삭제
si-zero Apr 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
53 changes: 53 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
name: Java CI/CD with Gradle

on:
push:
branches: [ "dev" ] # dev 브랜치에 푸시할 때 작동
workflow_dispatch: #

jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
cache: 'gradle' # 캐싱 추가: 빌드 속도가 훨씬 빨라집니다.

- name: Build with Gradle
run: |
chmod +x ./gradlew
./gradlew build -x test

- name: Create .env file from Secret
run: |
cat <<'EOF' > .env
${{ secrets.ENV_VARIABLES }}
EOF

- name: Copy JAR and .env to EC2
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_SSH_KEY }}
# -plain.jar는 배포에 필요 없으므로 제외합니다.
source: "build/libs/*-SNAPSHOT.jar, .env"
target: "~/"
strip_components: 2

- name: Deploy to EC2
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_SSH_KEY }}
script: |
fuser -k 8080/tcp || true

chmod +x ~/start.sh
~/start.sh
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,7 @@ out/
.vscode/

### Setting ###
.env
.env
postgres_data/
src/main/resources/application-local.yml
.claude
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ git push origin {생성한-브랜치-명}
## 📂 Project Structure

```
com.swyp.app
com.swyp.picke
├── AppApplication.java
├── domain
Expand Down
83 changes: 57 additions & 26 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,52 +1,83 @@
plugins {
id 'java'
id 'org.springframework.boot' version '4.0.3'
id 'io.spring.dependency-management' version '1.1.7'
id 'java'
id 'org.springframework.boot' version '3.5.11'
id 'io.spring.dependency-management' version '1.1.7'
}

group = 'com.swyp'
group = 'com.swyp.picke'
version = '0.0.1-SNAPSHOT'
description = 'SWYP APP 4th'
description = 'PICKE - SWYP APP 4th'

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

configurations {
compileOnly {
extendsFrom annotationProcessor
}
compileOnly {
extendsFrom annotationProcessor
}
}

repositories {
mavenCentral()
mavenCentral()
google()
}

dependencies {
// Web
implementation 'org.springframework.boot:spring-boot-starter-webmvc'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-validation'

// JPA
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

// Security
implementation 'org.springframework.boot:spring-boot-starter-security'
// Swagger
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:3.0.1'
// Lombok

// JWT
implementation 'io.jsonwebtoken:jjwt-api:0.12.6'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.12.6'
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.12.6'

// HTTP Client (소셜 API 호출용)
implementation 'org.springframework.boot:spring-boot-starter-webflux'

// AdMob SSV 검증을 위한 Tink 라이브러리
implementation 'com.google.crypto.tink:apps-rewardedads:1.9.1'
testImplementation 'com.google.crypto.tink:apps-rewardedads:1.9.1'

// Swagger
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.16'

// Google Cloud TTS
implementation 'com.google.cloud:google-cloud-texttospeech:2.58.0'

// AWS S3
implementation 'io.awspring.cloud:spring-cloud-aws-starter-s3:3.3.0'

// Lombok
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'

// devTools
developmentOnly 'org.springframework.boot:spring-boot-devtools'
// PostgreSQL
developmentOnly 'org.springframework.boot:spring-boot-devtools'

// DB
runtimeOnly 'org.postgresql:postgresql'
// Test
testImplementation 'org.springframework.boot:spring-boot-starter-data-jpa-test'
testImplementation 'org.springframework.boot:spring-boot-starter-security-test'
testImplementation 'org.springframework.boot:spring-boot-starter-webmvc-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
runtimeOnly 'com.h2database:h2'

// Thymeleaf
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'

// Test
testRuntimeOnly 'com.h2database:h2'
testImplementation 'org.springframework.boot:spring-boot-starter-test' // JPA, Web 테스트 기능 모두 포함
testImplementation 'org.springframework.security:spring-security-test' // 시큐리티 전용 테스트
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

tasks.named('test') {
useJUnitPlatform()
}
useJUnitPlatform()
}
21 changes: 21 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
version: '3.8'

services:
db:
image: postgres:15
container_name: pique-postgres-db
restart: always
environment:
POSTGRES_DB: ${DB_NAME}
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
ports:
- "${DB_PORT}:5432"
volumes:
- ./postgres_data:/var/lib/postgresql/data
networks:
- pique-network

networks:
pique-network:
driver: bridge
Loading
Loading