인프런 커뮤니티 질문&답변

페이커님의 프로필 이미지
페이커

작성한 질문수

만들면서 배우는 프론트엔드 DO IT 코딩 (Next.js, Typescript)

사용자 추가 API 수정

궁금한 점 질문 드립니다~

작성

·

174

0

1. memberDoc에 사용자가 이미 추가된 상태인지를 판별해서 addResult 이후에 성공 코드(200, 201)를 리턴하는 방식 대신 트랜잭션 콜백 안에서 성공 코드를바로 리턴하는 방식을 사용하지 않는 이유가 있을까요? 코드로 표현하면 아래와 같습니다.

    await firebaseInstance.Firebase.runTransaction(async (transaction) => {
      const memberRef = firebaseInstance.Firebase.collection('members').doc(uid);
      const screenName = (email as string).replace('@gmail.com', '');
      const screenNameRef = firebaseInstance.Firebase.collection('screen_names').doc(screenName);

      const memberDoc = await transaction.get(memberRef);
      if (memberDoc.exists) {
        // 이미 추가된 상태
        return res.status(201).json({ result: true, id: uid });
      }

      await transaction.set(memberRef, addData);
      await transaction.set(screenNameRef, addData);
      return res.status(200).json({ result: true, id: uid });
    });

2. screenName을 알기 위해 위해 screen_names라는 컬렉션을 새로 추가하셨는데, 컬렉션을 추가하지 않고 members 컬렉션을 uid로 조회한 뒤 해당 도큐먼트의 email값을 이용하는 방법을 이용하지 않는 이유가 있을까요?

답변 2

0

totuworld님의 프로필 이미지
totuworld
지식공유자

안녕하세요 페이커님.

 

1번 질문 답변.

member 관련한 코드를 과거에 작성하고 message 부분을 나중에 작성해서 코드가 달라진거에요.

어떤 의도가 있어서 이렇게 다른건 아닙니다.

CustomServerError로 에러 throw하면 되겠네요!

 

 

2번 질문 답변.

이 서비스는 사용자가 타인의 익명 질문을 확인하게 되죠. 이때 최대한 빠르게 문서를 확인하길 원했어요.

members 컬렉션을 뒤지는것보다 화면에서 진입할 때 전달받은 screenName으로 직접 문서를 확인한 뒤 멤버 정보에 접근하는게 더 빠를거라고 생각했습니다.

 

이렇게 생각한 이유는 문서를 직접 지명하는게 쿼리하는거보다 빠를꺼라고 봤거든요.

 

이에 관해서는 충분히 많은 멤버 정보를 넣은뒤 속도를 비교해본게 아니라서 뇌내 망상일 뿐이긴 합니다.

0

totuworld님의 프로필 이미지
totuworld
지식공유자

안녕하세요 페이커님. 제가 질문 확인이 너무 늦었네요.

 

자세한 답변은 저녁까지 작성해두겠습니다.

페이커님의 프로필 이미지
페이커

작성한 질문수

질문하기