Skip to content

Conversation

@Seony777
Copy link
Collaborator

📌 관련 이슈번호

close : #84

🔍 구현한 내용

1. 로그인/회원가입 플로우 개선

  • useLoginFlow 훅 구현: 로그인 API 호출 + 토큰 저장 + 유저 정보 캐시를 하나의 훅으로 통합
  • finalizeLogin 유틸 함수: 로그인/회원가입 후 공통 처리 로직 분리 (토큰 저장 + 유저 프로필 캐시)
  • 회원가입 후 자동 로그인: 회원가입 성공 시 자동으로 로그인까지 진행하여 온보딩으로 이동

2. 태그 관리 기능 구현

  • 태그 조회 API (getTags): 전체 태그 목록 조회 (캐시 최적화: staleTime 1시간, gcTime 24시간)
  • 태그 저장 API (postTags): 사용자가 선택한 태그 저장 (replace 동작)
  • 태그 분류 함수 (splitTags): 태그를 tagKey 기준으로 TAG_GROUP_BY_KEY 상수와 비교하여 interest/lifestyle/brand로 자동 분류
  • useGroupedTags: 태그 조회 + 분류를 하나의 훅으로 통합

3. 온보딩 플로우 완성 및 API 연동

  • 라이프스타일 태그 선택 페이지: getTags로 전체 태그 목록 가져와 페이지에 렌더링 -> 사용자가 interest/lifestyle/brand별로 각 태그를 선택하고 저장 -> postTags로 선택한 태그들 백에다가 저장
  • 조합 생성 페이지: Step1에서 조합명 입력 후 Step 2에서 "완료" 버튼 클릭 시 postCombo를 통해 조합 생성
  • 온보딩 완료 페이지: React Query 캐시에서 유저 이름을 가져와 환영 메시지 표시 (앞에서 회원가입 성공하면 로그인 처리되어 React Query 캐시에 유저 정보가 이미 있음)

📸 스크린샷 or 실행 영상

2026-01-27.00-54-11.mp4

📢 리뷰어에게

  • 현재 모든 API 에러 처리는 alert로 구현해놨습니다.

  • 로딩처리는 로딩 중 버튼 disabled 외에 UI는 따로 아직 구현 안했습니다.

  • getTags로 태그 목록을 가져오는 API가 현재 INTERST/LIFESTYLE/BRAND에 따른 각 태그 목록을 제공하지 못해서 전체태그 목록을 가져올 수 밖에 없다고 합니다.
    이에 따라 프론트에서 태그를 분류하는 함수를 따로 만들어 처리를 하였으니 필요하실 때 쓰시면 될거 같습니다.

    • splitTags.ts : 태그 배열을 tagKey 기준으로 4개 그룹(interest, lifestyle, brand, unknown)으로 분류하는 순수 함수
    • useGroupedTags.ts : 태그 API 호출 + 자동 분류 + 로딩/에러 상태를 제공하는 React 훅

@Seony777 Seony777 requested review from H-un1 and waldls January 26, 2026 16:30
@github-actions
Copy link

Copy link
Member

@waldls waldls left a comment

Choose a reason for hiding this comment

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

전체적으로 코멘트 남깁니다. 아래 쿼리키 관련 코멘트도 확인 부탁드립니다.

  1. 웬만하면 hook 화 시킨 함수를 호출해서 사용해주세요! 현재는 다 일반 함수를 호출하고 계신 것 같습니다.
  2. 현재 /onboarding/complete까지 제대로 온보딩 된 것을 확인했는데 여기서 멈추는 느낌이 들어서 몇 초 있다가 다른 페이지 (ex)홈, 기기검색) 으로 보낸다던지, 사용자가 가운데 이미지를 클릭할 경우 어디로 보낸다던지 이런 로직이 추가되면 좋을 것 같습니다. 논의해보시면 좋을 것 같습니다.
Image

Comment on lines 1 to 15
import { axiosInstance } from '@/apis/axios/axios';
import type { PostComboRequest, PostComboResponse } from '@/types/combo/combo';
import { useMutation } from '@tanstack/react-query';

// 조합 생성 API
export const postCombo = async (payload: PostComboRequest): Promise<PostComboResponse> => {
const { data } = await axiosInstance.post<PostComboResponse>('/api/combos', payload);
return data;
};

// 조합 생성 Mutation
export const usePostCombo = () => {
return useMutation({
mutationFn: postCombo,
});
Copy link
Member

Choose a reason for hiding this comment

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

오 제가 추후 사용해야 하는데 온보딩에서도 동일하게 사용되는군요! 만들어주셔서 감사합니다.

Copy link
Member

@waldls waldls Jan 28, 2026

Choose a reason for hiding this comment

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

그런데 함수 이름을 postCombo로 하면 다른 POST /api/combos/?? 이런 api 들이랑 헷갈리기 쉬운 것 같습니다.
조합 생성 이라는 함수 이름처럼 이름만 보면 바로 알 수 있게 네이밍 부탁드리고 ex) usePostCreateCombination
파일명과 import 경로까지 잊지말고 수정해주시면 좋겠습니다. 앞으로도 마찬가지입니다!

Comment on lines 2 to 10
import type { TagType } from '@/types/tag/tag';

export const queryKeys = {
userProfile: ['userProfile'] as const,
} as const;
tags: {
all: ['tags'] as const,
byType: (type: TagType) => ['tags', type] as const,
},
};
Copy link
Member

@waldls waldls Jan 28, 2026

Choose a reason for hiding this comment

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

제가 말씀드린 쿼리키 상수화는

  export const queryKey = {
  MY_PROFILE: 'my_profile',
  COMBO_NAME: 'combo_name',
  SAMPLE_NAME: 'sample_name'
};

이런 식으로 하나의 배열 속에서 키만 관리하는 방식이었습니다!
각자 이 배열 안에 맨 끝에 키만 추가하면 되니까요!

++ 그래서 제가 드린 예시에도

 return useQuery({
    queryKey: [queryKey.MY_PROFILE],

이런 식으로 사용이 가능한겁니다.

@Seony777
Copy link
Collaborator Author

혹시 훅화 시켜서 사용해달라는 것이 api함수 말씀하시는건가요? 아니면 페이지에 포함된 다른 로직함수 부분들 말씀하시는 걸까요?

@waldls
Copy link
Member

waldls commented Jan 28, 2026

혹시 훅화 시켜서 사용해달라는 것이 api함수 말씀하시는건가요? 아니면 페이지에 포함된 다른 로직함수 부분들 말씀하시는 걸까요?

이미 훅화를 시키신 api 함수를 호출할 때 사용해달라는 의미였습니다.

@github-actions
Copy link

@Seony777
Copy link
Collaborator Author

넵 수정했습니다. 확인 한번 부탁드려요!
api함수는 지금 다시봤는데 제가 보기엔 거의 다 훅에서 꺼내 쓰고 있어서 이상한 부분 있으면 찝어주시면 감사하겠습니다!

@waldls
Copy link
Member

waldls commented Jan 28, 2026

넵 수정했습니다. 확인 한번 부탁드려요! api함수는 지금 다시봤는데 제가 보기엔 거의 다 훅에서 꺼내 쓰고 있어서 이상한 부분 있으면 찝어주시면 감사하겠습니다!

네 확인했습니다
쿼리키의 경우 배열 이름은 queryKey 이고 파일 이름은 queryKeys 라서 하나로 맞춰주시면 좋을 거 같아요.

@github-actions
Copy link

@github-actions
Copy link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: 온보딩 API 연동 및 회원가입 시 로그인 상태 유지 구현

3 participants