본문 바로가기
스터디/개발 몰입 과정

1주차 개념 스터디

by sepang 2021. 7. 31.

Node.js란

Chrome V8 Javascript 엔진으로 빌드된 Javascript 런타임

위의 말이 node.js의 사전적 정의인데 나처럼 충분한 지식 없이 저 문장을 봤을 때 이해하기 힘들 것이다. 우선 런타임이라는 것은 프로그램이 구동되는 환경이다. 크롬의 검사창 콘솔에 자바 스크립트 문장을 입력하면 브라우저는 이를 문법에 맞는 결과값으로 변환해준다. node.js도 이 처럼 구글의 V8 엔진을 이용하여(크롬도 동일한 엔진을 쓰는 것으로 앎) 자바스크립트 파일을 동작하게 하는 수단이다. 그렇다면 자바 스크립트는 브라우저와 node.js라는 환경을 가질 수 있다고 보면 되겠다

그렇다면 node.js는 어떻게 런타임(자바 스크립트 실행환경)을 제공하는 걸까? 첫 번째는 REPL(Read, Eval, Print, Loop) 를 통해 제공하고 두 번째는 자바 스크립트 파일을 node.js에서 제공하는 자바 스크립트 런타임을 통해 실행 가능하다.

REPL입력 값 받아 메모리 저장 - 입력 값을 평가하고 실행 - Eval단계에서 반환된 값을 출력 - 앞의 3단계를 계속 반복이다. 예를 들면 위에서 말해듯이 브라우저의 검사창을 열어 콘솔창에 입력을 해보면 알 수 있다. 한 문장을 입력할 때마다 해당 문장의 반환 값을 출력한다. 그러나 이 경우 내용이 많은 코드를 입력할 때 불편하므로 두 번째 방법을 사용하는데 코드가 들어있는 파일을 따로 만들어 이를 해석하여 실행한다.

node.js가 백엔드 영역에서 많이 사용된다고 하는 이유는 node.js를 이용해 서버를 만들 수 있고, 애초에 네트워크 애플리케이션을 위해 설계되었기 때문이다.

package manager(npm, yarn)이란 무엇인가?

'package' 의 의미부터 이해 해야겠다. 우선 package는 다른 사람들이 만들어 놓은 모듈이다. 모듈은 어떤 기능을 수행하기 위한 함수나 클래스들을 모아놓은 파일이고 애플리케이션의 _조각_이라고 생각하면 되겠다. 즉 package manager은 누군가 만든 어떠한 기능을 하는 코드들을 관리(설치, 업데이트, 수정, 삭제 등)하는 도구라고 생각하면 되겠다. npm이나 yarn은 이러한 package manager의 예시이다. node.js를 다룰때 많이 쓴다고 한다.

정적 타임 언어 vs 동적 타입 언어

프로그래밍 언어를 분류하는 기준 중 하나다. 이는 작성한 코드의 상수, 변수, 함수 type을 언제 결정하는지로 결정할 수 있는데, 컴파일(작성한 코드를 다른 언어로 번역하는 과정) 타임에 확인하는 경우에는 정적 타입, 런타임에 확인하는 언어를 동적 타입 언어라고 한다.

예를 들어 c에서는 변수를 선언할 때 int, char, ...등 변수의 type을 결정해줘야하고 이 type은 이후에 변경될 수 없기에 같은 유형의 값만 넣어줄 수 있다. 반면에 파이썬에서는 처음에 변수의 type을 결정하지 않아도 되고 이후에 같은 변수에 다른 type의 값을 넣어줄 수 있다.

정적타입 언어는 매번 type을 결정해야하는 번거로움이 있지만 그 때문에 type을 명확히 하여 이와 관련된 런타임 오류를 방지할 수 있다. 또한 미리 type을 결정하여 런타임에서 type과 관련된 연산을 하지 않으므로 실행속도가 동적타입 언어에 비해 우수하다.

동적타입 언어는 실행 시 변수에 예상치 못한 type을 가지는 값이 들어와서 에러가 발생할 수 있으나. 런타임까지 타입에 대한 결정을 유보할 수 있기에 유연성이 높다. 그리고 코드 작성 시 타입 명시를 하지 않아 코드 작성이 더 신속하게 이뤄질 수 있다.

라이브러리와 프레임워크의 차이

프레임워크: 소프트웨어의 특정 문제를 해결하기 위해서 상호 협력하는 클래스와 인터페이스의 집합

아무것도 없는 상태에서 빈손으로 프로그램을 처음부터 끝까지 만들어라고 하면 굉장히 큰 부담이 갈 것이다. 그래서 프레임 워크가 존재하는데 프로그램을 쉽게 만들기 위한 부품과 메뉴얼을 제공한다고 생각하면 된다. 때문에 생산성과 품질을 높일 수 있다.

라이브러리: 주로 소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발성 자원(함수, 클래스, 구성 데이터, ...)의 모임

라이브러리는 개발하는데 필요한 도구들의 집합이라고 생각하면 된다. 프레임워크에서 메뉴얼과 부품을 제공하는데 라이브러리는 이를 이용하여 무언가를 만들때 사용하는 도구이다.

둘 다 프로그램 제작에 도움을 주는 것 같은데 뭔가 차이가 있는 듯 없는 듯 하여 당황스럽다. 자유도를 기준점으로 잡으면 구분이 쉬울 것 같다. 어떤 프로그램을 만들 때 A라는 프레임워크를 사용한다면 개발자는 A의 메뉴얼대로 프로그램을 제작하여야 프레임워크의 의도대로 동작하게 할 수 있다. 반면에 라이브러리는 도구이기 때문에 쓰고 싶으면 쓰는거고 굳이 사용하지 않아도 되는 것이다.

뭔가 확실히 하기 위해 적절한지는 모르겠지만 예시를 생각해봤다. 프레임워크 같은 경우는 node.js의 express를 예로 들 수 있는데 서버를 구성하려면 부품인 app.set이나 app.get같은 것들을 사용해줘야 express에서 의도한 방식의 서버를 만들 수 있다. 라이브러리의 경우에는 c++의 STL이 있는데 이 라이브러리는 vector나 queue등 다양한 자료구조를 구현해놓았다. 하지만 여기서 제공하는 vector를 쓰든 그냥 기본적 자료형인 배열을 사용하든 그것은 개발자가 편한 것으로 결정하면 되는 것이다.

REST API란

https://sepang2.tistory.com/5 참고

<참고>

오늘도 끄적끄적 / node.js란...? / https://perfectacle.github.io/2017/06/18/what-is-node-js/
토미의 개발노트 / 정적타입 언어와 동적타입 언어 / https://jusung.github.io/Static-and-Dynamic-Typed-Language/
새로비 / 프레임워크? 라이브러리? 둘의 차이점? 이것만 알면 됩니다. / https://engkimbs.tistory.com/673

댓글