프로그래밍 언어

프로그래밍 언어의 종류에 대해서 알아보고, JavaScript와 Node.js를 소개합니다.
JavaScript, Node, 프로그래밍 언어


프로그래밍 언어의 구분

컴파일 언어컴파일 언어

컴파일 언어

소스코드를 컴파일 한 뒤 그 바이너리를 배포하는 언어. 예로써 C언어로 소스코드를 작성 한 뒤 컴파일하여 그 실행 파일을 배포합니다. 또는 Swift로 iOS 프로그램의 소스코드를 작성 한 뒤 컴파일하고 AppStore에 배포합니다.

스크립트 언어

소스코드 자체를 배포하여 실행시에 동적으로 컴파일하는 언어. 이 때의 컴파일러를 특히 인터프리터(Interpreter)라고도 합니다. 예로써 웹 브라우저에서 실행되는 JavaScript나 게임에서 실행되는 Lua 등이 있습니다.

프로그래밍 언어는 프로그램을 작성하기 위한 도구입니다. 언어의 문법이나 라이브러리 등의 내용을 깊히 아는 것도 중요하지만, 우선 프로그래밍 언어가 도구라는 인식을 가지는 것이 먼저입니다. 때문에 구현하고자 하는 프로그램의 속성에 따라서 개발자가 능동적으로 언어와 플랫폼을 선택을 할 수 있어야 합니다.

프로세스 가상머신

JAVA 프로그램의 컴파일JAVA 프로그램의 컴파일

(Java와 JavaScript는 이름은 비슷하지만 전혀 다른 언어입니다.)

Java나 C# 같이 특정 언어로 작성한 프로그램이 OS나 CPU에 종속되지 않는 경우가 있습니다. 즉 Java로 작성하고 컴파일 한 바이너리가 윈도우즈, Linux, Android, macOS에서도 동일하게 실행됩니다.

이러한 크로스플랫폼(Cross-Platform)은 Java 컴파일러가 소스코드를 OS나 CPU에 맞추어 컴파일하지 않고 Java만의 고유한 아키텍쳐를 따라 컴파일하기 때문에 가능합니다. 어느 OS에서 Java로 작성된 소스코드를 컴파일해도 Java의 바이너리는 Java ByteCode를 기반으로 동일한 프로그램을 생성합니다.

이후에 Java ByteCode가 특정 OS에서 실행될 때, 가상 머신이라는 프로그램을 거쳐 OS와 CPU가 이해 할 수 있도록 바이너리를 재컴파일 한 뒤 실행하게 됩니다.

이 때문에 Java로 만든 프로그램을 실행하려면 Java Runtime이라는 가상머신 프로그램이 필요하고, C#으로 만든 프로그램을 실행하려면 Common Language Runtime이라는 가상머신 프로그램이 필요합니다.

JavaScript, Node.js

JavaScript, Node.jsJavaScript, Node.js

JavaScript는 웹 브라우저 위에서 동작하는 스크립트 언어입니다. 이후 JavaScript의 문법을 차용하여 Node.js라는 OS 위에서 동작하는 언어가 개발되었습니다. 학습 난이도를 줄이기 위해서 이후 서로 많이 닮은 두 언어를 이용해서 수업을 진행하기로 하였습니다.

  • JavaScript
    웹 페이지에 사용자와의 동적인 상호작용을 도입 할 목적으로 개발되었습니다. JavaScript의 모든 모듈은 웹 브라우저 위에서 작동합니다.

  • Node.js
    JavaScript와 거의 동일한 문법(Syntax)으로 이루어져있으나 Node.js의 모든 모듈은 OS 위에서 작동합니다.

예를 들어서 JavaScript 코드로는 웹 브라우저 창을 벗어나 그림을 그리거나, 하드디스크의 프로그램을 실행시키거나, 파일을 삭제하거나 등의 작업을 할 수 없습니다. 웹 브라우저라는 플랫폼에서 JavaScript 코드에게 이러한 접근을 허용하지 않기 때문입니다.

그러나 Node.js는 OS 위에서 바로 작동하기때문에 Node.js로 TCP/IP 네트워킹을 구현하거나, GUI를 구현하는 등의 좀 더 유연한 작업을 할 수 있습니다. 물론 언어가 작동하는 플랫폼이 하위, 상위 계층이냐가 그 언어와 플랫폼의 우위를 가르는 것은 아닙니다. 개발 목적에 맞는 적절한 플랫폼, 생태계를 선택해야 합니다.

이 강의를 포함한 커리큘럼
저자

김동욱

개발 경력 약 10년, 전문 분야는 웹 및 각종 응용 소프트웨어 플랫폼입니다. Codeflow를 운영하고 있습니다.

2018년 04월 08일 업데이트

지원되지 않는 웹 브라우저거나 예기치 않은 오류가 발생했습니다.