Skip to content

Donggyu bugfix#127

Merged
donggyu412 merged 6 commits intomainfrom
donggyu_bugfix
Dec 14, 2025
Merged

Donggyu bugfix#127
donggyu412 merged 6 commits intomainfrom
donggyu_bugfix

Conversation

@donggyu412
Copy link
Contributor

  • 마이페이지 운동 추천내역 무료 유료 회원 구분해서 추천 화면으로 이동
  • 운동 추천 7일 저장 api 연결
  • 홈 운동 요약 api 연결

@donggyu412 donggyu412 added the bugfix Something isn't working label Dec 14, 2025
Copy link

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

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

Code review by ChatGPT

},
});

export default DislikedFoodsModal;

Choose a reason for hiding this comment

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

안녕하세요. 아래는 코드 패치에 대한 검토 결과입니다.

잠재적 버그 및 리스크

  1. declaration variable issue: const loadDislikedFoods = async () => {...}에서 데이터를 가져올 때, 현재 상태에서 원래의 음식을 업데이트하는 부분이 호출되지 않는 경우가 발생할 수 있습니다. 만약 API에서 반환된 값이 빈 배열일 경우, 사용자가 기존의 음식 목록을 잃게 될 수 있습니다.

  2. 정렬하는 과정에서 발생하는 상태 비동기 문제: dislikedFoods.sort() 메서드를 여러 번 호출하여 갱신된 배열이 매번 새로운 위치에 놓이게 될 수 있습니다. 이로 인해 원하지 않는 동작이 발생할 수 있습니다.

  3. 일관되지 않은 알림 메시지: 에러 처리 부분에서 error.message와 같은 속성이 항상 정의되어 있지 않을 수 있습니다. 따라서 이 경우, 기본 메시지를 표시하도록 변경해야 합니다. 예를 들어, Alert.alert("오류", "저장에 실패했습니다.");와 같이 처리법을 추가하는 것이 좋습니다.

개선 제안

  1. 상태 관리 최적화: setHasChanges에 대한 방식이 복잡하게 보입니다. useEffect로 상태가 업데이트될 때, 이를 최적화할 수 있을 것입니다. 예를 들어, 원래의 값과 새로운 값이 다를 경우에만 비교하는 방법 등입니다.

  2. UI 개선: 로딩 중일 때 버튼을 비활성화 하는 방식도 좋지만, 사용자에게 상태를 명확히 보여줄 수 있는 형태로 변경하면 좋습니다. 예를 들어, 로딩 시간 동안 '저장 중...'과 같은 표현을 추가하는 것이 유용할 것입니다.

  3. 리스폰시브 디자인 확인: 다양한 화면 크기에 따라 Dimensions를 사용하는 것은 좋지만, 반응형 디자인 측면에서 레이아웃의 유동성을 검토하는 것이 필요합니다.

전체적으로 코드는 대부분 이해하기 쉬우나, 위와 같은 리스크와 개선점들을 고려하여 수정하는 것이 좋습니다.

},
});
export default PaymentMethodModal;

Choose a reason for hiding this comment

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

코드 리뷰 의견

  1. 에러 처리: API 호출 중 에러가 발생할 경우, 콘솔에 에러를 출력하고 있지만 사용자가 에러를 이해하기 쉽게 알림을 띄워주는 로직이 부족합니다. fetchSubscriptionData 함수와 handleCancelSubscription 함수 모두에서 사용자에게 에러 메시지를 보여줄 수 있는 수정이 필요합니다.

  2. 비동기 처리: handleCancelSubscription 내에서 API 호출 후 성공 여부를 판단한 후에만 알림을 띄우고 있습니다. responseundefined 또는 null일 경우에 대한 체크가 없으므로, 이 경우 앱이 예상되지 않은 동작을 할 수 있습니다. API 호출이 오류나 실패한 경우에 대한 별도의 처리를 추가해야 합니다.

  3. 의미적 오류: if (response.success) 대신 if (response && response.success)로 작성하여, response가 유효한지 체크하는 것이 좋습니다. 현재 API 응답이 기대한 대로 오지 않을 경우를 고려해야 합니다.

  4. 날짜 형식: formatDate 함수에서 dateStringnull일 때 '-'를 반환하고 있습니다. 그러나, API가 잘못된 날짜 형식을 반환할 경우 발생할 수 있는 문제를 고려하여 예외 처리 로직을 추가하는 것이 좋습니다.

  5. 구독 정보 표시 로직: hasActive 변수를 통해 활성 구독 여부를 판단하고 있으나, 이에 대한 필요성이 애매한 코드가 포함되어 있습니다. 구독 정보가 없거나 구독이 취소된 경우에 대한 세부 표시 로직이 뚜렷해야 할 것입니다. 필요한 에러 메시지나 관련 UI를 사용할 수 있도록 개선해야 합니다.

  6. 상태 관리: 비동기 호출 중에 컴포넌트가 언마운트될 경우 상태 업데이트가 필요 없다고 생각하지만, 이로 인해 메모리 누수 및 경고가 발생할 수 있습니다. useEffect에서 Cleanup 함수를 사용하여 언마운트 시 모든 비동기 작업을 제대로 처리시키는 것이 좋습니다.

  7. 스타일링 개선: 스타일 규칙을 별도의 파일로 분리하여 가독성을 높이는 것이 좋습니다.

결론

현재 코드에서는 여러 오류 및 개선할 점이 있으며, 이러한 문제로 인해 배포하기에는 적합하지 않습니다. 코드 리뷰 지적 사항을 기반으로 플랜 수정을 고려하십시오.

</NavigationContainer>
</DateProvider>
);
}

Choose a reason for hiding this comment

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

코드 리뷰

  1. 중복 코드: 패치 전후 코드에서 import 문이 그대로 반복되고 있습니다. 코드의 중복을 제거하기 위해서, import 문을 한 번만 유지하도록 수정할 필요가 있습니다.

  2. 타입 안전성: let iconName: any; 대신 let iconName: string;으로 타입을 제한해주는 것이 좋습니다. 이렇게 하면 타입 안전성을 높일 수 있습니다.

  3. switch문에서 기본값 처리: default 경우 iconNameICONS.HOME.inactive로 설정하고 있습니다. 만약 새로운 탭이 추가된다면, 이는 누락된 탭에 대해 예기치 않은 동작을 초래할 수 있습니다. 이를 방지하기 위해 적절한 경고 메시지를 log하면 좋습니다.

  4. 의미 없는 주석 제거: 각 스크린들이 포함된 주석 제목들에서는 'Screens'와 같은 중복적인 문구가 보입니다. 코드를 더 깔끔하게 유지하기 위해 이러한 주석은 제거하거나 구체적인 설명으로 대체하는 것이 좋습니다.

  5. 화면 간의 방향성: 여러 Screen들이 포함된 Stack을 구성할 때, 각 Screen의 전환 효과에 대한 설정이 없으므로, 필요할 경우 전환 효과를 추가하는 것이 좋습니다.

  6. Linting 및 포매팅: 코드 스타일을 일관되게 유지하기 위해 eslint 또는 prettier와 같은 도구를 적용하여 자동 포매팅을 고려해야 합니다. 이는 협업 시 코드 가독성을 높이는 데 도움이 됩니다.

  7. 딥링크 설정 검토: 딥링크 설정의 각 화면이 정말로 존재하는지 확인하고, 실제로 작동하는지 테스트하여 리다이렉트 및 경로 처리가 올바른지 확인해야 합니다.

});

export default KakaoOnboardingScreen;

Choose a reason for hiding this comment

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

코드 리뷰

잠재적인 버그 및 리스크

  1. 형 변환 오류 : formData.gender는 문자열을 M 또는 F로만 제한하는데, 사용자의 잘못된 입력이나 다른 값으로 설정될 경우, 앱이 예상하지 못한 동작을 할 수 있습니다. 적절한 유효성 검사를 추가하여 사용자의 입력을 검사해야 합니다.
  2. 에러 처리 부족 : API 호출에서 발생할 수 있는 다양한 오류 상태를 세분화하여 처리하지 않았습니다. API 오류는 종종 예기치 않게 발생할 수 있으므로 사용자에게 더 나은 경험을 제공하기 위해 적절한 피드백이 필요합니다. 예, '네트워크 오류가 발생했습니다. 나중에 다시 시도해주세요.'와 같은 메시지를 추가할 수 있습니다.
  3. 상수 사용 : 하드코딩된 문자열들 (예: 오류 메시지들) 대신, 상수로 관리하면 유지보수성이 향상됩니다.
  4. 비어 있는 필드 검증 : 매개변수로 주어진 모든 필드를 검사하기 전에 나머지 필드의 값을 설정해야 하는지 고려해야 합니다. 이를 통해 사용자가 필드에 입력한 값이 사라지지 않게 할 수 있습니다.

개선 제안

  1. 유효성 검사 개선 : 값이 허용 범위를 벗어난 경우 적절한 오류 메시지를 사용자에게 제공하여 경험을 개선하세요.
  2. 리팩토링 : API 호출과 관련된 로직을 별도의 함수로 추출하여 코드의 가독성을 높이세요. 현재 모든 로직이 하나의 함수에 포함되어 있어 복잡해 보입니다.
  3. 모달 컴포넌트 분할 : 여러 모달이 있지만 각 모달의 코드가 반복되고 있습니다. 모달을 재사용 가능한 컴포넌트로 분할하는 것을 고려해보세요. 이는 코드의 일관성을 유지하고 유지보수를 쉽게 합니다.
  4. 상수화 : 문자열 메시지를 상수로 정의하여 나중에 쉽게 관리할 수 있도록 하세요. 예를 들어 오류 메시지는 상수 파일로 분리하여 사용할 수 있습니다.

일반적인 코드 스타일

이 코드의 스타일은 전반적으로 일관성이 있지만, 가독성을 더욱 높이기 위해 세미콜론을 통일하여 사용하는 것이 좋습니다. 또한 JSX 내의 공백을 적절히 조정해보세요.

결론

전반적으로 개선의 여지가 있으며, 코드가 예상대로 작동할지 확인하기 위한 몇 가지 수정 사항이 필요합니다. 위의 제안을 바탕으로 수정을 진행하여 이후의 작업에 도움이 되길 바랍니다.

});

export default LoginScreen;

Choose a reason for hiding this comment

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

코드 리뷰

  1. 로딩 상태 관리: 로딩 상태인 경우 동일한 API 호출을 중복해서 실행할 가능성이 있습니다. 로딩 상태를 관리할 때 더 세심한 주의가 필요합니다.

  2. 에러 핸들링: API 호출 중 에러가 발생했을 때, 그 에러 메시지를 사용자에게 보여주는 내용이 있습니다. 하지만 모든 오류 상황에서 유용한 피드백이 주어지는지 확인할 필요가 있습니다. 예를 들어, 로그인 실패나 토큰 저장 실패에 대한 사용자 경험을 향상시킬 수 있는 방법을 고민해야 합니다.

  3. 상태 업데이트: setLoading(false)가 여러 곳에서 호출되고 있습니다. 이를 통합해서 로딩 상태를 관리하는 것이 좋습니다.

  4. 코드 중복: 인증 코드가 있는 경우와 없는 경우 처리 로직이 매우 유사합니다. 이를 공통 함수로 추출하여 코드 중복을 줄일 수 있습니다.

  5. 타입 안전성: any 타입을 사용하는 대신 더 구체적인 타입을 정의하여 타입 안전성을 높이는 것이 좋습니다. 예를 들어, API 응답의 형식을 정의하여 타입을 명시적으로 사용할 수 있습니다.

  6. API URL과 같은 민감한 데이터: API URL과 같은 민감한 데이터는 코드에 하드코딩하는 것보다는 환경 변수로 관리하는 것이 더 안전합니다.

  7. 고유한 식별자: 사용자의 userId와 같은 중요한 정보를 AsyncStorage에 저장하는 경우, 이미 해당 키가 존재하는지 확인하는 절차를 추가하는 것이 좋습니다.

  8. 정리되지 않은 로깅: 로그를 남기는 부분에서 어떤 상황에서 로그가 남길지, 필요 없는 로그는 제거하는 것이 좋습니다. 예를 들어, 생산 환경에서는 디버그 로그를 제거해야 합니다.

);
return response;
} catch (error: any) {
console.error("[AUTH] 카카오 연결 해제 실패:", error);

Choose a reason for hiding this comment

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

코드 리뷰

잠재적 버그 및 리스크

  1. 에러 처리: kakaoLogoutkakaoUnlink 함수에서 오류가 발생할 경우, 해당 오류가 기록되지만, 에러를 호출자에게 다시 전달하지 않습니다. 이로 인해 호출자가 실패 상황을 알 수 없게 되어, 적절한 처리를 할 수 없게 됩니다. 에러를 던지거나 의미 있는 메시지를 반환하는 것이 좋습니다.

  2. AsyncStorage의 비동기적 오류 처리: AsyncStorage.setItem이 실패할 경우에 대한 처리가 없습니다. 비동기 저장 중 오류가 발생할 경우 로그 등을 기록하고, 사용자에게 알림을 제공하는 것이 좋습니다.

개선 제안

  • 코드 중복 제거: kakaoLogoutkakaoUnlink의 코드를 함수로 분리하여 중복 코드를 줄이는 것을 고려해볼 수 있습니다.
  • 일관된 로그 메시지 포맷: 로그 메시지에 일관성을 부여하여 쉽게 인지할 수 있도록 설정하는 것이 좋습니다. 혹은 로그 레벨을 구분하여, 다양한 상황에서의 로그 비율을 조절할 수 있습니다.
  • Type Safety: error: any 대신에 error: unknown 타입을 사용하여 TypeScript의 타입 안전성을 활용하는 것이 좋습니다.

throw error; // 에러를 상위로 던져서 저장 프로세스를 중단할지 결정
}
},
};

Choose a reason for hiding this comment

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

코드 리뷰

새로운 기능

  • generateWeeklyExercisePlan, getRecommendedExercises, getRecommendedHistory, saveWeeklyExercisePlan, saveTempSummary 등의 새로운 함수가 추가되었습니다.

잠재적 문제점

  1. 에러 처리 일관성: generateWeeklyExercisePlansaveWeeklyExercisePlan 함수에서 에러를 catch한 후 throw error;로 처리하고 있지만, 다른 함수들과 달리 상태 코드를 기반으로 한 세밀한 에러 핸들링이 없습니다. 이는 사용자에게 유용한 정보를 제공하지 않을 수 있습니다.
  2. 타입스크립트 타입: 대부분의 함수에서 반환 타입을 Promise<any>로 설정했습니다. 이보다는 구체적인 타입을 정의하여 코드 가독성과 타입 안정성을 높이는 것이 좋습니다.
  3. 토큰 존재 여부 확인: generateWeeklyExercisePlan에서는 토큰이 존재하는지 확인 후 요청을 보내지만, 토큰이 없을 경우 별다른 처리가 없습니다. 이 상황을 처리하여 명시적으로 사용자에게 알리는 것이 좋습니다. 예를 들어, 토큰이 없는 경우 에러를 던지는 코드 추가 필요.
  4. 비동기 스토리지 접근: AsyncStorage를 사용하기 때문에 이 함수 호출이 비동기적으로 작동하며, 비동기 처리에 따른 로직의 일관성을 확보해야 합니다.
  5. 중복 코드: 여러 함수 내에서 로그인 필요 상태 코드에 대한 처리가 반복되고 있습니다. 이 부분을 별도의 함수를 작성하여 중복을 줄이는 것이 도움이 됩니다.

개선 제안

  • 에러 처리 통일: 에러 처리 방식을 통일하여 사용자에게 보다 명확한 피드백 제공. 특히 로그인 관련 에러는 공통 함수를 만들어 처리.
  • 타입 정의 강화: 모든 호출과 응답에 대한 타입을 명확히 함으로써 코드 가독성 및 안정성 향상.
  • 문서화: 함수에 대한 주석을 추가하여 사용법과 예상되는 입력값 및 반환값에 대한 정보를 상세히 기재.
  • 토큰 부재 처리사항 추가: 토큰이 없는 경우의 예외 처리를 추가하여 문제 예방.

이러한 점들을 반영하여 코드를 수정하면, 전체적인 품질이 향상될 것 같습니다.


throw new Error(error.message || "식단 생성에 실패했습니다.");
}
},

Choose a reason for hiding this comment

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

코드 patch에 몇 가지 잠재적인 버그와 개선 사항이 있습니다.

  1. 불필요한 공백: 여러 줄에 걸쳐 불필요한 공백이 추가되었습니다. 이는 코드의 가독성을 떨어뜨릴 수 있으며, 주의가 필요합니다.

  2. 에러 핸들링: 에러 메시지를 던질 때 에러 객체의 속성을 제대로 검사하지 않는 경우가 있을 수 있습니다. 특히 error 객체가 status 속성을 가지지 않거나 message 속성이 undefined인 경우를 처리할 필요가 있습니다. 이를 통해 코드를 더욱 견고하게 만들 수 있습니다.

  3. 에러 메시지 일관성: 사용자가 이해하기 어렵지 않도록 에러 메시지를 좀 더 구체적으로 작성할 수 있습니다. 예를 들어, error 객체의 내부 상태를 로깅하거나 이를 사용자에게 더 자세히 설명해주면 좋습니다.

  4. 기타 에러: error.message의 경우도 마찬가지로 존재하지 않을 수 있으므로, 기본 메시지를 설정할 때 조심해야 합니다.

그래서 전체적으로 코드는 수정이 필요해 보입니다.

throw new Error(error.message || "금지 식단 저장에 실패했습니다.");
}
},
};

Choose a reason for hiding this comment

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

현재 패치에서 주목해야 할 몇 가지 사항이 있습니다:

  1. 기능 변경: 기존의 addDislikedFoodremoveDislikedFood 기능들이 사라지고, 대신 saveDislikedFoods라는 새로운 함수가 추가되었습니다. 이 과정에서 기존 기능을 사용하는 다른 모듈이나 컴포넌트가 있다면, 해당 코드들이 정상적으로 작동하지 않을 수 있습니다. 기능을 변경하거나 제거할 때는 항상 의존성에 대한 검토가 필요합니다.

  2. 변경된 API 호출: 새로운 saveDislikedFoods 메소드는 전체 비선호 음식을 저장하는 방식입니다. 즉, 중복된 음식이 저장될 위험이 있으며, 기존의 addDislikedFood 함수는 하나의 음식을 추가하는 방식이기 때문에 두 접근 방식의 사용성 차이에 유의하여야 합니다.

  3. 에러 핸들링: 모든 API 호출에서 catch블록이 너무 일반적입니다. 'error.message'를 사용하는 것은 유용하지만, 일부 상황에서는 error가 MessageObject가 아닐 수 있습니다 (예: 네트워크 오류). 잠재적인 예외를 고려하여 더 안전한 방식으로 핸들링해야 할 필요가 있습니다.

  4. 타입 안정성: request 함수에서 반환된 응답의 타입을 확실하게 안전하게 확인할 필요가 있습니다. 예를 들어, dislikedFoods 배열의 존재를 보장하기 위해 null 체크를 추가하는 것이 좋습니다.

  5. 로깅 개선: API 호출에 대한 성공 및 실패를 로그하는 것은 좋지만, 필요 이상의 정보가 노출될 수 있습니다. 특히 사용자 데이터를 포함하는 응답 내용은 신중히 다루어야 합니다.

총체적으로, 이 패치는 UX에 중대한 영향을 미칠 수 있는 여러 기능을 변경하므로, 이러한 변동성이 다른 코드에 미치는 영향을 종합적으로 검토해야 합니다.

return [];
}
}; No newline at end of file
};

Choose a reason for hiding this comment

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

이 코드 패치에서는 몇 가지 중요한 문제와 개선 사항이 있습니다:

  1. 빈 공백 제거: 코드 중간의 여러 장소에서 불필요한 빈 줄이 제거되었습니다. 이는 코드의 가독성을 높이지 않지만, 코드 관리에는 영향이 없습니다. 간혹 빈 줄이 필요할 수 있으므로, 제거와 추가를 신중히 고려해야 합니다.

  2. 에러 처리 로직: 에러 처리 부분에서 400 또는 404 상태에 대해 데이터가 없음을 알리는 로직이 잘 구현되어 있습니다. 그러나 500 상태 코드에 대한 경고 처리에서 사용자가 '코멘트'를 받지 못하게 하는 부분은 내부 오류에 대한 적절한 대응이 아닐 수 있습니다. 사용자에게 좀 더 친절한 에러 메시지를 전달하거나, 오류가 발생했음을 알리는 방법을 모색해야 합니다.

  3. AsyncStorage 사용: 여러 곳에서 AsyncStorage를 호출할 때 토큰을 받아오는 작업이 있습니다. 만약 ACCESS_TOKEN_KEY가 유효하지 않거나 null이라면, 추가적인 예외 처리 로직이 필요할 수 있습니다. 이를 통해 실행시 오류를 방지할 수 있습니다.

  4. URL 구성: 날짜를 정규화한 후 URL을 만들 때 입력 값인 date가 잘못된 형식일 경우를 고려해야 합니다. 예외 처리가 필요할 수 있습니다.

  5. FormData 구성: 파일 추가 시 type이 명시되지 않은 경우 'image/jpeg'로 기본 처리하고 있으나, 사용자가 업로드하는 파일 유형을 보다 명확히 파악할 수 있도록 로깅하면 유용할 것입니다.

이러한 개선 사항과 잠재적인 버그를 해결하면, 코드의 안정성과 사용자 경험을 향상시킬 수 있습니다.

@donggyu412 donggyu412 merged commit 0fed769 into main Dec 14, 2025
1 check passed
@donggyu412 donggyu412 deleted the donggyu_bugfix branch December 14, 2025 12:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bugfix Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant