TIL-JS 이해하기1

Yeons·2022년 2월 3일
0

jsstudy

목록 보기
6/16

api : 프로그램을 쉽게 제작할 수 있게 미리 만들어 놓은 것들의 모음.
클라이언트 : 다른 곳에 있는 단말에 데이터를 달라고 요청하는 프로그램
서버 : 다른 곳에서 요청 받은 명령을 처리해 주는 프로그램
서버는 포트를 지정하여 그 포트로 요청을 받을 수가 있음.

포트 : 단말에 접속하기 위한 '논리적인 접속 위치'. 즉, 인터넷을 사용할 때는 클라이언트 프로그램은 서버의 프로그램이 지정하는 포트로 접속하게 됩니다.

웹브라우저에서 접속하는 서버를 웹 서버라고 하며, HTTP 프로토콜을 사용합니다.
프로토콜 : 데이터를 서로 어떤 형태로 주고 받을 것인지 정한 것. 간단하게 데이터의 형태

웹서버는 웹 프레임워크인 익스프레스(express)로 기본 구조를 만들고 몽고디비(MongoDB)를 이용해서 데이터를 저장하거나 조회.
뷰 템플릿 : 클라이언트에 응답을 보낼 때 사용하려고 미리 웹문서의 원형을 만들어 놓은 것
패스포트 : 사용자 로그인이나 회원가입을 위해 사용합니다.

익스프레스(express)가 웹 서버에 필요한 파일들을 자동으로 만들어 줌으로써 좀 더 쉽게 웹 서버를 제작할 수 있도록 도와줍니다.

JSON-RPC서버는 서버 쪽에 함수를 만들어 두고 클라이언트에서 함수를 호출하듯이 데이터를 요청하면 응답하는 서버입니다. 주로 데이터만 주고 받을 때 사용합니다. 서버에 등록된 함수를 보통 핸들러라고 부르는데, 더하기나 빼기 같은 계산 기능을 하나의 함수로 만들어 등로하면 크라이언트에서 더하거나 빼기 기능을 호출하여 계산 결과를 받아 볼 수 있습니다.

위치 정보는 경도와 위도 좌표를 사용하는데, 위도와 경도 두 가지 숫자 값을 데이터베이스에 그대로 저장하면 데이터 양이 늘어나게 됩니다. 또한, 두 개의 값을 한꺼번에 비교하여 조회하면 검색 속도는 현저하게 떨어집니다. 이 책에서는 노드에서 작동하는 몽고디비 데이터베이스를 사용해서 위치 정보를 저장하고 조회하는 방법을 살펴봅니다.

  1. 노드란 무엇일까?

노드 : 자바스크립트를 이용해서 서버를 만들 수 있는 개발 도구 입니다.

노드의 비동기 입출력 방식 : 하나의 요청 처리가 끝날 떄까지 기다리지 않고 다른 요청을 동시에 처리할 수 있는 비동기 입출력 방식

파일을 '비동기 방식으로 읽는다'는 것은 파일 시스템에 읽기 요청을 한 후 프로그램이 대기하지 않고 다른 작업을 진행한다는 것을 의미합니다.

프로그램에서 해당 파일의 내용을 처리할 수 있는 시점이 되면 콜백함수가 호출.

콜백 함수 : 자바스크립트에서는 변수에 함수를 할당할 수 있습니다. 따라서 변수에 할당된 함수를 다른 함수의 파라미터로 전달할 수 있습니다. 이렇게 파라미터로 전달된 함수를 다른 함수의 내부에서 호출하는 것입니다.

모듈 : 메인이 되는 자바스크립트 파일의 일부 코드를 떼어 별도의 파일로 만들 수 있습니다. module_1.js라는 이름의 파일로 저장한 후 이 파일에 들어 있는 코드를 사용하고 싶다면 require() 함수로 모듈을 호출하면 됩니다. 이렇게 불러들인 파일은 자바스크립트 객체로 인식되며, 그 객체를 참조항 파일에 넣어 둔 기능을 사용할 수 있습니다./

정리하자면, 노드는 기본적으로 자바스크립트를 프로그래밍 언어로 사용하며 3가지 주요 특징인, '비동기 입출력', '이벤트 기반 입출력', '모듈과 패키지'등이 있습니다.

  1. 노드 간단하게 살펴보기
    console 객체는 전역 객체(global object)라고 부르며 필요할 때 코드의 어느 부분에서나 사용할 수 있습니다. 함수 안과 밖에서 모두 사용할 수 있도록 범위를 제한하지 않습니다.

    전역 객체 이름

    console : 콘솔 창에 결과를 보여주는 객체
    process : 프로세스의 실행에 대한 정보를 다루는 객체
    exports : 모듈을 다루는 객체 /

    console 객체의 메소드

    dir(object) : 자바스크립트 객체의 속성을 출력
    time(id) : 실행 시간을 측정하기 위한 시작 시간을 기록
    timeEnd(id) : 실행 시간을 츠정하기 위한 끝 시간을 기록

    process 객체의 메소드

    argv : 프로세스를 실행할 때 전달되는 파라미터(매개변수) 정보
    env : 사용자의 환경 변수 정보, 시스템 환경변수 정보
    exit() : 프로세스를 끝내는 메소드

    JSON 포맷 :
    자바스크립트의 객체 포맷으로 단말끼리 데이터를 주고받을 때 많이 사용합니다. JSON 포맷은 자바스크립트에서 객체를 만들 때 사용하는 형식과 같습니다. 즉, { } 중괄호를 이용해 객체를 만들 수 있으며, 그 안에 키(key)와 값(value)로 구성된 속성들은 콤마( , )로 구분 합니다.
    { "name" : "소녀시대", "age" : "20" }

'함수' or '메소드'
객체 지향 언어에서는 함수를 메소드(Method)라고도 부릅니다. 자바스크립트는 객체 지향 언어의 특징인 객체(Object)를 만들 수 있는데, 객체를 만들었을 때 그 안에 정의한 함수는 특별히 메소드라고부릅니다. 그러나 이름을 어떻게 부르든 의미 전달에는 큰 차이가 없기 때문에 이 책에서는 함수와 메소드를 정확히 구별하지 않고 사용합니다.

노드에서 모듈사용하기
메인 파일의 코드 중에서 독립적인 기능은 별도 파일로 분리할 수 있으며, 메인 파일에서는 전체적인 실행 순서나 흐름만 제어합니다. 이렇게 분리된 파일을 노드에서는 모듈이라고 부릅니다. 모듈이란 별도의 파일로 분리된 독립 기능의 모음이라서 모듈을 만들어 놓으면 다른 파일에서 모듈을 불러와 사용 할 수 있습니다.

노드는 CommonJs의 표준스펙을 따라 모듈을 사용할 수 있게 합니다. 이 과정에서 exports 전역 객체를 사용합니다.

//main.js

const module1 = require('module1');
module1.함수이름();
//module1.js
exports.함수이름 =  함수정의;

모듈을 만들 때는 module1.js 처럼 별도의 자바스크립트 파일을 만든 후 그 코드에서 exports 객체를 사용. exports 객체 속성으로 변수나 함수를 지정하면 그 속성을 main.js에서 불러와서 사용가능합니다.

모듈을 불러올 때는 require()함수를 사용하고, 모듈로 만들어 둔 파일 이름은 이 함수의 파라미터로 전달합니다. require()함수를 호출하면 모듈 객체가 반환되는데, 그 모듈에서 exports 객체의 속성들은 이 모듈 객체를 통해 접근할 수 있습니다.

exports외에 module.exports를 사용할 수도 있습니다. exports에는 속성을 추가할 수 있어 여러 개의 변수나 함수를 각각 속성으로 추가 가능.
module.exports에는 하나의 변수나 함수 또는 객체를 직접할당. 일반적으로 객체 그대로 할당하며, 일하게 할당한 객체 안에 넣어둔 변수나 함수를 메인 파일에서도 사용할 수 있습니다.

//module1.js

exports.add = function(a,b){
return a+b;
}

exports.multiply = function(a,b){
return a*b
}
//module2.js

var calc = {};

calc.add = function(a,b){
return a+b;
}

calc.multiply = function(a,b){
return a*b;
}

module.exports = calc;

시스템 정보를 알려주는 os 모듈

hostname() 운영체제의 호스트 이름.
totalmem() 시스템의 전체 메모리의 용량.
freemem() 시스템에서 사용 가능한 메모리 용량
cpus() CPU 정보
networkinerfaces() 네트워크 인터페이스 정보를 담은 배열 객체를 반환

파일 패스를 다루는 path 모듈

join() : 여러 개의 이름을 모두 합쳐 하나의 파일 패스로 만듬. 파일 패스를 완성할 때 구분자 등을 알아서 조정
dirnme() : 파일 패스에서 디렉터리 이름을 반환
basename() : 파일 패스에서 파일의 확장자를 제외한 이름을 반환
extname() : 파일 패스에서 파일의 확장자를 반환

var path = require('path');

var directories = ['Users', 'Mars', 'docs'];
var dirStr = directories.join();
console.log('dir : ', dirStr);

var dirStr2 = directories.join(path.sep);
console.log('dir2 : ', dirStr2);

var dirStr3 = path.join('/Users/Mars', 'notepad.exe');
console.log('dir3 : ', dirStr3);

var filepath = path.join('/Users/Mars', 'notepad.exe');
console.log('filepath : ', filepath);

var dirname = path.dirname(filepath);
console.log('dirname : ', dirname);

var basename = path.basename(filepath);
console.log('basename : ', basename);

var extname = path.extname(filepath);
console.log('extname : ', extname);

Node.js를 공부하기 위해 https://iamdaeyun.tistory.com/entry/do-it-NodeJS-3-Nodejs%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EA%B8%B0%EB%8A%A5?category=903566
이 게시글의 글을 따라 쓰며 개념을 정리하고 있습니다.
작성자님 문제가 될 시 지우겠습니다.
도움을 주셔 감사합니다.

profile
공부중

0개의 댓글