Skip to content

Conversation

@manNomi
Copy link
Contributor

@manNomi manNomi commented Dec 27, 2025

관련 이슈

  • resolves: #이슈 번호

작업 내용

ci 추가했는데 문제되는 부분 있으면 알려주세요

- border 색상을 border-k-100으로 명시
- 고정 높이(h-[41px]) 제거하여 padding과 line-height로 자동 계산
- 피그마 디자인과 일치하도록 스타일 수정
- 빌드, 린트, 타입 체크를 포함한 기본 CI 워크플로우 추가
- main 및 develop 브랜치에 push/PR 시 자동 실행
@manNomi manNomi requested a review from wibaek as a code owner December 27, 2025 10:29
@coderabbitai
Copy link

coderabbitai bot commented Dec 27, 2025

Warning

Rate limit exceeded

@manNomi has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 3 minutes and 34 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between 38d5d41 and 544cf62.

📒 Files selected for processing (6)
  • src/app/sign-up/email/EmailSignUpForm.tsx
  • src/components/login/signup/SignupPolicyScreen.tsx
  • src/components/login/signup/SignupSurvey.tsx
  • src/components/search/UniversityFilterSection.tsx
  • src/components/search/UniversityRegionTabs.tsx
  • src/utils/useInfinityScroll.ts

Walkthrough

  1. CI 워크플로우 추가: .github/workflows/ci.yml이 추가되어 main과 develop으로의 push 및 PR에서 Node.js v22.x 환경으로 체크아웃, 의존성 설치(npm ci), 린트, TypeScript 타입체크(noEmit), 그리고 프로덕션 빌드를 실행합니다.
  2. 로그인 입력 필드 스타일 변경: src/app/login/LoginContent.tsx의 이메일 및 비밀번호 입력에서 h-[41px] 제거와 border-k-100 추가로 입력 필드 스타일이 조정되었습니다.
  3. 디자인 유틸 및 버튼 컴포넌트 수입 방식 변경: src/utils/designUtils.ts에서 cn이 named export에서 default export로 변경되었고, 이 변경에 맞춰 여러 버튼 컴포넌트(src/components/button/BlockBtn.tsx, RoundBtn.tsx 등)에서 import 방식이 default로 전환되었습니다.
  4. 언어 테스트 이름 단축기 변경: src/utils/universityUtils.ts에서 shortenLanguageTestName이 named export에서 default export로 변경되고 반환 타입이 명시적으로 string | undefined로 조정되었습니다.
  5. 언어 점수 검증 함수 변경: src/utils/scoreUtils.ts에서 validateLanguageScore가 named export에서 default export로 전환되었습니다.
  6. 스키마 import 조정: src/app/university/score/submit/language-test/_lib/schema.ts에서 validateLanguageScore를 default import로 변경했습니다.
  7. JWT 유틸 수정: src/utils/jwtUtils.ts에 JwtPayload 인터페이스가 도입되고 토큰 파싱/만료 검사에서 타입 캐스팅과 에러 처리(에러 시 만료로 간주) 로직이 반영되었습니다.
  8. 무한 스크롤 옵저버 콜백 경량 리팩터: src/utils/useInfinityScroll.ts의 IntersectionObserver 콜백이 단일 entry 파라미터에서 entries 배열 파라미터로 바뀌고 내부에서 첫 항목을 디스트럭처링하도록 수정되었습니다.
  9. UI 카드에서 유틸 import 변경: src/components/ui/UniverSityCard/index.tsx가 shortenLanguageTestName을 default import로 사용하도록 변경되었습니다.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Suggested reviewers

  • wibaek

Pre-merge checks and finishing touches

❌ Failed checks (1 inconclusive)
Check name Status Explanation Resolution
Description check ❓ Inconclusive PR 설명은 템플릿의 필수 섹션(관련 이슈, 작업 내용)을 포함하지만, 작업 내용이 매우 간략하고 특이사항, 리뷰 요구사항 등이 누락되었습니다. 작업 내용을 더 구체적으로 설명하고, 특이사항 섹션에서 주요 변경사항(export 방식 변경, 타입 개선)을 명시해 주세요.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed PR 제목은 CI 워크플로우 추가라는 주요 변경사항을 간결하게 설명하고 있으며, 변경 내용과 관련성이 높습니다.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

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

🧹 Nitpick comments (1)
.github/workflows/ci.yml (1)

26-35: CI 워크플로우의 스크립트 및 타입 체크 일관성 개선 고려

검증 결과, package.json에 필요한 스크립트들이 제대로 정의되어 있으며 다음과 같은 사항을 확인했습니다:

  1. 스크립트 존재 확인 (문제 없음)

    • npm run lintnpm run build 명령이 package.json에 정의되어 있어 워크플로우가 정상 작동합니다 ✓
  2. 타입 체크 일관성 개선 검토

    • 현재 npx tsc --noEmit을 직접 실행 중인데, package.json에 전용 스크립트(예: "typecheck": "tsc --noEmit")를 추가하면 다른 lint, build 단계와의 일관성을 높일 수 있습니다.
  3. 테스트 단계 추가 시 주의

    • 현재 package.json에 test 스크립트가 정의되어 있지 않으므로, 테스트 단계를 추가하려면 먼저 테스트 환경(jest, vitest 등)을 설정하고 test 스크립트를 package.json에 등록한 후 워크플로우에 추가하는 것을 권장합니다.
📜 Review details

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 35c3f05 and df043e6.

📒 Files selected for processing (2)
  • .github/workflows/ci.yml
  • src/app/login/LoginContent.tsx
🧰 Additional context used
🧠 Learnings (1)
📓 Common learnings
Learnt from: manNomi
Repo: solid-connection/solid-connect-web PR: 242
File: src/components/ui/TabSelector.tsx:10-11
Timestamp: 2025-08-12T09:41:44.182Z
Learning: manNomi prefers to keep reusable UI components simple and focused on core functionality rather than adding many features. They don't want to over-engineer flexible/reusable UI components at the initial stage.
Learnt from: manNomi
Repo: solid-connection/solid-connect-web PR: 245
File: src/components/mentor/MentorChatCard/index.tsx:17-21
Timestamp: 2025-08-24T11:14:34.297Z
Learning: manNomi prefers not to receive accessibility suggestions or recommendations during code reviews.
Learnt from: manNomi
Repo: solid-connection/solid-connect-web PR: 245
File: src/api/auth/client/usePostLogout.ts:17-33
Timestamp: 2025-08-24T11:13:08.477Z
Learning: manNomi prefers to prioritize user experience over perfect state consistency in auth flows. Specifically, in logout scenarios, they prefer to keep tokens intact on API failure to avoid forcing users to re-login, even if it means temporary UI state inconsistency.
Learnt from: manNomi
Repo: solid-connection/solid-connect-web PR: 245
File: src/api/auth/client/useDeleteUserAccount.ts:17-27
Timestamp: 2025-08-24T11:11:40.758Z
Learning: manNomi prefers optimistic navigation in auth-related flows (like account deletion) to prevent race conditions where token clearing before navigation could cause intermediate redirects to login page due to pending async requests failing.
Learnt from: manNomi
Repo: solid-connection/solid-connect-web PR: 242
File: src/types/mentor.ts:70-73
Timestamp: 2025-08-12T04:07:04.134Z
Learning: manNomi prefers using Korean labels directly in enum values (e.g., MentorTab.MY_MENTEE = "나의 멘티") over separating enum keys from UI labels for efficiency and intuitiveness, considering scalability concerns as excessive for their current project needs.
⏰ 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: ci
🔇 Additional comments (5)
.github/workflows/ci.yml (3)

3-7: 트리거 설정이 적절합니다.

main과 develop 브랜치에 대한 push와 PR 이벤트를 모두 처리하도록 설정되어 있어 좋습니다.


17-21: Node.js 버전 설정이 올바르게 구성되어 있습니다.

  1. package.json과의 일치 - CI 워크플로우에서 사용 중인 Node.js 22.x는 package.json의 engines 필드("node": "22.x")와 완벽하게 일치합니다.

  2. npm 캐싱 활성화 - cache 설정이 'npm'으로 활성화되어 있어 워크플로우 실행 속도가 향상됩니다.

추가 조치는 필요하지 않습니다.


23-24: npm ci 사용 시 package-lock.json 파일 확인이 필요합니다.

현재 워크플로우에서 npm ci를 사용하고 있는데, 몇 가지 확인이 필요합니다:

  1. package-lock.json 파일 존재 여부

    • npm ci는 package-lock.json 파일에 의존하므로 저장소에 커밋되어 있어야 합니다
    • 해당 파일이 존재하지 않으면 npm install로 변경하거나, package-lock.json을 추가해야 합니다
  2. npm ci의 장점 활용

    • CI 환경에서는 npm cinpm install보다 더 빠르고 안정적입니다
    • 정확한 의존성 버전을 보장하여 일관성 있는 빌드를 제공합니다
src/app/login/LoginContent.tsx (2)

104-104: 일관성 있게 적용되었습니다.

비밀번호 입력 필드도 이메일 입력 필드와 동일하게 업데이트되어 일관성이 유지되고 있습니다. 피그마 디자인에 맞춘 변경으로 보입니다.


87-87: border-k-100 클래스가 tailwind 설정에서 정의되어 있으므로 문제없습니다.

검증 결과 다음과 같이 확인되었습니다.

  1. 색상 정의 확인

    • k-100은 "#DDDDDF"로 tailwind.config.ts에 정의되어 있습니다.
    • k-400도 "#919397"로 정의되어 있습니다.
  2. 입력 필드의 일관된 변경 적용

    • 이메일 입력 필드(라인 87): border border-k-100 추가, h-[41px] 제거 적용됨
    • 비밀번호 입력 필드(라인 104): 동일한 변경 사항 적용됨
  3. 프로젝트 전체에서 활발히 사용 중

    • RoundBtn.tsx, BlockBtn.tsx, PostCards.tsx, CustomDropdown.tsx 등 여러 컴포넌트에서 k-100을 이미 사용하고 있습니다.

Figma 디자인 정렬을 위한 변경 사항이 적절하게 적용되었습니다.

- designUtils, scoreUtils, universityUtils를 default export로 변경
- jwtUtils의 any 타입을 JwtPayload로 명시
- useInfinityScroll의 사용하지 않는 변수 제거
- 관련 import 문 수정
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: 0

🧹 Nitpick comments (1)
src/utils/designUtils.ts (1)

4-6: default export 전환 완료 ✅

린트 경고 해결을 위한 export 방식 변경이 올바르게 적용되었습니다.

참고 - 중복 코드 확인 필요:

src/lib/utils.ts에 동일한 cn 함수가 이미 존재합니다:

export function cn(...inputs: ClassValue[]) {
  return twMerge(clsx(inputs))
}

두 파일 중 하나로 통합하는 것을 고려해 보시겠어요? 현재 PR 범위를 벗어나므로 나중에 정리해도 괜찮습니다.

📜 Review details

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between df043e6 and 38d5d41.

📒 Files selected for processing (9)
  • src/app/university/score/submit/language-test/_lib/schema.ts
  • src/components/button/BlockBtn.tsx
  • src/components/button/RoundBtn.tsx
  • src/components/ui/UniverSityCard/index.tsx
  • src/utils/designUtils.ts
  • src/utils/jwtUtils.ts
  • src/utils/scoreUtils.ts
  • src/utils/universityUtils.ts
  • src/utils/useInfinityScroll.ts
✅ Files skipped from review due to trivial changes (2)
  • src/components/button/RoundBtn.tsx
  • src/components/ui/UniverSityCard/index.tsx
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: manNomi
Repo: solid-connection/solid-connect-web PR: 242
File: src/components/ui/TabSelector.tsx:10-11
Timestamp: 2025-08-12T09:41:44.182Z
Learning: manNomi prefers to keep reusable UI components simple and focused on core functionality rather than adding many features. They don't want to over-engineer flexible/reusable UI components at the initial stage.
Learnt from: manNomi
Repo: solid-connection/solid-connect-web PR: 245
File: src/components/mentor/MentorChatCard/index.tsx:17-21
Timestamp: 2025-08-24T11:14:34.297Z
Learning: manNomi prefers not to receive accessibility suggestions or recommendations during code reviews.
Learnt from: manNomi
Repo: solid-connection/solid-connect-web PR: 245
File: src/api/auth/client/usePostLogout.ts:17-33
Timestamp: 2025-08-24T11:13:08.477Z
Learning: manNomi prefers to prioritize user experience over perfect state consistency in auth flows. Specifically, in logout scenarios, they prefer to keep tokens intact on API failure to avoid forcing users to re-login, even if it means temporary UI state inconsistency.
Learnt from: manNomi
Repo: solid-connection/solid-connect-web PR: 245
File: src/api/auth/client/useDeleteUserAccount.ts:17-27
Timestamp: 2025-08-24T11:11:40.758Z
Learning: manNomi prefers optimistic navigation in auth-related flows (like account deletion) to prevent race conditions where token clearing before navigation could cause intermediate redirects to login page due to pending async requests failing.
Learnt from: manNomi
Repo: solid-connection/solid-connect-web PR: 242
File: src/types/mentor.ts:70-73
Timestamp: 2025-08-12T04:07:04.134Z
Learning: manNomi prefers using Korean labels directly in enum values (e.g., MentorTab.MY_MENTEE = "나의 멘티") over separating enum keys from UI labels for efficiency and intuitiveness, considering scalability concerns as excessive for their current project needs.
📚 Learning: 2025-08-11T06:07:23.563Z
Learnt from: manNomi
Repo: solid-connection/solid-connect-web PR: 239
File: src/utils/jwtUtils.ts:32-37
Timestamp: 2025-08-11T06:07:23.563Z
Learning: 이 프로젝트에서는 JWT 토큰을 사용하는 인증 관련 페이지들에서 SSR을 사용하지 않음. 서버 비용과 렌더링 이득을 고려했을 때 SSR이 필요하지 않고, SEO도 중요하지 않은 부분이므로 JWT 유틸리티 함수들(jwtUtils.ts)에서 atob 사용이 문제되지 않음. Node.js 환경 호환성을 위한 base64UrlDecode 변경이 불필요함.

Applied to files:

  • src/utils/jwtUtils.ts
🧬 Code graph analysis (2)
src/utils/designUtils.ts (1)
src/lib/utils.ts (1)
  • cn (4-6)
src/utils/universityUtils.ts (1)
src/constants/application.ts (1)
  • SHORT_LANGUAGE_TEST (28-35)
⏰ 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: ci
🔇 Additional comments (7)
src/utils/jwtUtils.ts (2)

1-6: 1. JwtPayload 인터페이스 도입으로 타입 안전성 향상 👍

린트 경고를 해결하면서 any 타입 대신 명시적인 인터페이스를 도입한 점이 좋습니다.

확인 필요 사항:

  • sub 필드가 number로 정의되어 있는데, JWT 표준에서는 보통 string 타입입니다.
  • 서버에서 발급하는 토큰의 실제 payload 구조와 일치하는지 확인해 주세요.

11-11: 2. 타입 캐스팅 사용 시 주의점

as JwtPayload 타입 캐스팅은 컴파일 타임에만 검증되고, 런타임에서는 실제 payload 구조가 다를 경우 예상치 못한 동작이 발생할 수 있습니다.

현재 try-catch로 감싸져 있어 파싱 에러는 처리되지만, 구조가 다른 유효한 JSON의 경우 undefined 필드 접근이 발생할 수 있습니다. 현재 사용 범위에서는 큰 문제가 없어 보이나, 참고해 주세요.

Also applies to: 26-26

src/utils/useInfinityScroll.ts (1)

28-29: 린트 경고 해결을 위한 깔끔한 리팩터링 ✨

IntersectionObserver 콜백 파라미터에서 배열 구조 분해 대신, 함수 내부에서 처리하도록 변경하여 사용하지 않는 변수 경고를 해결했습니다.

변경 전후 동작은 동일하며, 코드 의도가 더 명확해졌습니다.

src/utils/universityUtils.ts (1)

3-10: default export 전환 및 반환 타입 명시 👍

  1. export 방식 변경

    • named export에서 default export로 전환
    • PR 전반의 유틸리티 export 패턴과 일관성 유지
  2. 반환 타입 명시

    • string | undefined로 명확하게 선언
    • 호출부에서 타입 추론이 더 명확해짐
  3. 타입 캐스팅 (as string)

    • SHORT_LANGUAGE_TEST가 인덱스 시그니처가 아닌 고정 키를 가지므로, hasOwnProperty 체크 후에도 TypeScript가 타입을 좁히지 못해 필요한 캐스팅입니다.
src/components/button/BlockBtn.tsx (1)

5-5: import 방식 변경 완료 ✅

designUtils.ts의 default export 변경에 맞춰 import 구문이 올바르게 수정되었습니다.

src/app/university/score/submit/language-test/_lib/schema.ts (1)

3-3: import 방식 변경 완료 ✅

scoreUtils.ts의 default export 변경에 맞춰 import 구문이 올바르게 수정되었습니다.

src/utils/scoreUtils.ts (1)

3-35: default export 전환 완료 ✅

  1. export 방식 변경

    • named export에서 default export로 전환
    • schema.ts에서 default import로 올바르게 사용 중
  2. 검증 로직

    • 각 어학 시험별 점수 범위 검증이 적절하게 구현되어 있음
    • 유효하지 않은 점수에 대해 Error를 throw하는 방식이 Zod의 .refine()과 잘 연동됨

- EmailSignUpForm: any 타입을 unknown으로 변경
- SignupPolicyScreen: 중복된 className prop 제거
- SignupSurvey: any 타입들을 unknown으로 변경
- UniversityFilterSection, UniversityRegionTabs: import 경로에 확장자 추가
- useInfinityScroll: 타입 정의 수정
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