Validator 모듈 만들기

민경찬·2023년 11월 16일
0

백엔드

목록 보기
9/20
post-thumbnail
post-custom-banner

백엔드 개발에 있어서 가장 중요한 것은 유효성 검증이라고 생각한다.

그래서 자주 쓰는 Validator의 몸집을 키우고 npm에 등록시켜 사용해보려고 한다.

https://www.npmjs.com/package/jochong-validator


어떻게 사용하기를 원하는가?

모듈을 사용하는 개발자가 어떻게 사용하기를 원하는지 생각해봐야 한다. 물론 당연히 사용자는 내가 될 것 이니 내가 어떻게 사용하는지를 생각해보자.

const { id, title, name } = req.body;

if(validator(id).isString().isId().end()){
	return next(err...);
}

이런식으로 메서드 체이닝을 통해 유효성을 검증하고 그 값이 boolean 타입으로 뽑아내지기를 기대한다.

어떻게 개발해야하는가?

예를 들어보자. 사용자가 Email데이터를 입력했을 때 우리는 그 데이터가 Email 형식이기를 원한다. 즉, 어떤 데이터가 들어왔을 때 그 데이터가 어떤 형태여야 하는지를 정의한다는 것이다.

const { title } = req.body;

다음과 같이 데이터를 받았을 때 우리는 title데이터가 어떤 조건을 만족했으면 좋겠는지 생각 할 것이다. 어떤 데이터가 되지 않았으면 좋겠는지가 아니라...

즉, 체이닝 되는 메서드는 AND 연사자로써 작동하면 된다.

개발 과정

우선 validator는 데이터 타입을 확인시켜주는 TypeValidator의 인스턴스를 return하며 시작한다.

class Validator {
  #data
  #validator
  
  constructor(data, validator = false){
  	this.#data = data;
    this.#validator = validator;
  }
}

const validator = (data) => {
	return new Validator(data);
}

우선 validator함수를 호출하며 타입 체킹 메서드를 사용할 수 있도록 준비한다.

class Validator {
  #data
  #validator
  
  constructor(data, validator = false)...
  
  isString = () => {
  	if(typeof this.#data !== "string"){
    	this.#validator = false;   	
    }
    
    return {문자열 확인 객체}
  }
}

예시로 isString()을 통해 datastring타입 여부를 확인한 뒤 문자열 메서드를 체이닝할 수 있도록 객체를 하나 뽑아주도록 하자.

class StringValidator {
  	#data
    #validation
    
	constructor(data, validation){
      	this.#data = data;
		this.#validator = validation;
    }

	isEmail = () => {
    	if(!this.#validation) return this;
           
        // Check Email Format Logic
           
        return this;
    }
}

if(!this.#validation) return this; 이 내용이 가장 중요하다. 이미 false 인 경우 더 건드리지 않고 falsereturn 하도록 하는 장치이다.

마지막으로 결과를 반환하는 함수를 생성해주면 개발이 마무리된다.

class StringValidator {
  	#data
    #validation
    
	constructor(data, validation)...
    
    end = () => {
    	return this.#validation;
    }
}

end메서드를 호출하여 메서드 체이닝의 결과를 뽑아내도록 한다.


결론


깔끔하게 잘 작동되며 문제도 없다.

다만 js로 개발해서 올릴 경우 Type정의 파일을 같이 올려줘야 ts에서도 작동한다.

처음부터 typescript로 개발할 경우 컴파일 단계에서 타입 정의 파일을 뽑아주기 때문에 다음부터는 꼭 typescript로 개발하도록 하자.

https://www.npmjs.com/package/jochong-validator

post-custom-banner

0개의 댓글