반응형
내일배움캠프 개인 과제 피드백 - validate 구문은 리소스가 적게 드는 로직부터 검사
내일배움캠프 주특기 입문 개인 과제를 마쳤습니다. 끝나고 개인별로 피드백을 주셨는데 그 중 필자가 받은 피드백을 소개하려 합니다.
위의 작성한 코드 중 상품 등록 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 엔드포인트를 구현한 것입니다. 간략하게 코드의 동작을 살펴보면 다음과 같습니다.
- 클라이언트에서 전송된 요청(req.body)에서 필요한 정보를 추출합니다.
- 상품의 상태를 "FOR_SALE"로 설정하고, 고유한 상품 ID를 생성합니다.
- 상품 ID가 중복되지 않도록 확인하고, 중복된 경우 다시 ID를 생성합니다.
- 현재 시간을 생성일로 설정합니다.
- 비밀번호가 공백인 경우 오류를 반환합니다.
- 모든 검증이 통과하면 상품 정보를 데이터베이스에 저장하고 클라이언트에 응답합니다.
여기서 안전한 코드 작성을 위해, 리소스를 적게 사용하는 로직부터 검사하는 것이 중요하다는 피드백을 받았습니다. 따라서 반복문 전에 간단한 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();
// ... (이하 생략)
});
이렇게 수정된 코드는 불필요한 리소스를 절약하면서도, 필수 입력값과 비밀번호의 유효성을 더 강력하게 확인할 수 있을 것 입니다.
여전히 미흡한 부분은 많지만
여전히 미흡한 부분은 많지만 튜터님이 알려주시는 피드백과 여러 자료를 참고로해서 계속 개선해 나가는 코드를 작성해야겠다고 느낀 시간이었습니다.
▼ 읽어보면 좋은 글 ▼
'내일배움캠프' 카테고리의 다른 글
내일배움캠프 NestJS 프로젝트 코드리뷰 - 온라인 공연 예매 서비스 (1) | 2024.01.07 |
---|---|
내일배움캠프 백오피스 프로젝트 - 펫시터 매칭 사이트 후기, 소감 (1) | 2023.12.18 |
알고리즘 스터디 방법, 효율적인 학습과 성장을 위한 가이드 (0) | 2023.11.09 |
좋은 개발자의 비밀, 실력 향상과 성공을 위한 지침 - 부트캠프의 중요성 (0) | 2023.11.07 |
알고리즘 학습의 중요성, 알고리즘 공부하는 이유, 효율적인 학습 방법 (0) | 2023.11.07 |