Skip to content

식단 추가 api 연결, 구독 플랜 api 연결#120

Merged
donggyu412 merged 1 commit intomainfrom
meal
Dec 13, 2025
Merged

식단 추가 api 연결, 구독 플랜 api 연결#120
donggyu412 merged 1 commit intomainfrom
meal

Conversation

@donggyu412
Copy link
Contributor

  • 식단 추천 api 연결
  • 구독 플랜 api 연결

@donggyu412 donggyu412 added the bugfix Something isn't working label Dec 13, 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 PaymentMethodModal;

Choose a reason for hiding this comment

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

코드 리뷰

잠재적인 버그 및 위험 요소

  1. API 호출의 에러 처리: fetchSubscriptionDatahandleCancelSubscription 함수에서는 API 호출 중 발생하는 에러를 로깅만 하고 있습니다. 이는 사용자에게 피드백을 제공하지 않으므로, 에러가 발생했을 때 사용자에게 알림을 제공하는 것을 고려해야 합니다.

  2. 상태관리의 안전성: setSubscription(data)와 같은 곳에서 수신한 data가 null이나 undefined일 경우의 처리가 없습니다. API 응답에 대한 검증이 필요합니다.

  3. 메모리릭스 가능성: 비동기 작업을 수행하는 동안 컴포넌트가 언마운트되면, 비동기 응답이 실행될 경우 메모리릭이 발생할 수 있습니다. 이를 위해 useEffect의 클린업 함수에서 이 문제를 해결할 수 있습니다.

  4. 구독 취소의 확실성: handleCancelSubscription에서 API 호출의 success 속성을 체크하지만, 그에 대한 명확한 확인이 필요합니다. 예를 들어, 서버의 응답이 명확하지 않을 때의 처리도 필요합니다.

개선 제안

  1. 에러 핸들링 개선: API 호출 시 에러가 발생했을 경우 사용자에게 구체적인 피드백을 주기 위해 alert를 추가하는 것이 좋습니다.

    Alert.alert("오류", "데이터를 가져오는 중 문제가 발생했습니다.");
  2. 상태 적절한 처리: subscription이 null 일 경우를 처리하여, UI에서 빈 상태일 때 적절한 콘텐츠를 제공할 수 있습니다.

  3. 클린업 추가: useEffect에서 클린업 함수를 추가하여 컴포넌트 언마운트 시 상태 업데이트를 방지할 수 있습니다:

    useEffect(() => {
      if (isOpen) {
        fetchSubscriptionData();
      }
      return () => {
        setIsLoading(false); // 상태 초기화
      };
    }, [isOpen]);
  4. 명확한 API 오류 처리: API 호출의 성공 여부를 확인하는 부분에서 더 명확한 에러 메시지를 제공하는 방법을 고려하십시오. 이를 통해 사용자가 더 이해하기 쉬운 방식으로 문제를 알 수 있습니다.

개선된 코드는 유지보수와 확장성에 긍정적인 영향을 줄 것으로 예상됩니다.

});

export default MealRecommendScreen; No newline at end of file
export default MealRecommendScreen;

Choose a reason for hiding this comment

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

코드 리뷰

  1. 타입 안전성: currentMealsnumber로 제한되어 있으나, 1, 2, 3 이외의 값이 들어올 수 있는 경우에 대한 예외 처리가 필요합니다. 시나리오에 따라 잘못된 값이 들어올 경우 UI가 기대한 대로 동작하지 않을 수 있습니다.

  2. UI 상태 관리: MealsSelectionModal에서 onSelect가 호출된 후에도 메인 컴포넌트에서 상태를 관리하고 있습니다. 이 경우 사용자 경험이 좋지 않을 수 있습니다. 예를 들어 사용자가 버튼을 클릭할 때 선택이 완료되지 않았음에도 불구하고 모달이 닫힐 수 있습니다. 따라서 onClose() 호출을 onSelect와 분리하는 것이 좋습니다.

  3. 모바일 접근성: TouchableOpacityactiveOpacity 값이 0.8로 설정되어 있어 일반적으로 괜찮지만, UI 요소의 접근성이 더 높아야 할 수도 있습니다. 시각적으로 사용자 피드백을 명확히 할 수 있는 방식으로 설정을 고려해야 합니다.

  4. 코드 일관성: liked 필드의 주석을 추가한 부분(// ✅ 추가)이 타 주석과 일관되지 않으며, 주석을 통해 설명할 내용을 서술 형식으로 다루는 것이 좋습니다. 코드 변경 이력이 아닌, 변경된 이유를 남길 필요가 있습니다.

  5. 상태 변수 초기화: mealsPerDayshowMealsModaluseState로 초기화했지만, 기본값이 상황에 맞는지 확인해야 합니다. 앱의 특정 컨텍스트에 따라 초기화 값이 다를 수 있습니다.

이 외에 스타일 컴포넌트는 보기 좋고, UI 접근성을 더 높이기 위한 추가적인 고려가 필요합니다. 전체적으로 유용한 기능을 추가한 부분인데, 상기된 개선사항들을 구현하면 더 나은 품질의 코드가 될 것입니다.


<ProfileEditModal
isOpen={isProfileEditModalOpen}
onClose={() => setIsProfileEditModalOpen(false)}

Choose a reason for hiding this comment

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

다음은 코드 패치에 대한 몇 가지 고찰입니다:

  1. 종속성 추가: getProfile을 import 했지만 코드 내에서 사용되지 않고 있습니다. 불필요한 import는 코드의 가독성을 떨어뜨리므로 제거하는 것이 좋습니다.

  2. 에러 핸들링: executeLogout 함수에서 authAPI.logout() 호출 중 에러가 발생했을 때 console.error(e);로만 에러를 로그하고 있는데, 사용자에게 에러 상황을 더 잘 알릴 필요가 있습니다. Alert를 사용하여 에러 메시지를 사용자에게 보여줄 수 있는 방안을 고려해보세요.

  3. 이름 변경: handleLogout 함수가 재정의되어 있습니다. 만약 handleLogout이 단순히 executeLogout을 호출하는 것이라면 중복된 함수명을 사용하는 것보다 handleLogouthandleLogoutPress로 변경하는 게 좋습니다.

  4. 주석 정리: 주석이 드문드문 잘 정리되어있지 않아 가독성이 떨어집니다. 같은 주석 스타일을 유지하며 불필요한 내용을 정리하여 일관성 있게 유지하는 것이 좋습니다.

  5. 타입 안정성: route.params에 대한 접근에서 타입 안정성을 고려하여 params의 타입을 명시하는 것이 장기적으로 코드 유지보수에 유리합니다.

모든 개선사항을 기초로, 코드가 머지되기 전에 체크리스트를 다시 검토하고, 반드시 필요한 부분에는 테스트를 추가하는 것을 권장합니다.

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 블록에서 errorany 타입으로 정의하고 있습니다. 가능하면 더 구체적인 타입을 사용하는 것이 좋습니다. 예를 들어, 서버에서 반환하는 에러 구조를 알고 있다면 그에 맞춰 타입을 정의하여 사용하는 것이 좋습니다.

  2. 로그 출력: console.logconsole.error를 사용하는 것은 개발 과정에서는 유용하지만, 프로덕션 환경에서는 불필요한 정보 노출이 우려됩니다. 대신, 로깅 라이브러리를 사용하는 것이 좋습니다. 예를 들어, winston이나 log4js와 같은 라이브러리를 사용하는 것을 추천합니다.

  3. HTTP 요청의 메서드: 두 함수 모두 API 요청 시에 적절한 HTTP 메서드를 사용하고 있습니다만, 실제 API에서 지원되는 메서드(예: PUT, DELETE 등)와 마찬가지로 사용이 적절한지 항상 확인해야 합니다.

  4. 주석: 주석은 도움이 되지만, 때때로 너무 많은 주석은 코드 가독성을 해칠 수 있습니다. 함수와 변수명만으로도 충분히 이해할 수 있다면 주석은 피하는 것이 좋습니다. 주석은 API 문서화와 같은 곳에 따로 관리하는 것도 좋은 방법입니다.

  5. 테스트 부족: 이 코드의 동작을 보장하기 위해 단위 테스트가 필요합니다. 각 API 호출에 대해 테스트를 작성하여 예상대로 동작하는지 검증하는 것이 좋습니다.

  6. 타입 안정성: 양쪽 호출(getMySubscriptioncancelSubscription)에 대해 응답의 구조가 API 문서와 일치하는지 확인해야 합니다. 만약 API가 변동할 경우, 이런 변경이 코드에서 쉽게 반영될 수 있도록 타입을 정의하는 것이 필요합니다.

mealType: "BREAKFAST" | "LUNCH" | "DINNER" | "SNACK";
mealTypeName: string;
totalCalories: number;
totalCarbs: number;

Choose a reason for hiding this comment

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

코드 리뷰

잠재적인 버그 및 리스크

  1. HTTP 응답 처리: createResponseresponse의 HTTP 응답 상태 코드를 확인하는 로직이 없습니다. 응답이 실패일 경우(예: 4xx, 5xx 상태 코드) 처리해야 할 필요가 있습니다. 현재는 성공적으로 변환된다고 가정하고 있는 위험 요소가 있습니다.

  2. 일치하지 않는 API 호출: getDailyMealPlan 함수에서 'weekly' 엔드포인트를 호출하고 있습니다. 이는 논리적으로 맞지 않으며, 아마도 'daily' 엔드포인트를 호출해야 할 것으로 보입니다. 이로 인해 잘못된 데이터를 반환할 수 있습니다.

  3. 기본값의 유효성 검사: mealsPerDay의 값이 1~3 사이인지 확인하는 유효성 검사 로직이 없어서, 사용자가 잘못된 값을 입력할 경우 오류가 발생할 수 있습니다.

개선 사항 제안

  1. 상태 코드 확인 추가: request 함수 호출 후 상태 코드를 체크하고, 프로퍼 오류가 발생하지 않도록 적절한 예외 처리를 추가하세요.

  2. API 호출 수정: getDailyMealPlan 함수에서 잘못된 엔드포인트를 수정하여 데이터를 올바르게 가져오도록 하세요.

  3. 유효성 검사 추가: mealsPerDay 파라미터에 대해 기본 값이나 범위를 설정하는 것을 고려하고, 1~3 이외의 값이 들어올 경우 로그를 남기거나 예외 처리를 추가하세요.

  4. 타임아웃 로직 통합: 두 함수에서 동일한 타임아웃 처리 코드가 반복되고 있습니다. 이를 별도의 함수로 추출하면 코드의 중복을 줄일 수 있습니다.

이러한 문제들을 해결하면 더 신뢰할 수 있는 코드가 될 것입니다.

@donggyu412 donggyu412 merged commit 6ad53a4 into main Dec 13, 2025
1 check passed
@donggyu412 donggyu412 deleted the meal branch December 14, 2025 12:05
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