코드캠프 1일차] node.js / npm / yarn

haengbeok·2022년 9월 5일
0

코드캠프

목록 보기
1/4

OT 후 간단한 알고리즘 수업을 마친 후 부트캠프 1일차가 시작되었다
node.js, npm, yarn 설치 및 사용, facade 패턴을 배웠다

node.js 란

구글 크롬의 자바스크립트 엔진 (V8 Engine)으로 JavaScript 런타임이다.

node.js 설치

나는 Mac을 사용하기 때문에 그에 맞는 설치법을 적어둘 것이다.

링크텍스트
공식 홈페이지에 들어가 자신의 OS에 맞는 버전을 설치하면 된다.
다운로드가 완료되면 실행, 계속 next를 누르면 설치는 끝난다.

설치가 완료되면 터미널을 열어, node -v, npm -v 명령어를 입력해 설치가 잘 되었는지 확인한다
npm은 node를 설치하면 자동으로 설치된다.

npm

npm (node package manager) 로 자바스크립트 언어를 위한 패키지 관리자이다.

yarn

yarn은 페이스북에서 만든 자바스크립트 패키지 매니저이다.
npm의 단점인 속도, 안정성, 보안성 등을 향상시키기 위해 만들어진 툴이다.

sudo npm intall -g yarn 명령어를 입력하여 설치한다.
yarn -v를 입력해 설치가 잘 되었는지 확인한다.


node로 javascirpt파일 실행

index.js파일을 만들고 console.log() 안에 내용 작성 후 자바스크립트 파일이 있는 폴더 위치에서
터미널에 node index.js를 입력하면 된다.

터미널을 처음 사용해봐서 명령어를 하나도 몰라서 당황했었다..ㅎ
간단한거 몇개 적어둬야지

pwd - 현재 자신의 위치를 알 수 있다.
ls - 현재 위치에 있는 파일 목록을 볼 수 있다.
cd ~~ - 폴더 위치를 변경할 수 있다. / cd .. - 이전 폴더로 이동
mkdir ~~ - 폴더(directory) 생성
rm ~~ - 폴더 삭제
rm -r ~~ - 폴더 내부의 모든 내용 삭제


프리캠프때 만든 6자리 토큰을 만들어주는 함수 getToken을 만들어 node로 실행해 보았다.

function getToken() {
  const result = String(Math.floor(Math.random() * 1000000)).padStart(6, '0');
  
	console.log(result); // 만들어진 토큰 출력
  
	return result;
}

getToken();

이 함수는 6자리만 고정으로 만들어주기 때문에 재사용 하기가 어렵다.
재사용 하기 위해서 조금 수정을 해줘야하는데

function getToken(count) {
  const result = String(Math.floor(Math.random() * 10 ** count)).padStart(count,'0');
  console.log(result); // 만들어진 토큰 출력
  return res

이런식으로 몇자리수인지 받아줄 매개변수 count 가 필요하다
6자리일땐 10의 6제곱, 4자리일땐 10의 4제곱... 을 해줘야하니 10 ** count 로 수정해준다.
** 은 제곱을 해주는 연산다이다.
padStart에도 고정인 6을 count로 바꿔준다.


count에 너무 큰 수가 들어가거나 작은 수가 들어가는 것을 방지하기 위해
여러가지 예외처리를 해주는 것이 좋다

function getToken(count) {
  if (count === undefined) { //아무것도 적지 않았을 때
    console.log('에러 발생!!! 갯수를 제대로 입력해 주세요!!!');
    return;
  } else if (count <= 0) { // 0보다 작은 수
    console.log('에러 발생!!! 갯수가 너무 적습니다!!!');
    return;
  } else if (count > 10) { // 10을 초과하는 수
    console.log('에러 발생!!! 갯수가 너무 많습니다!!!');
    return;
  }

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

여기까지 했다면 API를 만들고 실행하는 코드를 만들어야한다
// API 만들기
function createTokenOfPhone(myphone, count){


}

// API 실행하기
createTokenOfPhone("01012345678", 6)

이제 함수가 실행되었을때 기능을 만들어 줘야한다
1. 휴대폰 번호의 자릿수가 맞는지 확인
2. 인증 토큰을 원하는 자릿수 만큼 만들기
3. 핸드폰 번호에 토큰을 전송하는 API

자릿수를 확인하기 위해

// API 만들기
function createTokenOfPhone(myphone, count){
    // 1. 휴대폰번호 자릿수 맞는지 확인하기
    if (myphone.length !== 10 && myphone.length !== 11) {
    console.log('에러 발생!!! 핸드폰 번호를 제대로 입력해 주세요!!!');
    return;

함수를 만들어주고

토큰생성은 만들어둔 것을 그대로 가져온다

// API 만들기
function createTokenOfPhone(myphone, count){
    // 1. 휴대폰번호 자릿수 맞는지 확인하기
    if (myphone.length !== 10 && myphone.length !== 11) {
    console.log('에러 발생!!! 핸드폰 번호를 제대로 입력해 주세요!!!');
    return;
  }

    // 2. 핸드폰 토큰 6자리 만들기
    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'
  );
  console.log(result);

마지막으로 전송했다는 결과를 콘솔창에 띄워본다

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

facade pattern

이렇게 만들어도 동작은 잘 하지만 코드를 한눈에 알아보기 힘들다
따라서 로직을 다 분리하여 API를 생성해준다

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

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

function sendTokenToSMS(myphone, result) {
  console.log(myphone + "번호로 인증번호 " + result + "를 전송합니다!!!");
}

function createTokenOfPhone(myphone) {
  // 1. 휴대폰번호 자릿수 맞는지 확인하기
  const isValid = checkPhone(myphone);
  if (isValid === false) return;

  // 2. 핸드폰 토큰 6자리 만들기
  const mytoken = getToken();

  // 3. 핸드폰번호에 토큰 전송하기
  sendTokenToSMS(myphone, mytoken);
}

createTokenOfPhone("01012345678");

이런식으로 facade pattern을 적용하여 로직을 나누어주면 가독성도 훨씬 좋아진다

0개의 댓글