validator

bn-tw·2021년 1월 20일
0

Validation

validation

  • 어떤 데이터의 값이 유효한지, 타당한지 확인하는 것
이메일 주소 양식은 test@example.com인데, 회원가입 할 때 이메일 양식이 일치하지 않으면 유효하지 않은 이메일이므로 회원 가입을 막을 수 있음
  • 이메일 양식이 일치하지 않는다 UX측면(사용자 경험)에서 사용자에게 편의를 주기 위함
  • 사용자가 잘못 입력하여 오타가 발생 했으니 다시 한 번 확인을 하라는 의미
  • UI단에서 유효성 검사를 하는 것은 보안적인 측면에서 아무 효과가 없음

보안적인 측면에서의 유효성 검사

  • 올바르지 않은 데이터가 서버로 전송되거나, Database에 저장되지 않도록 하는 것

Joi

  • 프로젝트를 진행 중 유효성 검사 라이브러리를 검색 중 발견!
    아래의 예제는 학생 이름을 입력 받아 배열에 넣어 모든 학생의 정보를 보여주는 api입니다.
app.post("/api/students", (req, res) => {
  let { name } = req.body;

  let student = {
    id: students.length + 1,
    name: name,
  };
  students.push(student);
  res.send(students);
});

문제점은 name이라는 변수에 대해 유효성 검사를 할 수 없음

app.post("/api/students", (req, res) => {
  let { name } = req.body;
  
  if (!name) {
    res.status(400).send("Name is required...");
    return;
  }
  if (name.length <= 3) {
    res.status(400).send("name must be more than 3 char long");
    return;
  }
  
  let student = {
    id: students.length + 1,
    name: name,
  };
  students.push(student);
  res.send(students);
});

문제점은 많은 양의 변수가 들어올 시 체크 해줘야 할 것이 많아서 코드량이 늘어남

joi 라이브러리

  • install
    - npm install @hapi/joi

const schema = Joi.object({
    name: Joi.string().min(3).max(15).required(),
});


app.post("/api/students", (req, res) => {
  let { name } = req.body;
  
  let result = schema.validate(req.body);
  if (result.error) {
    res.status(400).send(result.error.details[0].message);
    return;
  }
  
  let student = {
    id: students.length + 1,
    name: name,
  };
  students.push(student);
  res.send(students);
});

schema 설정만 잘해준다면 여러 api에 대해서 유효성 검사가 편리할 것 같다.

profile
brand-new

0개의 댓글