리액트 배우기 전, Node.js

2023. 10. 4. 11:03·프로그래밍 언어/React 기초

React와 Next는 모두 Node.js를 기반으로 구동되는 라이브러리이다.

Node는 자바스크립트를 실행시키는 실행 환경(구동기)을 말한다.

 

 

 

 

 

[js의 역사]

 

JS는 페이지 내부에서 발생하는 아주 단순한 기능을 개발하기 위해 만들어짐

그래서 애초에 웹 브라우저 내부에서만 작동할 것이라 예상하고 설계됨

 

but  Node.js의 등장으로 언제 어디서든 사용할 수 있는 범용적인 언어가 됨

Node.js는 js의 태생적 한계를 넘어설 수 있게 도와줌

 

 

 

 

 

Node.js 환경에서는 JS로 어떤 목적이 있는 프로그램을 만들 때 

패키지라는 단위로 만든다. 리액트,넥스트도 다 패키지로 만들어진다

 

npm init 을 통해

package.json이라는 새로운 패키지를 만들 수 있다.

 

node (경로/파일명) 을 입력하면

노드를 통해 js파일을 실행시킬 수 있다

 

ex) node src/index.js

 

프로젝트가 복잡해질수록 node js로 실행시킬 파일의 경로가

계속 복잡해질 수 있다. 이때 package script를 사용하면 좋다.

 

package.json 파일 안의 “scripts”에서 설정할 수 있는 일종의 매크로이다.

 

 

  "scripts": {

    "test": "echo \"Error: no test specified\" && exit 1"

  },

test를  실행하면  터미널에 echo~ 명령어가 실행된다는 뜻이다.

 

"scripts": {

    "test": "echo \"Error: no test specified\" && exit 1",

    "start" : "node src/index.js"

  },

이렇게 한다면. npm run start를 터미널에 입력했을 때

node src/index.js 명령어가 실행되고, 최종적으로 index.js 파일이 실행된다.

 

진짜 일종의 매크로임

 

 

 

 

 

[Node.js 모듈 시스템]

 

모듈이란?

 

전체 파일의 일부이지만, 독립적인 파일로 분리되어 있어서

언제든 다른 프로그램에 재사용할 수 있는 단위를 모듈이라고 함

하나의. js 파일을 하나의 모듈로 취급함

 

 

 

모듈 시스템이란?

 

모듈을 만들고 불러와 사용할 수 있도록 도와주는 시스템

 

Common JS 모듈 시스템(CJS)

ES 모듈 시스템(ESM) 

 

두 시스템을 사용한다.

 

 

 

 

[math.js]

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

function sub (a,b) {
  return a - b;
}

 

[index.js]

console.log(add(1,2));

console.log(sub(1,2));

위의 코드에서 index.js를 실행시키면 오류가 난다.

math.js에서 각 함수들을 내보내주고, 그것을 index.js가 받아야 한다.

이렇게 내보내고 가져오는 시스템이 ‘모듈 시스템’

 

 

 

 

 

CJS방식

 

math.js에서 값을 내보기 위해 module이라는 내장객체를 사용한다.

module.exports={
    add,
    sub
}

module.exports의 값으로 add함수와 sub함수를 포함하는 객체를 설정한다.

즉 math 모듈로부터 두 개의 함수를 내보내도록 설정했다.

 

 

index.js에서 내보내진 값을 가져오기 위해서 내장함수 require(‘./경로’)를 호출한다

const moduleData= require(“./math“)

인수로 전달한 경로에 위치한 모듈에서 내보낸 값을 가져와서

moduleData 변수에 저장하는 것이다.  (즉 객체가 저장됨)

 

 

index.js에서 사용하기 위해서는

console.log(moduleData.add(1,2));
console.log(moduleData.sub(1,2));

이런 식으로 점표기법으로 쓰면 된다.

 

 

[전체코드]

 

[index.js]

const moduleData = require('./math');

console.log(moduleData.add(1,2));
console.log(moduleData.sub(1,2));

 

[math.js]

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

function sub (a,b) {
  return a - b;
}

module.exports={
    add,
    sub
}

 

 

**const moduleData= require(“./math“) ;

이 부분을 구조분해 할당을 통해

const {add, sub } = require(“./math“) ; 로 사용해도 된다.

 

 

 

 

 

ESM 방식 

 

react, next가 기본적으로 사용하는 시스템. 사용하기 전에, ESM을 이용한다고 알려줘야 한다.

package.json에 “type” : “module”을 추가해 준다

 

이제부터 모듈 시스템으로 ESM을 사용한다고 선언하는 것이다.

선언과 동시에 CJS 방식은 사용할 수 없다.

 

 

ESM에서는 모듈로부터 값을 내보낼 때 

그냥 export를 쓰고 띄어쓰기 후 객체 안에 내보낼 값만 담으면 된다.

 

즉 math.js에서 값을 내보기 위해

export (add, sub);

을 입력한다.

 

 

내보내진 값을 가져오기 위해서 index.js에서는 import를 쓰고,

중괄호로 가져오고자 하는 값을 입력한다. 그리고 from을 통해 경로를 입력하면 된다.

 

즉 index.js에서 값을 가져오기 위해서 

 import {add , sub} from “./math.js”

을 입력한다. (require과 다르게 경로에 확장자를 넣어줘야 함)

 

 

 

[전체코드]

 

[index.js]

import {add, sub} from "./math.js"

console.log(add(1,2));
console.log(sub(1,2));

 

[math.js]

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

function sub (a,b) {
  return a - b;
}

export {add, sub};

 

 

 

 

 

ESM에서는 다양한 방식으로 값을 내보내고

다양한 방식으로 가져올 수 있게 지원한다.

 

자주 사용하는 몇 가지 방법

 

 

1. 함수 선언문 앞에 export를 붙인다.

export function add(){

};

 

2. 기본값 내보내기 

 

여기서 기본 값이란 하나의 모듈을 대표하는 값이다.

기본 값으로는 하나의 값만 내보낼 수 있다.

export default를 붙여서 내보내면 된다.

 

 

3. import 경로 합치기

 

import mul from “./math.js”
import {add, sub} from “./math.js”

// 위의 두 코드를 아래 처럼

import mul, {add, sub} from “./math.js”

동일한 경로로부터 여러 개의 값을 불러오고 있다면 합칠 수도 있다.

 

 

 

 

 

[Node.js 라이브러리 사용]

 

라이브러리란 프로그램을 개발할 때 필요한 다양한 기능을

미리 만들어 모듈화 해놓은 것

 

 

https://www.npmjs.com/

라이브러리 등록 사이트이다.

 

npm i ~ 를 통해 라이브러리를 설치하면

package.json파일에 “dependencies” 항목이 추가되어 있다.

항목 안에는 설치한 라이브러리의 이름과 대략적인 버전이 들어있다.

+ ^(캐럿)은 대략적인 버전을 의미함 

 

 

또한 node_modules 폴더와 package-lock.json 파일이 새로 생긴다.

 

node_modules는 설치한 라이브러리의 코드가 실질적으로 저장되는 공간이다.

package-lock.json은 package.json과 비슷하게 패키지의 정보가 들어있기는 하지만 

정확히 현재 설치된 버전(캐럿(^) 아님ㅎ)이 표기되어 있다. 

 

package.json : 대략적인 버전

package-lock.json : 정확한 버전

정도로 알고 있자

 

 

 

 

 

라이브러리는 공식 홈페이지에서 사용법 확인 후 

그냥 import 해서 사용하면 된다.

 

[randomcolor 라이브러리 사용 예제]

import randomColor from "randomcolor";

const color = randomColor();
console.log(color);

 

 

 

 

 

node_modules와 package-lock.json은 어디까지나

package.json의 “dependencies” 항목을 기준으로 설치되고 작성되는 것

그렇기에 node_modules와 package-lock.json을 지워도 문제없음.

 

단 이렇게 지웠을 때  package.json의 “dependencies” 안의 정보를 기준으로

모든 라이브러리를 다시 설치할 수 있음

 

그 명령어가 바로 npm install

 

 

npm install을 입력하면 node_modules와 package-lock.json을 지웠어도 “dependencies”을 기준으로 다시 설치됨

 

node_modules와 같이 실질적인 라이브러리를 담은 폴더는 용량이 엄청 크다.

그래서 남에게 공유할 때 보통 node_modules는 제거하고 package.json까지만 포함한다.

'프로그래밍 언어 > React 기초' 카테고리의 다른 글

리액트 이벤트 핸들링  (0) 2023.10.08
리액트 props  (0) 2023.10.08
리액트 컴포넌트,JSX  (2) 2023.10.05
리액트 앱 만들기, 동작원리  (0) 2023.10.04
React가 무엇이냐! 그리고 Virtual DOM  (0) 2023.10.04
'프로그래밍 언어/React 기초' 카테고리의 다른 글
  • 리액트 props
  • 리액트 컴포넌트,JSX
  • 리액트 앱 만들기, 동작원리
  • React가 무엇이냐! 그리고 Virtual DOM
tteokbokki-master
tteokbokki-master
공부하며 알아가는 걸 조금씩 정리하고 있어요
  • tteokbokki-master
    용로그
    tteokbokki-master
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 프로그래밍 언어
        • HTML & CSS
        • JavaScript
        • React 기초
        • 파이썬 기초
        • TanStack-Query
        • C언어 기초
        • git
        • 리눅스
        • 코딩테스트 공부
      • 개발 지식
      • 언어학
        • 의미론
      • 회고 및 기록
      • 프로젝트
        • TodoList 만들기
        • 학수고대 프로젝트
      • 기타
        • [JS-0기] 한입 FE 챌린지
        • 서평
  • 인기 글

  • 글쓰기 / 관리
  • hELLO· Designed By정상우.v4.10.3
tteokbokki-master
리액트 배우기 전, Node.js
상단으로

티스토리툴바