본문 바로가기
내일배움캠프

내일배움캠프 개인 과제 피드백 - validate 구문은 리소스가 적게드는 로직부터 검사하기

by 코드스니펫 2023. 11. 20.
반응형

내일배움캠프 개인 과제 피드백 - validate 구문은 리소스가 적게 드는 로직부터 검사

 

스파르타 코딩클럽 내일배움캠프 로고

 

내일배움캠프 주특기 입문 개인 과제를 마쳤습니다. 끝나고 개인별로 피드백을 주셨는데 그 중 필자가 받은 피드백을 소개하려 합니다.

 

 

GitHub - lemon-table/spa_node_blog

Contribute to lemon-table/spa_node_blog development by creating an account on GitHub.

github.com

 

위의 작성한 코드 중 상품 등록 API의 코드를 살펴보고, 피드백 받은 부분에 대해 설명하겠습니다.

 

 

validate 구문은 리소스가 적게 드는 로직부터

 

이러한 피드백을 받은 부분은 바로 아래의 소스에서 입니다.

 

// 상품 등록
router.post("/products", async (req, res) => {
  const { title, content, author, password } = req.body;

  // 상품 입력을 위한 id, 시간 가져오기
  const status = "FOR_SALE";
  let productId = generateRandomString(30);

  // id 중복 체크
  while (true) {
    let idChk = await Products.find({ productId });
    if (!idChk.length) {
      break;
    }
    productId = generateRandomString(30);
  }

  let createdAt = new Date();

  // 비밀번호 공백시 오류
  if (!password.length) {
    return res.status(400).json({
      success: false,
      errorMessage: "비밀번호를 설정하세요."
    });
  }

  const createdProducts = await Products.create({ productId, title, content, author, password, status, createdAt });
  res.json({ products: createdProducts });
});

 

코드 동작 설명

위 코드는 상품을 등록하는 API 엔드포인트를 구현한 것입니다. 간략하게 코드의 동작을 살펴보면 다음과 같습니다.

 

  1. 클라이언트에서 전송된 요청(req.body)에서 필요한 정보를 추출합니다.
  2. 상품의 상태를 "FOR_SALE"로 설정하고, 고유한 상품 ID를 생성합니다.
  3. 상품 ID가 중복되지 않도록 확인하고, 중복된 경우 다시 ID를 생성합니다.
  4. 현재 시간을 생성일로 설정합니다.
  5. 비밀번호가 공백인 경우 오류를 반환합니다.
  6. 모든 검증이 통과하면 상품 정보를 데이터베이스에 저장하고 클라이언트에 응답합니다.

 

여기서 안전한 코드 작성을 위해, 리소스를 적게 사용하는 로직부터 검사하는 것이 중요하다는 피드백을 받았습니다. 따라서 반복문 전에 간단한 validate 구문을 추가하는 것이 좋습니다.

 

 

실제 피드백 반영

 

 

위에서 언급한 validate 구문의 위치 변경을 통해, 필수 입력값을 먼저 확인하고 비밀번호가 공백인 경우에 대한 검사를 진행하도록 수정 했습니다. 이렇게 함으로써 불필요한 리소스를 사용하지 않으면서도 안전한 상품 등록이 가능해집니다.

 

router.post("/products", async (req, res) => {
  const { title, content, author, password } = req.body;

  // 필수 입력값 확인
  if (!title || !content || !author || !password) {
    return res.status(400).json({
      success: false,
      errorMessage: "모든 필수 입력값을 제공하세요."
    });
  }

  // 비밀번호 공백 확인
  if (!password.length) {
    return res.status(400).json({
      success: false,
      errorMessage: "비밀번호를 설정하세요."
    });
  }

  // 상품 입력을 위한 id, 시간 가져오기
  const status = "FOR_SALE";
  let productId = generateRandomString(30);

  // id 중복 체크
  while (true) {
    let idChk = await Products.find({ productId });
    if (!idChk.length) {
      break;
    }
    productId = generateRandomString(30);
  }

  let createdAt = new Date();

  // ... (이하 생략)
});

 

이렇게 수정된 코드는 불필요한 리소스를 절약하면서도, 필수 입력값과 비밀번호의 유효성을 더 강력하게 확인할 수 있을 것 입니다. 

 

여전히 미흡한 부분은 많지만

 

여전히 미흡한 부분은 많지만 튜터님이 알려주시는 피드백과 여러 자료를 참고로해서 계속 개선해 나가는 코드를 작성해야겠다고 느낀 시간이었습니다. 

 

▼ 읽어보면 좋은 글 ▼

 

 

좋은 개발자의 비밀, 실력 향상과 성공을 위한 지침 - 부트캠프의 중요성

좋은 개발자의 비밀, 실력 향상과 성공을 위한 지침 - 부트캠프의 중요성 오늘날의 디지털 시대에서는 개발자들이 핵심 역할을 수행하며 현대 사회를 움직이게 하는 중요한 역할을 맡고 있습니

lemonlog.tistory.com

 

 

내일배움캠프 개인프로젝트 - 최고 평점 영화 검색 사이트

내일배움캠프 개인프로젝트 - 최고 평점 영화 검색 사이트 내일배움캠프 첫 개인프로젝트는 최고 평점 영화 검색하는 페이지 구현이었습니다. 이 글에서는 프로젝트 진행 과정과 어려웠던 부분

lemonlog.tistory.com

 

 

KPT 회고 - 스파르타 코딩클럽 미니프로젝트

KPT 회고 - 스파르타 코딩클럽 미니프로젝트 일주일여 간의 미니프로젝트를 마치고 전체적인 소감에 대해 이야기해보았습니다. 좋았던 점, 개선이 필요한 점, 개선방안의 세가지를 중점으로 다

lemonlog.tistory.com