Skip to content

Conversation

@CSE-Shaco
Copy link
Contributor

@CSE-Shaco CSE-Shaco commented Jan 8, 2026

πŸ“Œ μ—°κ΄€λœ 이슈

ex) #이슈번호, #이슈번호

✨ μž‘μ—… λ‚΄μš©

이번 PRμ—μ„œ μž‘μ—…ν•œ λ‚΄μš©μ„ κ°„λž΅νžˆ μ„€λͺ…ν•΄μ£Όμ„Έμš”

πŸ’¬ 리뷰 μš”κ΅¬μ‚¬ν•­(선택)

Summary by CodeRabbit

Release Notes

  • Chores

    • μ—…κ·Έλ ˆμ΄λ“œ: Spring Boot 3.3.6 β†’ 3.5.9, Java 17 β†’ 25, Gradle 8.11.1 β†’ 9.1.0
    • μ˜μ‘΄μ„± μ—…λ°μ΄νŠΈ 및 λ³΄μ•ˆ 패치 적용
    • Spotless μ½”λ“œ ν¬λ§€νŒ… ν”ŒλŸ¬κ·ΈμΈ μΆ”κ°€
  • Refactor

    • S3 ꡬ성 관리 μ€‘μ•™ν™”λ‘œ μ„€μ • 일관성 κ°œμ„ 
    • AWS 및 S3 μ„€μ • ꡬ쑰 κ°œμ„  (dev, local, prod, test ν™˜κ²½)

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link

coderabbitai bot commented Jan 8, 2026

Walkthrough

Spring Boot 버전을 3.3.6μ—μ„œ 3.5.9둜, Javaλ₯Ό 17μ—μ„œ 25둜, Gradle을 8.11.1μ—μ„œ 9.1.0으둜 μ—…κ·Έλ ˆμ΄λ“œν–ˆμŠ΅λ‹ˆλ‹€. λΉŒλ“œ ꡬ성에 버전 ν•€κ³Ό Spotless ν”ŒλŸ¬κ·ΈμΈμ„ μΆ”κ°€ν•˜κ³ , μ˜μ‘΄μ„±μ„ ν˜„λŒ€ν™”ν–ˆμŠ΅λ‹ˆλ‹€. S3Properties μ„€μ • λΉˆμ„ λ„μž…ν•˜μ—¬ S3 버킷 관리λ₯Ό μ€‘μ•™ν™”ν•˜κ³ , ν™˜κ²½λ³„ YAML 파일의 AWS/S3 ꡬ성을 μž¬κ΅¬μ„±ν–ˆμŠ΅λ‹ˆλ‹€.

Changes

λΉ„κ³  / 파일 λ³€κ²½ μš”μ•½
λΉŒλ“œ ꡬ성
build.gradle
Spring Boot 3.3.6β†’3.5.9, Java 17β†’25둜 μ—…κ·Έλ ˆμ΄λ“œ. ext 블둝에 버전 ν•€ μΆ”κ°€(awsSpringBomVersion, springdocVersion, flywayVersion λ“±). μ˜μ‘΄μ„±μ„ ν˜„λŒ€ν™”: OpenAPI springdoc, JWTλ₯Ό jjwt-api/impl/jackson으둜 λΆ„ν• , Flyway 톡합, QueryDSL λ³€κ²½. Spotless ν”ŒλŸ¬κ·ΈμΈ μΆ”κ°€ 및 JavaCompile μž‘μ—… ꡬ성 λ³€κ²½.
Gradle 래퍼
gradle/wrapper/gradle-wrapper.properties
Gradle 8.11.1β†’9.1.0으둜 μ—…κ·Έλ ˆμ΄λ“œ.
S3 μ„€μ • 및 μ„œλΉ„μŠ€
src/main/java/inha/gdgoc/global/config/s3/S3Properties.java, src/main/java/inha/gdgoc/domain/resource/service/S3Service.java
S3Properties ꡬ성 ν”„λ‘œνΌν‹° 클래슀 μ‹ κ·œ μΆ”κ°€. S3Serviceμ—μ„œ @Value μ£Όμž…μ„ S3Properties 빈 μ˜μ‘΄μ„±μœΌλ‘œ λ³€κ²½ν•˜μ—¬ 버킷 관리 쀑앙화.
ν™˜κ²½λ³„ μ„€μ • 파일
src/main/resources/application-dev.yml, application-local.yml, application-prod.yml, src/test/resources/application-test.yml
AWS 자격 증λͺ…/리전 ꡬ성을 cloud.aws μ΅œμƒμœ„ λΈ”λ‘μœΌλ‘œ 이동. μƒˆλ‘œμš΄ app.s3.bucket ν”„λ‘œνΌν‹° μΆ”κ°€. 이전 ꡬ쑰 제거.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

🐰 μ˜μ‘΄μ„± 좀을 μΆ”λ©°, 버전을 λ©‹μ§€κ²Œ ν•€!
Java 25둜 λ„μ•½ν•˜κ³ , Gradle도 따라왔넀.
S3 섀정은 이제 κΉ”λ”ν•œ 빈 속에,
ꡬ성 νŒŒμΌλ“€λ„ μ •λ ¬λ˜μ–΄ λΉ›λ‚œλ‹€.
λΉŒλ“œ μ‹œμŠ€ν…œμ΄ μΆ˜λ‹€, ν˜„λŒ€ν™”μ˜ μ™ˆμΈ ! πŸŽ‰

πŸš₯ Pre-merge checks | βœ… 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
βœ… Passed checks (2 passed)
Check name Status Explanation
Description Check βœ… Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check βœ… Passed 제λͺ©μ΄ pull request의 μ£Όμš” λ³€κ²½ 사항을 λͺ…ν™•ν•˜κ²Œ μš”μ•½ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. Gradle/Java/Spring Boot μ—…κ·Έλ ˆμ΄λ“œμ™€ S3 μ„€μ • λ¦¬νŒ©ν„°λ§μ΄ μ‹€μ œλ‘œ λ³€κ²½ 집합에 ν¬ν•¨λ˜μ–΄ 있으며, 개발자 κ΄€μ μ—μ„œ κ°€μž₯ μ€‘μš”ν•œ λ³€κ²½ 사항을 μ •ν™•νžˆ λ°˜μ˜ν•©λ‹ˆλ‹€.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • πŸ“ Generate docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❀️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

πŸ€– Fix all issues with AI agents
In @build.gradle:
- Around line 68-75: The jakarta.persistence dependency is incorrectly marked as
compileOnly and the comment "컴파일 νƒ€μž„λ§Œ" is misleading; either remove the explicit
'jakarta.persistence:jakarta.persistence-api' entry so you rely on the
transitive jakarta.persistence provided by spring-boot-starter-data-jpa, or
change its configuration from compileOnly to implementation if you want it
declared explicitly, and update the comment accordingly; locate the dependency
declaration for 'jakarta.persistence:jakarta.persistence-api' in the
build.gradle alongside the Querydsl entries (and the comment "Querydsl APT
helper APIs (컴파일 νƒ€μž„λ§Œ)") and apply one of the two fixes.
🧹 Nitpick comments (2)
src/main/java/inha/gdgoc/global/config/s3/S3Properties.java (2)

8-14: @Component λŒ€μ‹  @EnableConfigurationProperties νŒ¨ν„΄ μ‚¬μš©μ„ ꢌμž₯ν•©λ‹ˆλ‹€.

@Component와 @ConfigurationPropertiesλ₯Ό ν•¨κ»˜ μ‚¬μš©ν•˜λŠ” 것은 μž‘λ™ν•˜μ§€λ§Œ, Spring Boot의 ꢌμž₯ νŒ¨ν„΄μ€ @EnableConfigurationPropertiesλ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. λ˜ν•œ bucket ν•„λ“œμ— 검증 μ–΄λ…Έν…Œμ΄μ…˜μ„ μΆ”κ°€ν•˜μ—¬ λŸ°νƒ€μž„ 였λ₯˜λ₯Ό λ°©μ§€ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

♻️ ꢌμž₯ λ¦¬νŒ©ν† λ§
+import jakarta.validation.constraints.NotEmpty;
 import lombok.Getter;
 import lombok.Setter;
 import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
+import org.springframework.validation.annotation.Validated;
 
 @Getter
 @Setter
-@Component
+@Validated
 @ConfigurationProperties("app.s3")
 public class S3Properties {
+  @NotEmpty(message = "S3 bucket name must not be empty")
   private String bucket;
 }

그리고 S3 κ΄€λ ¨ μ„€μ • 클래슀(예: S3Config)μ—μ„œ ν™œμ„±ν™”ν•˜μ„Έμš”:

@Configuration
@EnableConfigurationProperties(S3Properties.class)
public class S3Config {
  // S3Client 빈 μ„€μ • λ“±
}

13-13: λΆˆλ³€ 섀계λ₯Ό κ³ λ €ν•΄λ³΄μ„Έμš”.

ꡬ성 ν”„λ‘œνΌν‹°λŠ” 일반적으둜 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹œμž‘ μ‹œ μ„€μ •λ˜κ³  λ³€κ²½λ˜μ§€ μ•ŠμœΌλ―€λ‘œ, λΆˆλ³€(immutable) 섀계가 더 μ•ˆμ „ν•©λ‹ˆλ‹€.

♻️ λΆˆλ³€ 섀계 μ œμ•ˆ
+import lombok.RequiredArgsConstructor;
 import lombok.Getter;
-import lombok.Setter;
 import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
 
 @Getter
-@Setter
-@Component
+@RequiredArgsConstructor
 @ConfigurationProperties("app.s3")
 public class S3Properties {
-  private String bucket;
+  private final String bucket;
 }
πŸ“œ Review details

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

πŸ“₯ Commits

Reviewing files that changed from the base of the PR and between 4b979d6 and c2df32f.

πŸ“’ Files selected for processing (8)
  • build.gradle
  • gradle/wrapper/gradle-wrapper.properties
  • src/main/java/inha/gdgoc/domain/resource/service/S3Service.java
  • src/main/java/inha/gdgoc/global/config/s3/S3Properties.java
  • src/main/resources/application-dev.yml
  • src/main/resources/application-local.yml
  • src/main/resources/application-prod.yml
  • src/test/resources/application-test.yml
🧰 Additional context used
🧠 Learnings (1)
πŸ““ Common learnings
Learnt from: kaswhy
Repo: GDGoCINHA/24-2_GDGoC_Server PR: 180
File: gdgoc/build.gradle:52-54
Timestamp: 2025-08-23T03:40:02.759Z
Learning: In the gdgoc project using Spring Boot 3, the user kaswhy confirmed that spring-cloud-aws 2.2.6.RELEASE dependency is currently working for them despite known compatibility concerns with Jakarta EE migration.
🧬 Code graph analysis (1)
src/main/resources/application-prod.yml (1)
src/main/java/inha/gdgoc/global/config/s3/S3Config.java (1)
  • Configuration (11-31)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
πŸ”‡ Additional comments (17)
src/test/resources/application-test.yml (1)

49-59: LGTM!

ν…ŒμŠ€νŠΈ ν™˜κ²½μ— λ§žλŠ” AWS 및 S3 섀정이 μ˜¬λ°”λ₯΄κ²Œ κ΅¬μ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€. ν•˜λ“œμ½”λ”©λœ ν…ŒμŠ€νŠΈ 자격 증λͺ…κ³Ό 버킷 이름이 μ μ ˆν•©λ‹ˆλ‹€.

src/main/resources/application-local.yml (1)

48-58: LGTM!

둜컬 ν™˜κ²½μ˜ AWS 및 S3 섀정이 λ‹€λ₯Έ ν™˜κ²½ νŒŒμΌλ“€κ³Ό μΌκ΄€λ˜κ²Œ κ΅¬μ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

build.gradle (10)

39-47: CVE λŒ€μ‘ 버전 고정이 μ μ ˆν•©λ‹ˆλ‹€.

CVE-2025-48924 및 CVE-2021-47621에 λŒ€μ‘ν•˜κΈ° μœ„ν•œ 버전 κ°•μ œ 섀정이 μ˜¬λ°”λ₯΄κ²Œ κ΅¬μ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.


58-61: commons-lang3 μ˜μ‘΄μ„± 좩돌 해결이 μ μ ˆν•©λ‹ˆλ‹€.

springdocμ—μ„œ commons-lang3λ₯Ό μ œμ™Έν•˜κ³  μ•ˆμ „ν•œ 버전(3.18.0)을 λͺ…μ‹œμ μœΌλ‘œ μΆ”κ°€ν•œ 것은 CVE λŒ€μ‘μ„ μœ„ν•œ μ˜¬λ°”λ₯Έ μ ‘κ·Όμž…λ‹ˆλ‹€.


110-115: Spotless ν”ŒλŸ¬κ·ΈμΈ μΆ”κ°€κ°€ μ μ ˆν•©λ‹ˆλ‹€.

Google Java Format을 μ‚¬μš©ν•œ μ½”λ“œ ν¬λ§·νŒ… μžλ™ν™”λŠ” 쒋은 μ ‘κ·Όμž…λ‹ˆλ‹€. λ‹€λ§Œ, κΈ°μ‘΄ μ½”λ“œλ² μ΄μŠ€μ— 적용 μ‹œ λŒ€λŸ‰μ˜ 포맷 변경이 λ°œμƒν•  수 μžˆμœΌλ‹ˆ 별도 μ»€λ°‹μœΌλ‘œ κ΄€λ¦¬ν•˜λŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€.


122-124: JavaCompile μ„€μ • μ—…λ°μ΄νŠΈκ°€ μ˜¬λ°”λ¦…λ‹ˆλ‹€.

generatedSourceOutputDirectoryλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ΅œμ‹  Gradle 방식이며, QueryDSL Q클래슀 생성 경둜λ₯Ό μ˜¬λ°”λ₯΄κ²Œ μ„€μ •ν–ˆμŠ΅λ‹ˆλ‹€.


77-80: JWT μ˜μ‘΄μ„± λͺ¨λ“ˆν™”κ°€ μ μ ˆν•˜λ©° κΈ°μ‘΄ μ½”λ“œμ™€ μ™„λ²½ν•˜κ²Œ ν˜Έν™˜λ©λ‹ˆλ‹€.

κΈ°μ‘΄ μ½”λ“œμ—μ„œ μ‚¬μš©ν•˜λŠ” Claims, Jwts, SignatureAlgorithm λ“±μ˜ ν΄λž˜μŠ€λŠ” λͺ¨λ‘ jjwt-api λͺ¨λ“ˆμ— ν¬ν•¨λ˜μ–΄ 있으며, κ΅¬ν˜„μ²΄λ‚˜ jackson κ΄€λ ¨ μ½”λ“œμ— 직접 μ˜μ‘΄ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. JJWT 0.13.0의 ꢌμž₯λ˜λŠ” λͺ¨λ“ˆν™” λ°©μ‹μœΌλ‘œ μ˜¬λ°”λ₯΄κ²Œ κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.


27-37: μ˜μ‘΄μ„± 버전 핀이 μ μ ˆν•˜κ²Œ κ΅¬μ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

ext 블둝에 μ •μ˜λœ λͺ¨λ“  버전(springdoc 2.8.15, flyway 11.19.0, postgresql 42.7.3, querydsl 6.10.1, jjwt 0.13.0 λ“±)이 Spring Boot 3.5.9와 ν˜Έν™˜λ˜λ©°, awspringBomVersion 3.4.2κ°€ dependencyManagementμ—μ„œ μ˜¬λ°”λ₯΄κ²Œ μž„ν¬νŠΈλ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. λͺ¨λ“  μ˜μ‘΄μ„±μ΄ 각각의 μ΅œμ‹  μ•ˆμ • λ²„μ „μœΌλ‘œ μ„ νƒλ˜μ—ˆμœΌλ―€λ‘œ ν˜Έν™˜μ„± λ¬Έμ œκ°€ μ—†μŠ΅λ‹ˆλ‹€.


106-106: AWS Spring Cloud BOM 3.4.2λŠ” Spring Boot 3.5.9와 ν˜Έν™˜λ©λ‹ˆλ‹€. μΆ”κ°€ μ‘°μΉ˜κ°€ ν•„μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

ν˜„μž¬ μ„€μ •λœ BOM 버전 3.4.2λŠ” 2025.0.x νŠΈλ ˆμΈμ„ μ§€μ›ν•˜λ©°, Spring Boot 3.5.xμ™€μ˜ ν˜Έν™˜μ„±μ΄ ν™•μΈλ˜μ—ˆμŠ΅λ‹ˆλ‹€.


3-3: Spring Boot 3.5.9λŠ” 2025λ…„ 12μ›” 18일에 곡식 λ¦΄λ¦¬μŠ€λ˜μ—ˆμœΌλ©°, Maven Centralμ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

Spring Boot 3.5.9λŠ” 3.5 μ‹œλ¦¬μ¦ˆμ˜ μ΅œμ‹  버전이며 2025λ…„ 12μ›” 18일에 정식 λ¦΄λ¦¬μŠ€λ˜μ—ˆμŠ΅λ‹ˆλ‹€. Java 17 이상, Spring Framework 6.2.15, Jackson 2.19.4, Project Reactor 3.5.9 λ“± ν•„μš”ν•œ μ˜μ‘΄μ„±λ“€μ΄ λͺ…ν™•ν•˜κ²Œ κ΄€λ¦¬λ˜κ³  있으며, Tomcat 10.1, Jetty 12.0, Undertow 2.3 λ“±μ˜ μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆμ™€ ν˜Έν™˜λ©λ‹ˆλ‹€.


13-13: Java 25λŠ” 2025λ…„ 9μ›” 16일에 정식 μΆœμ‹œλ˜μ—ˆμœΌλ©°, ν˜„μž¬ LTS(Long-Term Support) λ²„μ „μž…λ‹ˆλ‹€. 2026λ…„ 1μ›” κΈ°μ€€μœΌλ‘œ Java 25λŠ” Java 17, Java 21κ³Ό ν•¨κ»˜ 적극적으둜 지원 쀑인 LTS 버전이며, μ΅œμ‹  LTS λ²„μ „μž…λ‹ˆλ‹€. Oracle은 2021λ…„λΆ€ν„° LTS μ£ΌκΈ°λ₯Ό 2λ…„ λ‹¨μœ„λ‘œ λ³€κ²½ν–ˆμœΌλ―€λ‘œ (Java 17, 21, 25, 27...), Java 25 섀정은 μ˜λ„λœ 것이며 Java 21의 μ˜€νƒ€κ°€ μ•„λ‹™λ‹ˆλ‹€. ν˜„μž¬ 섀정이 μ μ ˆν•©λ‹ˆλ‹€.

Likely an incorrect or invalid review comment.


86-87: Flyway 11.19.0은 이미 μ μš©λ˜μ–΄ μžˆμœΌλ―€λ‘œ μΆ”κ°€ μ—…κ·Έλ ˆμ΄λ“œλŠ” λΆˆν•„μš”ν•©λ‹ˆλ‹€.

build.gradleμ—μ„œ flyway-core와 flyway-database-postgresql이 λ™μΌν•œ 버전(11.19.0)으둜 μ˜¬λ°”λ₯΄κ²Œ μ„€μ •λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. ν˜„μž¬ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ μŠ€ν¬λ¦½νŠΈλ“€(DO 블둝, μ‹œμŠ€ν…œ μΉ΄νƒˆλ‘œκ·Έ 쑰회, JSONB, timestamptz λ“±)은 λͺ¨λ‘ Flyway 11.19.0μ—μ„œ μ§€μ›ν•˜λŠ” κΈ°λŠ₯이며, ν˜Έν™˜μ„± λ¬Έμ œλŠ” μ—†μŠ΅λ‹ˆλ‹€.

Likely an incorrect or invalid review comment.

src/main/resources/application-prod.yml (1)

49-59: S3 자격 증λͺ… 섀정이 μ˜¬λ°”λ₯΄κ²Œ μž‘λ™ν•˜λŠ”μ§€ 확인 ν•„μš”

YAMLμ—μ„œ spring.cloud.aws.credentials.access-key와 spring.cloud.aws.credentials.secret-key둜 λͺ…μ‹œμ  자격 증λͺ…을 μ„€μ •ν•œ 경우, Spring Cloud AWS 곡식 λ¬Έμ„œμ— λ”°λ₯΄λ©΄ 이 섀정은 κΈ°λ³Έ 자격 증λͺ… 제곡자(DefaultCredentialsProvider)λ₯Ό λ¬΄μ‹œν•˜κ³  overrideν•©λ‹ˆλ‹€. λ”°λΌμ„œ YAML에 μ„€μ •λœ 정적 자격 증λͺ…이 μš°μ„ μ μœΌλ‘œ μ‚¬μš©λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

λ‹€λ§Œ S3Config.java의 μ‹€μ œ κ΅¬ν˜„ 방식을 확인해야 ν•©λ‹ˆλ‹€:

  • Spring Cloud Auto-configuration을 μ •μƒμ μœΌλ‘œ μ‚¬μš© 쀑인지 확인
  • μ»€μŠ€ν…€ 자격 증λͺ… 제곡자λ₯Ό μˆ˜λ™μœΌλ‘œ μƒμ„±ν•˜μ—¬ YAML 섀정을 μš°νšŒν•˜μ§€λŠ” μ•ŠλŠ”μ§€ 확인
  • μ‚¬μš© 쀑인 Spring Cloud AWS 버전이 YAML 자격 증λͺ… 섀정을 μ˜¬λ°”λ₯΄κ²Œ μ§€μ›ν•˜λŠ”μ§€ 확인
src/main/java/inha/gdgoc/domain/resource/service/S3Service.java (3)

20-20: S3Properties μ£Όμž…μ΄ μ˜¬λ°”λ₯΄κ²Œ κ΅¬ν˜„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μ€‘μ•™ν™”λœ ꡬ성 관리λ₯Ό μœ„ν•΄ S3Propertiesλ₯Ό μƒμ„±μž μ£Όμž…μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 것은 쒋은 μ ‘κ·Ό λ°©μ‹μž…λ‹ˆλ‹€.

S3Properties에 검증 둜직이 μΆ”κ°€λ˜μ—ˆλŠ”μ§€ ν™•μΈν•΄μ£Όμ„Έμš”. bucket 값이 μ„€μ •λ˜μ§€ μ•ŠμœΌλ©΄ λŸ°νƒ€μž„ 였λ₯˜κ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. S3Properties ν΄λž˜μŠ€μ— @NotEmpty 검증을 μΆ”κ°€ν•˜λŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€.


22-34: LGTM! μ—…λ‘œλ“œ 둜직이 μ˜¬λ°”λ₯΄κ²Œ λ¦¬νŒ©ν† λ§λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

s3Properties.getBucket()을 μ‚¬μš©ν•˜μ—¬ 버킷 이름을 λ™μ μœΌλ‘œ κ°€μ Έμ˜€λŠ” λ°©μ‹μœΌλ‘œ 잘 λ³€κ²½λ˜μ—ˆμŠ΅λ‹ˆλ‹€. κΈ°μ‘΄ λ‘œμ§μ€ μœ μ§€ν•˜λ©΄μ„œ ꡬ성 κ΄€λ¦¬λ§Œ κ°œμ„ ν–ˆμŠ΅λ‹ˆλ‹€.


36-40: LGTM! URL 생성 둜직이 μ˜¬λ°”λ₯΄κ²Œ λ¦¬νŒ©ν† λ§λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

GetUrlRequestμ—μ„œλ„ μ€‘μ•™ν™”λœ 버킷 ꡬ성을 μΌκ΄€λ˜κ²Œ μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

src/main/resources/application-dev.yml (1)

49-60: S3 ꡬ성 쀑앙화가 잘 μ μš©λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

AWS 자격 증λͺ…κ³Ό S3 버킷 섀정을 λΆ„λ¦¬ν•˜μ—¬ κ΅¬μ„±ν•œ 것은 쒋은 μ ‘κ·Ό λ°©μ‹μž…λ‹ˆλ‹€. app.s3.bucket ν”„λ‘œνΌν‹°λ₯Ό 톡해 μ• ν”Œλ¦¬μΌ€μ΄μ…˜λ³„ 섀정을 λͺ…ν™•ν•˜κ²Œ κ΅¬λΆ„ν–ˆμŠ΅λ‹ˆλ‹€. Spring Boot 3.5.9와 spring-cloud-aws 3.4.2λŠ” κ³΅μ‹μ μœΌλ‘œ ν˜Έν™˜λ˜λ―€λ‘œ ν˜Έν™˜μ„± λ¬Έμ œλŠ” μ—†μŠ΅λ‹ˆλ‹€.

Comment on lines +68 to +75
// --- Querydsl (OpenFeign fork) ---
implementation "io.github.openfeign.querydsl:querydsl-jpa:${querydslVersion}"
annotationProcessor "io.github.openfeign.querydsl:querydsl-apt:${querydslVersion}:jakarta"
annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"

// --- 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'
// Querydsl APT helper APIs (컴파일 νƒ€μž„λ§Œ)
compileOnly 'jakarta.annotation:jakarta.annotation-api'
compileOnly 'jakarta.persistence:jakarta.persistence-api'
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟑 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Explore repository structure first
echo "=== Repository structure ==="
find . -type f -name "build.gradle" | head -5
ls -la | grep -E "src|build"

echo -e "\n=== Check for QueryDSL Q-class usage ==="
rg -n "import.*\bQ[A-Z]\w*|JPAQueryFactory" src --type java -i | head -20

echo -e "\n=== Check all QueryDSL imports ==="
rg -n "querydsl|jpa\.repository" src --type java | head -20

echo -e "\n=== Check Jakarta API usage ==="
rg -n "jakarta\.(annotation|persistence)" src --type java | head -20

echo -e "\n=== Look for build/generated directory ==="
find . -path "*/build/generated*" -type d 2>/dev/null | head -10

echo -e "\n=== Check complete build.gradle file ==="
wc -l build.gradle

Repository: GDGoCINHA/24-2_GDGoC_Server

Length of output: 7703


🏁 Script executed:

#!/bin/bash
# Get more context around the QueryDSL configuration
echo "=== Full build.gradle with line numbers ==="
cat -n build.gradle | head -90

echo -e "\n=== Check for querydsl in entire build.gradle ==="
rg -n "querydsl" build.gradle

echo -e "\n=== Check for any other QueryDSL related config ==="
rg -n "JPAQueryFactory|@EnableJpaRepositories" build.gradle

Repository: GDGoCINHA/24-2_GDGoC_Server

Length of output: 4011


🏁 Script executed:

#!/bin/bash
# Check for QueryDSL configuration and Jakarta API actual usage

echo "=== Search for JPAQueryFactory bean configuration ==="
rg -n "JPAQueryFactory|@Configuration|@Bean" src/main/java --type java -A 3 | head -40

echo -e "\n=== Check entity annotations (runtime usage) ==="
rg -n "@Entity|@Table|@Column" src/main/java --type java | head -10

echo -e "\n=== Check if there's any gradle wrapper or recent build logs ==="
ls -la gradlew* 2>/dev/null || echo "No gradle wrapper"
find . -name "*.log" -type f 2>/dev/null | head -5

echo -e "\n=== Check pom.xml or any Maven config ==="
find . -name "pom.xml" 2>/dev/null

echo -e "\n=== Verify git history for this change ==="
git log --oneline -20 build.gradle 2>/dev/null || echo "Not a git repo or no history"
</script>

Repository: GDGoCINHA/24-2_GDGoC_Server

Length of output: 4846


🏁 Script executed:

#!/bin/bash
# Fix the previous script and check for JPAQueryFactory bean definition

echo "=== Search specifically for JPAQueryFactory bean ==="
find src -name "*.java" -type f -exec grep -l "JPAQueryFactory" {} \; | xargs grep -A 10 "@Bean" | grep -A 10 "JPAQueryFactory"

echo -e "\n=== Check if there's a QueryDSL config class ==="
find src -name "*.java" -type f -exec grep -l "QuerydslConfig\|QueryDslConfig" {} \;

echo -e "\n=== Look for Spring Data QueryDSL repository configuration ==="
rg -n "@EnableJpaRepositories|QuerydslPredicateExecutor" src/main/java --type java -B 2

echo -e "\n=== Check what Spring Boot version brings in ==="
grep "spring-boot" build.gradle | head -3

echo -e "\n=== Check if jakarta.persistence is transitive from spring-boot-starter-data-jpa ==="
echo "Checking build.gradle for explicit spring-boot-starter-data-jpa..."
rg -n "spring-boot-starter-data-jpa" build.gradle

Repository: GDGoCINHA/24-2_GDGoC_Server

Length of output: 1186


🏁 Script executed:

#!/bin/bash
# Read the QueryDslConfig file to understand the full context

echo "=== Read QueryDslConfig.java ==="
cat -n src/main/java/inha/gdgoc/global/config/querydsl/QueryDslConfig.java

echo -e "\n=== Check Jakarta API transitive dependency from spring-boot-starter-data-jpa ==="
echo "Spring Boot 3.5.9 includes spring-data-jpa which transitively includes jakarta.persistence"
echo "Source: Spring Boot 3.5.x BOM management"

echo -e "\n=== Verify OpenFeign fork QueryDSL provides com.querydsl packages ==="
echo "The OpenFeign fork (io.github.openfeign.querydsl) is a drop-in replacement for com.querydsl"
echo "It provides the same com.querydsl.* package structure"

echo -e "\n=== Check if compileOnly configuration would cause issues ==="
echo "If jakarta.persistence is only available at compile-time but not runtime:"
echo "- Entity annotations would fail to load at runtime"
echo "- JPAQueryFactory initialization would fail"
echo "- The application would not start"
</script>

Repository: GDGoCINHA/24-2_GDGoC_Server

Length of output: 1568


🏁 Script executed:

cat -n src/main/java/inha/gdgoc/global/config/querydsl/QueryDslConfig.java

Repository: GDGoCINHA/24-2_GDGoC_Server

Length of output: 715


OpenFeign fork λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ€ μ μ ˆν•˜λ©°, Jakarta API μ˜μ‘΄μ„± ꡬ성을 μ •λ¦¬ν•˜μ„Έμš”.

OpenFeign fork(io.github.openfeign.querydsl)둜의 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ€ Spring Boot 3.5.9의 Jakarta μš”κ΅¬μ‚¬ν•­μ„ λ§Œμ‘±ν•˜λŠ” μ˜¬λ°”λ₯Έ μ„ νƒμž…λ‹ˆλ‹€. μ½”λ“œμ—μ„œ QueryDSL이 μ •μƒμ μœΌλ‘œ μž‘λ™ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

λ‹€λ§Œ Jakarta API μ˜μ‘΄μ„± 선언에 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€:

  • jakarta.persistence-apiλŠ” μ—”ν‹°ν‹° ν΄λž˜μŠ€μ—μ„œ λŸ°νƒ€μž„μ— μ‚¬μš©λ˜μ§€λ§Œ(@Entity, @Table, @Column λ“±), compileOnly둜 μ„ μ–Έλ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  • μ‹€μ œλ‘œλŠ” spring-boot-starter-data-jpaκ°€ jakarta.persistenceλ₯Ό λŸ°νƒ€μž„μ— 이미 μ œκ³΅ν•˜λ―€λ‘œ μž‘λ™ν•˜μ§€λ§Œ, ꡬ성이 ν˜Όλž€μŠ€λŸ½μŠ΅λ‹ˆλ‹€.
  • 주석 "컴파일 νƒ€μž„λ§Œ"은 λΆ€μ •ν™•ν•©λ‹ˆλ‹€.

κ°œμ„  λ°©μ•ˆ:

  • jakarta.persistence-apiλ₯Ό μ œκ±°ν•˜κ³  spring-boot-starter-data-jpa의 좔이적 μ˜μ‘΄μ„±μ—λ§Œ μ˜μ‘΄ν•˜κ±°λ‚˜
  • compileOnlyλ₯Ό implementation으둜 λ³€κ²½ν•˜μ—¬ λŸ°νƒ€μž„ ν•„μš”μ„±μ„ λͺ…ν™•νžˆ ν•˜κ³  주석을 μˆ˜μ •ν•˜μ„Έμš”.
πŸ€– Prompt for AI Agents
In @build.gradle around lines 68 - 75, The jakarta.persistence dependency is
incorrectly marked as compileOnly and the comment "컴파일 νƒ€μž„λ§Œ" is misleading;
either remove the explicit 'jakarta.persistence:jakarta.persistence-api' entry
so you rely on the transitive jakarta.persistence provided by
spring-boot-starter-data-jpa, or change its configuration from compileOnly to
implementation if you want it declared explicitly, and update the comment
accordingly; locate the dependency declaration for
'jakarta.persistence:jakarta.persistence-api' in the build.gradle alongside the
Querydsl entries (and the comment "Querydsl APT helper APIs (컴파일 νƒ€μž„λ§Œ)") and
apply one of the two fixes.

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Explore gradle and build configuration files
echo "=== Searching for build configuration files ==="
find . -maxdepth 3 -type f \( -name "build.gradle*" -o -name "settings.gradle*" -o -name "gradle.properties" \) | head -20

Repository: GDGoCINHA/24-2_GDGoC_Server

Length of output: 151


🏁 Script executed:

#!/bin/bash
# Check for Spring Boot version and plugins in build files
echo "=== Examining build configuration ==="
find . -maxdepth 3 -type f -name "build.gradle*" -exec echo "File: {}" \; -exec head -50 {} \;

Repository: GDGoCINHA/24-2_GDGoC_Server

Length of output: 1190


🌐 Web query:

Gradle 9.1.0 breaking changes compatibility Java Spring Boot

πŸ’‘ Result:

Short summary β€” what changed in Gradle 9.1.0 that can break Java / Spring Boot builds, and what to do

  • Key breaking/runtime changes you must check:

    • Gradle 9.x requires a JVM β‰₯ 17 to run the Gradle daemon (you can still target older Java via toolchains). (docs.gradle.org)
    • Gradle 9.1 adds language/runtime changes (Kotlin embedded bumped, stricter Kotlin DSL typing) that can make plugins/build scripts fail to compile. (docs.gradle.org)
    • Default reproducible archives, file-order/timestamp/permission changes may affect tasks that rely on non‑deterministic JAR/ZIP contents. (gradle.org)
    • API surface changes (some methods made final / other deprecated APIs removed) and new APIs (e.g. AttributeContainer.addAllLater) may break third‑party or in‑repo plugins. (docs.gradle.org)
    • Configuration‑cache and other internal improvements: some custom task/plugin code may require adaptation. (docs.gradle.org)
  • Java 25 support caveat

    • Gradle 9.1.0 advertises support for Java 25, but there are user/issue reports that Java 25 may still be flagged as β€œincompatible” in some contexts (e.g. with certain Kotlin plugins / IDE sync). Test carefully; don’t assume Java 25 is fully smooth in your toolchain yet. (docs.gradle.org)
  • Spring Boot compatibility

    • Official Spring Boot docs (system requirements and Gradle plugin docs) list explicit support for Gradle 7.x (7.5+) and 8.x. Spring Boot documentation does not yet claim Gradle 9.x support β€” so upgrading a Spring Boot project to use Gradle 9.1 may run into unsupported-plugin or plugin‑API issues. For production Spring Boot projects prefer to stay on the highest Gradle version that Spring Boot documents as supported (or verify plugin support for your Spring Boot version). (docs.enterprise.spring.io)
  • Practical checklist before upgrading to Gradle 9.1.0

    1. Ensure Gradle daemon will run on JDK β‰₯ 17 (set CI runners / IDE Gradle JVM accordingly). (docs.gradle.org)
    2. Run ./gradlew wrapper --gradle-version=9.1.0 in a branch and run a full CI build, tests, bootJar/bootRun, and any custom plugin tasks. Fix Kotlin DSL/type errors and any deprecated-API failures. (docs.gradle.org)
    3. Verify Spring Boot Gradle plugin tasks (bootJar, bootRun, dependency management) and any Spring Boot community plugins you use still work; if not, stay on Gradle 8.x until an official Spring Boot statement or plugin update adds Gradle 9 support. (docs.enterprise.spring.io)
    4. If you rely on Java 25, test IDE sync (IntelliJ/Gradle Tooling API), Kotlin compilation, and plugin behavior β€” watch for the reported incompatibility. (github.com)

If you want, I can:

  • check your build.gradle / settings and list likely incompatibilities for Gradle 9.1, or
  • run a short compatibility checklist for a given Spring Boot and Java version you use (tell me your Spring Boot version, Gradle plugin version, and JDK versions).

Citations:


🌐 Web query:

Spring Boot 3.5.9 Gradle 9.1.0 compatibility

πŸ’‘ Result:

Short answer: Spring Boot 3.5.9 does not officially list Gradle 9.1.0 as a supported build tool β€” the 3.5.x docs specify Gradle 7.x and 8.x as the supported ranges. Gradle 9 support was introduced with the Spring Boot 4.x line, so Gradle 9.x is officially supported starting in 4.0.0. [1][2][3]

Recommendation: use a Gradle 8.x wrapper (one of the 8.x versions the 3.5 docs call out) for guaranteed support with Spring Boot 3.5.9; you can try Gradle 9.1.0 (it may work thanks to Gradle backward compatibility) but it would be unsupported β€” test your build and CI thoroughly if you go that route. [1][2][3]

Sources:

  • Spring Boot 3.5.x system requirements (Gradle 7.x / 8.x). [1]
  • Spring Boot 3.5.9 release announcement. [2]
  • Spring Boot 4.x notes stating Gradle 9 support was added in 4.0.0. [3]

Gradle 9.1.0은 Spring Boot 3.5.9와 κ³΅μ‹μ μœΌλ‘œ λ―Έμ§€μ›λ˜λ―€λ‘œ ν˜Έν™˜μ„± 검증이 ν•„μˆ˜μž…λ‹ˆλ‹€.

Spring Boot 3.5.9λŠ” Gradle 7.x(7.5+)와 8.x만 곡식 μ§€μ›ν•˜λ©°, Gradle 9.x 지원은 Spring Boot 4.0.0λΆ€ν„° μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€. ν˜„μž¬ μ„€μ •μ˜ Gradle 9.1.0 + Spring Boot 3.5.9 쑰합은 κ³΅μ‹μ μœΌλ‘œ λ―Έμ§€μ›λ©λ‹ˆλ‹€. λ˜ν•œ ν”„λ‘œμ νŠΈμ˜ Java 25 섀정은 Gradle 9.1.0κ³Ό Kotlin ν”ŒλŸ¬κ·ΈμΈμ—μ„œ ν˜Έν™˜μ„± λ¬Έμ œκ°€ λ³΄κ³ λ˜μ—ˆμœΌλ―€λ‘œ μ£Όμ˜κ°€ ν•„μš”ν•©λ‹ˆλ‹€.

λ‹€μŒ 쀑 ν•˜λ‚˜λ₯Ό ꢌμž₯ν•©λ‹ˆλ‹€:

  • Gradle 8.x의 μ΅œμ‹  λ²„μ „μœΌλ‘œ λ‹€μš΄κ·Έλ ˆμ΄λ“œ (ꢌμž₯: μ•ˆμ •μ μΈ 지원)
  • Spring Boot 4.0.0 μ΄μƒμœΌλ‘œ μ—…κ·Έλ ˆμ΄λ“œ (Gradle 9.x 곡식 지원)

ν˜„μž¬ μ‘°ν•©μœΌλ‘œ μ§„ν–‰ν•˜λ €λ©΄ 전체 λΉŒλ“œ, ν…ŒμŠ€νŠΈ, bootJar/bootRun을 ν¬ν•¨ν•œ μ™„μ „ν•œ CI 검증이 ν•„μˆ˜μž…λ‹ˆλ‹€.

@CSE-Shaco CSE-Shaco merged commit e6c47e5 into GDGoCINHA:develop Jan 8, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant