Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
104 commits
Select commit Hold shift + click to select a range
c86afbe
Chore: PR 템플릿 텍스트 포맷팅 수정
fervovita May 21, 2026
93b98e7
Chore: CheckStyle 코드 규칙 설정 추가
fervovita May 21, 2026
2511616
Feat: MySQL 로컬 개발 환경 설정
fervovita May 21, 2026
592e0ff
Feat: Redis 로컬 개발 환경 설정 추가
fervovita May 21, 2026
8bc4a00
Feat: MinIO 로컬 개발 환경 및 S3 클라이언트 설정 추가
fervovita May 21, 2026
9b60cd0
Feat: Swagger 설정 추가
fervovita May 21, 2026
b9abdf2
Test: 테스트 프로필 및 H2 인메모리 DB 설정 추가
fervovita May 21, 2026
74fc023
Feat: 공통 응답 포맷 및 전역 예외 처리 설정 추가
fervovita May 21, 2026
bc29f37
Merge pull request #2 from Ditda-Official/chore/#1-inital-setting
fervovita May 22, 2026
a57f8eb
Chore(jwt): JWT 구현 및 관련 설정 추가
Jong0128 May 22, 2026
3ced52d
Chore(jwt): 테스트 설정에 JWT 관련 환경 변수 추가
Jong0128 May 22, 2026
1260bbb
Chore(jwt): 테스트 설정에 JWT 관련 환경 변수 수정
Jong0128 May 22, 2026
b3e6254
Merge pull request #4 from Ditda-Official/feat/#3-jwt-access-refresh
fervovita May 22, 2026
d20fc75
Feat(user): UserEntity 구현
fervovita May 22, 2026
73a2ac0
Fix(user): UserEntity 필드 address nullable 설정 수정
fervovita May 22, 2026
08c0836
Feat(user): UserEntity에 role 필드 EnumType.STRING 매핑 추가
fervovita May 22, 2026
66f1a49
Merge pull request #7 from Ditda-Official/feat/#6-user-entity
Jong0128 May 22, 2026
1adbea2
Chore(term): UserTerm 엔티티 및 TermType enum 추가
Jong0128 May 22, 2026
805bfc5
Merge pull request #9 from Ditda-Official/feat/#5-user-term-entity
Jong0128 May 22, 2026
0e5c13d
Chore(security): SecurityConfig @EnableWebSecurity annotation 추가
Jong0128 May 22, 2026
b24a190
Feat(auth): 메일 발송 의존성 및 SMTP 설정 추가
fervovita May 22, 2026
253d317
Feat(auth): 비동기 메일 발송 기능 추가
fervovita May 22, 2026
2c4266b
Feat(auth): 이메일 인증번호 발급 API 구현
fervovita May 22, 2026
2445e52
Style: 파일 끝 개행 추가
fervovita May 22, 2026
dd96281
Feat(user): 사용자 관련 예외 코드 및 레포지토리 추가
Jong0128 May 22, 2026
c5e7c02
Feat(instructor): Instructor 엔티티 및 레포지토리 추가
Jong0128 May 22, 2026
9bc1588
Feat(auth): 공통 RefreshToken 엔티티 및 레포지토리 추가
Jong0128 May 22, 2026
12de170
Feat(auth): 강사 회원가입 및 아이디 중복 확인 API 추가
Jong0128 May 22, 2026
d8ee0de
Chore: SecurityConfig 보안 정책 추가
fervovita May 22, 2026
c002576
Fix(auth): 강사 회원가입 주소 제거
Jong0128 May 22, 2026
ca42185
Feat(auth): 이메일 인증번호 검증 API 구현
fervovita May 22, 2026
acbd4f0
Chore: 테스트 환경에 Spring Mail 설정 추가
fervovita May 22, 2026
de6ed75
Fix: application-test.yaml의 spring.mail 들여쓰기 오류 수정
fervovita May 22, 2026
8995d14
Fix: application-test.yaml의 spring.mail 들여쓰기 오류 수정
fervovita May 22, 2026
12bcfcb
Fix(auth): 이메일 인증 API 경로 수정
fervovita May 22, 2026
65d813f
Merge pull request #11 from Ditda-Official/feat/#8-email-vertification
fervovita May 22, 2026
bf63f0a
Merge remote-tracking branch 'refs/remotes/origin/dev' into feat/#10-…
Jong0128 May 22, 2026
da5cfb5
Feat(auth): 강사 회원가입 이메일 검증 및 InstructorAuthFacade 추가
Jong0128 May 22, 2026
fb28241
Fix(auth): 강사 회원가입 endpoint 수정 및 토큰발급 파라미터 변경
Jong0128 May 22, 2026
a21c2b3
Fix(auth): 강사 아이디 중복 확인 API 요청 방식을 POST로 변경
Jong0128 May 22, 2026
e561b73
Merge pull request #13 from Ditda-Official/feat/#10-instructor-sign-up
fervovita May 22, 2026
1fc2d0c
Feat(auth): 로그인 및 토큰 재발급 요청/응답 DTO 추가, 레포지토리 추가
Jong0128 May 22, 2026
7e703e7
Feat(auth): 로그인/로그아웃/토큰 재발급 로직 구현
Jong0128 May 22, 2026
5ac2614
Feat(auth): 로그인, 로그아웃, 토큰 재발급 API 추가 및 AuthFacade 로직 확장
Jong0128 May 22, 2026
943af4d
Fix(auth): SecurityConfig permit 추가
Jong0128 May 22, 2026
eef4228
Feat: AES 암호화 유틸리티 추가
fervovita May 22, 2026
523258f
Merge branch 'dev' into feat/#12-designer-signup
fervovita May 22, 2026
2b301ab
Refactor(core): InstructorAuthService를 도메인 Service에 위임하도록 변경
fervovita May 23, 2026
bef3eac
Refactor(user): UserEntity를 User로 클래스명 변경
fervovita May 23, 2026
a110f74
Feat(designer): 디자이너 도메인 모델 추가
fervovita May 24, 2026
660ca86
Feat(designer): 디자이너 회원가입 API 구현
fervovita May 24, 2026
c1037e2
Chore(config): 디자이너 회원가입 관련 설정 추가
fervovita May 24, 2026
cad2e71
Fix(auth): API 경로 수정
Jong0128 May 24, 2026
50b80be
Feat(auth): refresh token 다중 기기 + HMAC 해시 저장 구조 도입
Jong0128 May 24, 2026
e3a3093
Feat(auth): 강사 회원가입 시 이메일 인증 검증 강화
Jong0128 May 24, 2026
d5e5512
Docs(auth): 주석 추가
Jong0128 May 24, 2026
a0071ff
Docs: .env.example 수정
Jong0128 May 24, 2026
c76d69f
Refactor(auth): refresh token payload 추출 책임을 JwtTokenProvider로 이동
Jong0128 May 25, 2026
83a5d64
Refactor(auth): 로그아웃을 Refresh Token 기반으로 처리
Jong0128 May 25, 2026
3fc2d8f
Refactor(auth): 이메일 검증 여부 롤백
Jong0128 May 25, 2026
c80d2f2
Rename(jwt): hash 관련 코드 이동 (common -> global)
Jong0128 May 25, 2026
95a266d
Feat(auth): Refresh 토큰 스케쥴러를 통해 삭제 기능 추가
Jong0128 May 25, 2026
3868ea0
Chore(auth): Checkstyle 기반 코드 수정 (import 및 공백 추가)
Jong0128 May 25, 2026
2b65d6c
Fix(auth): Refresh 만료 토큰 삭제 쿼리 수정
Jong0128 May 25, 2026
684f8f9
Refactor(auth): 로그아웃 sessionId 기반 삭제 -> sessionId + 해시 값 기준으로 삭제로 수정
Jong0128 May 25, 2026
74fd186
Merge pull request #15 from Ditda-Official/feat/#14-login-logout-reissue
fervovita May 25, 2026
456c4c2
Merge branch 'dev' into feat/#12-designer-signup
fervovita May 25, 2026
b4f5e82
Feat(instructor): 강사 회원가입 API 경로 수정
fervovita May 25, 2026
bef7653
Feat(designer): 디자이너 회원가입 어드민 이메일 발송 기능 추가
fervovita May 25, 2026
92a0d73
Feat(designer): 이메일 인증 템플릿 수정 및 로고 이미지 추가
fervovita May 25, 2026
6fdb508
Feat(designer): 디자이너 회원가입 요청 DTO에 필수값 검증 추가
fervovita May 25, 2026
0212cf9
Feat(designer): 포트폴리오 파일 사이즈 검증 로직 추가
fervovita May 25, 2026
85954a6
Feat(designer): 포트폴리오 업로드 실패 시 부분 업로드 파일 삭제 로직 추가
fervovita May 25, 2026
b13beab
Chore: 테스트 환경 설정 파일 오타 수정
fervovita May 25, 2026
1db9fb9
Chore: 테스트 환경에 S3 설정 추가
fervovita May 25, 2026
4883498
Docs(auth): InstructorSignupRequest Schema 어노테이션 추가
Jong0128 May 25, 2026
5fe0702
Fix: 이메일 인증 템플릿 경로 수정
fervovita May 25, 2026
9ee2b38
Feat(designer): 디자이너 회원가입시 아이디 및 이메일 검증 추가
fervovita May 25, 2026
28c3879
Refactor: 불필요한 hash 메서드 및 관련 코드 제거
fervovita May 25, 2026
ce4d7d9
Refactor: S3 업로드 로직을 S3FileUploader로 리팩토링
fervovita May 25, 2026
e3f5ff9
Feat(designer): 포트폴리오 파일 크기 초과 예외 코드 추가
fervovita May 25, 2026
0cf50fa
Refactor: 이메일 발송 로직을 각 도메인 Mailer 클래스로 분리
fervovita May 25, 2026
752f3b5
Feat(designer): 포트폴리오 없는 경우 회원가입 알림 이메일 발송 차단
fervovita May 25, 2026
1bcfbf6
Refactor(designer): isAgreed 타입을 Boolean으로 수정
fervovita May 25, 2026
6a09207
Merge remote-tracking branch 'origin/feat/#12-designer-signup' into f…
fervovita May 25, 2026
628ef9e
Refactor(instructor): isAgreed 타입을 Boolean으로 수정
fervovita May 25, 2026
5428730
Refactor: S3UrlResolver의 URL 생성 로직 개선
fervovita May 25, 2026
9a9304f
Refactor(designer): Portfolio 엔티티 및 관련 로직에서 User를 Designer로 변경
fervovita May 26, 2026
e79fe33
Refactor(instructor): Instructor 엔티티에 BaseEntity 상속 추가
fervovita May 26, 2026
3f0f28e
Refactor: AES 암호화에서 hashKey 관련 로직 제거
fervovita May 26, 2026
0561375
Merge pull request #16 from Ditda-Official/feat/#12-designer-signup
fervovita May 26, 2026
d9794dc
Feat: 버킷을 public/private 분리 및 포트폴리오에 presigned URL 적용
fervovita May 27, 2026
c95d5ed
Feat: Nginx 서버 설정 파일 추가
fervovita May 27, 2026
b0eae2a
Feat: 배포 스크립트 및 워크플로 추가
fervovita May 27, 2026
3781ce2
Chore: 워크플로에서 persist-credentials 옵션 비활성화
fervovita May 27, 2026
9cf0cfd
Chore: 배포 스크립트에 .env 파일 권한 설정 추가
fervovita May 27, 2026
62f84b8
Chore: 로그 메시지 오타 수정
fervovita May 27, 2026
d21c2b0
Feat: 디자이너 회원가입 응답에 사용자 이름 및 프로필 이미지 추가
fervovita May 28, 2026
863d905
Refactor: ResponseCookie를 Service에서 Controller로 이동
fervovita May 28, 2026
3d48864
Feat: 로그인 응답에 사용자 이름 및 프로필 이미지 추가
fervovita May 28, 2026
18752f7
Feat: 강사 회원가입 응답에 사용자 이름 및 프로필 이미지 추가
fervovita May 28, 2026
d072efb
Chore(auth): 들여쓰기 수정
Jong0128 May 28, 2026
123553a
Merge pull request #19 from Ditda-Official/chore/#17-deploy-setting
fervovita May 28, 2026
3646130
Merge pull request #21 from Ditda-Official/feat/#20-auth-response
fervovita May 28, 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
42 changes: 42 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Spring Profile
SPRING_PROFILES_ACTIVE=local

# Database
DB_URL=jdbc:mysql://localhost:3306/your_db_name?allowPublicKeyRetrieval=true&useSSL=false&characterEncoding=UTF-8
DB_NAME=your_db_name
DB_USERNAME=your_username
DB_PASSWORD=your_password
DB_ROOT_PASSWORD=your_root_password

# Redis
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=your_redis_password

# S3
S3_ENDPOINT=http://localhost:9000
S3_REGION=ap-northeast-2
S3_ACCESS_KEY=your_access_key
S3_SECRET_KEY=your_secret_key
S3_PUBLIC_BUCKET=your_public_bucket_name
S3_PRIVATE_BUCKET=your_private_bucket_name

# JWT
JWT_SECRET_KEY=your_jwt_secret_key_here_base64url_encoded
JWT_ACCESS_TOKEN_EXPIRATION=3600000
JWT_REFRESH_TOKEN_EXPIRATION=1209600000
JWT_COOKIE_SECURE=false
JWT_REFRESH_COOKIE_PATH=/api/v1/auth

# Mail
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=your_email@gmail.com
MAIL_PASSWORD=your_app_password

# Encryption
ENCRYPT_SECRET_KEY=your_encrypt_secret_key
ENCRYPT_HASH_KEY=your_encrypt_hash_key

# Admin
ADMIN_NOTIFICATION_EMAIL=admin@example.com
6 changes: 3 additions & 3 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
## **🚀 Related issue**
## **🚀 Related issue**

Closes #이슈번호

## **#️⃣ Summary**

- PR 한줄 요약

## **🔧 Changes*
## **🔧 Changes**

- [ ] 작업 내용
- [ ] 작업 내용
Expand All @@ -15,6 +15,6 @@ Closes #이슈번호

- swagger나 postman 결과를 캡쳐하여 첨부

## **💬 Reviewer Notes**
## **💬 Reviewer Notes**

- 리뷰어나 같이 작업하는 사람들에게 남길 코멘트
10 changes: 7 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ name: CI
on:
pull_request:
branches: [ main, dev ]
push:
branches: [ main ]

concurrency:
group: ci-${{ github.event.pull_request.number || github.ref }}
Expand All @@ -14,16 +16,18 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false

- name: Set up JDK 21
uses: actions/setup-java@v4
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
with:
java-version: '21'
distribution: 'temurin'

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5.0.2

- name: Grant execute permission for gradlew
run: chmod +x gradlew
Expand Down
138 changes: 138 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
name: deploy

on:
workflow_run:
workflows:
- CI
types:
- completed
branches:
- main

permissions:
id-token: write
contents: read

env:
AWS_REGION: ap-northeast-2
ECR_REPOSITORY: ditda-api

concurrency:
group: deploy-prod
cancel-in-progress: false

jobs:
build-and-deploy:
if: >
github.event.workflow_run.conclusion == 'success' &&
github.event.workflow_run.event == 'push'

runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
ref: ${{ github.event.workflow_run.head_sha }}
persist-credentials: false

- name: Set up JDK 21
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
with:
java-version: "21"
distribution: "temurin"
cache: "gradle"

- name: Configure AWS credentials (OIDC)
uses: aws-actions/configure-aws-credentials@acca2b1b2070338fb9fd1ca27ecee81d687e58e5 # v6.1.2
with:
role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/ditda-github-actions-role
aws-region: ${{ env.AWS_REGION }}

- name: Login to ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@fa648b43de3d4d023bcb3f89ed6940096949c419 # v2.1.5

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

- name: Build & push image with Jib
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}/${{ env.ECR_REPOSITORY }}
run: |
./gradlew jib \
-Djib.to.image=${ECR_REGISTRY} \
-Djib.to.tags=latest,${{ github.event.workflow_run.head_sha }}

- name: Deploy to EC2 via SSM
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}/${{ env.ECR_REPOSITORY }}
IMAGE_TAG: ${{ github.event.workflow_run.head_sha }}
run: |
COMMAND_ID=$(aws ssm send-command \
--instance-ids "${{ secrets.EC2_INSTANCE_ID }}" \
--document-name "AWS-RunShellScript" \
--parameters "commands=[
'curl -fsSL https://raw.githubusercontent.com/${{ github.repository }}/${{ github.event.workflow_run.head_sha }}/scripts/deploy.sh -o /tmp/deploy.sh',
'chmod +x /tmp/deploy.sh',
'export AWS_REGION=${{ env.AWS_REGION }}',
'export ECR_REGISTRY=${ECR_REGISTRY}',
'export IMAGE_TAG=${IMAGE_TAG}',
'export GITHUB_REPO=${{ github.repository }}',
'export COMMIT_SHA=${{ github.event.workflow_run.head_sha }}',
'bash /tmp/deploy.sh'
]" \
--timeout-seconds 600 \
--query "Command.CommandId" \
--output text)

echo "Command ID: ${COMMAND_ID}"

for i in {1..120}; do
STATUS=$(aws ssm get-command-invocation \
--command-id "${COMMAND_ID}" \
--instance-id "${{ secrets.EC2_INSTANCE_ID }}" \
--query "Status" --output text 2>/dev/null || echo "Pending")
echo "Status: ${STATUS}"

if [ "${STATUS}" = "Success" ]; then
aws ssm get-command-invocation \
--command-id "${COMMAND_ID}" \
--instance-id "${{ secrets.EC2_INSTANCE_ID }}" \
--query "StandardOutputContent" --output text
exit 0
elif [ "${STATUS}" = "Failed" ] || [ "${STATUS}" = "Cancelled" ] || [ "${STATUS}" = "TimedOut" ]; then
echo "=== STDOUT ==="
aws ssm get-command-invocation \
--command-id "${COMMAND_ID}" \
--instance-id "${{ secrets.EC2_INSTANCE_ID }}" \
--query "StandardOutputContent" --output text
echo "=== STDERR ==="
aws ssm get-command-invocation \
--command-id "${COMMAND_ID}" \
--instance-id "${{ secrets.EC2_INSTANCE_ID }}" \
--query "StandardErrorContent" --output text
exit 1
fi
sleep 5
done

echo "❌ 타임아웃"
exit 1

- name: Send Discord notification on success
if: success()
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK_URL }}
run: |
curl -H "Content-Type: application/json" \
-d "{\"embeds\": [{\"title\": \"🚀 DITDA 배포 성공\", \"description\": \"https://api.ditda.kr\", \"color\": 3066993, \"fields\": [{\"name\": \"Branch\", \"value\": \"${{ github.ref_name }}\", \"inline\": true}, {\"name\": \"Commit\", \"value\": \"\`${GITHUB_SHA:0:7}\`\", \"inline\": true}, {\"name\": \"Author\", \"value\": \"${{ github.actor }}\", \"inline\": true}], \"timestamp\": \"$(date -u +%Y-%m-%dT%H:%M:%S.000Z)\"}]}" \
$DISCORD_WEBHOOK || true

- name: Send Discord notification on failure
if: failure()
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK_URL }}
run: |
curl -H "Content-Type: application/json" \
-d "{\"embeds\": [{\"title\": \"❌ DITDA 배포 실패\", \"description\": \"GitHub Actions 로그 확인 필요\", \"color\": 15158332, \"fields\": [{\"name\": \"Branch\", \"value\": \"${{ github.ref_name }}\", \"inline\": true}, {\"name\": \"Commit\", \"value\": \"\`${GITHUB_SHA:0:7}\`\", \"inline\": true}, {\"name\": \"Author\", \"value\": \"${{ github.actor }}\", \"inline\": true}, {\"name\": \"Run\", \"value\": \"[로그 보기](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})\", \"inline\": false}], \"timestamp\": \"$(date -u +%Y-%m-%dT%H:%M:%S.000Z)\"}]}" \
$DISCORD_WEBHOOK || true
10 changes: 10 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,13 @@ out/

### VS Code ###
.vscode/

### Spring Boot ###
*.pid
*.log.*
logs/

### Environment ###
.env
.env.*
!.env.example
113 changes: 91 additions & 22 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,39 +1,108 @@
plugins {
id 'java'
id 'org.springframework.boot' version '4.0.6'
id 'io.spring.dependency-management' version '1.1.7'
id 'java'
id 'org.springframework.boot' version '4.0.6'
id 'io.spring.dependency-management' version '1.1.7'
id 'com.google.cloud.tools.jib' version '3.5.3'
id 'checkstyle'
}

group = 'ditda'
version = '0.0.1-SNAPSHOT'

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

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-validation'
implementation 'org.springframework.boot:spring-boot-starter-webmvc'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.projectlombok:lombok'
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-validation-test'
testImplementation 'org.springframework.boot:spring-boot-starter-webmvc-test'
testCompileOnly 'org.projectlombok:lombok'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
testAnnotationProcessor 'org.projectlombok:lombok'
// web
implementation 'org.springframework.boot:spring-boot-starter-web'

// security
implementation 'org.springframework.boot:spring-boot-starter-security'

// mysql
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.mysql:mysql-connector-j'

// S3
implementation platform('io.awspring.cloud:spring-cloud-aws-dependencies:4.0.2')
implementation 'io.awspring.cloud:spring-cloud-aws-starter-s3'

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

// jwt
implementation 'io.jsonwebtoken:jjwt-api:0.13.0'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.13.0'
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.13.0'

// email
implementation 'org.springframework.boot:spring-boot-starter-mail'

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

// swagger
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:3.0.3'

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

// lombok
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testCompileOnly 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'

// actuator
implementation 'org.springframework.boot:spring-boot-starter-actuator'

// test
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
testImplementation 'com.h2database:h2'
}

// CheckStyle
checkstyle {
toolVersion = '13.4.1'
configFile = file("${rootDir}/config/checkstyle/checkstyle-rules.xml")
configProperties = [
'suppressionFile': "${rootDir}/config/checkstyle/checkstyle-suppressions.xml"
]
maxWarnings = 0
}


// Jib
jib {
from {
image = 'eclipse-temurin:21-jre-alpine'
platforms {
platform {
architecture = 'amd64'
os = 'linux'
}
}
}
container {
ports = ['8080']
environment = [
'TZ': 'Asia/Seoul'
]
jvmFlags = ['-Xms256m', '-Xmx512m', '-XX:+UseG1GC']
creationTime = 'USE_CURRENT_TIMESTAMP'
}
}


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