반응형

- 소 스 -

<HEAD>
<TITLE> 링크에 밑줄 없애기 </TITLE>

<style type="text/css">
 
a:link { color: red; text-decoration: none;}
 
a:visited { color: black; text-decoration: none;}
 
a:hover { color: blue; text-decoration: underline;}
</style>

- 해 석 -
style 소스의 type = text를 제어하는 css로 한다.
a:link : 클릭하지 않은 링크
a:visited : 한번 클릭했던 혹은 다녀갔던 링크
a:hover : 링크를 클릭하려고 마우스를 가져갔을 때
decoration : 밑줄
none : 없는 상태
underline : 있는 상태

a:active : 링크부분에서 마우스를 누르고 있는 동안의 상태



출처: http://it77.tistory.com/126 [시원한물냉의 사람사는 이야기]

반응형
반응형

평소에는 링크 텍스트에 밑줄을 넣지 않다가, 마우스가 그 위를 지나갈 때(호버)에만 밑줄(언더라인)을 넣는 방법입니다. 링크에 항상 밑줄이 있는 것이 기본값이지만, 그러면 가독성이 떨어지기에, 마우스가 지날 때에만 밑줄을 넣는 방법이 많이 사용됩니다.


또한, 마우스를 가져가면, 링크 텍스트를 빨간색으로 변경시켜 알아보기 쉽게 하는 법도 있습니다.



a:link 는 보통 때의 링크 텍스트의 스타일이고


a:visited 는 이미 방문한 적이 있는 링크의 스타일이고


a:hover 는 마우스가 링크 위를 스쳐 지날 때의 색깔이고


a:active 는 좀 모호한데, 링크를 완전히 클릭하지 않고, 마우스로 선택만 해 둔 상태의 스타일입니다.



마우스 호버 때에만, 링크에 언더라인, 색상 변경 예제


파일명: example.html

<html>

<head>

<style type="text/css">



/*

기본값 + 마우스 가져가면 링크 텍스트를 빨간색으로 변경

모든 링크들에 일괄적으로 적용됩니다.

*/

a:link    { text-decoration:underline; color:#8600E4 }

a:visited { text-decoration:underline; color:#800080 }

a:hover   { text-decoration:underline; color:#FF0000 }

a:active  { text-decoration:underline; color:#FF0000 }



/*

마우스 가져갔을 때에만, 링크 텍스트에 밑줄 넣기

no-uline 이라는 클래스를 지정한 링크에만 적용됨

*/

a.no-uline:link    { text-decoration:none }

a.no-uline:visited { text-decoration:none }

a.no-uline:hover   { text-decoration:underline }

a.no-uline:active  { text-decoration:none }



</style>

</head>



<body>



<!-- 기본 스타일 + 마우스 가져가면 링크 텍스트를 빨간색으로 변경 -->

<a href="http://www.google.co.kr/">Google 검색</a>



<br />



<!--

a.no-uline 클래스를 이용하여,

마우스 가져갔을 때에만 밑줄 표시하기 + 링크 텍스트를 빨갛게 표시

-->

<a href="http://www.google.co.kr/" class="no-uline">Google 검색</a>



</body>

</html>



출처:http://mwultong.blogspot.com/2007/02/html-css-mouse-hover-underline.html

반응형
반응형

JAVA 에서 String 형의 경우 아래와 같이 자릿수를 구할수 있다.




String a = "abced";


System.out.println("길이>>"+a.length);




위와 같은 코드에서는 아래의 결과가 나올것이다.




길이>>5






String 형의 경우 length 함수를 지원하지만, int 형의경우는 길이 함수가 없다. 이럴경우에는 수학적 함수를 사용하여야 한다.




int a = 1571;


int length = (int)(Math.log10(a)+1);


System.out.println("길이>>"+a);




결과는 아래와 같이 나올 것이다.




길이>>4


반응형
반응형

한 서버에서 여러 웹 서비스를 운용해야 하는 경우가 있습니다.

단순히 도메인이 여러개라서 한 도메인으로 사용자를 전달한다거나, 사용자 페이지와 백 오피스를 함께 운용할 수도 있지요.


이런 경우 Apache나 Nginx를 이용한다면 설정 파일을 이용해서 VirtualHost를 활용하곤 합니다.

만약 모든 서비스가 Node.js로 운용되고 있다면 굳이 Apache나 Nginx를 찾지 않고도 VirtualHost를 사용할 수 있습니다.



사전 준비: hosts 파일 편집

hosts 파일은 로컬에 보관하는 일종의 전화번호부입니다.

DNS 동작에서의 hosts 파일 역할에 대한 자세한 설명은 다음 링크에서 확인하실 수 있습니다: hosts 파일 - 생활코딩


hosts 파일은 아래 위치에서 찾을 수 있습니다.

- Windows: %SystemRoot%\system32\drivers\etc\hosts

(예. Windows가 C드라이브에 설치된 경우는 C:\windows\system32\drivers\etc\hosts)

- *nix: /etc/hosts


hosts 파일 하단에 아래 3줄을 추가하고 저장합니다. 이 때 관리자 권한이 필요할 수 있습니다.

아래 세 줄은 오른쪽의 도메인을 왼쪽의 IP, 즉 현재 PC, 다시 말하자면 localhost로 연결한다는 의미입니다

127.0.0.1   e2j.jetalab.internal
127.0.0.1   mail.jetalab.internal
127.0.0.1   jetalab.internal

아래는 터미널을 이용해서 hosts 파일을 편집하는 예시입니다.


1. vim, nano 등의 에디터로 hosts 파일을 엽니다.


2. 하단에 앞서 기록된 3줄을 입력합니다.





사전 준비: 의존성

1. 아래 명령어를 입력하여 필요한 패키지를 설치합니다.

- npm i --save express vhost


실습

1. 이전 예제들을 활용할 수 있도록 일부 변경합니다.

- 이전 예제들은 모두 3000 포트를 이용하도록 지정되어 있었습니다. 지정된 포트를 다른 포트로 변경하거나, 서버 실행 코드를 삭제합니다.

- 이전 예제들의 app.js 파일 하단에 아래 코드를 추가하여 모듈로 내보냅니다.

module.export = app;

2. Sample Code: 아래 코드를 app.js로 저장합니다.



const express = require('express');

const vhost = require('vhost');

 

const excel_to_json = require('../excel-to-json/app');

const mailer = require('../mailer/app');

 

const app = express();

 

app.use(vhost('e2j.jetalab.internal', excel_to_json));

app.use(vhost('mail.jetalab.internal', mailer));

 

app.use(express.static('static'));

 

app.use((req, res) => {

    res.status(404).send('Page Not Found!')

});

 

app.listen(3000, () => {

    console.log('HostManager listening on port 3000');

});

app.js:9: e2j.jetalab.internal로 접속한 경우 excel-to-json app을 연결합니다.

app.js:10: mail.jetalab.internal로 접속한 경우 mailer app을 연결합니다.

app.js:12: 이외의 요청인 경우 static 폴더의 정적 파일을 서비스합니다.

app.js:14~16: 어떤 서비스로도 처리되지 않는 경우 'Page Not Found!' 메시지를 전송합니다.



3. 터미널에서 아래 명령어를 입력하면 서버가 실행됩니다.

- node.app.js


3. 터미널에서 아래 명령어를 입력하면 서버가 실행됩니다.




excel-to-json과 mailer 서버가 실행된 것을 볼 수 있습니다.



4. http://e2j.jetalab.internal:3000 도메인으로 접속하면 excel-to-json 화면이 표시됩니다.



5. 마찬가지로 http://mail.jetalab.internal:3000 도메인으로 접속하면 메일 발송 화면이 표시됩니다.



6. http://jetalab.internal:3000 으로 접속한 경우 static 디렉토리 내부의 정적 파일을 서비스 합니다.

/static/index.html 파일을 추가하고 접속한 화면입니다.





GitHub

본 강의에 사용한 코드는 GitHub에 공개되어 있습니다.

https://github.com/jETA-Kor/examples



참고 문서

- hosts 파일 - 생활코딩: https://opentutorials.org/course/228/1457

- vhost - npm: https://www.npmjs.com/package/vhost



출처: https://jetalog.net/73?category=741674 [jetalog.net]

반응형
반응형

Express.js 서버로 업로드 한 Excel 파일을 JSON 형식으로 변환하기


재무제표, 수익률 데이터, 용돈 데이터 등등...

종종 Excel로 기록된 데이터를 Node.js에서 다뤄야 할 경우가 있습니다.


Express.js로 구현된 웹 페이지에 사용자가 엑셀 파일을 업로드하면, 해당 파일을 읽어들여 json 형식으로 돌려주는 예제를 공유합니다.


사전 준비

1. Dependencies: 아래 명령어를 이용해 필요한 패키지를 설치합니다.

multiparty: multipart/form-data 형식으로 전송된 파일을 좀 더 편리하게 다룰 수 있도록 도와줍니다.

xlsx: Excel 파일을 다룰 수 있도록 도와줍니다.


실습

1. Sample Code: 아래 코드를 app.js로 저장합니다.



const express = require('express');

const http = require('http');

const bodyParser = require('body-parser');

const multiparty = require('multiparty');

const xlsx = require('xlsx');

 

const app = express();

 

app.use(bodyParser.json());

app.use(bodyParser.urlencoded({

    limit: '150mb',

    extended: false,

}));

 

app.get('/', (req, res, next) => {

    let contents = '';

    contents += '<html><body>';

    contents += '   <form action="/" method="POST" enctype="multipart/form-data">';

    contents += '       <input type="file" name="xlsx" />';

    contents += '       <input type="submit" />';

    contents += '   </form>';

    contents += '</body></html>';

 

    res.send(contents);

});

 

app.post('/', (req, res, next) => {

    const resData = {};

 

    const form = new multiparty.Form({

        autoFiles: true,

    });

 

    form.on('file', (name, file) => {

        const workbook = xlsx.readFile(file.path);

        const sheetnames = Object.keys(workbook.Sheets);

 

        let i = sheetnames.length;

 

        while (i--) {

            const sheetname = sheetnames[i];

            resData[sheetname] = xlsx.utils.sheet_to_json(workbook.Sheets[sheetname]);

        }

    });

 

    form.on('close', () => {

        res.send(resData);

    });

 

    form.parse(req);

});

 

http.createServer(app).listen(3000, () => {

    console.log('HTTP server listening on port ' + 3000);

});




app.js:30: multiparty를 이용해 Form 데이터를 처리합니다. 이 때, autoFiles를 true로 지정하면 POST 방식으로 전달된 파일만 처리하도록 할 수 있습니다.

app.js:35: xlsx를 이용해 전달된 파일을 객체로 변환합니다. 이 객체에는 파일 정보, 테마, 시트별 데이터 등 다양한 정보가 담겨있습니다.

app.js:40~43: 시트별 내용을 결과 객체에 담습니다. 이 때 42행에 있는 xlsx.utils.sheet_to_json()이 시트의 내용을 JSON 객체로 변환하는 작업을 수행합니다.


2. 터미널에서 아래 명령어를 입력하면 서버가 실행됩니다.

1
node app.js


3. 테스트 할 엑셀 파일을 생성합니다.


4. 실행된 서버에 접속하면 File을 업로드 할 수 있는 페이지가 표시됩니다.


5. 테스트 파일을 선택하고 업로드하면 JSON 변환 결과가 표시됩니다.


6. 테스트 파일과 비교해보면 올바르게 파싱된 것을 확인할 수 있습니다.


GitHub

본 강의에 사용한 코드는 GitHub에 공개되어 있습니다.

https://github.com/jETA-Kor/examples


참고 문서

node.js에서 multipary와 multer를 이용한 파일 업로드 하기: http://bcho.tistory.com/1078

npm - multiparty: https://www.npmjs.com/package/multiparty

npm - xlsx: https://www.npmjs.com/package/xlsx



출처: https://jetalog.net/58?category=741674 [jetalog.net]

반응형
반응형

한개씩 간단하게 속성을 바꿔가면서 작성한 예제를 보자.

1. <input type="text" name="" size="40" value="기본형식">
2. <input type="text" name="" size="40" value="Readonly (입력불가)" readonly>
3. <input type="text" name="" size="40" value="Disabled (작동불가)" disabled>
4. <input type="text" name="" size="40" value="입력폰트 설정" style="font-size:12pt; color:#ff0000; font-weight:bold;">
5. <input type="text" name="" size="40" value="테두리 0px 로 설정" style="border: 0px;">
6. <input type="text" name="" size="40" value="테두리 1px 로 설정" style="border: 1px solid #ff0000;">
7. <input type="text" name="" size="40" value="테두리 4개 각각 설정" style="border-right: #ff0000 1px solid; border-left: #00ff00 1px solid; border-top: #ffff00 1px solid; border-bottom: #0000ff 1px solid;">
8. <input type="text" name="" size="40" value="배경색 회색으로 설정" style="background-color: #e2e2e2;">
9. <input type="text" name="" size="40" value="입력값 오른쪽 정렬" style="text-align: right;">
10. <input type="text" name="" size="40" value="크기 강제 조정" style="height:30px;">
11. <input type="text" name="" size="40" value="패딩주기(상:5,우:0,하:0,좌:10)" style="padding:5px 0px 0px 10px;">


출처:http://egloos.zum.com/nis7/v/1988543

반응형
반응형
Log4j 설정 참고 자꾸 까먹음


1. log4sql을 다운받는다. 위치는 http://log4sql.sourceforge.net/ 이다.
경로 : http://sourceforge.net/project/showfiles.php?group_id=209296

다운 받아서 lib 에 복사 

아래는 Maven 설정
--------------------
<dependency>
<groupId>log4sql</groupId>
<artifactId>log4sql</artifactId>
<version>7.8</version>
</dependency>
--------------------

2. DB connection정보 변경
ex) jdbc.driverClassName=oracle.jdbc.OracleDriver  ---> jdbc.driverClassName=core.log.jdbc.driver.OracleDriver
DB에 따라서 변경해야하는 드라이버 명은 (http://log4sql.sourceforge.net/) 이곳에서 확인 가능.

기타 log 설정 등은 기존 설정을 사용하되,sql에 관해 로그를 남기던 옵션은 다 해제해 준다.


간편하다 참 ~!!! 





출처: https://nayha.tistory.com/337 [Nayha]

반응형

'프로그램 관련' 카테고리의 다른 글

AI 학습 중요성  (0) 2025.01.29
2020년 정보처리기사(개정) 디자인패턴  (0) 2020.04.07
반응형
/*
    # CLOB 형 데이타 SELECT
      
    DBMS_LOB.SUBSTR(
     CLOB 타입 컬럼 명
    , 추출할 문자열 길이(숫자) OR 전체 문자길이( DBMS_LOB.GETLENGTH(CONTENTS) )
    , 전체 값 출력 : 1
    )
      
    전체 문자길이( DBMS_LOB.GETLENGTH(CONTENTS) ) 사용시 아래와 같은 메세지 발생할 수 있음.
    -- ORA-06502: PL/SQL: 수치 또는 값 오류: 문자열 버퍼가 너무 작습니다   
*/
 
SELECT  DBMS_LOB.SUBSTR(CONTENTS, 1000, 1) AS CONT_SUB   -- 1000 개까지 출력(문자열)
        , DBMS_LOB.INSTR(CONTENTS, 'TEST', 1, 1) AS CONT_INS   -- 검색 문구의 위치 출력(숫자)
  FROM CLOB_TABLE
  WHERE DBMS_LOB.INSTR(CONTENTS, 'TEST', 1, 1) > 0             -- 검색 문구가 존재할때



출처:http://develop.sunshiny.co.kr/841

반응형
반응형

앵귤러JS (AngularJS) 란?


앵귤러JS란
앵귤러JS (짧게 앵귤러라고도 합니다)는 MIT License로 무료로 배포되고 구글이 지원하고 있는 오픈 소스 웹 어플리케이션 프레임워크입니다. 앵귤러JS는 자바스크립트로 제작되었으며 기본적으로 MVC (Model-View-Controller) 모델 지원과 같은 다른 웹 어플리케이션 프레임워크에서도 지원하는 기능을 제공할 뿐만 아니라 Two-way data binding이나 directive 같은 새로운 개념의 기술도 지원하여 웹 개발자들이 해야할 많은 일들의 단축 및 좀더 파워풀하고 테스트가 용이한 웹 어플리케이션 제작에 도움이 되는 기능을 제공하고 있습니다. 아직 나온지 5년 정도 밖에 안된 프레임워크지만 구글의 전폭적인 지원 속에 다른 경쟁 프레임워크들이 비해 가장 빨리 커뮤니티가 성장하고 있는 프레임워크가 아닐까 생각합니다. 

왜 사용하나요?
  • 체계적인 코드작성 지원: 개인적인 경험으로 JavaScript는 다른 프로그래밍 언어에 비해서 체계적으로 프로그래밍하기 어려운 언어인 것 같습니다. 그래서 프로젝트 사이즈가 커지면 금방 이해하기 힘들어지고 Debug가 어려워지는 Spaghetti Code가 되기 쉽습니다. 그렇지만 앵귤러같은 프레임워크를 사용하게 되면 이런 부분을 일정 부분 해소해줍니다. 
  • 앵귤러는 다른 프레임워크에 비교했을 때 아래와 같은 장점들을 가지고 있습니다. 
    • 구글의 지원 속에 개발자 커뮤니티가 가장 빠르게 성장하고 있고 앞으로도 성장 가능성이 큽니다. 
    • Two Way Data-Binding: 앵귤러가 제공하는 여러가지 기능 중 가장 유용한 기능이 이 Two Way Data-Binding 일 것입니다. 이 기능에 대해서 간단하게 이야기하면 Model과 View에서 사용되고 있는 데이터를 연결해줘서 어느 한쪽에서 이 데이터 값이 변화하면 다른 쪽에도 바로 업데이트가 되도록 해주는 기능입니다. 보통 이 기능 구현을 위한 코드가 전체 프로젝트의 80% 정도를 차지한다고 하는데 앵귤러는 기본적으로 이 기능을 제공하기 때문에 많은 코드의 반복을 피할 수 있습니다.
    • Dependency Injection 기능을 기본적으로 지원하기 때문에 컴포넌트들 간의 서비스 사용 및 Dependency 관리가 용이하며 각각의 컴포넌트들이 Decoupling (코드상에서 밀접하게 연관되어 있지 않음)되어 있기 때문에 테스트 하기가 쉽습니다. Dependency Injection에 대한 좀더 자세한 사항은 저의 다른 블로그 글인 'Dependency Injection이란'을 참고하시기 바랍니다. 
    • Directives: 앵귤러는 Directives를 제공함으로써 개발자가 자신의 용도에 맞게 HTML tag를 제작하여 사용할 수 있게 하였으며 DOM attributes도 수정 가능하게 하였습니다.

출처 : http://utk-unm.blogspot.com/2015/01/js-angularjs.html

반응형
반응형

Node.js란…?

Node.js 공식 사이트에서 내린 Node.js의 정의Node.js 공식 사이트에서 내린 Node.js의 정의
Node.js는 Chrome V8 Javascript 엔진으로 빌드된 Javascript 런타임이다.
V8 자바스크립트 엔진은 여기서 중요한 포인트가 아니므로 직접 찾아보길 바란다.

런타임에 대해 정리한 다른 블로그의 포스트를 빌려보자면 다음과 같다.

런타임이란 프로그래밍 언어가 구동되는 환경

예전에는 자바스크립트 런타임이 브라우저 밖에 존재하질 않았다.
하지만 그러한 한계를 극복하고 Node.js가 나왔다.

Javascript 실행 환경?

첫 번째로 Node.js는 REPL(Read, Eval, Print, Loop)을 통해서 런타임을 제공한다.

  1. Read: 유저의 입력 값을 받아서 메모리에 저장
  2. Eval: 입력 값의 평가, 실행
  3. Print: Eval로 인해 반환된 값을 출력
  4. Loop: 1~3을 반복.

이러한 REPL은 Babel REPL과 같이 웹에서 제공해주기도 하고,
Node.js에서 제공하는 REPL은 윈도우의 CMD, 맥의 터미널 등등에서 제공을 해준다.
터미널에서 node라고 입력을 하면 node repl이 실행된다.터미널에서 node라고 입력을 하면 node repl이 실행된다.

두 번째로 따로 자바스크립트 파일을 Node.js에서 제공하는 자바스크립트 런타임을 통해 실행이 가능하다.
위와 같이 REPL에서 개발을 하면 간단한 테스트 정도면 몰라도 어플리케이션을 개발하는 데 적합하지 않다.
따라서 repl 보다는 따로 스크립트 파일을 만들어서 그 스크립트 파일을 node.js, V8이 해석 후 실행하는 형태로 작업을 많이 하게 된다.
아래 소스 코드를 node.js에서 돌리는 것은 위의 REPL에서 실행한 것과 동일하다.

1
2
3
4
5
// a.js
const a = 2;
a;
a + 4;
console.log(a);

그럼 왜 Node.js는 백엔드 영역이라는 오해가 생겼을까?

Node.js를 통해서 서버 만들 수 있기 때문이다.

1
2
3
4
5
6
// server.js
const http = require('http');
http.createServer((req, res) => {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end("Hello World\n");
}).listen(8080);

node.js를 통해 실행한 server.jsnode.js를 통해 실행한 server.js
node.js를 통해 구현한 서버node.js를 통해 구현한 서버

그럼 프론트 엔드 개발자는 언제 Node.js를 쓰는가?

매우 빈번하게 쓰이는데 그 중에서 대표적으로 ES2015+ 문법을 ES5 문법으로 트랜스파일 해주는 Babel을 예로 들어보겠다.
먼저 babel의 기본적인 요소들을 설치하겠다.

1
npm i -S babel-cli babel-preset-env

babel-cli, CLI이기 때문에 터미널 위에서 돌아간다는 점을 염두해두자.

그리고 간단한 바벨 설정 파일(.babelrc)을 만들어주자.

1
2
3
{
"presets": ["env"]
}

그 다음에 package.json의 npm script 부분을 다음과 같이 추가해주면 된다.

1
2
3
4
5
{
"scripts": {
"babel": "babel"
}
}

그리고 ES2015+의 간단한 파일을 하나 만들어보겠다.

1
2
// a.js
const a = 1;

터미널에서 babel-cli를 통해 해당 파일을 ES5로 트랜스파일 된 결과를 보자.
"use strict" 구문 부터가 실제로 트랜스파일 된 결과"use strict" 구문 부터가 실제로 트랜스파일 된 결과

이게 뭐가 Node.js를 통해 실행한 내용인지 확인해보자.
기본적으로 npm script는 node_modules 디렉토리 안의 .bin 디렉토리에 있는 디렉토리를 인식한다.
node_modules/.bin 디렉토리 안에 babel 파일이 존재한다.node_modules/.bin 디렉토리 안에 babel 파일이 존재한다.

그리고 그 내용은 다음과 같다.

1
2
3
#!/usr/bin/env node
require("../lib/babel");

#!/usr/bin/env node 요 구문으로 인해 node.js에서 cli를 만들 수 있게 해주는 것이라고 생각하면 된다.
그럼 직접 ../lib/babel을 찾아가보자.

node_modules/babel-cli/lib/babel 디렉토리가 존재한다.node_modules/babel-cli/lib/babel 디렉토리가 존재한다.
Node.js에서 기본적으로 디렉토리 뒤에 따로 파일이 명시되지 않으면 index.js 파일을 찾아가는 규칙이 있다.
index.js 파일의 상단 부분을 보면 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/env node
"use strict";
var _keys = require("babel-runtime/core-js/object/keys");
var _keys2 = _interopRequireDefault(_keys);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var fs = require("fs");
var commander = require("commander");
var kebabCase = require("lodash/kebabCase");
var options = require("babel-core").options;
var util = require("babel-core").util;
var uniq = require("lodash/uniq");
var glob = require("glob");
// 이하 생략

소스 코드 첫 라인에 #!/usr/bin/env node을 보면 CLI임을 짐작할 수 있다.
그럼 다음과 같이도 실행을 해볼 수도 있다는 말이 된다.

npm script가 아닌 직접 파일로 접근해서 CLI를 실행npm script가 아닌 직접 파일로 접근해서 CLI를 실행

하지만 우리가 접근한 파일은 우리가 흔히 보고 있는 js 파일이다.
Node.js는 자바스크립트를 실행해줄 수 있는 환경인 런타임을 제공해주기 때문에 다음과 같이도 할 수 있다.
Node.js에서 바벨을 실행시킨 결과Node.js에서 바벨을 실행시킨 결과

즉, 바벨을 쓴다면, 프론트 엔드 개발자도 Node.js를 쓴다는 결론을 내릴 수가 있다.
바벨 뿐만 아니라 웹팩, 걸프, CRA, Vue-CLI 등등 npm으로 설치하는 모든 CLI는 Node.js를 이용한다고 보면 된다.
그리고 npm(Node Package Manger)을 쓴다는 것 자체가 Node.js를 이용한다고 보면 된다.

웹을 벗어난 Node.js

Node.js 공홈 about 페이지Node.js 공홈 about 페이지
Node.js는 확장성 있는 네트워크 애플리케이션을 위해 설계했다고 나온다.
네트워크 어플리케이션, 즉 서버, 서버를 위해서 설계된 플랫폼이다.
따라서 Node.js로 실제 구현하는 내용도 서버가 많다는 것에는 동의한다.
또한 많은 프론트 엔드 개발자들이 주로 노드를 이용하는 사례인
npm으로 의존성 모듈 관리, 바벨, 웹팩과 같은 CLI를 Node.js 위에서 구동하는 경우
이 경우에

나 노드 할 줄 안다

라고 누군가에게 어필하기에는 다소 무리가 있을 수가 있다.
왜냐면 노드로 서버를 구축하는 사례가 너무 많고, 이미 그런 오해가 정석처럼 받아들여지는 상황이라
필드에 나가서 노드 할 줄 안다고 했을 때

  • 나 노드로 서버 만들 줄 안다.
  • 나 노드로 의존성 모듈 관리하고 CLI를 Node.js 위에서 돌릴 줄 알아.
    둘 중에 누구의 말로 받아들이는 경우가 더 많을까…
    이런 고민을 하다보니 그럼 웹이 아닌 경우에는 무엇이 있을까 고민하게 됐다.

데스크탑 어플리케이션을 제작해주는 일렉트론(Electron)

Electron의 정의Electron의 정의
맥, 윈도우 등등의 크로스 플랫폼 데스크탑 어플리케이션을 HTML, CSS, JS를 통해 만들 수 있다.
자세히 몰라서 아래의 사진으로 대체하겠다.
출처: http://blog.dramancompany.com/2015/12/electron%EC%9C%BC%EB%A1%9C-%EC%9B%B9-%EC%95%B1-%EB%A7%8C%EB%93%A4%EB%93%AF-%EB%8D%B0%EC%8A%A4%ED%81%AC%ED%86%B1-%EC%95%B1-%EB%A7%8C%EB%93%A4%EA%B8%B0/출처: http://blog.dramancompany.com/2015/12/electron%EC%9C%BC%EB%A1%9C-%EC%9B%B9-%EC%95%B1-%EB%A7%8C%EB%93%A4%EB%93%AF-%EB%8D%B0%EC%8A%A4%ED%81%AC%ED%86%B1-%EC%95%B1-%EB%A7%8C%EB%93%A4%EA%B8%B0/
슬랙과 atom, vs code가 일렉트론으로 만들어졌다 하니 믿을만 하다고 할 수 있을 것 같다.

결론

Node.js를 할 줄 안다고 하면 Node.js로 서버를 구성할 줄 안다라고 인식되는 것은 어느 정도 이해할 수 있다.
하지만 Node.js 그 자체를 백엔드 자체만의 기술, 웹 서버 자체만으로 받아들이고
프론트 엔드 개발자들은 Node.js를 쓸 줄 모른다는 그런 잘못된 지식으로 남들에게 더 이상 인식되지 않는 환경이 조성되길 바란다.
명심하자.
Node.js는 백엔드, 웹 서버가 아니라 자바스크립트 실행 환경에 불과하다

출처:https://blog.perfectacle.com/2017/06/18/what-is-node-js/

반응형

+ Recent posts