node.js 입문 (JavaScript / Node.js / npm / yarn / 퍼사드패턴) 본문
JavaScript / Node.js / npm / yarn
javascript :브라우저, 문서 등을 다루는 프로그래밍 언어(또는 스크립트 언어)로, 브라우저에서만 동작이 가능하다.
node.js : 자바스크립트 실행 프로그램 / 브라우저 없이 실행할 수 있다는 장점을 가진다.
(공식 문서에서는 크롬V8 javaScript 엔진으로 빌드된 javascript 런타임(환경)이라고 설명하고 있다.)
쉽게 말해, node.js 는 javaScript를 실행할 수 있는 프로그램이라고 볼 수 있다.
**node.js를 이용하여 자바스크립트 언어로 서버를 구축하기도 하나, node.js 자체가 서버라고 볼 순 없음
npm : node package manager의 준말로,
Node.js 기반에서 실행될 수 있는 모듈(프로그램보다 작은 단위의 기능들)을 관리하는 관리자를 뜻한다.
많은 개발자들이 자신이 만든 모듈, 라이브러리 등을 공유하기 위해
npm사이트(공개저장소)에 등록해 놓았고, 필요할 때 마다 이 모듈들을 가져와 사용함으로써 시간 단축을 할 수 있다.
npm install // npm publish 을 통해, 설치하거나 배포할 수 있다.
yarn : 페이스북이 자체 개발한 것으로 성능과 보안이슈를 보안한 npm과 같은 javascript 패키지 매니저다.
npm install -g yarn 으로 직접 설치가 가능하다.
터미널 활용한 파일 이동 방법
pwd - 현재 위치 출력
mkdir - 파일 생성
ls - 리스트 목록
cp -R - 전체 복사 -R 은 순환시켜 복사함을 의미
rm -rf 삭제
cd - 이동 / cd .. 뒤로 이동
node '파일명' - 콘솔창을 띄우는 것과 비슷한 결과를 얻을 수 있음
API
백앤드 컴퓨터의 주역할 == "검증, 보안, 안전"
facade
건물 외관을 퍼사드라고 함 - 퍼사드패턴
한눈에 코드를 알아보기 힘들기 때문에 나온 방식이며, 오류가 났을 때 어느 로직에서 문제가 발생했는지 알기 쉽다.
실무에서 사용하는 방식이며 효율적이기 때문에 위와 같은 패턴 사용에 익숙해질 필요가 있다.
아래와 같이 해당 함수를 각각 관리하는 방식이라고 볼 수 있을 것 같다.
function checkPhone (myphone) {
if(myphone.length < 10 || myphone.length > 11){
console.log("에러 발생!!! 핸드폰 번호를 제대로 입력해주세요.") // Early-exit
return false
} else {
return true
}
}
function getToken () {
const result = String(Math.floor(Math.random()*1000000)).padStart(6,"0")
console.log(result)
return result
}
function sendTokenToSMS (myphone, result) {
console.log(myphone + "번호로 인증번호" + result + "를 전송합니다.")
}
// 퍼사드 // 로직이 어떻게 작동하고 있는지 한눈에 파악할 수 있다.
function createTokenOfPhone (myphone) { // myphone : 매개변수(parameter)
// 1. 휴대폰 번호 자릿수 맞는지 확인 (10자리~11자리)
const isValid = checkPhone(myphone)
if(isValid == false) return
// 2. 핸드폰 토큰 6자리 만들기
const myToken = getToken()
// 3. 핸드폰 번호에 토큰 전송하기
sendTokenToSMS(myphone, myToken)
}
createTokenOfPhone("01012345678") // 인자(argument)
안전한 코드 , 읽기 좋은 코드가 최우선이라는 것을 잊지말아야 한다!
당일 과제에서 응용한 방식
조건1 : 주민번호 가운데에는 '-'이 들어감
조건2 : 주민번호 앞, 뒷자리는 각각 6자리, 7자리
조건3 : 뒷번호 끝에서 6자리는 *표로 마스킹해서 리턴
// 주민번호 가운데가 "-"로 구성
// 주민번호 앞자리는 6, 뒷자리는 7
// 뒤 7자리 중 끝 6자리는 *로 구성
function validHypen(aaa) {
if(aaa[6] != "-"){
console.log("에러 발생!! 형식이 올바르지 않습니다!")
return false
} else {
return true
}
}
function validLength(bbb) {
let splitArr = bbb.split("-")
console.log(splitArr)
if(splitArr[0].length != 6 || splitArr[1].length != 7){
console.log("에러발생! 개수를 제대로 입력해주세요!")
return false
} else {
return true
}
}
function masking (ccc) {
let splitArr = ccc.split("-")
let firstThing = splitArr[0]
let secondThing = splitArr[1]
console.log(secondThing[0])
let masking = secondThing[0] + "******"
let maskingNum = firstThing + "-" +masking
console.log(maskingNum)
return maskingNum
}
// 퍼사드 패턴
function customRegistrationNumber (number) {
let valid = validHypen(number)
if(valid == false) return
let valid2 = validLength(number)
if(valid2 == false) return
let result = masking(number)
return result
}
노드를 통해 출력한 메시지