Node.js

Jae·2023년 4월 9일
0

백엔드 - Node.js

목록 보기
1/10

Node.js

javascript를 이용하기 위해서는 웹 브라우져를 이용해야 했는데 로컬 환경에서도 javascript를 이용하기 위해 만들어짐. 즉, javascript 런타임(환경)

npm

npm = Node Package Manager 은 node.js 기반 환경에서 실행 되는 모듈을 관리하는 관리자이다. 다른 사람이 만들어 놓은 소스 코드를 무료로 가져 올 수 있다.

yarn

npm과 같은 역할을 하는 javascript 패키지 매니저로 페이스북이 만들었다.


Node.js 활용 토큰 생성 실습

//
function Token(count){
  const result = String(Math.floor(Math.random() * (10 ** count))).padStart(count,"0")
  
  //4라는 전달 인자가 count 즉, 매개변수로 넘겨져서 입력된 만큼의 자릿수의 숫자가 구해진다. 
  Token(4)
  
}

Token 생성 실습 활용 예외처리

  • 아직 메시지 전송 부분을 학습하지 않았으므로 전송을 하였다 가정하고 메시지를 출력하는 코드를 작성 했다.

로직
1. 휴대폰 번호가 올바르게 (자릿수가 맞게) 입력 되었는지 확인
2. 인증 토큰의 길이를 입력 받은 숫자 크기로 생성
3. 핸드폰에 토큰 전송




// API 생성
function getPhoneToken(myphone, count) {
  //  휴대폰번호 자릿수 맞는지 확인하기
  if (myphone.length !== 10 && myphone.length !== 11) {
    console.log("에러 발생 : 휴대폰 번호를 확인해주세요");
    return;
  }

  //  토큰 6자리 만들기
  if (count === undefined) {
    console.log("에러 발생 : 숫자를 입력해주세요");
    return;
  } else if (count <= 0) {
    console.log("에러 발생 : 양수를 입력해주세요");
    return;
  } else if (count > 10) {
    console.log("에러 발생 : 10 아래의 숫자를 입력해주세요");
    return;
  }

  const result = String(Math.floor(Math.random() * 10 ** count)).padStart(count, '0');
  console.log(result);

  //  핸드폰에 토큰 전송
  console.log(myphone + '번호로 인증번호' + result + '를 전송합니다!!!');
}

// API 실행
getPhoneToken('01012345678', 4);


퍼사드 패턴

  • 위의 코드에서 getPhoneToken이라는 API 안에 3가지 기능을 모두 넣었는데 이는 가독성이 떨어지고 에러 발생 시 어느 부분이 문제인지 파악이 어려워 유지보수성 또한 떨어진다는 문제가 있다.
    --> 이를 방지하기 위해 실무에서는 로직을 모두 분리하여 API를 작성하는데 이를 퍼사드 패턴 (Facade Pattern) 이라고 한다.

퍼사드 패턴을 적용해서 리팩토링한 위의 코드



function checkPhonenumber(myphone) {
    if (myphone.length !== 10 && myphone.length !== 11) {
        console.log('에러 발생!!! 핸드폰 번호를 제대로 입력해 주세요!!!');
        return false;
    } else {
        return true;
    }
}

function getToken(count) {
    if (count === undefined) {
        console.log('에러 발생!!! 갯수를 제대로 입력해 주세요!!!');
        return;
    } else if (count <= 0) {
        console.log('에러 발생!!! 갯수가 너무 적습니다!!!');
        return;
    } else if (count > 10) {
        console.log('에러 발생!!! 갯수가 너무 많습니다!!!');
        return;
    }
    const result = String(Math.floor(Math.random() * 10 ** count)).padStart(count,'0');
    return result;
    
}

function sendToken(number, token) {
    console.log(number + '번호로 인증번호' + token + '를 전송합니다!!');
}

function getPhoneToken(phonenumber, count) {
    // 1. 휴대폰번호 자릿수 맞는지 확인하기
    const isValid = checkPhonenumber(phonenumber);
    if (isValid) {
    // 2. 핸드폰 토큰 6자리 만들기
    const mytoken = getToken(count);
	// 3. 핸드폰번호에 토큰 전송하기
    sendToken(phonenumber, mytoken);
    }
}

getPhoneToken('01012345678', 6);

달라진 점

🚨 1. checkPhonenumber 함수를 생성해 기존 1번 로직 그대로 실행 + return 추가해서 결과 전달 (핸드폰 번호가 올바르면 true, 그렇지 않으면 false ) --> 검증된 결과는 밑에서 isValid 변수에 할당 된다.

function checkPhonenumber(myphone) {
    if (myphone.length !== 10 && myphone.length !== 11) {
        console.log('에러 발생!!! 핸드폰 번호를 제대로 입력해 주세요!!!');
        return false;
    } else {
        return true;
    }
}

//isValid 변수 할당 
function getPhoneToken(phonenumber, count) {
    // 1. 휴대폰번호 자릿수 맞는지 확인하기
    const isValid = checkPhonenumber(phonenumber);
  .
  .
  .
}

🚨 2. 함수 getToken() 핸드폰 토큰 번호 생성 + 결과 return --> 올바른 휴대폰 번호가 입력되지 않았을 때는 토큰 생성할 필요가 없으므로 checkPhonenumber()를 통해 isValid가 true일 때만 생성

function getPhoneToken(phonenumber, count) {
    // 1. 휴대폰번호 자릿수 맞는지 확인하기
    const isValid = checkPhonenumber(phonenumber);
    if (isValid) {
    // 2. 핸드폰 토큰 6자리 만들기
    const mytoken = getToken(count);
	// 3. 핸드폰번호에 토큰 전송하기
    sendToken(phonenumber, mytoken);
    }
  
  //isValid 값 확인 
  function getPhoneToken(phonenumber, count) {
    // 1. 휴대폰번호 자릿수 맞는지 확인하기
    const isValid = checkPhonenumber(phonenumber);
    if (isValid) {
    // 2. 핸드폰 토큰 6자리 만들기
    const mytoken = getToken(count);
    }
  }

🚨 3. sendToken()로 입력 받은 번호에 토큰을 전송하는 코드를 따로 작성 한다.(휴대폰 번호와 인증 번호를 인자로 받음) --> 번호가 올바를 때만 실행되면 되므로 2번과 마찬가지로 if문 안에 넣어줌

function sendToken(number, token) {
    console.log(number + '번호로 인증번호' + token + '를 전송합니다!!');
}

//if문 안에 넣어줌 
function sendToken(number, token) {
    console.log(number + '번호로 인증번호' + token + '를 전송합니다!!');
}

function getPhoneToken(phonenumber, count) {
    // 1. 휴대폰번호 자릿수 맞는지 확인하기
    const isValid = checkPhonenumber(phonenumber);
    if (isValid) {
    // 2. 핸드폰 토큰 6자리 만들기
    const mytoken = getToken(count);
	// 3. 핸드폰번호에 토큰 전송하기
    sendToken(phonenumber, mytoken);
    }
}

import와 export

파일을 분리해서 import와 export를 사용 해 연결하려면 먼저
1. 터미널에서 해당 폴더로 이동
2. yarn init 명령어 입력 후 모든 설정에 엔터를 눌러 기본값으로 설정
3. pacakage.json 파일이 만들어지면 마지막에 "type":"module" 추가
4. 내보내고자 함수를 한 파일로 몰아 넣고 내보내고자 하는 함수 앞에 export 작성
5. 해당 함수를 참조하고자 하는 파일에서 import
ex) import {checkPhonenumber,getToken,sendToken} from '. / 함수가 담긴 파일 이름'

profile
Back-end Developer

0개의 댓글