반응형

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]

반응형

+ Recent posts