Skip to content

dev - #445

Merged
slz6k merged 877 commits into
mainfrom
dev
May 15, 2026
Merged

dev#445
slz6k merged 877 commits into
mainfrom
dev

Conversation

@slz6k

@slz6k slz6k commented May 15, 2026

Copy link
Copy Markdown
Member

resolved #443

slz6k and others added 30 commits March 12, 2024 11:19
Feat/#330 답변 채택 확인 팝업
feat: 화이트보드 다이얼로그 변경(#340)
slz6k and others added 28 commits April 29, 2026 15:49
- mypage_profile: Kakao FeedTemplate으로 프로필 공유 (peeroreum://profile/{nickname})
- MainActivity: getInitialNickname cold start / onDeepLinkProfile warm start 처리
- AndroidManifest: peeroreum://profile intent filter 추가
- main: extractNickname, onDeepLinkProfile 핸들러 / Android uriLinkStream 중복 제거
- pending_deep_link: profileNickname 필드 추가
- bottomNaviBar: profileNickname 딥링크 라우팅 추가
- wedu_room_info_sheet: showModalBottomSheet → Get.bottomSheet() 교체
  (GetX Navigator 초기화 중 동일 GlobalKey<NavigatorState>가 Navigator와
   _FocusInheritedScope에 중복 등록되는 문제 방지)
- bottomNaviBar: wedu roomId 처리에 300ms delay 추가
- nested Scaffold 제거: mypage.dart, wedu_detail_screen.dart, mypage_profile.dart
- WeduRoomInfoSheet.onShare 콜백 타입을 VoidCallback → void Function(Rect?)으로 변경
- 공유 버튼을 Builder로 감싸 RenderBox 위치를 계산, 콜백에 Rect 전달
- wedu_home, wedu_search_result: sharePositionOrigin: shareRect 추가
- mypage_profile: GlobalKey(_shareButtonKey)로 공유 버튼 위치 추적 후 sharePositionOrigin 전달
- iOS에서 카카오톡 미설치 시 fallback Share.share() 호출 시 PlatformException 해결
- changeDetailWedu() 방장/일반 참여자 메뉴 모두에 공유하기 항목 추가
- 카카오톡 설치 시 FeedTemplate 공유, 미설치 시 Share.share() fallback
- iOS sharePositionOrigin: dots 버튼(_dotsButtonKey)을 앵커로 사용
- 공유하기 탭 시 바텀시트 자동 닫힘(Get.back()) 후 공유 실행
- 일반 참여자 메뉴: GestureDetector → Column+TextButton으로 리팩터
- SafeArea 제거 후 명시적 bottom 패딩 적용
- 공식: viewPadding.bottom > 20 ? viewPadding.bottom : 20
  - iOS 홈 인디케이터(~34pt): viewPadding 값 사용
  - Android 제스처 내비게이션(0): 20px 고정
  - Android 3버튼 내비게이션(~48dp): viewPadding 값 사용
- shareDefault → shareCustom (templateId: 102956)
- 같이방 상세에서 invitationUrl fetch 추가
- templateArgs: RoomName, ImageUrl(초대장 이미지), Link(딥링크)
- wedu_detail_screen.dart, wedu_home.dart 동일 적용
- shareDefault → shareCustom (templateId: 102993)
- templateArgs: UserName
- 딥링크: 카카오 콘솔 템플릿에서 nickname=${UserName} 파라미터로 처리
- AppDelegate에 kakaoa://kakaolink 스킴 핸들러 추가
  - 웜 스타트: application(_:open:options:)에서 MethodChannel로 전달
  - 콜드 스타트: launchOptions URL 파싱 후 getInitialRoomId/getInitialNickname으로 응답
- main.dart: iOS 콜드 스타트 getInitialLink() 호출 추가
- AppDelegate: super.application() 호출 후 MethodChannel 설정하도록 순서 수정 (window 초기화 보장)
- AppDelegate: FlutterViewController 캐스팅을 force cast에서 optional cast로 변경 (크래시 방지)
- main.dart: iOS getInitialLink() 제거 — AppDelegate MethodChannel이 cold start 처리하므로 중복 방지
- main.dart: uriLinkStream에서 kakaoa:// 스킴 필터링 — AppDelegate MethodChannel과 중복 처리 방지
- fetchSocialLogin: http.get → http.post, email을 query param 대신 JSON body로 전송
- ApiClient.dart 신규 추가: Dio 싱글톤, 자동 토큰 갱신 인터셉터
  (401 응답 시 /token/reissue 호출 후 원래 요청 재시도)
- 기존 Authorization 헤더가 있을 경우 인터셉터가 덮어쓰지 않도록 처리
  (비밀번호 재설정 등 특수 토큰 사용 케이스 대응)
- main.dart에 ApiClient().init() 초기화 추가
- 소셜 로그인 GET → POST 변경, 응답에서 accessToken/refreshToken 등 정상 저장
- 아래 전체 화면의 직접 Dio/http 호출을 ApiClient()로 일괄 전환:
  iedu: iedu_create, iedu_home, iedu_detail, iedu_in, iedu_search_result
  wedu: wedu_home, wedu_create_screen, wedu_create_invitation, wedu_modify_screen,
        wedu_detail_screen, wedu_detail_calendar, wedu_in, wedu_search_result_screen,
        wedu_room_info_sheet, management_checklist_screen
  mypage: mypage, mypage_account, mypage_acount_ps, mypage_profile, mypage_scrap,
          follower_api, following_api
  ranking: ranking_api
  sign: signin_screen, signin_email_screen, signup_grade/subject/school/nickname/email,
        password_change (email, validate, new_password)
  기타: NotificationApi, bottomNaviBar, alert_controller, VisitCount
- 카카오: loginWithKakaoTalk/Account() 반환 OAuthToken.accessToken 서버 전송
- 구글: GoogleSignInAuthentication.accessToken 서버 전송
- fetchSocialLogin 시그니처 변경: email → (provider, token, emailForSignup)
- 404(신규 가입) 케이스는 SDK에서 가져온 이메일 그대로 사용
- Apple Sign-In 별도 구현 필요로 미지원 처리
@slz6k
slz6k merged commit 3c47bba into main May 15, 2026
1 check passed
@github-actions

Copy link
Copy Markdown

🤖 Claude Code Review

🤖 Claude Code Review

🔴 버그/보안 이슈

  1. 민감한 정보 노출: google-services.json 파일에 Firebase API 키와 OAuth 클라이언트 정보가 평문으로 저장되어 있습니다. 이 파일이 공개 저장소에 커밋되면 보안 위험이 있습니다.

  2. 환경 변수 검증 부재: claude_review.py에서 ANTHROPIC_API_KEY 환경 변수 존재 여부를 확인하지 않아 런타임 에러 가능성이 있습니다.

  3. 파일 인코딩 문제: Python 스크립트에서 파일 읽기/쓰기 시 인코딩을 명시하지 않아 한글 처리 시 문제가 발생할 수 있습니다.

🟡 개선 권장 사항

  1. 예외 처리 강화:

    • Claude API 호출 실패 시 예외 처리 추가 필요
    • Git diff 명령어 실패 시 처리 로직 필요
  2. 코드 정리:

    • MainActivity.kt 파일이 잘린 상태로 보이므로 완전한 코드 확인 필요
    • .gitignore.env 항목이 중복되어 있습니다
  3. 권한 최소화: GitHub Actions workflow에서 필요한 최소 권한만 부여하는 것이 좋습니다.

  4. 설정 값 외부화: 하드코딩된 값들(MAX_DIFF_CHARS, 모델명 등)을 환경 변수나 설정 파일로 분리 권장

🟢 잘된 점

  1. 자동화된 코드 리뷰 시스템: GitHub Actions를 통한 자동 코드 리뷰 구현이 잘되어 있습니다.

  2. 조건부 실행: PR과 코멘트 이벤트에 대한 적절한 조건 처리가 구현되어 있습니다.

  3. Firebase 통합: Android 앱에 Firebase 서비스가 체계적으로 설정되어 있습니다.

  4. 딥링크 설정: 카카오 로그인과 앱 내 딥링크가 잘 구성되어 있습니다.

  5. 패키지명 변경: 예제에서 실제 앱으로 패키지명이 적절히 변경되었습니다.

우선순위 요약 테이블

우선순위 항목 분류 설명
🔥 높음 Firebase 설정 파일 보안 보안 google-services.json 보안 검토 필요
🔥 높음 환경 변수 검증 버그 API 키 존재 여부 확인 로직 추가
🟡 중간 예외 처리 안정성 API 호출 및 파일 처리 예외 처리 강화
🟡 중간 파일 인코딩 버그 UTF-8 인코딩 명시적 지정
🟢 낮음 코드 정리 품질 중복 제거 및 설정 외부화

이 PR은 자동화된 코드 리뷰 시스템과 Firebase 통합을 추가하는 의미있는 변경사항입니다. 다만 보안 관련 이슈들을 우선 해결하시기 바랍니다.

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.

[refactor] 소셜 로그인

3 participants