[javascript] Node.js

- 4 mins

Node.js

Node.js가 등장한 배경을 알기위해 우선 javascript에 대해 이야기해보자.

javascript

javascript는 웹브라우저에서 사용되는 프로그래밍 언어이다.

기본적으로 javascript가 돌아가는 환경은 웹브라우저이고,

보통 다음과 같이 html의 <script> 태그 안에서 사용된다.

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8"/>
    </head>
    <body>
        <script>
            alert('Hello world'); // javascript
        </script>
    </body>
</html>

그리고 alert('Hello world') 와 같은 코드는 독립적으로 실행될 수 없다.

무슨 말이냐면,

python에서는 다음과 같은 코드를 python hello_world.py와 같이 독립적으로 실행시킬 수 있다.

# hello_world.py

print('Hello world')

java에서는 다음과 같은 코드를 java HelloWorld로 실행시킬 수 있다.

// HelloWorld.java

public class HelloWorld {
    public static void main(String args[]) {
        System.out.println("Hello World");
    }
}

하지만 javascipt는 다음의 코드를 javascript hello_world.js 와 같이 독립적으로 실행시킬 수 없다.

// hello_world.js

alert('Hello world')

맨 처음 예제처럼 html의 script태그에 삽입되어, 웹브라우저에 올라갔을때만 실행된다.


즉, 클라이언트(프론트엔드) 에서의 요청을 동적으로 처리하는 부분은 javascript로 실행되며,

해당 요청을 받아서 응답하는 서버(백엔드)에서는 python(django), java(jsp) 같은 다른 언어로 처리한다.


그럼 이런 생각이 들 수 있다.

“서버에서도 javascript를 사용해서 요청을 처리할 수 있다면 훨씬 편하지 않을까?”

그래서 나온게 바로 Node.js다.

Node.js

Node.js는 python이나 java처럼 서버단에서 독립적인 코드의 실행이 가능하다.

// hello_node.js

console.log('Hello Node')

위 코드는 다음과 같이 node hello_node.js 명령으로 커맨드 라인에서 바로 실행이 가능하다.

$ node hello_node.js
Hello Node

그리고 python과 똑같이 REPL 환경도 제공해서, 한줄 한줄 명령을 실행해볼수도 있다.

$ node
> console.log('Hello Node')
Hello Node

이처럼 웹브라우저의 도움 없이 코드를 독립적으로 실행이 가능하다.

Express

이것으로 끝이 아니다.

Node.js로 웹서버를 직접 띄울 수 있으며,

python의 django처럼 Express라는 매우 편리한 프레임워크도 있다.

다음 코드를 보자.

// app.js

var express = require('express');
var app = express();

// get 방식으로 접속한 사용자 중 / 에 접속한 사용자가 있다면 두 번째 인자로 넘겨준 함수가 실행
app.get('/', (req, res) => {
  res.send('helloooooooo');
});

// get 방식으로 접속한 사용자 중 /login 에 접속한 사용자가 있다면 두 번째 인자로 넘겨준 함수가 실행
app.get('/login', (req, res) => {
  res.send('this is login!!!!!!!!')
})

// 3000번 포트에 웹서버 구동
app.listen(3000, () => {
    console.log('connected 3000 port ~~~~~')
});

express라는 모듈을 불러와서 listen이라는 아주 간단한 메소드로 웹서버를 구동시킨다.

사용자 요청을 처리하는 방식도 매우 직관적이고 간단하다.

이처럼 “클라이언트에서 사용하는 언어와 서버에서 사용하는 언어를 javascript로 통일” 할 수 있다는 점이 Node.js의 아주 커다란 장점이다.

주관적인 부분이지만 django, jsp같은 프레임워크보다 사용하기도 훨씬 쉽다.


참고로, express를 사용하려면 다음과 같이 npm을 이용해 설치해주면 된다.

$ npm install express

Node.js는 새로운 언어가 아니다

위 예시를 자세히 보면 파일의 이름이 app.nodejs가 아닌 app.js다.

확장자가 javascript와 똑같다!

그리고 자세히보면,

변수를 선언하는 방식, 반복문이나 조건문같은 흐름 제어문또한 javascript와 완전하게 동일하다.


그렇다.

Node.js는 새로운 언어가 아니라 그냥 javascript이다.

단지, 웹이 아닌 서버에서 돌아가는 javascript이다.


따라서 Node.js는 새로운 언어라기 보다는 “javascript의 런타임”이라고 보는 것이 맞다.

런타임은 특정 언어가 돌아가는 환경이라고 생각하면 되는데,

기존의 javascript 런타임은 웹브라우저가 유일했다.

하지만 이제 Node.js라는 런타임덕분에 서버단에서 동작이 가능하게 된 것이다.

대신 그 모양이 약간 다를 뿐이다.


똑같이 한국말이라는 언어를 사용하더라도,

사용하는 환경에 따라 그 모양이 조금씩 다른것과 똑같다.

회사에서는 “안녕하십니까, 반갑습니다” 와 같은 말투를 사용한다면,

친구들과 만날때는 “안녕~ 반갑다~” 와 같은 말투를 사용한다.

똑같은 한국말이고, 의미하는 바도 같지만, 사용하는 공간에따라 모양이 조금씩 다르다.


똑같은 한국말(javascript)을 회사(웹브라우저)에서 쓸 때에는 “안녕하십니까 (alert(‘Hello world’))”,

친구(서버)들과 만날 때에는 “안녕 (console.log(‘Hello world’))” 이라고 사용한다고 생각하면 좀 더 이해가 쉬울것이다.

똑같은 언어와 표현을 회사에서 쓸 때에는 존댓말(javascript)로 사용하고,

친구들과 쓸 때에는 반말(Node.js)로 사용하는 것과 같은 맥락이다.




코딩장이

코딩장이

-장이: [접사] ‘그것과 관련된 기술을 가진 사람’의 뜻을 더하는 접미사.

rss facebook twitter github youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora quora