Skip to content

Conversation

@Hexeong
Copy link
Contributor

@Hexeong Hexeong commented Nov 17, 2025

관련 이슈

작업 내용

  • 문제가 되는 부분이 많네요;; 이쯤되니 해당 Github App 도입을 꼭 해야하나 생각까지 드네요 ㅎㅎ;
  • 일단 pull 시점에서 docker login할때 자동으로 액세스토큰 전용으로 로그인 되는게 아니라고 해서 해당 내용 다시 수정해서 테스트해보려고 합니다.

특이 사항

리뷰 요구사항 (선택)

  • 테스트를 위해 먼저 머지가 되어야 하는점 양해 바랍니다...

…-token-permission

# Conflicts:
#	.github/workflows/dev-cd.yml
#	.github/workflows/prod-cd.yml
…-token-permission

# Conflicts:
#	.github/workflows/dev-cd.yml
#	.github/workflows/prod-cd.yml
@Hexeong Hexeong self-assigned this Nov 17, 2025
@Hexeong Hexeong added the 버그 Something isn't working label Nov 17, 2025
@coderabbitai
Copy link

coderabbitai bot commented Nov 17, 2025

Walkthrough

  1. 개발 워크플로우 변경: build-gradlebuild-and-push로 이름 변경하고 outputs.image_tag를 추가했습니다.
  2. 배포 흐름 분리: build-and-push에 의존하는 deploy 잡이 새로 생겼습니다.
  3. GHCR 로그인 변경: 레지스트리 로그인 사용자를 ${{ github.repository_owner }}에서 ${{ github.actor }}로 바꿨습니다.
  4. 토큰 흐름 단순화: GitHub App 설치 토큰을 제거하고 서버 및 이미지 풀에 GITHUB_TOKEN을 사용하도록 전환했습니다.
  5. 원격 배포 업데이트: SSH 배포 명령이 needs.build-and-push.outputs.image_tag를 사용하도록 수정되고, sparse-checkout 및 배포 단계가 재구성되었습니다.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

  • 변경 범위는 워크플로우 파일 두 개에 걸쳐 있지만 패턴이 유사하여 이해는 비교적 직관적입니다.
  • 새로 추가된 deploy 잡과 outputs.image_tag 연동 로직을 검증할 필요가 있습니다.
  • GHCR 로그인 주체와 토큰 사용 방식 변경에 따른 권한·시크릿 영향 검토가 필요합니다.
  • SSH/원격 명령과 sparse-checkout 로직의 정확성 및 시크릿 파일(예: deploy_key.pem) 취급을 확인하세요.

Suggested reviewers

  • wibaek
  • whqtker
  • JAEHEE25
  • lsy1307
  • sukangpunch

Pre-merge checks and finishing touches

❌ Failed checks (1 warning, 2 inconclusive)
Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning 워크플로우 구조 대대적 개편(build-and-push 작업 분리, deploy 작업 추가)은 권한 오류 해결을 넘어선 범위 확대로 보입니다. 권한 오류 해결에 필수적이지 않은 구조적 개편 사항을 설명하거나 별도 이슈로 분리하는 것을 권장합니다.
Description check ❓ Inconclusive PR 설명은 템플릿 구조를 따르고 관련 이슈(#564)를 명시했으나, 구체적인 작업 내용과 변경사항이 불명확합니다. 워크플로우 변경의 구체적 목적, GitHub App 제거 사유, 그리고 GITHUB_TOKEN으로의 전환 이유를 명시하면 리뷰 이해도가 높아질 것입니다.
Linked Issues check ❓ Inconclusive PR의 코드 변경(GitHub App 토큰 제거, GITHUB_TOKEN 사용)은 이슈 #564의 권한 오류 해결 목표와 부분적으로만 일치합니다. 이슈 #564의 구체적인 재현 방법과 권한 명시 오류 상세 내용이 누락되어 있어 완벽한 검증이 불가능합니다.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed PR 제목은 GitHub App 토큰 권한 오류 해결이라는 주요 변경사항을 명확하게 요약하고 있습니다.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8d2c07b and e0ae334.

📒 Files selected for processing (2)
  • .github/workflows/dev-cd.yml (6 hunks)
  • .github/workflows/prod-cd.yml (2 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-11-10T01:55:03.827Z
Learnt from: Hexeong
Repo: solid-connection/solid-connect-server PR: 552
File: .github/workflows/prod-cd.yml:40-45
Timestamp: 2025-11-10T01:55:03.827Z
Learning: GHCR (GitHub Container Registry)에서는 docker login 시 사용자명의 대소문자를 구분하지 않으며, 레지스트리 경로명은 항상 소문자로 정규화됩니다. 따라서 `github.repository_owner`를 그대로 사용해도 이미지 경로와의 대소문자 불일치 문제가 발생하지 않습니다.

Applied to files:

  • .github/workflows/dev-cd.yml
⏰ 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 (5)
.github/workflows/prod-cd.yml (3)

51-56: GHCR 인증 방식이 올바르게 변경되었습니다.

다음 세 가지 개선사항이 정상 적용된 것을 확인했습니다:

  1. 사용자명 변경: ${{ github.repository_owner }}에서 ${{ github.actor }}로 변경 ✓
  2. 토큰 변경: GitHub App 토큰 제거, ${{ secrets.GITHUB_TOKEN }} 사용 ✓
  3. 권한 분리: 이 build-and-push 잡에서 packages: write 권한 설정 ✓

이전 리뷰에서 지적된 GitHub App 토큰의 GHCR 미지원 문제가 완벽하게 해결되었습니다. lsy1307님의 권장사항을 정확히 따랐습니다.


100-107: 배포 잡의 권한 분리가 올바르게 설정되었습니다.

  • 권한 명시: packages: read 설정으로 최소 권한 원칙 준수 ✓
  • Job 의존성: needs: build-and-push로 순서 보장 ✓
  • 코드 체크아웃: sparse-checkout으로 필요한 파일만 선택적 동기화 ✓

이 설정은 lsy1307님이 권장하신 "빌드는 write, 배포는 read" 패턴을 정확히 구현한 것입니다.


140-147: 원격 서버의 GHCR 로그인이 GITHUB_TOKEN으로 올바르게 구성되었습니다.

구체적으로 다음과 같이 동작합니다:

  1. 토큰 전달: GitHub Actions 러너에서 ${{ secrets.GITHUB_TOKEN }}이 SSH 명령에 포함되어 원격 서버로 전달
  2. 서버 인증: 원격 서버에서 docker login ghcr.io -u ${{ github.actor }}로 인증 수행
  3. 이미지 pull: 인증 후 image_tag output을 사용하여 정확한 이미지 pull

이는 이전 리뷰에서 지적된 GitHub App 토큰 문제에 대한 권장 해결책을 정확히 구현한 것입니다.

.github/workflows/dev-cd.yml (2)

9-51: dev 워크플로우의 빌드 단계도 권장 패턴을 정확히 따릅니다.

다음 항목들이 모두 올바르게 구성되었습니다:

  1. Job 이름: build-gradle → build-and-push로 변경 ✓
  2. 권한 분리: packages: write로 설정 ✓
  3. GHCR 인증: ${{ github.actor }}${{ secrets.GITHUB_TOKEN }} 사용 ✓
  4. Output 정의: image_tag output 추가 ✓
  5. 이미지 태그: dev 환경에 맞는 타임스탬프 기반 ✓

prod-cd.yml과의 일관된 인증 방식이 유지되고 있습니다.


118-132: dev 배포 단계의 GHCR 인증도 일관되게 구성되었습니다.

  • 권한: packages: read로 제한 (최소 권한 원칙) ✓
  • 토큰 전달: SSH를 통해 GITHUB_TOKEN 전달 ✓
  • Job 의존성: needs: build-and-push로 명확한 순서 보장 ✓
  • 이미지 태그: needs.build-and-push.outputs.image_tag 참조 ✓

prod-cd.yml과 동일한 방식이 적용되어 일관성이 있습니다.


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: 1

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 76b25da and 8d2c07b.

📒 Files selected for processing (2)
  • .github/workflows/dev-cd.yml (1 hunks)
  • .github/workflows/prod-cd.yml (1 hunks)
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: Hexeong
Repo: solid-connection/solid-connect-server PR: 552
File: .github/workflows/prod-cd.yml:40-45
Timestamp: 2025-11-10T01:55:03.827Z
Learning: GHCR (GitHub Container Registry)에서는 docker login 시 사용자명의 대소문자를 구분하지 않으며, 레지스트리 경로명은 항상 소문자로 정규화됩니다. 따라서 `github.repository_owner`를 그대로 사용해도 이미지 경로와의 대소문자 불일치 문제가 발생하지 않습니다.
📚 Learning: 2025-11-10T01:55:03.827Z
Learnt from: Hexeong
Repo: solid-connection/solid-connect-server PR: 552
File: .github/workflows/prod-cd.yml:40-45
Timestamp: 2025-11-10T01:55:03.827Z
Learning: GHCR (GitHub Container Registry)에서는 docker login 시 사용자명의 대소문자를 구분하지 않으며, 레지스트리 경로명은 항상 소문자로 정규화됩니다. 따라서 `github.repository_owner`를 그대로 사용해도 이미지 경로와의 대소문자 불일치 문제가 발생하지 않습니다.

Applied to files:

  • .github/workflows/dev-cd.yml
  • .github/workflows/prod-cd.yml
🔇 Additional comments (3)
.github/workflows/prod-cd.yml (2)

109-109: Docker login 사용자명을 x-access-token으로 변경(prod 환경).

변경 사항:

  1. dev-cd.yml과 동일한 패턴으로 x-access-token 사용자명 적용
  2. 원격 서버에서의 image pull 시 GitHub App 토큰 기반 인증

환경 간 일관성: dev와 prod 환경 모두에 동일한 인증 메커니즘 적용되어 일관성이 있습니다. ✓

변경된 docker login 명령이 프로덕션 배포 파이프라인에서 실제로 정상 동작하는지 확인 및 테스트해주세요.


128-134: 프로덕션 배포 안정성 로직 확인.

Docker Compose 재시작 단계에서 graceful shutdown 패턴을 적용하고 있습니다:

  1. docker compose stop - 컨테이너를 정상 종료
  2. docker compose down --remove-orphans - 네트워크 제거 및 고아 컨테이너 정리
  3. docker compose up -d - 새 컨테이너 시작

이는 dev 환경의 단순한 down → up 패턴(라인 125-126 dev-cd.yml)과 다릅니다. 프로덕션에서는 더 견고한 배포 로직이 적용되고 있어 좋습니다. ✓

.github/workflows/dev-cd.yml (1)

70-77: GitHub App 권한 설정이 GHCR 인증에 적절함을 확인했습니다.

웹 검색 결과에 따르면 다음과 같습니다.

  1. 비공개 GHCR 이미지 인증 요구사항

    • GitHub App 설치 토큰에 permission-packages: "read" 권한이 포함되면 GHCR에서 비공개 이미지 pull에 필요한 최소 권한을 충족합니다.
  2. 공개 vs 비공개 이미지의 권한 요구 차이

    • 공개 GHCR 이미지는 인증 없이 pull 가능합니다.
    • 비공개 이미지는 설치 토큰과 packages 권한(read 이상)을 필요로 합니다.
  3. 현재 설정의 적절성

    • 라인 70-77의 permission-packages: "read" 설정은 라인 93-142에서 수행하는 이미지 pull 작업에 충분한 권한입니다.

따라서 GitHub App 토큰 생성 단계의 권한 설정은 올바르며, issue #564에서 의도한 권한 명시가 정확하게 반영되어 있습니다.

@Hexeong Hexeong merged commit f3fb02d into solid-connection:develop Nov 20, 2025
2 checks passed
whqtker added a commit that referenced this pull request Jan 19, 2026
* fix: yml 들여쓰기 수정 (#555)

* fix: yml 들여쓰기 수정

* fix: jdk 변경

* refactor: 멘토 및 채팅 관련 API 응답 수정 (#537)

* refactor: 멘토의 멘토링 조회 응답에서 mentoringId가 아니라 roomId를 포함하도록

* refactor: 파트너가 멘토인 경우 partnerId는 mentorId로

- AS IS: 멘토/멘티 모두 partnerId가 siteUserId
- TO BE: 멘티: siteUserId, 멘토: mentorId

* refactor: 응답의 senderId가 mentorId/siteUserId가 되도록

* refactor: senderId에 해당하는 chatParticipant가 없을 경우 예외 처리하는 로직 추가

* refactor: 메서드명에 맞게 시그니처 변경

* refactor: getChatMessages 메서드에서 응답으로 siteUserId를 넘겨주도록

- AS IS: mentorId(mentor) / siteUserId(mentee)
- TO BE: siteUserId(all)

* refactor: 헬퍼 메서드로 메서드 복잡성을 분산한다

* refactor: getChatPartner 메서드의 응답으로 siteUserId를 넘겨주도록

- AS IS: mentorId(mentor) / siteUserId(mentee)
- TO BE: siteUserId(all)

* refactor: CD 성능 개선 (#552)

* fix: deprecated된 base image를 eclipse-temurin:17-jdk로 변경

* refactor: scp 파일 전송하는 방식에서 GHCR로 push/pull하도록 변경

* fix: GHCR image 제거시 Org의 GITHUB_TOKEN 사용하도록 변경

* refactor : scp 파일 전송하는 방식에서 GHCR로 push/pull하도록 prod-cd.yml과 docker-compose.prod.yml 변경

* fix: prod 인스턴스 old image 이름 통일

* fix: prod-cd.yml StrictHostKeyChecking 옵션 문법 오류 수정

* fix: prod-cd.yml StrictHostKeyChecking 옵션 문법 오류 수정

* fix: dev-cd.yml Old images 정리 작업 중 이미지 이름 불일치 문제 해결

* chore: 마지막 줄 개행 추가

* chore: 마지막 줄 개행 추가

* feat: stage 인스턴스에 대한 최신 이미지 5개 유지 기능 및 old 이미지 제거 기능 추가

* chore: 중복된 환경변수 지정 제거

* chore: 중복된 pem키 생성 로직 제거

* fix: 잘못된 pem키 이름 수정

* refactor: 원격 호스트에서 pull할 경우, 최소 권한으로 실행하도록 Github App으로 임시토큰 발급하도록 수정

* fix: Github App이 발행한 임시 토큰에 대해 읽기 권한 명시 (#565)

* fix: GitHub app token permission 문제 해결 (#566)

* fix: Github App이 발행한 임시 토큰에 대해 읽기 권한 명시

* fix: Github App이 발행한 임시 토큰에 대해 읽기 권한 명시 문법 오류 수정

* fix: Github App이 발행한 임시 토큰에 대해 읽기 권한 명시 문법 오류 수정

* fix: Github App이 발행한 임시 토큰에 대해 Contents 읽기 권한 추가

* fix: GitHub app token permission 문제 오류 해결 (#567)

* fix: Github App이 발행한 임시 토큰에 대해 읽기 권한 명시

* fix: Github App이 발행한 임시 토큰에 대해 읽기 권한 명시 문법 오류 수정

* fix: Github App이 발행한 임시 토큰에 대해 읽기 권한 명시 문법 오류 수정

* fix: Github App이 발행한 임시 토큰에 대해 Contents 읽기 권한 추가

* fix: Github App이 발행한 임시 토큰에 대해 조직 레벨에서 읽기 권한 추가

* fix: GitHub app token permission이 repo 레벨에서 부여되는 문제 해결 (#568)

* fix: Github App이 발행한 임시 토큰에 대해 읽기 권한 명시

* fix: Github App이 발행한 임시 토큰에 대해 읽기 권한 명시 문법 오류 수정

* fix: Github App이 발행한 임시 토큰에 대해 읽기 권한 명시 문법 오류 수정

* fix: Github App이 발행한 임시 토큰에 대해 Contents 읽기 권한 추가

* fix: Github App이 발행한 임시 토큰에 대해 조직 레벨에서 읽기 권한 추가

* fix: Github App이 발행한 임시 토큰에 대해 조직 레벨에서 읽기 권한 추가

* fix: GitHub app token permission 권한 오류 해결 (#569)

* fix: Github App이 발행한 임시 토큰에 대해 읽기 권한 명시

* fix: Github App이 발행한 임시 토큰에 대해 읽기 권한 명시 문법 오류 수정

* fix: Github App이 발행한 임시 토큰에 대해 읽기 권한 명시 문법 오류 수정

* fix: Github App이 발행한 임시 토큰에 대해 Contents 읽기 권한 추가

* fix: Github App이 발행한 임시 토큰에 대해 조직 레벨에서 읽기 권한 추가

* fix: Github App이 발행한 임시 토큰에 대해 조직 레벨에서 읽기 권한 추가

* fix: Github App이 발행한 임시 토큰에 대해 조직 레벨에서 읽기 권한 추가

* test: fork repo의 작업 branch에서 해당 workflows가 실행되도록 임시 수정

* refactor: test용 설정 제거

* feat: claude.md 파일 추가 (#560)

* fix : 동일 멘토 멘티 중복 신청 불가능하도록 수정 (#563)

* fix : 동일 멘토 멘티 중복 신청 불가능하도록 수정
- UK 제약조건 추가
- flyway script 추가
- CustomException 추가
- Service 로직 수정
- Test code 추가

* fix : column명 오류 수정
- column명 camelCase -> snake_case로 변경

* fix : column명 오류 수정
- column명 name으로 명시

* fix: GitHub app token permission 권한 오류 해결 (#570)

* fix: Github App이 발행한 임시 토큰에 대해 읽기 권한 명시

* fix: Github App이 발행한 임시 토큰에 대해 읽기 권한 명시 문법 오류 수정

* fix: Github App이 발행한 임시 토큰에 대해 읽기 권한 명시 문법 오류 수정

* fix: Github App이 발행한 임시 토큰에 대해 Contents 읽기 권한 추가

* fix: Github App이 발행한 임시 토큰에 대해 조직 레벨에서 읽기 권한 추가

* fix: Github App이 발행한 임시 토큰에 대해 조직 레벨에서 읽기 권한 추가

* fix: Github App이 발행한 임시 토큰에 대해 조직 레벨에서 읽기 권한 추가

* test: fork repo의 작업 branch에서 해당 workflows가 실행되도록 임시 수정

* refactor: test용 설정 제거

* fix: docker login username 불일치 문제

* refactor: 최소권한 원칙 적용을 위한 Action Job 분리

* refactor: 필요없는 주석 제거

* fix: GHCR 정리 권한 PAT로 해결 (#573)

* feat: 지원서가 APPROVED 인 유저의 멘토 생성 기능 추가 (#562)

* feat: 지원서가 APPROVED 인 유저의 멘토 생성 기능 추가

* refactor: submitMentorApplication 메서드의 멘토 지원 유효 검증 부분을 메서드로 추출

* refactor: MentorMyPage 생성, 수정 부분의 channel 생성, 업데이트 부분 중복 제거

* test: Mentor 생성 관련 테스트 추가

* fix: 코드래빗 리뷰 적용

* refactor: 멘토 생성 시 channelRequest가 null 일 떄 예외 처리

* feat: MentorApplicationRequest 필드에 유효성 어노테이션 추가

* test: 채널 검색 시 siteUserId로 조회하는 문제 해결

* fix: 리뷰 수정사항 적용

* fix: 파일 끝에 개행 추가

* refactor: 멘토 생성 메서드에서 siteUser의 검증 제외

* refactor: dto 단에서 채널 리스트 null 검증

* feat: MentorApplication에 termId 추가 flyway 스크립트 추가

* fix: flyway 버전 충돌 해결

* feat: 어드민 멘토 승격 요청 페이징 조회 기능 추가 (#576)

* feat: 어드민 멘토 지원서 페이징 조회 기능 추가

* feat: mentor/repository 패키지에 custom 패키지 추가

- custom 패키지에 페이징 조회를 책임지는 MentorApplicationFilterRepository 추가

- MentorApplicationSearchCondition 에서 넘긴 keyword 기반으로 닉네임, 권역, 나라, 학교명으로 필터링 검색 기능 추가

- MentorApplicationSearchCondition 에서 넘긴 mentorApplicationStatus 기반으로 승인, 거절, 진행중 으로 필터링 기능 추가

* test: 어드민 멘토 지원서 페이징 조회 테스트 추가

* feat: MentorApplication 엔티티에 approved_at 필드 추가 flyway 스크립트 작성

* fix: 파일 끝에 개행 추가

* refactor: 페이징 조회 시 count 쿼리에 불필요한 조인 막기

* fix: 코드래빗 리뷰 적용

* fix: flyway V39 스크립트 파일명 수정

* test: 테스트 코드 오류 수정, 검증 추가  

* test: 기대하는 값이랑 다른 테스트 응답을 수정합니다

* feat: 어드민 멘토 승격 지원서 승인/거절 기능, 상태 별 지원서 개수 조회 기능 추가 (#577)

* feat: 어드민 멘토 승격 지원서 승인/거절 기능 추가

* test: 어드민 멘토 지원서 승인/거절 테스트 추가

* feat: 멘토 지원서 상태별 개수 조회 기능 추가

* test: 멘토 지원서 상태별 개수 조회 테스트 추가

* fix: 대학이 선택되지 않은 멘토 지원서 승인 시 예외 발생하도록 수정

* refactor: 리뷰 내용 반영

* refactor: MENTOR_APPLICATION_ALREADY_CONFIRM -> MENTOR_APPLICATION_ALREADY_CONFIRMED 로 수정

* refactor: 멘토 지원서 거절 사유 관련하여 기획에 명시되지 않은 길이 제한 제거

* refactor: 리뷰 적용

* refactor: 변수명, 필드명 일관성 맞추기

* test: assertAll 적용

* feat: region 관련 관리 기능 추가 (#561)

* feat: 지역 생성 기능 구현 (AdminRegion)

지역을 생성하는 기능을 구현했습니다:
- AdminRegionCreateRequest: 지역 생성 요청 DTO
- AdminRegionResponse: 지역 응답 DTO
- AdminRegionService.createRegion(): 중복 검사를 포함한 지역 생성 로직
- AdminRegionController.createRegion(): HTTP POST 엔드포인트

중복 검사:
- 지역 코드 중복 확인
- 한글명 중복 확인

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>

* feat: 지역 수정/삭제/조회 기능 구현 및 테스트 추가 (AdminRegion)

지역 관리 기능을 완성했습니다:

구현 기능:
- AdminRegionUpdateRequest: 지역 수정 요청 DTO
- AdminRegionService.updateRegion(): 한글명 중복 검사를 포함한 지역 수정
- AdminRegionService.deleteRegion(): 지역 삭제
- AdminRegionService.getAllRegions(): 전체 지역 조회
- AdminRegionController: 수정/삭제/조회 HTTP 엔드포인트

테스트 코드 (AdminRegionServiceTest):
- CREATE: 정상 생성, 코드 중복, 한글명 중복 테스트
- UPDATE: 정상 수정, NOT_FOUND, 중복 한글명, 동일 한글명 테스트
- DELETE: 정상 삭제, NOT_FOUND 테스트
- READ: 빈 목록, 전체 조회 테스트

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>

* fix: 지역 관리 관련 에러코드 추가 (ErrorCode)

지역 관리 기능에 필요한 에러코드를 추가했습니다:
- REGION_NOT_FOUND: 존재하지 않는 지역
- REGION_ALREADY_EXISTS: 이미 존재하는 지역

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>

* fix: jpa 오류 수정

* refactor: 코드리뷰 반영

---------

Co-authored-by: Claude <[email protected]>

* fix: config.alloy 파일 경로 불일치 문제 해결 (#586)

* fix: config.alloy 파일 경로 불일치 문제 해결

* refactor: docker-compose를 수정하는게 아닌 cd.yml의 경로를 수정하여 해결

* feat: 소셜 로그인 사용자는 비밀번호 변경을 할 수 없다. (#582)

* feat: 소셜 로그인 사용자는 비밀번호 변경을 할 수 없도록

* test: 소셜 로그인 사용자 비밀번호 변경 관련 테스트 코드 작성

* chore: 컨벤션에 맞게 메서드명 변경

- ~~ 예외가 발생한다

* chore: 충돌 해결

* fix: Upgrade 헤더 유무에 따라 Connection 헤더의 값을 동적으로 설정하도록 (#581)

* fix: Upgrade 헤더 유무에 따라 Connection 헤더의 값을 동적으로 설정하도록

- Upgrade 헤더가 존재하면(e.g. WebSocket) upgrade로 설정
- Upgrade 헤더가 존재하지 않으면 keep-alive로 설정

* chore: 서브모듈 업데이트

* feat: 멘토 지원서 대학교 매핑 기능, 대학 선택 상태 페이징 조건 추가 (#583)

* feat: 멘토 지원서 검색 조건에 UniversitySelectType 추가

* feat: 어드민 멘토 지원서 페이징 조회 응답에 UniversitySelectType 추가

* test: 멘토 지원서 조회 테스트 추가

- test: UniversitySelectType 기반 페이징 조회 테스트 추가

* feat: 멘토 지원서에 대학 매핑 기능 추가

* test: 멘토 지원서 대학 매핑 테스트 추가

* refactor: 의미 없는 import 제거

* refactor: 리뷰 내용 반영

* refactor: 개행 및 공백 추가

* refactor: pathVariable 네이밍을 kebab-case 로 통일

* refactor: Service 레이어의 검증 로직을 도메인으로 이동

* refactor: PENDING 상태 및 OTHER 타입 검증을 도메인 메서드로 관리

* refactor: assignUniversity() 호출 전 검증 책임을 도메인 엔티티에 위임

* test : assertAll 로 검증 그룹화

* refactor: 스프링 부트 앱 외의 사이드 인프라 배포 과정을 분리 (#592)

* refactor: dev 환경에서의 side-infra 배포 과정 분리

* refactor: prod 환경에서의 side-infra 배포 과정 분리

* refactor: docker-compose 가 실행되고 있지 않아도 스크립트가 실패하지 않게 변경

* fix: docker compose up 시에 사용할 환경변수 중 누락된 변수를 추가

* fix: S3 이름 불일치 문제 해결 (#594)

* fix: s3 이름 불일치 문제 해결

* fix: s3와의 연동된 cloudfront URL로 수정

* refactor: 분리한 사이드 인프라에 대해서 필요없는 파일 정리 (#596)

* test: flyway 스크립트를 검증하는 테스트 코드 작성 (#588)

* test: flyway 스크립트를 검증하는 테스트 코드 작성

* fix: DirtiesContext 어노테이션을 통해 기존 컨텍스트를 폐기하도록

- 새로운 MySQL 환경에서 마이그레이션이 이루어지도록 수정

* fix: flyway 검증용의 별도의 MySQL 컨테이너를 사용하도록

* chore: 테스트 의도를 쉽게 이해할 수 있도록 주석 추가

* chore: 명시적으로 컨테이너를 시작하도록

- 또한 MySQLTestContainer 코드와 유사한 컨벤션을 가지도록 수정

* refactor: 게시글 조회 응답에 댓글 deprecated 여부 포함하도록 (#599)

* feat: 유저의 멘토 지원서 신청 이력 조회 기능 추가 (#603)

* feat: 유저의 멘토 지원 이력 조회 기능 추가

* refactor: 매개변수 타입 통일

* refactor: long 타입을 Long 으로 수정

* test: 멘토 지원서 이력 조회 테스트 추가

* test: MentorApplicationFixtureBuilder 에 rejectedReason 필드 및 빌더 메서드 추가

* refactor: 리뷰 사항 적용

* test: 멘토 지원서 이력 조회 에서 user와 university 재사용

* refactor: 긴 uri 를 짧게 수정

* refactor: 서브모듈 해시값 되돌리기

* refactor: 개행 지우기

* refactor: applicationOrder 자료형을 long 으로 수정

* fix: applicationOrder 를 int 자료형으로 처리하도록 복구

- 순서를 나타내고, 해당 값이 21억을 넘길 수 없다 판단하여 더 적합한 int 자료형으로 복구

* test: long type 을 기대하던 테스트 에러 해결

* fix: 탈퇴한 사용자가 물리적 삭제가 되지 않았던 문제를 해결한다 (#574)

* refactor: FK에 ON DELETE CASCADE 옵션 추가

* refactor: 삭제 메서드로 사용자 연관 데이터를 삭제하도록

* feat: 어드민 유저 차단 기능 추가 (#604)

* feat: 어드민 차단 기능

* test: 어드민 차단 기능

* feat: API 성능 로깅, 쿼리 별 메트릭 전송 추가 (#602)

* feat: HTTP 요청/응답 로깅 필터 구현

- traceId 기반 요청 추적
- 요청/응답 로깅
- CustomExceptionHandler와 중복 로깅 방지
- Actuator 엔드포인트 로깅 제외

* feat: ExceptionHandler에 중복 로깅 방지 플래그 및 userId 로깅 추가

* feat: API 수행시간 로깅 인터셉터 추가

* feat: ApiPerf 인터셉터, Logging 필터 빈 등록

* refactor: logback 설정 변경

- info, warn, error, api_perf 로 로그 파일 분리해서 관리

* feat: 쿼리 별 수행시간 메트릭 모니터링 추가

* feat: 데이터소스 프록시 의존성 및 config 파일 추가

* feat: 데이터 소스 프록시가 metric을 찍을 수 있도록 listener 클래스 추가

* feat: 요청 시 method, uri 정보를 listener에서 활용하기 위해 RequestContext 및 관련 interceptor 추가

* refactor: 비효율적인 Time 빌더 생성 개선

- Time.builder 를 사용하면 매번 빌더를 생성하여 비효율적인 문제를 meterRegistry.timer 방식으로 해결

* feat: 로깅을 위해 HttpServeletRequest 속성에 userId 추가

* refactor: logback 설정 중 local은 console만 찍도록 수정

* refactor: FILE_PATTERN -> LOG_PATTERN 으로 수정

* test: TokenAuthenticationFilter에서 request에 userId 설정 검증 추가

- principal 조회 예외를 막기 위해 siteUserDetailsService given 추가

* refacotr: 코드 래빗 리뷰사항 반영

* test: 중복되는 테스트 제거

* refactor: 사용하지 않는 필드 제거

* refactor: 리뷰 내용 반영

* refactor: ApiPerformanceInterceptor에서 uri 정규화 관련 코드 제거

* refactor: ApiPerformanceInterceptor에서 if-return 문을 if-else 문으로 수정

* refactor: 추가한 interceptor 의 설정에 actuator 경로 무시하도록 셋팅

* refactor: 중복되는 의존성 제거

* refactor: 로깅 시 민감한 쿼리 파라미터 마스킹

- EXCLUDE_QUERIES 에 해당하는 쿼리 파라미터 KEY 값의 VALUE 를 masking 값으로 치환

* refactor: 예외 처리 후에도 Response 로그 찍도록 수정

* refactor: CustomExceptionHandler 원상복구

- Response 로그를 통해 user를 추적할 수 있으므로 로그에 userId 를 추가하지 않습니다

* refactor: 리뷰 사항 반영

* refactor: RequestContext 빌더 제거

* refactor: RequestContextInterceptor import 수정

* refactor: logback yml 파일에서 timestamp 서버 시간과 동일한 규격으로 수정

* refactor: ApiPerformanceInterceptor 에서 동일 내용 로그 중복으로 찍는 문제 수정

* fix: decode를 두 번 하는 문제 수정

* test: 로깅 관련 filter, interceptor 테스트 추가

* refactor: 코드래빗 리뷰사항 반영

* test: contains 로 비교하던 검증 로직을 isEqualTo 로 수정

* test: preHandle 테스트 에서 result 값을 항상 검증

* refactor: 단위테스트에 TestContainer 어노테이션 제거

* fix: conflict 해결

* fix: docker-compose 충돌 해결 (#610)

* chore: release github action 임의 실행 추가

* refactor: 기본 추천 대학 후보 추가 (#161)

* fix: config.alloy 경로 수정

* hotfix: 모의지원 현황 어드민 권한 제거

* hotfix: import 제거

* chore: 서브모듈 해시 업데이트 (#611)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

버그 Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix: CD process에서 Github App에 대한 권한 명시 오류 수정

3 participants