inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

한 입 크기로 잘라먹는 React.js 실전 프로젝트 - SNS 편

(6.11) 회원가입시 프로필 정보 자동 생성하기

51. (6.11) 회원가입시 프로필 정보 자동 생성하기

해결된 질문

80

호기쿤

작성한 질문수 3

0

안녕하세요!
useProfileData 훅에서 프로필 데이터를 조회하는 로직이 궁금해서 질문드립니다.

 

useProfileData에서 PGRST116 에러 코드를 확인해서 프로필을 생성하는 로직이 있는데요,

fetchProfile에서 .single() 대신 .maybeSingle()을 사용하고,

null이면 createProfile을 호출하는 방식이 더 직관적인 것 같은데

에러 코드를 확인하는 방식으로 구현하신 특별한 이유가 있을까요?

실무에서는 어떤 방식을 선호하시는지도 궁금합니다!

react typescript react-query supabase zustand

답변 2

1

이정환 Winterlood

안녕하세요 호기쿤님 이정환입니다.

우선 말씀하신대로 maybeSingle 메서드를 활용하시는 방법도 좋은 것 같습니다. 보다 직관적으로 느껴지는 부분도 확실히 있는것 같아요

강의에서 에러 코드(PGRST116)를 확인하는 구조로 구현한 이유는, 단순히 프로필 생성 여부만 구분하려는 목적뿐 아니라 학습 과정에서 PostgREST의 응답 형태와 에러 코드를 이해하는 경험을 제공하고 싶었기 때문입니다.

Supabase는 내부적으로 PostgREST를 기반으로 동작하는데, select 결과가 없을 때 116번 에러를 내려주는 구조를 알면 이후에 더 복잡한 API 응답을 다룰 때 도움이 됩니다. 그래서 실무에서 종종 쓰이는 방식 중 하나인 “에러 코드 기반 분기 처리”도 함께 보여드리고 싶었습니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 호기쿤님.

질문 주신 상황은 supabase와 같은 백엔드 서비스에서 프로필 데이터를 조회할 때 발생할 수 있는 일반적인 패턴을 다루고 있는 것 같습니다. 여기서 흔히 사용되는 방식 두 가지를 비교하고 어떤 점이 실무에서 더 선호되는지 살펴보겠습니다.

두 가지 접근 방식:

  1. 에러 코드 확인: PGRST116과 같은 특정 에러 코드를 확인하여 프로필이 없는 경우라는 것을 판단하고, 그에 따라 새 프로필을 생성하는 방식입니다. 이 방식은 특정 에러 코드에 기반해 명확하게 처리할 수 있어 오류 발생 시 빠르게 원인을 파악하기 쉽습니다.
  2. maybeSingle() 사용: .maybeSingle() 메소드를 사용하여 프로필이 존재하지 않는 경우 null을 반환받고, 이 경우에 새로운 프로필을 생성하는 방식입니다. 이 방법은 성공적인 결과인지, 데이터가 없는 경우인지 쉽게 구분할 수 있어 보다 직관적입니다.

실무에서의 선호:

  • 에러 코드 확인: 이 방법은 데이터를 가져오려는 시도에 대해 명확한 오류 처리를 수행할 수 있어, 오류에 대한 디버깅이 용이합니다. 다만, 구체적인 에러 코드에 의존하는 것은 유지보수 측면에서 다소 번거로울 수 있습니다.

  • maybeSingle() 사용: 일반적으로 더욱 직관적이기 때문에 실무에서도 많이 사용됩니다. 특히 데이터의 존재 여부와 관련된 논리에 적합하며, 에러와 정상(non-error) 결과를 구분하는 데 유리합니다.

관련된 논의와 더 많은 정보를 원하신다면, 다음의 유사한 질문들이 도움이 될 수 있습니다:

이 두 가지 방식 모두 프로젝트와 구현 목적에 맞게 선택하면 됩니다. 실무에서는 팀 내 코딩 스타일 가이드나 프로젝트 특성에 따라 의사결정을 하는 경우가 많습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

useMutation 적용 후 새로운 글 등록시 content가 안보여요

0

32

2

6.8 zustand 세션 질문입니다.

0

74

2

next.js 강의에서도 리액트 라이브러리들을 다뤄주시나요?

0

60

2

shadcn에서 radix ui와 base ui 차이는 뭔가요?

0

215

2

updateTodo 함수 생성시 화살표 함수 사용 안하는 이유

0

63

2

4.11 바로 투두 삭제가 안됨 질문

0

75

3

매개변수 updatedTodo 관련 질문

0

57

3

인증 정보가 만료되었을 때 라우트 가드 처리가 궁금합니다!

0

73

2

supabase를 사용하지 않을 경우 세션 데이터의 변경을 감지하고 스토어에 보관하는 방법이 궁금합니다!

0

60

2

4.6 id를 string으로 변경시 오류

0

55

2

리액트 타입스크립트 관련 질문있습니다.

0

54

1

소셜 로그인 구현하기 관련하여 질문이 있습니다!

0

88

2

ui 파일 질문드립니다.

0

65

1

tanstack query devtools에서 질문있습니다!

0

58

2

댓글 삭제 시 isPending 질문

0

56

2

두번째 예외상황에 대해 질문있습니다!

0

56

1

리액트 쿼리 질문입니다

0

57

2

개발자도구에서 components 가 안보입니다.

0

81

3

state 관리에 대한 정리

0

70

3

[(2.4) Shadcn/ui를 소개합니다] 강의 Shadcn 세팅 관련 질문 있습니다.

0

150

3

like 테이블에서 왜 create_at이 필요한지 궁금합니다.

0

67

1

삭제가 바로 안되네요ㅠ

0

56

2

access 토큰은 꼭 소셜서버로부터 받아서 사용해야만하나요?!

0

72

2

전역 모달이 여러 개일 경우 모달 프로바이더는 몇 개가 필요한가요?

0

56

1