Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
150 commits
Select commit Hold shift + click to select a range
aad092b
chore: .DS_Store 제외 및 캐시 삭제
yousung1020 Jan 5, 2026
8b7882b
test: PR 테스트
yousung1020 Jan 6, 2026
b711de6
Update feature issue template
yousung1020 Jan 8, 2026
f2d055e
feat: swagger ui 초기 설정 및 spring security 초기 설정 및 api payload 초기 설정 완료…
yousung1020 Jan 10, 2026
ff1fc15
security: application.yaml 파일 경로 추적 제외(application-sample.yaml 사용 예정)
yousung1020 Jan 16, 2026
ce6504d
Merge branch 'develop' of https://github.com/UMCTeamPace/Pace_server …
yousung1020 Jan 16, 2026
25cf7f1
chore: 패키지 구조 초안 및 빈 파일 추가
yousung1020 Jan 16, 2026
883c026
[infra] CI/CD 파이프라인 구축 완료 및 AWS EC2로 배포 자동화 완료 (#8)
yousung1020 Jan 17, 2026
f400ea3
[feat] Route / RouteDetail 엔티티 추가 (#9)
dmlwjds2 Jan 19, 2026
681861a
feat: 카카오 소셜 로그인 구현 및 회원 엔티티 작성 및 리프레쉬 토큰을 통한 액세스 토큰 재발행 및 등등 (#10)
yousung1020 Jan 19, 2026
c5c4e9a
feat: 일정 생성 api 구현
bini0918 Jan 19, 2026
0788497
충돌 해결
bini0918 Jan 19, 2026
2627af5
feat: ScheduleController 스웨거 어노테이션 설정
bini0918 Jan 19, 2026
222cc2d
hotfix: ci/cd를 위한 환경 변수 세팅 및 .gitignore에 application.yaml 제외 (#17)
yousung1020 Jan 19, 2026
5dc72f9
chore: docker-compose.yml 충돌 해결
yousung1020 Jan 19, 2026
f64df7d
Merge branch 'develop' of https://github.com/UMCTeamPace/Pace_server …
yousung1020 Jan 19, 2026
1a3d75f
test: ci/cd 테스트
yousung1020 Jan 19, 2026
546d199
docs: PR 탬플릿 수정
yousung1020 Jan 19, 2026
23b1795
feat: 일정 생성 API 구현 완료 및 엔티티 매핑 수정
bini0918 Jan 19, 2026
5f8d315
[docs] pr template 수정
dmlwjds2 Jan 20, 2026
604607d
Merge pull request #15 from UMCTeamPace/feat/#11-add-schedule
bini0918 Jan 20, 2026
bda329e
[feat] 경로 res/req DTO 구현
dmlwjds2 Jan 20, 2026
0966f50
복구:삭제된 코드 추가
dmlwjds2 Jan 20, 2026
0b28e24
feat: 일정 상세조회 api 구현
bini0918 Jan 20, 2026
9b246e3
Feat/#8 settings (#18)
Kim-DongH Jan 20, 2026
5a20e32
feat: 로그아웃 및 탈퇴 기능 구현 및 리팩토링 (#22)
yousung1020 Jan 22, 2026
b5c87f7
refactor:ScheduleResDto 구조 개선
bini0918 Jan 22, 2026
59ee248
충돌 해결
bini0918 Jan 22, 2026
bca7d9b
Merge pull request #21 from UMCTeamPace/feat/#19-schedule-detail-view
bini0918 Jan 22, 2026
3dbebd9
fix: pr 리뷰 반영
dmlwjds2 Jan 22, 2026
83d6301
Merge pull request #20 from UMCTeamPace/feature/16-route-DTO
dmlwjds2 Jan 22, 2026
a388f31
hotfix: 이상한 파일 제거 및 리팩토링
yousung1020 Jan 22, 2026
5f1e523
feat: 기간별 일정 목록조회 api 구현 (#25)
bini0918 Jan 23, 2026
936da34
Feat/#26 onboarding
Kim-DongH Jan 23, 2026
af82d46
[feat] 버스 및 지하철 중간역 찾기 로직 구현 (#28)
yousung1020 Jan 24, 2026
8d27991
chore: querydsl 설정 및 BaseEntity 중복 제거 (#31)
yousung1020 Jan 27, 2026
f32211f
feat: 일정 삭제
bini0918 Jan 27, 2026
7acf822
refactor: 리뷰 반영
bini0918 Jan 28, 2026
731f6fa
feat: 일정 삭제 (#34)
bini0918 Jan 28, 2026
e2b89e0
refactor: auth 패키지의 dto 구조 리팩토링 (#36)
yousung1020 Jan 28, 2026
942a52d
feat: 장소 저장 API 기능 구현 (#39)
yousung1020 Jan 28, 2026
a4f2511
feat: 장소 조회 API 기능 구현 및 보안 관련 이슈 해결 (#41)
yousung1020 Jan 28, 2026
a8d51b3
feat: 반복 일정 생성 기능
bini0918 Jan 29, 2026
6fb7aa4
충돌해결
bini0918 Jan 29, 2026
f694b49
refactor: 리뷰 반영
bini0918 Jan 29, 2026
023b3ff
refactor: 리뷰 반영
bini0918 Jan 29, 2026
26d0d00
Merge pull request #45 from UMCTeamPace/feat/#38-repeat-schedule
bini0918 Jan 29, 2026
22feae1
feat: 일정 수정 api 구현
bini0918 Jan 29, 2026
669b8b2
Refactor/#42 onboarding setting (#44)
Kim-DongH Jan 29, 2026
9e9b055
feat: 장소 삭제 API 기능 구현 및 PlaceGroup 엔티티 추가 (#53)
yousung1020 Jan 29, 2026
41df425
Feat/#34 schedule update route (#50)
Kim-DongH Jan 29, 2026
4ae67bd
feat: 그룹 저장 API 기능 구현 (#57)
yousung1020 Jan 29, 2026
b39f483
refactor: 리뷰 반영 수정
bini0918 Jan 29, 2026
e643248
충돌해결
bini0918 Jan 29, 2026
334f904
docs: README.md 꾸미기 초안 (#58)
yousung1020 Jan 30, 2026
4ed090c
Merge branch 'main' into develop
yousung1020 Jan 30, 2026
403434b
Merge pull request #51 from UMCTeamPace/feat/#46-update-schedule
bini0918 Jan 30, 2026
ab9f560
feat: 그룹 조회 API 기능 구현 (#61)
yousung1020 Jan 30, 2026
54758f9
feat: 그룹 수정 API 기능 구현 (#63)
yousung1020 Jan 30, 2026
68c9f3a
feat: 그룹 삭제 API 기능 구현 (#66)
yousung1020 Jan 31, 2026
98df8d1
feat: 경로 구글 api 연결 및 값 매핑
dmlwjds2 Jan 31, 2026
df2d122
Feat/#38 schedule delete route(Feat/#34 schedule update route) (#64)
Kim-DongH Jan 31, 2026
e26aa0b
feat: 장소 이동 API 기능 구현 (#69)
yousung1020 Jan 31, 2026
daf8850
Refactor/#42 onboarding setting (#70)
Kim-DongH Jan 31, 2026
cb13d94
fix: pr review 추천코드 반영
dmlwjds2 Jan 31, 2026
ad2945f
refactor: pr review 반명/non-block 부분 제외
dmlwjds2 Jan 31, 2026
815046f
refactor: pr review 반명/non-block 부분 제외
dmlwjds2 Jan 31, 2026
6d57329
Merge pull request #67 from UMCTeamPace/feature/30-route-api
dmlwjds2 Jan 31, 2026
d44ec3d
feat: 경로 일정 -> 일반 일정 전환 API 구현 (#73)
Kim-DongH Feb 1, 2026
f7a7412
feat: 장소 정렬 기준별 조회 기능 구현 (#75)
yousung1020 Feb 2, 2026
ef99218
infra: 추가된 환경변수를 docker-compose.yml과 deploy.yml에 반영
yousung1020 Feb 2, 2026
dc0a167
feat: 일정 삭제 api
bini0918 Feb 2, 2026
c47a704
refactor: 코드 리뷰 반영
bini0918 Feb 2, 2026
742f4c0
refactor: 리뷰 반영 수정
bini0918 Feb 2, 2026
9d51291
feat:내부경로 요청/ 응답과 구글 api 요청/응답 통일
dmlwjds2 Feb 2, 2026
d4fcc79
feat: 온보딩 미완료 시 메인 페이지로 넘어갈 수 없도록 플래그 수정 (#79)
yousung1020 Feb 3, 2026
991c732
Merge pull request #78 from UMCTeamPace/feat/#77-delete-schedules
bini0918 Feb 3, 2026
987371f
infra: redis 의존성 추가 및 docker-compose.yml에 반영 (#81)
yousung1020 Feb 4, 2026
8b09fe3
hotfix: 배포 오류 해결
yousung1020 Feb 4, 2026
7e2ea72
refactor:pr 리뷰 반영 수정
dmlwjds2 Feb 5, 2026
12042d5
Merge pull request #80 from UMCTeamPace/feature/71-route-service
dmlwjds2 Feb 5, 2026
653dc4e
feat: 일정 조회 시 경로 상세 정보 매핑 추가
bini0918 Feb 5, 2026
745c565
refactor: ScheduleResDtoConverter 메서드 추출
bini0918 Feb 5, 2026
b5658dd
feat: jwt 토큰 블랙리스트 추가 기능 구현 (#83)
yousung1020 Feb 5, 2026
ab0b065
feat:중간역/polyline 추가
dmlwjds2 Feb 5, 2026
cc6cd15
refactor: pr 리뷰 반영 수정
dmlwjds2 Feb 5, 2026
155e6d4
Merge pull request #88 from UMCTeamPace/feauture/81-route-refactor
dmlwjds2 Feb 5, 2026
9c804e7
refactor: 그룹 조회 시 해당 장소의 개수까지 카운팅 기능 구현 완료 (#90)
yousung1020 Feb 5, 2026
816f243
refactor: 리뷰 반영 수정
bini0918 Feb 6, 2026
0bc101b
Merge pull request #86 from UMCTeamPace/feat/#85-add-routedetail-sche…
bini0918 Feb 6, 2026
b9cf4d5
infra: 배포 시 환경 최적화
yousung1020 Feb 6, 2026
ef9bfed
feat: transitmode로 대중교통 우선순위 검색 구현
dmlwjds2 Feb 6, 2026
f1ad099
refactor: security config에서 api 주소 제외
dmlwjds2 Feb 6, 2026
a2c41ed
refactor:pr 리뷰반영
dmlwjds2 Feb 6, 2026
bdff645
Merge pull request #91 from UMCTeamPace/feature/89-route-transitMode
dmlwjds2 Feb 6, 2026
532af74
infra: DB 오류 해결
yousung1020 Feb 7, 2026
aca8697
feat: 경로 검색 방법 구현
dmlwjds2 Feb 9, 2026
b95a34b
refactor: pr 리뷰 반영
dmlwjds2 Feb 9, 2026
e6b0d4e
Merge pull request #93 from UMCTeamPace/feature/92-route-searchway
dmlwjds2 Feb 9, 2026
4b0f934
feat: 도보상세 제거 및 sequence값 재설정
dmlwjds2 Feb 9, 2026
50ac470
refactor: pr 리뷰 반영
dmlwjds2 Feb 9, 2026
5e42954
Merge pull request #97 from UMCTeamPace/feature/95-route-walkingDelet…
dmlwjds2 Feb 9, 2026
d85e2a3
feat:도보 제외 완성
dmlwjds2 Feb 10, 2026
86d7d5e
refactor: 수정
dmlwjds2 Feb 10, 2026
6854d7b
refactor:resDTO에 세터 제외
dmlwjds2 Feb 10, 2026
a849e2f
refactor: 수정
dmlwjds2 Feb 10, 2026
cc772a2
refactor:수정
dmlwjds2 Feb 10, 2026
833d241
Merge pull request #99 from UMCTeamPace/feature/98-route-nonewalking
dmlwjds2 Feb 10, 2026
771b3c3
refactor: 리뷰 반영
dmlwjds2 Feb 10, 2026
69ca274
Merge pull request #101 from UMCTeamPace/feature/98-route-nonewalking
dmlwjds2 Feb 10, 2026
6ef7b93
feat: shortName 필드 추가
bini0918 Feb 10, 2026
858ff84
Merge pull request #102 from UMCTeamPace/feat/#100-add-shortName
bini0918 Feb 10, 2026
9bd0198
refactor: 피드백 반영(미완) (#103)
yousung1020 Feb 10, 2026
a66de85
hotfix: 배포 오류 해결
yousung1020 Feb 10, 2026
e4f8039
fix: 스웨거 필드 누락 해결 (#104)
bini0918 Feb 10, 2026
46b4b0a
feat: 일정 상세 정보 필드 추가 (#108)
bini0918 Feb 10, 2026
4541fd7
Feat/#105 onboarding settingfix (#106)
Kim-DongH Feb 11, 2026
50b4b3f
refactor: 도착시간 현재기준 설정
dmlwjds2 Feb 11, 2026
c586cc0
refactor:pr리뷰반영
dmlwjds2 Feb 11, 2026
a8957d2
Merge pull request #110 from UMCTeamPace/feature/109-route-departureTime
dmlwjds2 Feb 11, 2026
d47fa33
refactor:시간대 수정ㅇ
dmlwjds2 Feb 11, 2026
c608e60
refactor: pr리뷰수정
dmlwjds2 Feb 11, 2026
e1126cc
Merge pull request #111 from UMCTeamPace/feature/109-route-time
dmlwjds2 Feb 11, 2026
131784b
fix: 경로 검색 시 +9시간이 추가적으로 되는 문제 해결
yousung1020 Feb 12, 2026
4d528dd
refactor: 인덱스를 추가함으로써 조회 성능 향상 완료 (#114)
yousung1020 Feb 13, 2026
557aca0
refactor: @Transactional 어노테이션 리팩토링 (#116)
yousung1020 Feb 14, 2026
d302e9a
feat: RouteDetail 상세 정보 JSON 저장 (#117)
bini0918 Feb 14, 2026
8ee1812
fix: 대중교통 데이터시트 호환성 관련 수정
yousung1020 Feb 16, 2026
709b466
Merge branch 'develop' of https://github.com/UMCTeamPace/Pace_server …
yousung1020 Feb 16, 2026
c75bc05
feat: 일정엔티티에 필드 추가 (#120)
bini0918 Feb 17, 2026
9435d91
refactor: calendarType 제거 및 calendarId(Long) 기반으로 온보딩/세팅 로직 변경 (#121)
Kim-DongH Feb 17, 2026
05a43c5
Refactor/#122 remove file & introduce nginx (#123)
yousung1020 Mar 3, 2026
f938fec
Feat/#125 https (#127)
yousung1020 Mar 7, 2026
6792d94
refactor: 경로일정 관련 코드 리팩토링 및 구조 개선 (#126)
bini0918 Mar 8, 2026
3dea5d8
Refactor/#129 schedule cleanup (#130)
Kim-DongH Mar 11, 2026
13068dd
feat: 실시간 지하철 도착 정보 조회 기능 구현 (#132)
yousung1020 Mar 15, 2026
32504b0
hotfix: .env 내용 반영
yousung1020 Mar 19, 2026
f3dd3a4
feat: 버스 실시간 도착 정보 조회를 위한 출발 정류장 조회 API 구현 (#134)
yousung1020 Mar 21, 2026
cda1d00
fix: 카카오 로그인 시 발생될 수 있는 예외 처리 강화
yousung1020 Mar 28, 2026
d7cbf1a
fix: 스웨거 문서상 표기 오류 수정 및 Valid 예외 핸들러 추가 및 버스 조회 실패 시 경로는 출력되게끔 수정
yousung1020 Mar 31, 2026
62721f4
브랜치옮기기
dmlwjds2 Apr 4, 2026
b4b4fd1
상행/ 하행 정보 추가
dmlwjds2 Apr 4, 2026
41eeae2
fix: 실시간 지하철 데이터 필드에서 다음역 이름 정보도 포함하여 응답 (#140)
yousung1020 Apr 5, 2026
f4344ba
상행역 하행역 정보
dmlwjds2 Apr 6, 2026
eb4f28f
refactor : 제미나이 리뷰반영
dmlwjds2 Apr 6, 2026
4affd4e
Merge pull request #141 from UMCTeamPace/feat/#137-upanddown
dmlwjds2 Apr 6, 2026
bdceacd
feat: 일정 자동 삭제 로직 추가 (#143)
bini0918 Apr 7, 2026
bc5c340
refactor: 대중교통 경로 탐색 시 지하철 상/하행 판별 로직 리팩토링리뷰 반영 (#145)
yousung1020 Apr 8, 2026
1887e25
hotfix: ci 문제 해결
yousung1020 Apr 8, 2026
47b3890
Merge branch 'develop' of https://github.com/UMCTeamPace/Pace_server …
yousung1020 Apr 8, 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
Binary file removed .DS_Store
Binary file not shown.
8 changes: 8 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
.git
.gradle
build/
out/
bin/
Dockerfile
.dockerignore
README.md
5 changes: 5 additions & 0 deletions .gemini/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"ui": {
"theme": "ANSI Light"
}
}
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/feature.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,4 @@ assignees: ""
<!-- 어떤 것들을 작업해야 하는지 작성해주세요! -->

### 💡 기타 참고 사항
<!-- 작업 시 주의해야 할 점이나 특이사항을 적어주세요. -->
<!-- 작업 시 주의해야 할 점이나 특이사항을 적어주세요! -->
14 changes: 10 additions & 4 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,19 @@
### 📌 관련 이슈
## 📌 관련 이슈
<br>

<!-- #이슈번호로 관련 이슈를 지정해주세요! ex) #12 -->

### ✨ 작업 내용 요약
## ✨ 작업 내용 요약
<br>

<!-- 이번 PR에서 무엇을 변경했는지 간단히 적어주세요! -->

### 🛠️ 주요 변경 사항
## 🛠️ 주요 변경 사항
<br>

<!-- 변경 사항을 좀 더 구체적으로 작성해주세요! -->

### 📚 체크리스트
## 📚 체크리스트
- [ ] 팀 컨벤션에 맞는 커밋 메시지를 작성했나요?
- [ ] 로컬 환경에서 정상 작동하는지 확인했나요?
- [ ] 불필요한 주석이나 print문은 제거했나요?
Expand Down
96 changes: 96 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
name: Pace Project CI/CD # 워크플로우 이름 설정

on:
push:
branches: [ "main", "develop" ] # 해당 브랜치에 코드가 push될 때만 실행

jobs:
deploy:
runs-on: ubuntu-latest # 깃허브가 제공하는 최신 우분투 가상 환경에서 작업

steps:
- name: Checkout code
uses: actions/checkout@v4 # 깃허브 서버로 내 소스 코드를 가져옴

- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
cache: 'gradle'

- name: Grant execute permission for gradlew
run: chmod +x gradlew

- name: Run Tests with Gradle
run: ./gradlew test

- name: Login to Docker Hub
uses: docker/login-action@v3 # 도커 허브 접속 시도
with:
username: ${{ secrets.DOCKERHUB_USERNAME }} # 깃허브 시크릿에서 아이디 가져옴
password: ${{ secrets.DOCKERHUB_TOKEN }} # 깃허브 시크릿에서 토큰 가져옴

- name: Build and push Docker image
uses: docker/build-push-action@v5 # 도커 이미지 빌드 및 전송
with:
context: . # 현재 위치의 파일을 바탕으로 빌드
push: true # 빌드 성공 시 도커 허브로 즉시 보냄
tags: ${{ secrets.DOCKERHUB_USERNAME }}/pace-project:latest # 이미지 이름과 태그 붙임

- name: Prepare directory on EC2
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_SSH_KEY }}
script: mkdir -p ~/pace-project/nginx

- name: Copy docker-compose.yml via scp
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_SSH_KEY }}
source: "docker-compose.yml,nginx/default.conf" # 내 깃허브에 있는 파일 이름
target: "~/pace-project" # 서버에 저장될 폴더 이름

- name: Deploy to EC2
uses: appleboy/ssh-action@v1.0.3 # SSH를 통해 AWS EC2 서버에 접속
with:
host: ${{ secrets.EC2_HOST }} # EC2의 IP 주소로 연결
username: ${{ secrets.EC2_USERNAME }} # 접속 계정(보통 ubuntu) 사용
key: ${{ secrets.EC2_SSH_KEY }} # .pem 키 내용으로 인증
script: | # 접속 후 실행할 명령어들 시작
mkdir -p ~/pace-project # 프로젝트 폴더가 없으면 생성
cd ~/pace-project # 해당 폴더로 이동

docker pull ${{ secrets.DOCKERHUB_USERNAME }}/pace-project:latest # 창고에서 새 이미지 가져옴

# 서버에서 사용할 비밀 장부(.env)를 시크릿 값으로 새로 만듦
echo "MYSQL_ROOT_PASSWORD=${{ secrets.MYSQL_ROOT_PASSWORD }}" > .env
echo "MYSQL_DATABASE=${{ secrets.MYSQL_DATABASE }}" >> .env
echo "MYSQL_USER=${{ secrets.MYSQL_USER }}" >> .env
echo "MYSQL_PASSWORD=${{ secrets.MYSQL_PASSWORD }}" >> .env
echo "REDIS_PASSWORD=${{ secrets.REDIS_PASSWORD }}" >> .env
echo "JWT_SECRET=${{ secrets.JWT_SECRET }}" >> .env
echo "KAKAO_CLIENT_ID=${{ secrets.KAKAO_CLIENT_ID }}" >> .env
echo "KAKAO_REDIRECT_URI=${{ secrets.KAKAO_REDIRECT_URI }}" >> .env
echo "GOOGLE_MAPS_API_KEY=${{ secrets.GOOGLE_MAPS_API_KEY }}" >> .env
echo "SEOUL_SUBWAY_API_KEY=${{ secrets.SEOUL_SUBWAY_API_KEY }}" >> .env
docker-compose up -d --remove-orphans # 새 이미지로 세트 메뉴(DB+앱) 다시 실행
docker image prune -f

# 헬스 체크: 서버가 제대로 떴는지 10번 확인함
echo "Starting health check..."
for i in {1..10}; do
RESPONSE=$(curl -s -H "Host: pace-server.kro.kr" http://localhost/health) # 내 서버에 안부를 물어봄
if [ "$RESPONSE" = "OK" ]; then # 대답이 "OK"면 성공
echo "Health check passed!"
exit 0
fi
echo "Waiting for server... ($i/10)" # 아직 안 떴으면 10초 기다림
sleep 10
done
echo "Health check failed." # 10번 다 실패하면 배포 실패 처리
exit 1
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**/build/
!**/src/test/**/build/
.gemini

### STS ###
.apt_generated
Expand Down Expand Up @@ -35,3 +36,6 @@ out/

### VS Code ###
.vscode/

.DS_Store
.env
33 changes: 33 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# 빌드 스테이지(eclipse-temurin을 사용하여 jar 파일 생성)
FROM eclipse-temurin:21-jdk-jammy AS build

# 컨테이너 내부의 작업 디렉토리를 /app으로 설정
WORKDIR /workspace

# 의존성 캐시 단계
COPY gradlew .
COPY gradle gradle
COPY settings.gradle build.gradle ./

# Gradle 래퍼(/gradlew)에 실행 권한 부여 및 라이브러리 다운로드
RUN chmod +x ./gradlew && ./gradlew --no-daemon dependencies

# 빌드 단계
COPY src src
RUN ./gradlew --no-daemon clean bootJar -x test

# 실행 단계
FROM eclipse-temurin:21-jre-jammy AS runtime
WORKDIR /app

# 보안을 위한 비관리자 유저 생성
RUN useradd -ms /bin/bash appuser
USER appuser

# 빌드 결과물만 복사
COPY --from=build /workspace/build/libs/*.jar app.jar

EXPOSE 8080

# 한국 시간 설정 및 실행
ENTRYPOINT ["java", "-Duser.timezone=Asia/Seoul", "-jar", "app.jar"]
72 changes: 70 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,70 @@
# Pace_server
UMC 9기 'Pace' 서비스 server 팀
# Pace Server 🏃‍♂️

> **UMC 9기 'Pace' 서버팀**

## 📖 프로젝트 개요

**Pace**는 사용자의 일정과 이동 경로를 효율적으로 관리할 수 있도록 돕는 모바일 애플리케이션입니다. **카카오 로그인**을 통한 간편한 인증을 지원하며, 대중교통 데이터를 활용한 일정 관리, 경로 추천, 장소 저장 등의 기능을 제공합니다.

## 🛠 백엔드 기술 스택 (Tech Stack)

### 환경 (Environment)
* ![Java](https://img.shields.io/badge/Java-21-ED8B00?style=flat&logo=openjdk&logoColor=white)
* ![Spring Boot](https://img.shields.io/badge/Spring%20Boot-4.0.1-6DB33F?style=flat&logo=springboot&logoColor=white)
* ![Gradle](https://img.shields.io/badge/Gradle-8.x-02303A?style=flat&logo=gradle&logoColor=white)

### 데이터베이스 & ORM
* ![MySQL](https://img.shields.io/badge/MySQL-8.0-4479A1?style=flat&logo=mysql&logoColor=white)
* **Spring Data JPA**
* **QueryDSL 5.0**

### 보안 & 인증 (Security & Auth)
* **Spring Security**
* **OAuth 2.0 (Kakao Login)**
* **JWT (JSON Web Token)**

### API & 문서화
* **SpringDoc OpenAPI (Swagger UI)**
* **WebFlux (WebClient)** - 외부 API 연동

### 유틸리티 (Utilities)
* **Apache POI** - 엑셀 데이터 처리 (버스/지하철 정보)
* **Lombok**

## 📂 프로젝트 구조

```bash
src/main/java/com/example/pace
├── PaceApplication.java
├── domain
│ ├── auth # 인증 (Kakao, JWT)
│ ├── member # 회원 관리, 장소 보관함, 설정
│ ├── schedule # 일정 및 경로 관리
│ ├── terms # 약관 관리
│ └── transit # 대중교통 데이터 로직
└── global
├── apiPayload # 표준 API 응답 구조
├── auth # 시큐리티 설정, Custom User Details
├── config # 앱 설정 (Swagger, WebClient 등)
└── entity # Base Entities
```

## ✨ 주요 기능

### 1. 인증 (Authentication)
* **카카오 로그인**: Kakao OAuth2를 이용한 간편 로그인.
* **토큰 관리**: Access/Refresh Token 발급 및 재발급(Reissue).
* **계정 관리**: 로그아웃 및 회원 탈퇴 기능.

### 2. 일정 관리 (Schedule Management)
* **생성/삭제**: 개인 일정 등록 및 삭제.
* **조회**: 일별, 월별 일정 목록 조회.
* **경로**: 대중교통 정보를 활용한 일정 경로 관리.

### 3. 회원 및 설정 (Member & Settings)
* **프로필**: 사용자 정보 관리.
* **장소 보관함**: 자주 가는 장소 즐겨찾기 및 그룹 관리.
* **온보딩**: 초기 사용자 설정 프로세스.

### 4. 대중교통 통합 (Transit Integration)
* **데이터 로딩**: 버스 및 지하철 데이터(Excel/JSON)를 로드하여 경로 계산에 활용.
101 changes: 76 additions & 25 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,46 +1,97 @@
plugins {
id 'java'
id 'org.springframework.boot' version '4.0.1'
id 'io.spring.dependency-management' version '1.1.7'
id 'java'
id 'org.springframework.boot' version '4.0.1'
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

Spring Boot 버전 4.0.1은 존재하지 않는 버전입니다. 최신 안정화 버전(예: 3.2.5) 또는 프로젝트에서 사용하기로 한 올바른 버전으로 수정해야 합니다. 현재 설정으로는 빌드가 실패합니다.

    id 'org.springframework.boot' version '3.2.5'

id 'io.spring.dependency-management' version '1.1.7'
id 'org.jetbrains.kotlin.jvm'
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

프로젝트가 Java로 작성된 것으로 보이는데, Kotlin 관련 플러그인(org.jetbrains.kotlin.jvm)과 의존성(kotlin-stdlib-jdk8)이 추가되었습니다. 만약 Kotlin을 사용하지 않는다면, 불필요한 의존성이므로 제거하는 것이 좋습니다.

}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
description = 'Demo project for Spring Boot'

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

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

repositories {
mavenCentral()
mavenCentral()
}

dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-security-oauth2-client'
implementation 'org.springframework.boot:spring-boot-starter-webmvc'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-data-jpa-test'
testImplementation 'org.springframework.boot:spring-boot-starter-security-oauth2-client-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'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-security-oauth2-client'

implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
annotationProcessor 'org.projectlombok:lombok'

testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.boot:spring-boot-starter-data-jpa-test'
testImplementation 'org.springframework.boot:spring-boot-starter-security-oauth2-client-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'
testRuntimeOnly 'com.h2database:h2'

// Swagger UI
implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:3.0.1")
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

springdoc-openapi-starter-webmvc-ui3.0.1 버전은 존재하지 않습니다. Spring Boot 3.x 버전을 사용하신다면 2.x 버전대를 사용해야 합니다. 예를 들어, 2.5.0으로 수정해야 합니다.

    implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.5.0")


// jwt
implementation 'io.jsonwebtoken:jjwt-api:0.12.3'
implementation 'io.jsonwebtoken:jjwt-impl:0.12.3'
implementation 'io.jsonwebtoken:jjwt-jackson:0.12.3'
implementation 'org.springframework.boot:spring-boot-configuration-processor'

// WebClient
implementation 'org.springframework.boot:spring-boot-starter-webflux'

// Excel (Apache POI)
implementation 'org.apache.poi:poi-ooxml:5.4.0'

// QueryDSL : OpenFeign
implementation "io.github.openfeign.querydsl:querydsl-jpa:7.0"
implementation "io.github.openfeign.querydsl:querydsl-core:7.0"
annotationProcessor "io.github.openfeign.querydsl:querydsl-apt:7.0:jpa"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
Comment on lines +64 to +68
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

QueryDSL 의존성 정보가 잘못되었습니다. io.github.openfeign.querydsl 그룹의 7.0 버전은 존재하지 않습니다. 공식 QueryDSL 의존성(com.querydsl)을 사용하고 Spring Boot 3.x에 맞는 버전을 사용해야 합니다.

    // QueryDSL
    implementation 'com.querydsl:querydsl-jpa:5.1.0:jakarta'
    annotationProcessor 'com.querydsl:querydsl-apt:5.1.0:jakarta'
    annotationProcessor 'jakarta.persistence:jakarta.persistence-api'
    annotationProcessor 'jakarta.annotation:jakarta.annotation-api'


// idk
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

// idk 주석은 이 의존성의 목적을 불분명하게 만듭니다. 의존성의 역할을 설명하는 명확한 주석을 추가하거나, 필요 없는 의존성이라면 제거하는 것이 좋습니다.

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"

// redis
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
}


tasks.named('test') {
useJUnitPlatform()
useJUnitPlatform()
}

def querydslDir = layout.buildDirectory.dir("generated/querydsl").get().asFile

// 소스 세트에 생성 경로 추가
sourceSets {
main.java.srcDirs += [querydslDir]
}

// 컴파일 시 생성 경로 지정
tasks.withType(JavaCompile).configureEach {
options.generatedSourceOutputDirectory.set(querydslDir)
}

// clean 태스크에 생성 폴더 삭제 로직
clean.doLast {
file(querydslDir).deleteDir()
}
Loading
Loading