Skip to content

Commit

Permalink
[MERGE] Spring boot 2->3 migration 및 JAVA 21 도입 - #347 (#350)
Browse files Browse the repository at this point in the history
  • Loading branch information
rlarlgnszx authored Sep 24, 2024
2 parents e8b4d17 + 2843fe1 commit bb8c1d0
Show file tree
Hide file tree
Showing 52 changed files with 192 additions and 183 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/build-dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@ jobs:
uses: actions/checkout@v3

# 2) JDK 11버전 설치, 다른 JDK 버전을 사용하다면 수정
- name: Set up JDK 17
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
java-version: '17'
java-version: '21'
distribution: 'corretto'

# 3) 환경변수 파일 생성
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/release-dev-code_deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,11 @@ jobs:
- name: checkout
uses: actions/checkout@v3

- name: set up JDK 17
- name: set up JDK 21
uses: actions/setup-java@v3
with:
distribution: 'corretto'
java-version: '17'
java-version: '21'

- name: mkdir resources folder
run: |
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/release-prod.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@ jobs:
- name: checkout
uses: actions/checkout@v3

- name: set up JDK 17
- name: set up JDK 21
uses: actions/setup-java@v3
with:
distribution: 'corretto'
java-version: '17'
java-version: '21'

- name: mkdir resources folder
run: |
Expand Down
62 changes: 34 additions & 28 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,20 +1,24 @@
plugins {
id 'org.springframework.boot' version '2.7.4'
id 'io.spring.dependency-management' version '1.0.14.RELEASE'
id 'org.springframework.boot' version '3.3.1'
id 'io.spring.dependency-management' version '1.1.5'
id 'java'
id 'jacoco'
}

group = 'org.sopt'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'

java {
sourceCompatibility = '21'
}

configurations {
compileOnly {
extendsFrom annotationProcessor
}
}


repositories {
mavenCentral()
}
Expand All @@ -30,20 +34,30 @@ dependencies {
implementation 'io.github.openfeign:feign-slf4j:12.4'

// swagger
implementation 'org.springdoc:springdoc-openapi-ui:1.6.12'
implementation 'org.springdoc:springdoc-openapi-security:1.6.12'
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.6.0'

// sentry
implementation 'io.sentry:sentry-spring-boot-starter:6.17.0'
implementation 'io.sentry:sentry-logback:6.17.0'

// QueryDSL
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta" // 버전 명시
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"

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

//postgres
runtimeOnly 'org.postgresql:postgresql'


// mapper
implementation 'org.mapstruct:mapstruct:1.4.2.Final'
annotationProcessor "org.mapstruct:mapstruct-processor:1.4.2.Final"
implementation 'org.mapstruct:mapstruct:1.5.3.Final'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.3.Final'

// jwt
implementation 'io.jsonwebtoken:jjwt-api:0.11.5'
Expand All @@ -52,50 +66,42 @@ dependencies {

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

// postgres
implementation group: 'org.postgresql', name: 'postgresql', version: '42.2.23'
runtimeOnly 'org.postgresql:postgresql'

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

//ImmutableMap
implementation 'com.google.guava:guava:30.1.1-jre'

// querydsl
implementation 'com.querydsl:querydsl-jpa'
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
// ImmutableMap
implementation 'com.google.guava:guava:32.0.1-jre'

//hibernate-type52 추가 array type을 위해
implementation group: 'com.vladmihalcea', name: 'hibernate-types-52', version: '2.19.0'
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-validation', version: '2.7.5'
implementation 'io.hypersistence:hypersistence-utils-hibernate-63:3.8.2'
implementation 'org.springframework.boot:spring-boot-starter-validation'

//aws-s3
implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-aws', version: '2.2.5.RELEASE'
// aws-s3
implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE'

// retry
implementation 'org.springframework.retry:spring-retry:1.2.5.RELEASE'
implementation 'org.springframework.retry:spring-retry:1.3.0'

// test
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
implementation 'com.google.code.gson:gson:2.8.7'
testImplementation 'org.mockito:mockito-core:4.5.1'
testImplementation 'org.mockito:mockito-junit-jupiter:4.5.1'
implementation 'com.google.code.gson:gson:2.10.1'
testImplementation 'org.mockito:mockito-core:5.5.0'
testImplementation 'org.mockito:mockito-junit-jupiter:5.5.0'
implementation 'net.bytebuddy:byte-buddy:1.14.15'
implementation 'org.objenesis:objenesis:3.4'

// slack
implementation 'com.slack.api:slack-api-client:1.30.0'
}


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

test {
exclude '**/*RepositoryTest.*'
}
6 changes: 4 additions & 2 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
zipStorePath=wrapper/dists
2 changes: 1 addition & 1 deletion src/main/java/org/sopt/app/AppApplication.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package org.sopt.app;

import jakarta.annotation.PostConstruct;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.springframework.scheduling.annotation.EnableAsync;

import javax.annotation.PostConstruct;
import java.util.TimeZone;
import org.springframework.scheduling.annotation.EnableScheduling;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import java.security.Key;
import java.util.Base64;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import lombok.val;
import org.joda.time.LocalDateTime;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,17 @@ public record FortuneCardInfo(
Long id,
String name,
String description,
String imageUrl
String imageUrl,
String imageColorCode

) {
public static FortuneCardInfo of(FortuneCard fortuneCard) {
return FortuneCardInfo.builder()
.id(fortuneCard.getId())
.name(fortuneCard.getName())
.description(fortuneCard.getDescription())
.imageUrl(fortuneCard.getImageUrl())
.imageColorCode(fortuneCard.getImageColorCode())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -1,21 +1,18 @@
package org.sopt.app.application.fortune;

import jakarta.transaction.Transactional;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.sopt.app.common.utils.HttpHeadersUtils;
import org.sopt.app.domain.enums.NotificationCategory;
import org.sopt.app.presentation.fortune.FortuneAlarmRequest;
import org.springframework.transaction.event.TransactionPhase;
import org.springframework.transaction.event.TransactionalEventListener;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.web.client.RestTemplate;
import org.springframework.http.*;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

import javax.transaction.Transactional;
import java.util.List;

import lombok.RequiredArgsConstructor;
import lombok.val;
import org.springframework.transaction.event.TransactionPhase;
import org.springframework.transaction.event.TransactionalEventListener;
import org.springframework.web.client.RestTemplate;

@Component
@RequiredArgsConstructor
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;

import javax.transaction.Transactional;
import jakarta.transaction.Transactional;
import java.util.List;
import java.util.UUID;

Expand Down
9 changes: 5 additions & 4 deletions src/main/java/org/sopt/app/application/s3/S3Service.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import com.amazonaws.services.s3.model.CannedAccessControlList;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.PutObjectRequest;
import jakarta.annotation.PostConstruct;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
Expand All @@ -17,7 +18,6 @@
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import javax.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import lombok.val;
import org.joda.time.LocalDateTime;
Expand Down Expand Up @@ -51,19 +51,20 @@ public class S3Service {
@Value("${cloud.aws.s3.uri}")
private String baseURI;

private final AmazonS3 amazonS3;
private AmazonS3 amazonS3;


@PostConstruct
public AmazonS3 getAmazonS3() {
val awsCredentials = new BasicAWSCredentials(accessKey, secretKey);
return AmazonS3ClientBuilder.standard()
AmazonS3 amazonS3 = AmazonS3ClientBuilder.standard()
.withRegion(region)
.withCredentials(new AWSStaticCredentialsProvider(awsCredentials))
.build();
this.amazonS3 = amazonS3;
return amazonS3;
}


public List<String> uploadDeprecated(List<MultipartFile> multipartFiles) {
if (multipartFiles == null || multipartFiles.get(0).isEmpty()) {
return new ArrayList<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.validation.Valid;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.val;
import org.sopt.app.common.event.Events;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package org.sopt.app.common.config;

import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import lombok.val;
import org.sopt.app.application.auth.JwtTokenService;
Expand All @@ -14,17 +13,17 @@
import org.sopt.app.common.response.ErrorCode;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.GenericFilterBean;
import org.springframework.web.filter.OncePerRequestFilter;

@Component
@RequiredArgsConstructor
public class JwtAuthenticationFilter extends GenericFilterBean {
public class JwtAuthenticationFilter extends OncePerRequestFilter {

private final JwtTokenService jwtTokenService;

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
val token = jwtTokenService.getToken((HttpServletRequest) request);
if (token != null) {
if (jwtTokenService.validateToken(token)) {
Expand All @@ -38,7 +37,7 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha
throw new UnauthorizedException(ErrorCode.INVALID_ACCESS_TOKEN.getMessage());
}
}
chain.doFilter(request, response);
filterChain.doFilter(request, response);
}

}

Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.AllArgsConstructor;
import org.sopt.app.common.exception.UnauthorizedException;
import org.sopt.app.common.response.CommonResponse;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package org.sopt.app.common.config;

import com.querydsl.jpa.impl.JPAQueryFactory;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

Expand Down
Loading

0 comments on commit bb8c1d0

Please sign in to comment.