Study/Node.js

[노드JS] 콘솔에 로그 뿌리기

AC 2019. 3. 8. 01:45




처음 만들어본 자바스크립트 파일에는 console 객체가 사용 되었다.


여기에서 console 객체는 전역객체(Global Object)라고 부르며 필요할 때 코드의 어느 부분에서나 사용할 수 있다.


※ 전역 객체는 언제 어디서나 사용 가능하다.


자바스크립트에서는 다른 언어들처럼 함수를 만들 수 있고 함수 안에서 변수를 선언하여 사용할 수 있다.

그런데 함수 안에서 선언한 변수는 그 함수 안에서만 유효하다. 즉, 그 함수 안에서만 사용할 수 있다.

이와 달리 전역 객체는 함수 안과 밖에서 모두 사용할 수 있도록 범위를 제한하지 않는 객체이다. 따라서 코드의

어느 부분에서나 사용할 수 있다.


대표적인 전역 객체들은 님들이 프로그램을 만들면서 필요할 때마다 사용할 수 있어야 하므로 간단하게 그 기능을 알아보자.

노드에서 사용할 수 있는 대표적인 전역 객체들은 이렇다.



console : 콘솔 차에 결과를 보여주는 객체

process : 프로세스의 실행에 대한 정보를 다루는 객체

exports : 모듈을 다루는 객체 


전역 객체들 중에서 console 객체는 가장 많이 쓰이는 것 중 하나이다. console 객체는 콘솔 화면에 결과를 보여주기 위해 언제든 사용 가능하고, console 객체에 정의된 log()메소드를 호출하면서 문자열을 파라미터(매개변수)로 전달하면 그대로 출력된다. 이 때 %d,%s,%j와 같은 특수문자를 같이 전달하면 그 뒤에 오는 파라미터를 각각 숫자, 문자열, JSON 객체로 인식한 후 문자열로 변환시켜 화면에 보여준다.


다음과 같은 코드를 하나씩 입력하여 간단하게 화면에 출력해보자.





각각의 코드를 실행했을 때 함께 출력되는 undefined는 호출한 log() 함수에서 반환하는 값이 없을 때 나타난다.


자바스크립트의 함수는 항상 값을 반환하도록 되어 있는데, 함수를 만들 때 값을 반환하는 코드를 넣지 않으면 undefined가 반환된다. undefined는 정의되어 있지 않은 값이라는 말인데, 비어 있는 값이라는 의미의 null 값도 있다.


그러면 undefined와 null은 어떤 차이가 있을까?


undefined는 단순히 값을 존재하지 않는다고 생각하면 되고, null은 의도적으로 값을 비웠다고 생각하면 이해하기 쉽다.


※ JSON 포맷은 무엇일까?


JSON 포맷은 자바스크립트의 객체 포맷으로 단말끼리 데이터를 주고받을 때 많이 사용한다.


따라서 어떤 형식으로 만드는지를 잘 알아두는 것이 좋다.


JSON 포맷은 자바스크립트에서 객체를 만들 때 사용하는 형식과 같다. 즉 중괄호 {}를 이용해 객체를 만들 수 있으며, 그 안에 키(Key)와 값(Value)으로 구성된 속성들은 콤마(,)로 구분한다. 


예를 들어, 사람이름과 전화번호를 속성으로 가지고 있는 객체를 만든다면 다음처럼 JSON 포맷으로 표현할 수 있다.


{"name":"소녀시대","age":20}



console 객체에는 자바스크립트 객체의 속성들을 한꺼번에 출력해 주는 dir() 메소드, 그리고 코드 실행 시간을 측정할 수 있는 time()과 timeEnd() 메소드 등이 들어 있다.



dir(object) : 자바스크립트 객체의 속성들을 출력한다.

time(id) : 실행 시간을 축정하기 위한 시작 시간을 기록한다.

timeEnd(id) : 실행 시간을 측정하기 위한 끝 시간을 기록한다.


자바스크립트에서 사용하는 '함수'라는 말과 '메소드'라는 말 같은 건가요?


함수(Function)라는 말은 프로그래밍 언어에서 공통으로 사용합니다. 예를 들어, 더하기 기능을 가진 함수 상자를 만들고 그 상자에 두 개의 공을 넣으면 아래쪽으로 하나의 공은 나온다고 정의할 수 있습니다.


이런 기능을 가진 하나의 단위를 함수라고 합니다. 그런데 객체 지향 언어에서는 이 함수를 메소드(Method)라고도 부른다.


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



그러면 console 객체를 사용해 코드가 얼마간의 시간 동안 실행되는지 확인해 보겠다. 브라켓의 왼쪽 프로젝트 영역에서 마우스 오른쪽 버튼을 누르고 [파일 만들기] 메뉴를 클릭한다. 새로운 파일 이름 ch02_test1.js로 입력한다. 새로운 파일이 만들어지고 가운데 작업 영역에 탭이 열리면 탭 안의 코드 입력 창에 다음 코드를 입력한다.



var result = 0;


console.time('duration_sum');


for (var i = 1; i <= 1000; i++) {

result += i;

}


console.log('duration_sum');

console.log('1부터 1000까지 더한 결과물 : %d', result);


코드는 1부터 1000까지 숫자를 더한 결과를 알려 준다. for문을 사용해서 1부터 1000까지 숫자를 더하면 result 변수에 결과 값을 저장한다. 숫자를 더하는 기능을 실행했을 때 시간이 얼마나 걸리는지 알고 싶다면, 해당 코드의 시작과 끝 부분에 time()과 timeEnd() 메소드를 추가한다.


이 두 개의 메소드로 전달되는 파라미터는 문자열로 된 이름인데, 시간이 얼마나 지났는지 체크하는 작업에 하나의 이름을 붙여 구별한다. 여기에서는 duration_sum이라는 문자열을 사용하였다.


코드를 모두 입력하고 나면 Ctrl + S를 눌러서 저장한다. 새롭게 추가한 ch02_test1.js 파일이 잘 만들어졌다면 명령 프롬프트 창에서 다음 명령을 실행한다.


node ch02_test1.js


그러면 다음과 같은 결과가 출력된다.




1부터 1000까지가 더하는 코드가 너무 빨리 실행되다 보니 채 1초도 걸리지 않는다. 코드에서 1부터 100000까지 더하도록 수정하면 실행 시간이 더 길어지는 것을 확인할 수 있다.


이렇게 파일 단위로 코드를 입력하고 노드를 이용해 파일을 실행할 때, 실행한 각 파일의 이름과 파일의 패스를 확인해야 하는 경우가 있다. 다음과 같이 두 줄을 더 추가한 다음 저장하고 다시 실행하면 파일의 이름과 패스를 확인할 수 있다.



console.log('현재 실행한 파일의 이름 : %s', __filename);

console.log('현재 실행한 파일의 패스 : %s', __dirname);



다음은 파일을 실행했을 때 출력되는 결과이다.





여기에서 사용한 __filename과 __dirname 변수를 전역 변수(Global Variable)라고 부른다.

앞에서 설명했지만 전역 변수는 코드의 어느 부분에서든 사용할 수 있는 변수라는 의미로, 이 두 개의 변수를 사용하면

node.exe를 사용해 실행한 파일의 이름과 패스를 쉽게 확인할 수 있다.




__filename : 실행한 파일의 이름을 출력한다. 파일의 전체 패스가 출력된다.

__dirname : 실행한 파일이 들어 있는 폴더를 출력한다. 폴더의 전체 패스가 출력된다.


마지막으로 console 객체의 dir() 메소드를 이용해 객체 안에 들어 있는 속성들을 확인해 보겠다.

ch02_test1.js 파일의 마지막 부분에 다음 코드를 추가로 입력한 후 저장한다.




자바스크립트의 객체는 중괄호 {}를 사용해서 만들 수 있다.  중괄호 안에는 콤마(,)로 구분된 속성들이 들어가며, 이 속성은 속성 이름과 속성 값 사이에 콜론(:)을 넣어서 구분한다. 즉, 다음과 같은 코드 형식을 사용한다.


{ 속성 이름1 : 속성 값1, 속성 이름2 : 속성 값2, ....}



이렇게 만들어진 객체는 Person 변수에 들어가는데, dir() 메소드를 호출하면 그 객체 안에 들어 있는 모든 속성이 콘솔에 출력된다.

파일을 실행하면 다음과 같이 출력된다.




dir() 메소드는 log()메소드와 함께 객체의 속성을 확인할 때 자주 사용한다.






LIST