Skip to content

Dislike#129

Merged
donggyu412 merged 2 commits intomainfrom
dislike
Dec 14, 2025
Merged

Dislike#129
donggyu412 merged 2 commits intomainfrom
dislike

Conversation

@donggyu412
Copy link
Contributor

  • 기록하기 운동 추천 시작버튼 버그 해결
  • 비선호 식재료 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

},
saveBtnGradient: {
flexDirection: "row",
justifyContent: "center",

Choose a reason for hiding this comment

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

코드 변경사항 전반에 대해 검토해본 결과 몇 가지 잠재적인 버그 및 개선점을 발견했습니다.

  1. 상태 관리 및 API 호출 처리: loadingprocessing 상태의 사용이 혼란스러울 수 있습니다. 두 상태가 동일한 그리드 위젯의 활성화/비활성화를 제어하는 경우, 사용자가 API 호출을 기다리는 동안 상호작용 불가능한 요소들이 줄어들 수 있습니다. 재사용성과 가독성을 높이기 위해 이를 통합하는 것도 고려해보시기 바랍니다.

  2. 함수 중복 및 불필요한 코드: handleCloseonClose가 비슷한 기능을 하게 됩니다. onRequestClose 속성으로 onClose를 직접 사용할 수 있습니다. 이를 통해 중복된 함수를 제거할 수 있습니다.

  3. 마법 숫자 제거: 여러 위치에서 직접 하드코딩된 숫자들(예: height: 100)은 가독성을 떨어뜨립니다. 이러한 값을 상수 변수로 선언하거나 스타일 시트의 속성으로 이동하여 후에 재사용할 수 있습니다.

  4. 예외 처리: API 호출에서 예외가 발생할 경우 사용자에게 제공되는 통지 메시지를 좀 더 구체적으로 개선할 수 있습니다. 사용자가 어떤 오류가 발생했는지를 식별할 수 있도록 수정할 필요가 있습니다.

  5. State 초기값 검토: dislikedFoods와 같은 상태의 초기값 설정을 좀 더 명확하게 하고, React의 상태 업데이트를 사용할 때 성능 이슈를 피하기 위해 setDislikedFoods를 신중하게 사용해야 합니다.

  6. 스타일 개선: 코드 패치의 마지막 부분에서 flex: 1만으로 특정 UI 요소가 화면을 가득 채우게 만들기 보다는, 보다 명확한 목적과 예상치를 가진 요소에 대한 스타일을 정의하는 것이 좋습니다. 이는 유지보수성을 더욱 향상시킬 수 있습니다.

이외에도 위에 언급한 몇 가지 문제를 수정한 후 다시 검토할 수 있습니다.

},
mealDateContainer: {
paddingHorizontal: 20,
paddingTop: 16,

Choose a reason for hiding this comment

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

코드 패치에서 몇 가지 잠재적인 버그와 위험 요소가 있습니다. 다음은 확인할 필요가 있는 사항들입니다:

  1. 비동기 작업의 에러 처리: 비동기 함수들(loadUserData, loadExclusions, loadSavedMeals)에서 에러 발생 시 사용자에게 친절한 메시지가 제공되지만, 에러 발생에 대한 행동이 적절히 처리되지 않고 있습니다. 예를 들어, loadUserData에서 Profile을 불러오는 부분에서 API 호출이 실패하면 이후의 데이터 로딩 부분에 영향을 미칠 수 있습니다. 모든 비동기 작업에서 캐칭 후 적절한 사용자 알림 및 상태 관리를 구현해야 합니다.

  2. 유저 아이디 유효성 검사 부족: userId 값이 수신된 후 이를 다룰 때 유효성 검사 없이 loadExclusions와 같은 함수에 바로 전달되고 있습니다. userId의 값이 유효한지 확인하는 로직을 추가해야 합니다.

  3. 디버깅 코드 제거 필요: 많은 console.log 구문이 포함되어 있습니다. 이는 프로덕션 코드에서는 불필요하거나 성능 저하를 일으킬 수 있습니다. 배포 전에는 이들을 제거하는 것이 좋습니다.

  4. 데이터 타입 정의: tempDay와 같은 객체의 타입 정의가 any로 되어 있습니다. 정확한 데이터 구조를 지정하여 타입 안정성을 높이도록 합니다.

  5. UI 구성 요소 정리: 주석이 많이 포함되어 있어 불필요한 부분이 있습니다. 어떤 UI 구성 요소가 필요 없는지 명확히 하여 가독성을 높이고, 유지보수가 용이하도록 리팩토링해야 합니다.

이러한 점들을 고려하면 코드의 안정성을 높일 수 있습니다. 이러한 수정 사항들을 반영한 후에 다시 검토할 것을 권장합니다.

}
activeOpacity={0.7}
>
<Icon name="close-circle" size={24} color="#ef4444" />

Choose a reason for hiding this comment

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

코드 리뷰

잠재적 버그 및 위험

  1. userId가 설정되지 않은 경우 문제: userId를 사용하는 부분이 여러 군데 있습니다. 초기 loadUserData 호출 후, 서버 호출이 실패한다면 userId가 적절히 설정되지 않을 수 있습니다. 이 경우 handleAddExcludedIngredient와 같은 함수에서 userId가 없을 때 오류가 발생할 수 있습니다.

  2. AsyncStorage 읽기에서 에러 처리 없음: 로컬 스토리지에서 값을 읽을 때 오류에 대한 처리가 없습니다. 읽기 과정에서 오류가 발생할 경우, 이를 적절히 처리하고 사용자에게 알릴 방법이 필요합니다.

  3. 중복 식재료 처리 로직: handleAddExcludedIngredient에서 중복 검사를 수행하는 부분이 excludedFoods의 상태에 의존합니다. 비동기 작업의 결과가 상태에 반영되기 전에 중복 체크가 이루어질 수 있어 예기치 않은 동작이 발생할 수 있습니다.

개선 제안

  1. userId의 유효성 검사 추가: userId가 없는 경우에도 사용할 수 있도록 유효성 검사를 강화해야 합니다. 예를 들어, userId가 없을 경우 사용자에게 알림 메시지를 띄운 후 함수를 잘 종료시켜야 합니다.

  2. AsyncStorage와 관련된 에러 처리 추가: AsyncStorage로부터 값을 읽을 때는 항상 에러 처리를 추가하여 예외 상황을 처리해야 합니다.

  3. 비동기 함수의 상태 동기화 방안 고려: handledAddExcludedIngredient 함수에서 excludedFoods의 상태가 비동기적으로 업데이트 되는 상황을 감안하여, excludedFoods의 최신 상태를 사용하도록 구현을 고려해 보아야 합니다.

  4. 코드 주석 정리: 중요 기능에 대한 주석을 추가하고, 변경 사항에 대한 설명을 명확하게 해주는 것이 좋습니다.

isAIRecommended && styles.logGroupHeaderAI,
]}
>
<Text style={styles.logGroupTitle}>

Choose a reason for hiding this comment

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

코드 리뷰

  1. 디버깅 로그의 남용: 코드에 많은 디버깅 로그가 추가되었습니다. 이로 인해 코드 가독성이 떨어지고 성능에 부정적인 영향을 미칠 수 있습니다. 디버깅이 완료된 후 불필요한 로그는 제거하는 것이 좋습니다.

  2. setTimeout 사용: AI 추천 운동을 추가할 때 setTimeout을 사용하고 있습니다. 이는 비동기적 작업의 결과를 예측하기 어렵게 만들 수 있습니다. 더 나은 해결책은 React의 상태 업데이트에 의존하는 것이며, 필요한 경우 useEffect를 활용하여 더욱 명확하게 처리할 수 있습니다.

  3. 메모이제이션 의존성: React.useMemo 사용 시 의존성 배열에는 모든 의존성이 올바르게 포함되어야 합니다. isActivityFullyCompleted와 같은 함수가 의존성 배열에 없을 경우 예상치 못한 동작을 초래할 수 있습니다. 사용 중인 모든 상태 및 함수가 의존성에 포함되어 있는지 확인하세요.

  4. 리턴된 상태 검사: workoutActivities를 사용하여 버튼을 렌더링하고 있는데, 이 배열이 비어 있을 가능성을 체크해야 합니다. 현재 로직은 비어있는 조건을 간과할 수 있습니다.

  5. 타입스크립트의 활용: 일부 변수의 타입이 any로 설정되어 있습니다. TypeScript의 강점을 최대한 활용하여 적절한 타입을 정의하는 것이 좋습니다. 예를 들어, activity 변수에는 더 구체적인 타입을 적용하십시오.

  6. 불필요한 주석 제거: 코드의 가독성을 높이기 위해 불필요한 주석들은 제거하는 것이 좋습니다. 상래한 정보는 코드 자체로 유추할 수 있어야 합니다.

이러한 몇 가지 수정 사항을 고려하십시오.

}

const response = await fetch(`${API_BASE_URL}${endpoint}`, {
...options,

Choose a reason for hiding this comment

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

코드 패치에 대한 리뷰를 아래와 같이 정리했습니다:

  1. 토큰 로깅: 토큰을 로그하는 부분에서 사용자의 개인 정보가 포함될 수 있는 민감한 정보를 기록하고 있습니다. 이는 보안상의 위험을 초래할 수 있습니다. 토큰의 전체 내용을 로그로 남기지 않는 것이 좋습니다.

  2. URL 디코딩 로그: URL을 디코딩하여 출력하는 부분에서, 만약 잘못된 URL 인코딩이 있는 경우 decodeURIComponent 함수가 예외를 발생시킬 수 있습니다. 이 경우를 처리하는 try-catch 블록을 추가하는 것이 좋습니다.

  3. 본문 로깅: 요청 본문을 로깅할 때 예외가 발생할 수 있는 점을 감안하여, options.body가 JSON 형식이 아닐 경우에도 안전하게 처리할 수 있는 방법을 고려해야 합니다. 예를 들어, 오류 발생 시 더 친절한 메시지를 로그에 남기는 것이 좋습니다.

  4. 에러 핸들링: 네트워크 요청(fetch)에 대한 에러 핸들링이 отсутствует. 예외가 발생했을 때 해당 오류를 로깅하거나 사용자에게 피드백을 주는 로직을 추가해야 합니다.

  5. 코드 중복: 본문 로깅 부분의 코드가 중복되어 보입니다. JSON.stringifytypeof 검사를 별도의 함수로 추출하여 중복을 줄일 수 있습니다.

결론적으로, 보안과 에러 처리 측면에서 추가적인 개선이 필요합니다. 이러한 리스크를 완화한 후에 병합하는 것이 좋습니다.

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. 잘못된 에러 핸들링: catch 블록에서 error 객체를 any 타입으로 선언하는 것은 TypeScript의 타입 안전성을 저해합니다. 모든 에러는 unknown 타입으로 선언하고, 필요할 경우 에러 타입을 확인해야 합니다. 이는 잘못된 사용으로 이어질 수 있습니다.

  2. API 호출의 URL 문자열 구성: URLSearchParams를 사용하여 쿼리 파라미터를 구성하는 것은 괜찮지만, URL의 구조를 놓치지 않도록 주의해야 합니다. 또한, foods 배열이 비어있을 때를 대비하여, 비어 있는 상태에서 API 호출이 이루어지지 않도록 검사해야 합니다.

  3. 응답 형식에 대한 검증 부족: API 호출 후 응답을 다루는 부분에서 응답 형식을 검사하고 처리하는 로직이 없습니다. 예상치 못한 응답 형식이 올 경우, 애플리케이션에 예기치 않은 문제가 발생할 수 있습니다. 이는 특히 addExclusionsdeleteExclusion 메서드에서 유의해야 합니다.

  4. 로깅 개선: 요청/응답 로그를 출력할 때, 민감한 정보나 사용자의 개인 정보를 포함하지 않도록 주의해야 합니다. 어떤 경우에는 로깅 솔루션을 도입하여 정보 유출을 방지하는 것이 좋습니다.

  5. 일관된 오류 메시지: 오류 메시지가 일관되게 구성된 부분은 좋지만, 특정 조건에 따라서 더 구체적인 안내 메시지가 필요할 수 있습니다. 예를 들어, 네트워크 오류와 같은 상황을 구분해서 더 나은 사용자 경험을 제공할 수 있습니다.

이러한 문제를 해결한 후에 이 코드를 병합하는 것이 좋겠습니다.

}
// 홈 화면 응답 타입
export interface HomeResponse {
userSummary: {

Choose a reason for hiding this comment

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

코드 패치에 대해 다음과 같은 우려 사항이 있습니다:

  1. 응답 타입 변경: AddDislikedFoodResponseExclusionResponse로 변경되면서 응답 구조가 크게 달라졌습니다. 이 변경이 시스템의 나머지 부분에 예상치 못한 영향을 미치지는 않을지 확인할 필요가 있습니다. 이를 테스트하여 기존 기능이 의도한 대로 작동하는지 확인해야 합니다.

  2. 타입 일관성: idfood_name, reason이 저장되는 ExclusionResponse 타입이 잘 정의되어 있지만, 기존의 RemoveDislikedFoodResponse와의 관련성(매핑, 변환 등)이 명확하지 않습니다. 이들 간의 관계를 분명히 하고, 필요한 경우 변환 함수를 추가하는 것이 좋습니다.

  3. 메시지 필드 제거: AddDislikedFoodResponse에서 message 피드를 제거하면서, 삭제 응답에서 피드백을 주는 메커니즘이 사라졌습니다. 이 필드는 사용자 경험 향상에 기여할 수 있었으므로 필요 여부를 재검토해야 합니다.

  4. 주석 부족: 기본적으로 타입의 목적과 사용처에 대한 주석이 부족합니다. 다른 개발자들이 이해할 수 있도록 보다 명확한 문서를 각각의 응답 타입에 추가하는 것이 좋습니다. 필요하다면 각 필드의 설명도 추가해 주세요.

  5. 형식 일관성: DeleteExclusionResponsestatus 필드는 문자열이며, 예시로 제공된 값이 특정해야 합니다. 사용 가능한 상태의 목록을 주석으로 추가하면 좋습니다.

종합적으로 이 코드를 머지하기 전에 충분한 테스트와 보완이 필요합니다.

@donggyu412 donggyu412 merged commit 752bf2a into main Dec 14, 2025
1 check passed
@donggyu412 donggyu412 deleted the dislike 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