Skip to content

Conversation

@doup2001
Copy link
Member

@doup2001 doup2001 commented Jan 18, 2026

πŸ“Œ μž‘μ—…ν•œ λ‚΄μš©

πŸ” μ°Έκ³  사항

πŸ–ΌοΈ μŠ€ν¬λ¦°μƒ·

πŸ”— κ΄€λ ¨ 이슈

βœ… 체크리슀트

  • λ‘œμ»¬μ—μ„œ λΉŒλ“œ 및 ν…ŒμŠ€νŠΈ μ™„λ£Œ
  • μ½”λ“œ 리뷰 반영 μ™„λ£Œ
  • λ¬Έμ„œν™” ν•„μš” μ—¬λΆ€ 확인

Summary by CodeRabbit

릴리슀 λ…ΈνŠΈ

  • μƒˆλ‘œμš΄ κΈ°λŠ₯

    • ν”„λ‘œλ•μ…˜ ν™˜κ²½μ„ μœ„ν•œ API λ¬Έμ„œ 섀정이 μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
  • μž‘μ—…

    • CI/CD νŒŒμ΄ν”„λΌμΈμ΄ ν”„λ‘œλ•μ…˜ 인증 섀정을 μ‚¬μš©ν•˜λ„λ‘ μ—…λ°μ΄νŠΈλ˜μ—ˆμŠ΅λ‹ˆλ‹€.
    • 배포 ν™˜κ²½μ—μ„œ μ„€μ • 파일 λ‘œλ”© 방식이 κ°œμ„ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

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

@coderabbitai
Copy link

coderabbitai bot commented Jan 18, 2026

Walkthrough

ν”„λ‘œλ•μ…˜ ν™˜κ²½ 섀정을 μ •λ¦¬ν•˜λŠ” λ³€κ²½μ‚¬ν•­μž…λ‹ˆλ‹€. CI/CD μ›Œν¬ν”Œλ‘œμš°λ₯Ό ν”„λ‘œλ•μ…˜ OAuth2 μ‹œν¬λ¦Ώ μ‚¬μš©μœΌλ‘œ μ—…λ°μ΄νŠΈν•˜κ³ , Docker 섀정을 μ™ΈλΆ€ μ„€μ • 파일 λ§ˆμš΄νŒ… λ°©μ‹μœΌλ‘œ λ³€κ²½ν•˜λ©°, ν”„λ‘œλ•μ…˜ Swagger μ„€μ • 클래슀λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.

Changes

Cohort / File(s) λ³€κ²½ μš”μ•½
CI/CD μ›Œν¬ν”Œλ‘œμš°
\.github/workflows/main-ci-cd.yml``
OAuth2 μ„€μ • νŒŒμΌμ„ 개발 ν™˜κ²½ μ‹œν¬λ¦Ώμ—μ„œ ν”„λ‘œλ•μ…˜ ν™˜κ²½ μ‹œν¬λ¦ΏμœΌλ‘œ λ³€κ²½ (APPLICATION_OAUTH2_DEV_YML β†’ APPLICATION_OAUTH2_PROD_YML)
Docker ꡬ성
docker-compose.yml
.env 파일 λ‘œλ“œ 제거, /app/config 경둜둜 호슀트 디렉토리 마운트 μΆ”κ°€, SPRING_CONFIG_LOCATION ν™˜κ²½ λ³€μˆ˜ μ„€μ •μœΌλ‘œ μ™ΈλΆ€ μ„€μ • 파일 μœ„μΉ˜ μ§€μ •
Swagger μ„€μ •
src/main/java/com/pinHouse/server/core/config/swaagger/ProdSwaggerConfig.java
μƒˆλ‘œμš΄ ν”„λ‘œλ•μ…˜ Swagger μ„€μ • 클래슀 μΆ”κ°€ (@Profile("prod") 포함), OpenAPI 빈 μ •μ˜, μŠ€ν‚€λ§ˆ μ•ŒνŒŒλ²³μˆœ μ •λ ¬ μ»€μŠ€ν„°λ§ˆμ΄μ € κ΅¬ν˜„

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Poem

🐰 섀정을 μ •λ¦¬ν•˜κ³  ν”„λ‘œλ•μ…˜μœΌλ‘œ λ‚˜μ•„κ°€λ©°,
μ™ΈλΆ€ νŒŒμΌμ—μ„œ ν™˜κ²½μ„ 읽고,
Swagger λ¬Έμ„œλ₯Ό κ°€μ§€λŸ°νžˆ μ •λ ¬ν•΄
우리의 μ„œλ²„λŠ” 본격적으둜 μ€€λΉ„λ˜λ„€! πŸš€

πŸš₯ Pre-merge checks | βœ… 1 | ❌ 2
❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Description check ⚠️ Warning PR μ„€λͺ…이 ν…œν”Œλ¦Ώ ν˜•μ‹λ§Œ ν¬ν•¨ν•˜κ³  있으며, ν•„μˆ˜ μ„Ήμ…˜μΈ 'μž‘μ—…ν•œ λ‚΄μš©', 'μ°Έκ³  사항', 'κ΄€λ ¨ 이슈'κ°€ λͺ¨λ‘ λΉ„μ–΄μžˆμŒ. μž‘μ—…ν•œ λ‚΄μš© μ„Ήμ…˜μ— OAuth2 μ„€μ •, Docker ꡬ성, Swagger μ„€μ • 변경사항을 ꡬ체적으둜 μž‘μ„±ν•˜κ³ , ν•„μš”μ‹œ μ°Έκ³  사항과 κ΄€λ ¨ 이슈λ₯Ό μΆ”κ°€ν•΄μ£Όμ„Έμš”.
Docstring Coverage ⚠️ Warning Docstring coverage is 33.33% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
βœ… Passed checks (1 passed)
Check name Status Explanation
Title check βœ… Passed 제λͺ©μ΄ μš΄μ˜μ„œλ²„ μ„€μ •κ³Ό κ΄€λ ¨λœ 변경사항을 μ–ΈκΈ‰ν•˜κ³  μžˆμœΌλ‚˜, μ‹€μ œ 변경사항(CI/CD μ›Œν¬ν”Œλ‘œμš°, Docker ꡬ성, Swagger μ„€μ •)의 ꡬ체적인 λ‚΄μš©μ„ ν¬ν•¨ν•˜μ§€ μ•ŠμŒ.

✏️ 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.

@github-actions
Copy link

Test Results

22 tests  Β±0   22 βœ… Β±0   0s ⏱️ -1s
 3 suites Β±0    0 πŸ’€ Β±0 
 3 files   Β±0    0 ❌ Β±0 

Results for commit d672741. ± Comparison against base commit 34ff050.

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
.github/workflows/main-ci-cd.yml (2)

55-64: ν”„λ‘œνŒŒμΌ include μ„€μ •κ³Ό μ‹€μ œ 파일λͺ…이 λΆˆμΌμΉ˜ν•©λ‹ˆλ‹€.

spring.profiles.includeκ°€ oauth2-dev둜 μ„€μ •λ˜μ–΄ μžˆμ§€λ§Œ, μ‹€μ œλ‘œ μƒμ„±λ˜λŠ” νŒŒμΌμ€ application-oauth2-prod.ymlμž…λ‹ˆλ‹€. 운영 ν™˜κ²½μ— 맞게 includeλ₯Ό oauth2-prod둜 λ³€κ²½ν•΄μ•Ό ν•©λ‹ˆλ‹€.

πŸ› μˆ˜μ • μ œμ•ˆ
          cat <<EOF > ./src/main/resources/application.yml
          spring:
            profiles:
              active: prod
              include:
-                - oauth2-dev
+                - oauth2-prod
          EOF

145-152: 운영 μ„€μ • 파일 배포 단계가 λˆ„λ½λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

docker-compose.yml은 /home/ubuntu/app/config/ κ²½λ‘œμ—μ„œ application-prod.ymlκ³Ό application-oauth2-prod.yml νŒŒμΌμ„ λ§ˆμš΄νŠΈν•˜λ„λ‘ μ„€μ •λ˜μ–΄ μžˆμ§€λ§Œ, CD λ‹¨κ³„μ—μ„œλŠ” .env와 docker-compose.yml만 EC2둜 λ³΅μ‚¬ν•©λ‹ˆλ‹€. μ„€μ • νŒŒμΌλ“€μ΄ EC2 μ„œλ²„μ— λ°°ν¬λ˜μ§€ μ•ŠμœΌλ©΄ μ»¨ν…Œμ΄λ„ˆ μ‹œμž‘ μ‹œ μ„€μ • λ‘œλ“œμ— μ‹€νŒ¨ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ› μˆ˜μ • μ œμ•ˆ: μ„€μ • 파일 생성 및 배포 단계 μΆ”κ°€
      - name: env 생성
        run: echo "${{ secrets.PROD_ENV }}" > .env

+     - name: config 파일 생성
+       run: |
+         mkdir -p config
+         echo "${{ secrets.APPLICATION_PROD_YML }}" > config/application-prod.yml
+         echo "${{ secrets.APPLICATION_OAUTH2_PROD_YML }}" > config/application-oauth2-prod.yml

      - name: 3. docker-compose.yml 전달
        uses: appleboy/scp-action@master
        with:
          host: ${{ secrets.EC2_PROD_PUBLIC_IP }}
          username: ${{ secrets.SSH_USER }}
          key: ${{ secrets.EC2_PROD_PRIVATE_KEY }}
-         source: ".env,docker-compose.yml"
+         source: ".env,docker-compose.yml,config"
          target: "/home/ubuntu/app/"
πŸ€– Fix all issues with AI agents
In
`@src/main/java/com/pinHouse/server/core/config/swaagger/ProdSwaggerConfig.java`:
- Line 1: νŒ¨ν‚€μ§€ 선언에 μ˜€νƒ€κ°€ μžˆμ–΄ ProdSwaggerConfig 클래슀의 package ꡬ문을 "package
com.pinHouse.server.core.config.swaagger;"μ—μ„œ "package
com.pinHouse.server.core.config.swagger;"둜 λ³€κ²½ν•˜κ³ , μ†ŒμŠ€ 파일이 μœ„μΉ˜ν•œ 디렉토리 이름도 swaagger β†’
swagger둜 λ¦¬λ„€μž„ν•˜μ—¬ νŒ¨ν‚€μ§€ κ²½λ‘œμ™€ μ‹€μ œ 디렉토리가 μΌμΉ˜ν•˜λ„λ‘ μˆ˜μ •ν•˜μ„Έμš”.
- Around line 43-48: The sortSchemasAlphabetically() OpenApiCustomizer can NPE
if openApi.getComponents() or openApi.getComponents().getSchemas() is null;
update the method to null-check components and schemas (in
sortSchemasAlphabetically) before creating a TreeMap and only replace schemas
when non-null, or set an empty map when schemas are null, using the existing
openApi.getComponents() and getSchemas() accessors to locate and guard the
calls.
🧹 Nitpick comments (1)
src/main/java/com/pinHouse/server/core/config/swaagger/ProdSwaggerConfig.java (1)

16-20: 주석 λ‚΄μš©κ³Ό μ‹€μ œ κ΅¬ν˜„μ΄ μΌμΉ˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

주석에 "μŠ€μ›¨κ±° λ‚΄λΆ€ JWT μ„€μ • μΆ”κ°€"라고 λ˜μ–΄ μžˆμ§€λ§Œ, μ‹€μ œ μ½”λ“œμ—λŠ” JWT λ³΄μ•ˆ 섀정이 κ΅¬ν˜„λ˜μ–΄ μžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€. JWT 섀정이 ν•„μš”ν•˜λ‹€λ©΄ SecurityScheme을 μΆ”κ°€ν•˜κ±°λ‚˜, ν•„μš” μ—†λ‹€λ©΄ 주석을 μˆ˜μ •ν•΄ μ£Όμ„Έμš”.

@@ -0,0 +1,49 @@
package com.pinHouse.server.core.config.swaagger;
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

νŒ¨ν‚€μ§€λͺ…에 μ˜€νƒ€κ°€ μžˆμŠ΅λ‹ˆλ‹€.

swaaggerκ°€ μ•„λ‹Œ swaggerκ°€ μ˜¬λ°”λ₯Έ μ² μžμž…λ‹ˆλ‹€.

πŸ› μˆ˜μ • μ œμ•ˆ
-package com.pinHouse.server.core.config.swaagger;
+package com.pinHouse.server.core.config.swagger;

디렉토리λͺ…도 ν•¨κ»˜ μˆ˜μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.

πŸ“ Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
package com.pinHouse.server.core.config.swaagger;
package com.pinHouse.server.core.config.swagger;
πŸ€– Prompt for AI Agents
In
`@src/main/java/com/pinHouse/server/core/config/swaagger/ProdSwaggerConfig.java`
at line 1, νŒ¨ν‚€μ§€ 선언에 μ˜€νƒ€κ°€ μžˆμ–΄ ProdSwaggerConfig 클래슀의 package ꡬ문을 "package
com.pinHouse.server.core.config.swaagger;"μ—μ„œ "package
com.pinHouse.server.core.config.swagger;"둜 λ³€κ²½ν•˜κ³ , μ†ŒμŠ€ 파일이 μœ„μΉ˜ν•œ 디렉토리 이름도 swaagger β†’
swagger둜 λ¦¬λ„€μž„ν•˜μ—¬ νŒ¨ν‚€μ§€ κ²½λ‘œμ™€ μ‹€μ œ 디렉토리가 μΌμΉ˜ν•˜λ„λ‘ μˆ˜μ •ν•˜μ„Έμš”.

Comment on lines +43 to +48
public OpenApiCustomizer sortSchemasAlphabetically() {
return openApi -> {
Map<String, Schema> schemas = openApi.getComponents().getSchemas();
openApi.getComponents().setSchemas(new TreeMap<>(schemas));
};
}
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

getSchemas()κ°€ null을 λ°˜ν™˜ν•  경우 NPEκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

OpenAPI μŠ€νŽ™μ— μŠ€ν‚€λ§ˆκ°€ μ—†λŠ” 경우 getSchemas()κ°€ null을 λ°˜ν™˜ν•  수 μžˆμ–΄ TreeMap 생성 μ‹œ NullPointerException이 λ°œμƒν•©λ‹ˆλ‹€.

πŸ› null 체크 μΆ”κ°€ μ œμ•ˆ
    `@Bean`
    public OpenApiCustomizer sortSchemasAlphabetically() {
        return openApi -> {
-            Map<String, Schema> schemas = openApi.getComponents().getSchemas();
-            openApi.getComponents().setSchemas(new TreeMap<>(schemas));
+            if (openApi.getComponents() != null && openApi.getComponents().getSchemas() != null) {
+                Map<String, Schema> schemas = openApi.getComponents().getSchemas();
+                openApi.getComponents().setSchemas(new TreeMap<>(schemas));
+            }
        };
    }
πŸ“ Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
public OpenApiCustomizer sortSchemasAlphabetically() {
return openApi -> {
Map<String, Schema> schemas = openApi.getComponents().getSchemas();
openApi.getComponents().setSchemas(new TreeMap<>(schemas));
};
}
public OpenApiCustomizer sortSchemasAlphabetically() {
return openApi -> {
if (openApi.getComponents() != null && openApi.getComponents().getSchemas() != null) {
Map<String, Schema> schemas = openApi.getComponents().getSchemas();
openApi.getComponents().setSchemas(new TreeMap<>(schemas));
}
};
}
πŸ€– Prompt for AI Agents
In
`@src/main/java/com/pinHouse/server/core/config/swaagger/ProdSwaggerConfig.java`
around lines 43 - 48, The sortSchemasAlphabetically() OpenApiCustomizer can NPE
if openApi.getComponents() or openApi.getComponents().getSchemas() is null;
update the method to null-check components and schemas (in
sortSchemasAlphabetically) before creating a TreeMap and only replace schemas
when non-null, or set an empty map when schemas are null, using the existing
openApi.getComponents() and getSchemas() accessors to locate and guard the
calls.

@doup2001 doup2001 merged commit 648670a into main Jan 18, 2026
3 checks passed
@doup2001 doup2001 deleted the feat/인프라-κ΄€λ ¨-κΈ°λŠ₯-κ΅¬ν˜„ branch January 18, 2026 12:50
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.

2 participants