본문 바로가기

프레임워크25

[nodejs] nodejs 14.x 버전 설치 중 GPG error: https://deb.nodesource.com/node_14.x bionic InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 1655A0AB68576280 오류 처리 deb https://deb.nodesource.com/node_14.x bionic main deb-src https://deb.nodesource.com/node_14.x bionic main nodejs 14.x 버전 설치 중 다음과 같은 오류가 발생했습니다. 이 오류는 apt 명령에서 nodesource.com의 접근하는 키게 문제가 있어서 발생합니다. Err:1 https://deb.nodesource.com/node_14.x bionic InRelease The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 1655A0AB68576280 Hit:5 http://10.182.2.. 2021. 7. 4.
[nodejs] CentOS에서 NodeJs 업데이트 방법 nodejs가 yarn 리파지토리로 옮겨지고 난 후 업데이트 방법이 아래와 같습니다. 저는 node v6에서 v14로 업그레이드를 진행하였습니다. yarn 리파지토리를 추가하고 실행 함 프록시 설정이 필요하면 설치 스크립트의 curl 에 프록시 설정을 모두 추가해야 함 중간에 오류가 발생하면 설치된 nodejs를 삭제하고, 로컬의 캐쉬를 삭제후, 설치하면 됨 2021. 1. 19.
[개념] 달빅과 ART(JIT 컴파일러와 AOT컴파일러) [컴파일러]고급언어로 쓰여진 프로그램이 컴퓨터에서 실행되기 위해서는 컴퓨터가 직접 이해할 수 있는 언어로 바꾸어 주어야 한다. 이런 역활을 하는 프로그램이 컴파일러 이다. 고급언어는 인간이 이해할 수 있는 표현으로 사용할 수 있는 언어이고, 저급언어는 컴퓨터가 이해할 수 있는 표현으로 사용하는 언어이다. 컴파일러는 소스코드를 컴파일하여 목적코드(Object Code)를 생성하고,목적코드는 링커가 라이브러리와 연결하여 실행가능한 코드를 생성하여 실행한다. * 자바 컴파일러와 JIT 컴파일러는 다른 것이다. 자바 컴파일러는 .java 파일을 해석해서 .class파일(자바 바이트 코드)로 변환한다. JIT 컴파일러는 .class파일을 해석해서 기계어로 번역하여 JVM이 실행할 수 있는 형태로 번역한다. [AR.. 2016. 5. 16.
[nodejs] iconv-lite 모듈을 이용한 한글 인코딩 extendNodeEncodings() doesn't work with Node v4+. You'll need to update your code to use encode anddecode functions directly. nodejs 버전에 따라 iconv-lite 를 이용하여 한글을 인코딩 할때 extendNodeEncodings() 를 사용하는 방법이 위와 같은 오류 메시지와 함께 동작하지 않을 때가 있다. 이는 노드의 버전에 따라 기존에 사용하는 방법이 동작하지 않기 때문이다. 이럴 때는 아래와 같이 하면 된다. https://github.com/ashtuchkin/iconv-lite/wiki/Node-v4-compatibility 2016. 4. 27.
[android/layout] fill_parent, match_parent, wrap_content의 차이 안드로이드에서 레이아웃을 구성할 때 사용하는 fill_parent, match_parent, wrap_content 의 차이는 아래와 같다. fill_parent = match_parent 이다. api8에서 부터 match_parent가 fill_parent로 이름이 변경되었다. fill_parent는 현재 객체의 크기를 부모 객체의 크기와 동일하게 설정한다. 즉 부모의 width, height가 상속된다. wrap_content는 자식 컴포넌트의 사이즈에 우선하여 길이가 설정된다 http://griper.tistory.com/entry/fillparent-%EC%99%80-wrapcontent-%EC%9D%98-%EC%B0%A8%EC%9D%B4http://stackoverflow.com/questio.. 2016. 4. 11.
[nodejs / request] request 모듈을 이용하여 이미지 파일 다운로드 하기 웹상의 이미지를 다운로드 하기 위해서는 request 모듈을 이용한다. 예제는 아래와 같다. var fs = require('fs'); // 네이버에 있는 신문의 이미지를 다운로드 // 헤더를 지정하지 않고 바로 사용해도 됨 var requestOptions = { method: "GET" ,uri: "http://imgnews.naver.net/image/003/2016/04/11/NISI20160411_0011572229_web_99_20160411103315.jpg" ,headers: { "User-Agent": "Mozilla/5.0" } ,encoding: null }; // 파일명을 지정한다. request(requestOptions).pipe(fs.createWriteStream('sampl.. 2016. 4. 11.
[nodejs] zip 파일 생성하기 nodejs 에서 zip 파일을 만들때 사용한 모듈은 node-zip 이다. * 어느게 좋은지 몰라서 구글검색에서 첫번째에 나오고, 다운로드 수를 보니 괜찮은 것 같아서 사용함 zip 파일을 생성하는 예제는 다음과 같다. file 메소드를 이용하여 압축할 파일을 지정하고,generate 메소드로 zip 파일의 byte string 을 생성하여,fs의 writeFileSync 로 파일을 생성한다. 자세한 옵션은 아래의 링크를 참조하면된다. var fs = require("fs"); var zip = new require('node-zip')(); // 파일을 생성하여 zip 파일 생성 // 1.txt의 내용이 a, 2.txt의 내용이 b 로 파일 생성 zip.file('1.txt', 'a'); zip.fi.. 2016. 4. 11.
[nodejs][cheerio] cheerio를 이용한 네이버 IT 뉴스 페이지 파싱하기 nodejs 의 cheerio 모듈을 이용하여 네이버의 IT 뉴스 홈페이지를 파싱하는 소스이다. 한글파싱을 위하여 iconv-list 모듈을 이용하였다. var request = require("request"); var cheerio = require('cheerio'); var iconv = require('iconv-lite'); var requestOptions = { method: "GET" ,uri: "http://news.naver.com/main/list.nhn?mode=LS2D&mid=shm&sid1=105&sid2=731" ,headers: { "User-Agent": "Mozilla/5.0" } ,encoding: null }; request(requestOptions, functio.. 2016. 4. 6.
[nodejs] 한글이 깨지는 현상 수정하기 nodejs에서 한글이 깨지는 현상은 iconv 나 iconv-lite 모듈을 이용하여 처리 가능하다. iconv-lite는 iconv를 보고 자바스크립트로만 만들어진 모듈이다. 아래는 request 모듈을 이용하여 네이버 뉴스 페이지를 파싱하던중 한글깨짐이 발생하여 확인한 것이다. 둘중 편한 방법을 사용하면 될 것 같다. var request = require("request"); var cheerio = require('cheerio'); var iconv = require('iconv-lite'); //var Iconv1 = require('iconv').Iconv; var requestOptions = { method: "GET" ,uri: "http://news.naver.com/main/lis.. 2016. 3. 30.
[nodejs][express] express 설치 및 기본 프로젝트 생성하기 express 모듈 설치 우선 express 를 사용하기 위해서는 npm을 이용하여 express 모듈을 설치해야 한다. npm install express # 전역으로 설치 npm install express --save # 로컬에 설치 express-generator 툴을 이용하여 express 프로젝트 생성express-generator 를 이용하여 프로젝트의 기본 뼈대를 간단하게 생성할 수 있다. 우선 express-generator 를 설치한다. npm install express-generator 설치후 아래의 명령으로 프로젝트를 생성한다. express [프로젝트명(폴더명)] 사용가능한 옵션은 다음과 같다. 상세한 옵션은 아래의 링크를 참조하면 된다. -e, --ejs : 템플릿 엔진을 ej.. 2016. 3. 30.
[jade] node.js용 html 템플릿 엔진 [jade] - node.js 를 위한 템플릿 엔진 - express 의 기본 템플릿 엔진 - ejs에 비해 4배정도의 다운로드수(2016.03.10 기준) - jade 의 형식으로 된 문법을 이용하여 html 구성 - 들여쓰기가 중요함 -- 탭과 띄어쓰기중 한가지만 사용해야 함 - 첫번째로 쓰여진 문자가 태그가 되고, 공백 다음에 쓰여진 문자가 태그의 내용이 됨 -- title hahaha --> hahaha 로 변환됨 - 태그의 속성은 괄호를 이용하여 입력 -- a(href="www.target.url") --> 로 변환됨 -- 여러개의 속성은 콤마(,)로 구분하여 입력함 - jade 로 파싱된 결과물은 집핑(ziping)되어 나옴 -- 줄바꿈없이 나오게 됨 -- 전송용량을 줄이기 위함 var jad.. 2016. 3. 10.
[ejs] html 페이지 템플릿을 위한 ejs 모듈 예제 ejs 모듈은 html 템플릿 생성을 위한 모듈이다. jsp 와 비슷한 형태를 하고 있으며, jsp 의 스크립틀릿 형태로 작성하면 자체 렌더러를 이용하여 html 형식으로 변환해 준다. var ejs = require('ejs'); var fs = require('fs'); // file read html_str = fs.readFileSync(__dirname + '/sample.ejs', 'utf-8'); // compile template = ejs.compile(html_str); console.log(template({ 'title' : 'compile' })); // render console.log(ejs.render(html_str, { 'title' : 'render' })); compi.. 2016. 3. 8.
[에러] possible EventEmitter memory leak detected. 에러 처리 nodejs의 이벤트 리스너는 기본적으로 10개 까지 연결이 가능하다. 11개 이상을 등록하면 다음의 에러가 발생한다. (node) warning: possible EventEmitter memory leak detected. 11 exit listeners added. Use emitter.setMaxListeners() to increase limit. 11개 이상을 등록하기 위해서는 다음과 같이 사용한다. // 리스너 제한 수정 process.setMaxListeners(15); 위와 같이 process의 EventEmitter 객체를 이용해도 되고,EventEmitter 객체를 직접 사용해서 수정해도 된다. https://nodejs.org/api/events.html#events_emitter_.. 2016. 2. 18.
node.js와 mysql 연동하기 node.js 에서 mysql과 연동하기 위해서는 우선 npm을 이용하여 mysql 모듈을 설치한다. npm install mysql 설치후 다음과 같이 사용한다. DB 커넥션을 이용한 기본적인 쿼리 실행방법은 다음과 같다. // 모듈을 추출합니다. var mysql = require('mysql'); // 데이터베이스와 연결합니다. var client = mysql.createConnection({ user: 'root', password: 'p@ssw0rd', host: 'localhost', port: 3306 }); // DB와 묵시적으로 연결하여 쿼리를 사용 client.query('use sample;'); client.query('select * from company;'); // 배열을 이.. 2016. 2. 17.
node.js의 LTS 버전과 Stable 버전의 차이 [LTS(Long Term Supported) 버전] - LTS 버전은 서버환경에서 장기적으로 안정적인 지원을 제공하는 버전 - 짝수 버전이 LTS 버전(현재 4.X) - 안정성과 보안성에 초점을 두어 개발 [Stable 버전] - Stable 버전은 잦은 업데이트를 진행 - 홀수 버전(현재 5.X) - 추가기능 개발과 기존 API의 기능 개선에 우선한다. * 서버운영을 위해서는 LTS 버전을 설치하고, 개발및 테스트를 위해서는 Stable 버전을 설치해서 처리하면 될 것 같다. 2016. 1. 27.
node.js 의 장점과 단점 [장점]- 싱글스레드, 비동기 IO 처리에 기반한 빠른 속도- 파일 I/O나 네트워크 처리를 이벤트 드리븐 방식으로 처리하기 때문에 빠른 처리가 가능함- CPU의 대기시간을 최소화 할 수 있음- CPU 부하가 적고, 많은 커넥션을 동시에 처리해야 하는 구조에 적합- 자바스크립트를 이용해서 개발할 수 있기 때문에 프론트엔드 개발자의 진입장벽이 낮음- 기존 Java 서버에 비해 생산성이 높음 [단점]- 싱글스레드 모델이기 때문에 하나의 작업에 시간이 오래걸리면 시스템 전체의 성능이 급격하게 떨어짐- 이벤트 콜백 중심으로 코드가 중첩될 경우 가독성이 떨어짐- 에러가 발생할 경우 프로세스 자체가 죽어버리므로 주의해야 함(watch dog 등으로 처리 가능)- 멀티코어 활용을 위해서 cluster 모듈을 이용해야.. 2016. 1. 22.
[nodejs][cheerio] cheerio 를 이용하여 HTML 파싱하기 - 에어코리아 미세먼지 정보 파싱 node.js 에서 HTML을 파싱하기 위해서 cheerio를 이용한다. Fast, flexible, and lean implementation of core jQuery designed specifically for the server cheerio의 설명은 위와 같이 jQuery를 서버사이드에 맞게 수정한 것이다. 따라서 jQuery와 유사하게 동작하므로 기존에 사용하던 사람은 좀더 편안하게 사용할 수 있다. cheerio - https://github.com/cheeriojs/cheerio 아래의 예제는 에어코리아 사이트의 미세먼지 예보를 파싱한 것이다. http://www.airkorea.or.kr/dustForecast var request = require("request"); var chee.. 2016. 1. 14.
request 모듈을 이용하여 HTML 가져오기 node.js 에서 HTML 데이터를 파싱하기 위해서는 request 모듈을 이용한다. npm의 request 모듈 https://www.npmjs.com/package/request 설치 방법 npm install request html 데이터를 가져오는 방법은 다음과 같다. /* npm - https://www.npmjs.com/package/request */ var request = require('request'); var target_url = 'http://www.naver.com'; // 지정한 url 에 접속 request(target_url, function(error, response, html){ if (error) {throw error}; console.log (html); }).. 2016. 1. 11.
node.js 란? [node.js] - 2009년 라이언 달이 발표한 서버사이드 자바스크립트 프레임워크이다. - 크롬의 V8 엔진을 이용한다. - 일부 CommonJS 명세를 구현하고 있다. - 테스트를 위한 REPL(Read Eval Print Loop)환경을 포함한다. - 싱글 스레드로 이벤트 기반으로 동작하고, non-blocking I/O 방식이다. * 싱글 스레드로 동작하기 때문에 CPU 사용량이 많은 작업은 좋지 않음 [V8] - 구글에서 개발된 오픈 소스 자바스립트 엔진이다. - 크롬 브라우저와 안드로이드 브라우저에 탑재 되어 있다. - C++로 작성되어 실행전 기계어로 컴파일하여 성능을 향상(JIT)하고 인라인 캐싱 같은 최적화 기법을 적용하여 성능을 향상 시킨다. - 서버사이드는 동일한 로직을 반복 수행하.. 2015. 12. 24.
[설정] npm 프록시 설정 우선 npm 에 http 프록시를 설정하는 코드는 다음과 같다. npm config set https-proxy [주소]npm config set proxy [주소] 그런데 이렇게 설정해도 안되더라그래서 여기 저기 뒤져본 끝에 발견한 방법은 다음과 같다. npm --proxy [주소] install formidable 둘중에 가능한 방법으로 처리 해보면 될 것 같다. 2015. 12. 21.
[한글] The Node Beginner Book 과 관련 자료 Node.js 의 기본을 배우기 위해서 자료 - http://www.nodebeginner.org/index-kr.html 유용한 사이트 Node.js QA 게시판http://nodeqa.com/ 강좌http://www.nodebeginner.org/index-kr.html node.js 는 무엇인가? http://blog.outsider.ne.kr/480http://blog.outsider.ne.kr/481 2015. 12. 21.
[AngularJS] AngularJS의 사용자 정의 필터 사용자 정의 필터 AngularJS의 필터를 정의하여 입력값을 필터링 하거나 다른 형태로 변환할 수 있다. 다음의 소스코드를 보고 확인해 보자. 소스코드 Input 필터 리피터 필터(checknumber 적용) {{player}} {{player.name}} {{player.number}} 리피터 필터 종합(checknumber, search 적용) {{player}} {{player.name}} {{player.number}} 리피터 필터 종합(checksearch 적용) {{player}} {{player.name}} {{player.number}} 예제 Input 필터 리피터 필터(checknumber 적용) {{player}} {{player.name}} {{player.number}} 리피터 필.. 2015. 7. 15.
[Angular JS] 한글 입력시 바인딩 오류 수정하기 Angular JS 한글 입력 바인딩 오류 수정 Angular JS를 input에 사용할 때 숫자, 영문은 모델에 바로 값이 바인딩 되는데, 한글은 입력 후 엔터키 or 스페이스키 등을 눌러야 모델에 값이 반영이 된다. 이를 수정하기 위해서 application에 새로운 지시자(directive)를 생성하고 적용해주면 된다. 소스코드 {{input_text}} {{input_text2}} {{input_text}} {{input_text2}} 참조 http://qiita.com/koh110/items/4c5d22339ef2117e226a http://erith.blog.me/220185166416 http://erith.blog.me/220185166416 2015. 7. 13.
ContentNegotiatingViewResolver를 이용한 XML, JSON 뷰 만들기 ContentNegotiatingViewResolver를 이용하면 xml, json 뷰를 편하게 만들 수 있다. 서블릿 컨텍스트에 ContentNegotiatingViewResolver와 json뷰, xml 뷰 설정을 처리하도록 한다. json 뷰는 MappingJacksonJsonView를 이용하고, xml 뷰는 Jaxb2Marshaller를 이용하도록 한다. * 이 두가지 뷰외에도 다양한 뷰가 있다. 다른 뷰를 활용하는 방법도 찾아보면 좋을 것 같다. servlet-context.xml 은 다음과 같이 설정한다. sdk.spring.xml.model.XmlData 그러면 일단 설정은 완료 되었다. * Jaxb2Marshaller는 마샬링을 처리하려고 하는 Java 클래스를 꼭 지정해 주어야 한다. 그.. 2013. 4. 16.
AOP로 로그 남기기 소스코드 GitHub 링크가기 => 고고고 목적은 Aop를 이용하여 메소드 실행시점에 로그를 남기는 것이다. AOP를 이용하는 방법에는 어노테이션을 이용하는 방법과 XML 설정을 이용하는 두가지 방법이 있다. 각각의 방법을 모두 이용해 보도록 하자. 1. 어노테이션 이용하여 설정하기 어노테이션을 이용하기 위한 XML 설정은 위와 같다. 그리고 로거는 다음과 같이 설정 package sdk.spring.aop.logging; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; @Aspect public class LoggingAspect { @.. 2013. 4. 11.