강의

멘토링

커뮤니티

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

devsn님의 프로필 이미지
devsn

작성한 질문수

탄탄한 백엔드 NestJS, 기초부터 심화까지

회원가입 서비스 개발 & DTO 패턴

안녕하세요 password질문드립니다

작성

·

279

0

수강생분들의 질문을 기다립니다!
- 에러에 해당하는 질문은 "에러가 발생한 상황에 대한 충분한 설명", "에러 메세지", "에러가 난 코드 스크린샷"을 함께 첨부해주세요.
- 언어에 해당하는 질문은 구글링 및 서치 후에 구체적으로 질문해주시면 좋습니다.
- 간단한 진로 및 방향성에 대한 질문은 메일로 보내주세요.
- 패키지 버전 관리은 실무 환경과 트랜드에 맞추어 강의를 업데이트 하고 있습니다. 강의를 그대로 따라갔는데 에러가 발생한다면 패키지 버전을 강의에서 사용하는 버전과 동일하게 맞춰주세요!
- 강의 노트, QA 목록, 공지 사항을 먼저 확인해주세요.
- 논리적이고 구체적인 질문은 학습 효과를 올립니다 :)
 
password가 프론트 단에서 보이는 걸 막기 위해, readOnlyDat 라는 걸 설정을 했는데요,
catService에서 signUp메소드에서, 리턴을 할 때, password를 빼고 넘기면 안되는건가요?
 
 

답변 1

0

안녕하세요, devsn님.
작성해주신 질문에 대한 답변 드립니다.

우선 이 답변은 NestJS 깃허브에 있는 코드를 보고 작성된 답변입니다.
그렇기에, 질문자 님께서 의문점이 생기신 코드와 다를 수 있음을 먼저 양해 부탁드립니다.

src/cats/cats.schema.ts 에는 아래와 같이 readOnlyData가 정의되어 있습니다.

readonly readOnlyData: { 
    id: string; 
    email: string; 
    name: string; 
    imgUrl: string; 
    comments: Comments[]; 
};

Cat의 readOnlyData에는 비밀번호가 존재하지 않습니다.

src/cats/services/cats.services.ts

async signUp(body: CatRequestDto) {
    const { email, name, password } = body;
    const isCatExist = await this.catsRepository.existsByEmail(email);
    if (isCatExist) {
      throw new UnauthorizedException('해당하는 고양이는 이미 존재합니다.');
    }

    const hashedPassword = await bcrypt.hash(password, 10);

    const cat = await this.catsRepository.create({
      email,
      name,
      password: hashedPassword,
    });

    return cat.readOnlyData;
  }

signup(회원가입)을 하는 함수 마지막에 return에서 cat의 readOnlyData만 리턴하는 것을 확인하실 수 있습니다. 그러므로 넘길 때부터 password는 넘어가지 않습니다.

+ 작성해주신 질문이 조금 애매해서 다른 의미로도 해석이 가능할 것 같아 추가합니다.
질문의 의도가 "signUp 메소드에서 리턴을 할 때 password를 그냥 빼고 넘겨주면, readOnlyData를 따로 설정할 필요가 없지 않나요?" 였다면 아래의 답변을 참고해주시면 감사하겠습니다.

다른 코드를 조금 편집하면 그렇게 작성해도 괜찮습니다. 이번 실전 프로젝트처럼 규모가 크지 않은 프로젝트에서는 말씀해주신 것과 같이 password와 같이 민감한 정보는 제외하고 리턴을 해도 무방합니다.
하지만 혼자 개발하는 것이 아니고, 규모가 조금 큰 프로젝트를 진행하게 되시면 강의에 나온 것처럼 readOnlyData를 설정하고 진행하시는 것을 추천드립니다. 예를 들어 프로젝트 진행 도중에, 갑자기 password를 보이게 해야하는 상황이 온다면,, readOnlyData로 설정을 진행한 프로젝트에서는 readOnlyData에 password를 추가하면 쉽게 해결됩니다. 반면에 password만 빼고 리턴을 해주는 코드에서는, Cat 객체를 사용하는 모든 코드에서 편집을 해야되는 상황이 발생할 수도 있습니다.

답변에 대해 더 궁금하신 사항이 있으시다면, 새로운 질문글로 작성해주시면 답변해 드리도록 하겠습니다.
감사합니다 🦦

devsn님의 프로필 이미지
devsn

작성한 질문수

질문하기