diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index c32fd39..3032900 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -42,7 +42,11 @@ jobs: sed -i "s|\${MYSQL_USERNAME}|${{ secrets.MYSQL_USERNAME }}|g" src/main/resources/application.properties sed -i "s|\${MYSQL_PASSWORD}|${{ secrets.MYSQL_PASSWORD }}|g" src/main/resources/application.properties sed -i "s|\${JWT_KEY}|${{ secrets.JWT_KEY }}|g" src/main/resources/application.properties - + sed -i "s|\${AWS_ACCESS_KEY_ID}|${{ secrets.AWS_ACCESS_KEY_ID }}|g" src/main/resources/application.properties + sed -i "s|\${AWS_SECRET_ACCESS_KEY}|${{ secrets.AWS_SECRET_ACCESS_KEY }}|g" src/main/resources/application.properties + sed -i "s|\${AWS_REGION}|${{ env.AWS_REGION }}|g" src/main/resources/application.properties + sed -i "s|\${AWS_S3_BUCKET}|${{ env.S3_BUCKET_NAME }}|g" src/main/resources/application.properties + - name: Build with Gradle run: ./gradlew clean build -x test @@ -59,6 +63,10 @@ jobs: echo "MYSQL_USERNAME=${{ secrets.MYSQL_USERNAME }}" >> .env echo "MYSQL_PASSWORD=${{ secrets.MYSQL_PASSWORD }}" >> .env echo "JWT_KEY=${{ secrets.JWT_KEY }}" >> .env + echo "AWS_ACCESS_KEY_ID=${{ secrets.AWS_ACCESS_KEY_ID }}" >> .env + echo "AWS_SECRET_ACCESS_KEY=${{ secrets.AWS_SECRET_ACCESS_KEY }}" >> .env + echo "AWS_REGION=${{ env.AWS_REGION }}" >> .env + echo "AWS_S3_BUCKET=${{ env.S3_BUCKET_NAME }}" >> .env - name: Prepare deployment package run: | diff --git a/build.gradle b/build.gradle index 2d4aef1..1afeb36 100644 --- a/build.gradle +++ b/build.gradle @@ -1,97 +1,92 @@ plugins { - id 'java' - id 'org.springframework.boot' version '3.2.5'//스웨거로 인해 버전 낮춤 - id 'io.spring.dependency-management' version '1.1.7' -} - -ext { - queryDslVersion = "5.0.0" + id 'java' + id 'org.springframework.boot' version '3.2.5' // 스웨거로 인해 버전 낮춤 + id 'io.spring.dependency-management' version '1.1.7' } group = 'com.example' version = '0.0.1-SNAPSHOT' java { - toolchain { - languageVersion = JavaLanguageVersion.of(21) - } + toolchain { + languageVersion = JavaLanguageVersion.of(21) + } } ext { - queryDslVersion = "5.0.0" + queryDslVersion = "5.0.0" } configurations { - compileOnly { - extendsFrom annotationProcessor - } + compileOnly { + extendsFrom annotationProcessor + } } repositories { - mavenCentral() - - // springdoc 2.5.0은 여기서 제공됨 - maven { url 'https://repo.spring.io/release' } + mavenCentral() + // springdoc 2.5.0은 여기서 제공됨 + maven { url 'https://repo.spring.io/release' } } dependencies { - // Spring Boot - implementation 'org.springframework.boot:spring-boot-starter-data-jpa' - implementation 'org.springframework.boot:spring-boot-starter-security' - implementation 'org.springframework.boot:spring-boot-starter-web' - implementation 'org.springframework.boot:spring-boot-starter-validation' - - // JWT - implementation 'io.jsonwebtoken:jjwt-api:0.11.5' - runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5' - runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.5' - - // DB - runtimeOnly 'com.h2database:h2' - runtimeOnly 'com.mysql:mysql-connector-j' - - // AWS - implementation 'com.amazonaws:aws-java-sdk-s3:1.12.538' - - // QueryDSL - implementation "com.querydsl:querydsl-jpa:${queryDslVersion}:jakarta" - annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}:jakarta" - annotationProcessor "jakarta.annotation:jakarta.annotation-api" - annotationProcessor "jakarta.persistence:jakarta.persistence-api" - - // Swagger (springdoc) - implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.5.0' - - // Lombok - compileOnly 'org.projectlombok:lombok' - annotationProcessor 'org.projectlombok:lombok' - - // Test - testImplementation 'org.springframework.boot:spring-boot-starter-test' - testRuntimeOnly 'org.junit.platform:junit-platform-launcher' + // Spring Boot + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'org.springframework.boot:spring-boot-starter-security' + implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-validation' + + // JWT + implementation 'io.jsonwebtoken:jjwt-api:0.11.5' + runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5' + runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.5' + + // DB + runtimeOnly 'com.h2database:h2' + runtimeOnly 'com.mysql:mysql-connector-j' + + // AWS + implementation 'com.amazonaws:aws-java-sdk-s3:1.12.538' + + // QueryDSL + implementation "com.querydsl:querydsl-jpa:${queryDslVersion}:jakarta" + annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}:jakarta" + annotationProcessor "jakarta.annotation:jakarta.annotation-api" + annotationProcessor "jakarta.persistence:jakarta.persistence-api" + + // Swagger (springdoc) + implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.5.0' + + // Lombok + compileOnly 'org.projectlombok:lombok' + annotationProcessor 'org.projectlombok:lombok' + + // Test + testImplementation 'org.springframework.boot:spring-boot-starter-test' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' +} +// 테스트 설정 (JUnit 플랫폼 사용) tasks.named('test') { - useJUnitPlatform() + useJUnitPlatform() } -// WAR 파일 안 만들게 설정 +// WAR 파일 비활성화 (jar만 생성) jar { - enabled = false + enabled = false } // QueryDSL 설정 def querydslDir = "src/main/generated" sourceSets { - main { - java { - srcDirs += querydslDir - } - } + main { + java { + srcDirs += querydslDir + } + } } tasks.withType(JavaCompile).configureEach { - options.annotationProcessorGeneratedSourcesDirectory = file(querydslDir) + options.annotationProcessorGeneratedSourcesDirectory = file(querydslDir) } - - diff --git a/src/main/java/com/example/FixLog/config/SecurityConfig.java b/src/main/java/com/example/FixLog/config/SecurityConfig.java index d425586..ede3958 100644 --- a/src/main/java/com/example/FixLog/config/SecurityConfig.java +++ b/src/main/java/com/example/FixLog/config/SecurityConfig.java @@ -29,6 +29,7 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { .csrf(csrf -> csrf.disable()) .cors(Customizer.withDefaults()) // CORS 설정 추가 (WebConfig와 연결됨) .authorizeHttpRequests(auth -> auth + .requestMatchers(HttpMethod.GET, "/", "/main", "/main/**").permitAll() .requestMatchers(HttpMethod.GET, "/auth/**").permitAll() .requestMatchers(HttpMethod.POST, "/auth/**").permitAll() .requestMatchers(HttpMethod.POST, "/members/signup").permitAll() diff --git a/src/main/java/com/example/FixLog/controller/MypagePostController.java b/src/main/java/com/example/FixLog/controller/MypagePostController.java index 4635ef6..97bfab9 100644 --- a/src/main/java/com/example/FixLog/controller/MypagePostController.java +++ b/src/main/java/com/example/FixLog/controller/MypagePostController.java @@ -44,7 +44,7 @@ public ResponseEntity>> getLiked String email = userDetails.getUsername(); PageResponseDto result = mypagePostService.getLikedPosts(email, page, sort, size); return ResponseEntity.ok(Response.success("내가 좋아요한 글 보기 성공", result)); - } + } diff --git a/src/main/java/com/example/FixLog/util/JwtUtil.java b/src/main/java/com/example/FixLog/util/JwtUtil.java index 6ef7972..4db6170 100644 --- a/src/main/java/com/example/FixLog/util/JwtUtil.java +++ b/src/main/java/com/example/FixLog/util/JwtUtil.java @@ -14,7 +14,7 @@ @Component public class JwtUtil { - @Value("${jwt.secret}") + @Value("${spring.jwt.secret}") private String secretKeyString; private Key secretKey; @@ -59,4 +59,4 @@ public String getEmailFromToken(String token) { public Long getUserIdFromToken(String token) { return getClaims(token).get("userId", Long.class); } -} \ No newline at end of file +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index d119f1e..786104f 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,13 +1,8 @@ spring.application.name=FixLog - ##### [DEV] ##### server.port=8083 -# DB - -server.port=8083 - # DB (MySQL) spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://fixlog-db.c7cau8y2srl7.ap-northeast-2.rds.amazonaws.com:3306/fixlog?serverTimezone=Asia/Seoul @@ -29,14 +24,10 @@ cloud.aws.s3.bucket=${AWS_S3_BUCKET} # JWT jwt.secret=${JWT_KEY} -# ?? ?? +# Spring Security 디버깅 로그 logging.level.org.springframework.security=DEBUG - - - ##### [PROD] ##### - # server.port=8083 # # spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver