본문 바로가기

[Javascript] 객체(Object) 생성, 프로퍼티(key, value) 접근하는 다양한 방법 먼저, 객체를 생성하는 방법은 아래와 같이 여러가지 방법이 있습니다. 객체 생성하는 다양한 방법 //객체 리터럴을 이용해서 객체 생성과 동시에 프로퍼티 설정 var person = { name : '홍길동', age : 29, print : function(){ console.log('name : ' + name + ', age : ' + age); } } //객체 생성 후 프로퍼티 추가1 var person = {}; //또는 var person = new Object(); person.name = '홍길동'; person.age = 29; //객체 생성 후 프로퍼티 추가2 person["name"] = '홍길동'; person["age"] = 29; //객체의 Key값을 동적으로 생성하는 방법 var..
[Node.js] 이클립스(eclipse)에서 ejs 파일 가독성 높이기 위해 text 모드(포맷) 설정하는 방법 node.js 프로젝트를 이클립스를 이용해서 진행할 때 ejs 라는 Html 템플릿 엔진을 사용하게 됩니다. 2019/04/02 - [Node.js] - [Node.js 6강] html 템플릿 엔진 ejs 연동해서 서버에서 넘어온 데이터 사용하기 그런데 이클립스에서 ejs 파일은 아래처럼 전부 검정색 글씨로 나오기 때문에 코딩할 때 가독성이 떨어지고 자동완성 등이 안되는 불편사항이 있죠. 그래서 ejs 파일을 html 이나 jsp 와 동일한 파일 포맷으로 인식하도록 설정해야 합니다. 1. Window - Preferences 메뉴를 클릭 후 검색창에서 File Association을 입력하면 관련 메뉴(경로 : Generel - Editors - FileAssociation) 가 표시됩니다. 2. Fil..
[JAVA] String 문자열 자르기. 일정 글자수 만큼 잘라서 사용하는 방법 (substring 함수) 어떤 경우에 사용했나? 특정글자에 대한 형태소분석 결과를 뽑아내는 로직을 개발중이었습니다. 형태소분석기 API를 활용하는데 한번에 처리할 수 있는 글자수가 만글자 이내로 정해져있었습니다. StringBuffer에 담은 글자들을 형태소분석기 API에 보내기 전에 만글자가 넘는지 체크를 하고, 만글자가 넘으면 글자수를 나누어서 형태소분석기 API에 보내야 하는 상황이었습니다. 처리결과 //실제 text값은 훨씬 깁니다. String text = "엑소브레인은 내 몸 바깥에 있는 인공 두뇌라는 뜻으로, 세계 최고인공지능 기술 선도라는 비전을 달성하기 위한 과학기술정보통신부 소프트웨어 분야의 국가 혁신기술 개발형 연구개발 과제이다."; List entityList = new ArrayList(); int max..
[JAVA] 스프링(Spring) 에서 자동실행 스케쥴러 설정하기 (Spring Quartz + job scheduler + Cron Expression) 어떤 경우에 사용하나? 주기적으로(ex: 매 1시간 마다) 또는 정해진 시각(ex: 매일 오전 7시) 에 특정 프로세스를 수행하고 싶은 경우에 사용합니다. 저는 매일 오전에 특정 API를 호출해서 데이터를 읽어온 후 형태소분석을 한 후 키워드 노출수를 추출하는 로직에 사용했습니다. pom.xml에 dependency 추가 최신 버전은 MAVEN 홈페이지에 참고하세요. https://mvnrepository.com/artifact/org.quartz-scheduler/quartz org.quartz-scheduler quartz 2.3.0 로직을 처리할 Job 클래스 생성 QuartzJobBean을 extends 하게 되면 executeInternal 메서드를 오버라이드 하게 되어있습니다. 스케쥴러에 의해..
[JAVA] 키워드 중요도에 따른 노출 순위 표시(Map merge + Map 을 List로 변환 + List sort + java8버전 + 람다식 표현) 특정문장을 형태소분석하고, 많이 노출된 키워드 순으로 10개까지만 노출하는 로직에 사용된 자바 주요 기능 정리입니다. (형태소분석 API를 사용하는 부분은 패스) 아래와 같이 문장을 형태소분석한 결과 데이터(Json형태)가 있다고 가정하겠습니다. data=[ {id=4.0, text='청년구직활동지원금', head=7.0, label=NP, mod=[], weight=0.0212487}, {id=5.0, text=3월부터, head=7.0, label=NP_AJT, mod=[], weight=0.138904}, {id=6.0, text=접수, head=7.0, label=NP, mod=[], weight=0.502624} {id=7.0, text='청년구직활동지원금', head=7.0, label=NP,..
[경험담]#태그 단어가 중간에 짤리지 않도록 해주세요. (jQuery width() 활용) 요구사항 고객 요구사항 : 아래 이미지에서 #태그의 글자가 잘리지 않도록 해주세요. (#양극활물질이 '#양극'에서 잘리지 않고 '#양글활물질' 이 붙어서 보이도록 해달라는 의미) 주제와 연관된 #태그들을 DB에서 조회해서 보여주는 로직입니다. 즉, #태그는 보통 4~6개로 가변적입니다. 글자 길이도 당연히 가변적이고요. 고객으로부터 이런 요구사항을 받았을 경우 여러분은 어떻게 하시겠나요? A. 이런 걸 뭐하러 하려고 합니까? 그게 그렇게 중요합니까? B. 이건 글자 길이도 가변적이고, DB에서 조회해서 가져와서 보여주는거라 구현이 안됩니다. C. 가능한지 확인해보고 연락드리겠습니다. (내려가서 구글링 등으로 확인) D. (로직을 머리속으로 빠르게 그려본 후) 대략 0일 정도 걸릴거 같습니다. 확인해보고 ..
https 통신시 SSLHandshakeException 에러가 발생하는 경우 조치 까페24 호스팅을 이용해서 사이트를 운영중이었는데 갑자기 사이트 에러 메일이 계속 날라오기에 급하게 서버 로그를 확인해봤더니 SSLHandshakeException 에러가 발생하고 있었습니다. com.mashape.unirest.http.exceptions.UnirestException: javax.net.ssl.SSLHandshakeException 운영중인 사이트에서 네이버 검색광고 API를 사용하는 부분에서 발생한 에러더군요. 뭐지? 하면서 네이버 검색광고 API 공지사항에 가보니 SSL 인증서를 교체한다는 공지가 떠있더군요. 저는 인증서 교체하더라도 자동으로 새로운 인증서로 교체되는 줄 알았는데 그게 아닌가봐요. 직접 새로운 SSL 인증서를 서버에 import를 해줘야 하더군요. 1. 까페24 호..
[Node.js 11강] 모든(또는 특정)요청에 대한 공통로직을 처리하기 위해express next() 사용하기 이번엔 express의 next()함수를 이용해서 모든 요청 또는 특정URL 요청에 대한 공통로직으 처리하는 방법을 알아보겠습니다. 특히, 최종 호출되는 ejs에서 사용할 수 있도록 값을 세팅해서 다음 미들웨어 함수로 전달하는 방법도 알아보겠습니다. Express 애플리케이션 레벨 미들웨어에서 공통로직 추가 web.js(app.js)에 아래와 같이 추가하면 모든 요청에 대해 공통로직을 추가할 수 있습니다. next()를 호출하면 다음 라우터 레벨 미들웨어 함수를 호출합니다. (요청 URL에 맞는 라우팅을 찾아서 실행) var express = require('express'); var app = express(); app.use(function(req, res, next){ ..공통로직 처리.. next..
[Node.js 7강] 클라이언트-서버간 데이터(파라미터) 전송 방법과 REST방식 URL 설계 이제 Node.js에서 클라이언트에서 데이터를 전송하고 서버에서 데이터를 받아서 사용하는 방법을 알아보겠습니다. java + 스프링 프레임워크로 개발할 땐 편하게 파라미터를 받아서 사용했는데 Node.js에서는 데이터를 전송하는 방법에 따라 서버에서 사용하는 방법이 조금씩 다릅니다. 처음에 이것때문에 서버단에서 데이터가 계속 null로 찍혀서 한참을 고생했습니다. 클라이언트-서버간 데이터(파라미터) 전송 방법 req.query.파라미터명 클라이언트에서 get방식으로 데이터를 넘길 때 서버단에서 받는 형태입니다. //클라이언트 클럽상세 //서버 function(req, res){ var mberCnt = req.query.clubSn; } req.body.파라미터명 html form에서 post 로 전송한..
[Node.js 10강] 암호화된 cookie를 이용한 로그인/로그아웃 처리 이번에는 node.js에서 cookie를 사용하는 방법을 알아보도록 하겠습니다. cookie를 그냥 사용하면 보안에 취약하므로 암호화된 cookie를 사용하는 방법으로 알아보겠습니다. Cookie 사용을 위한 설정 Cookie-parser 모듈 설치 Express 프레임워크은 cookie-parser라는 모듈을 통해 cookie를 사용합니다. npm install cookie-parser --save web.js 설정 express 프레임워크에서 cookie parser를 사용할 수 있도록 web.js에 설정합니다. cookieParser(secret, options) 에서 첫번째 인자인 secret은 쿠키 서명에 사용되는 문자열 또는 배열을 의미(선택사항)하고, 두번째 인자 options는 쿠키에서 사..
[Node.js 9강] 외부서비스 API(네이버밴드) 적용하기 외부서비스API를 node.js에서 활용하는 방법을 알아보겠습니다. 여러 API 중 네이버밴드에서 제공하는 로그인 Open API를 적용하는 방법을 예제로 설명드릴게요 네이버 API 에 비교했을 때 네이버밴드 API 개발자 가이드는 설명이 군더더기 없이 너무 깔끔합니다. 각 개발언어별 샘플 가이드가 없더군요. 네이버밴드 API가 설명된 밴드 개발자 센터 홈페이지 https://developers.band.us/develop/guide/api 밴드 개발자 센터 열린 공간, 함께하는 기술, 경험의 공유. BAND 플랫폼이 애플리케이션 개발에 필요한 다양한 환경을 제공합니다. developers.band.us 밴드 개발자 센터에 가셔서 사용할 API에 대한 정보를 생성 및 확인했다 생각하고 진행하겠습니다. (..
[Node.js 8-2강] 다중쿼리 처리 방법, sql에 파라미터 매핑하는 다양한 방법 SQL에 파라미터 매핑하는 방법 1. 파라미터를 직접 하드코딩(비권장) 직관적이라 설명드릴 건 없네요. 하지만 보안 문제(SQL Injection)로 인해 비 권장합니다. var clubSn = req.params.clubSn; var sql = 'SELECT * FROM CLUB WHERE CLUB_SN = "' + clubSn + '";'; dbconn.query(sql, function(err, results, field){ .... }); 2. 파라미터 1개 자동 매핑 query() 함수의 두번째 인자에 파라미터 변수를 추가해주면 됩니다. 그러면 자동으로 sql의 ' ? ' 에 매핑되어 sql이 실행되는 거죠 var clubSn = req.params.clubSn; var sql = 'SELECT..
[Node.js 8-1강] mysql DB 연결하고 sql 결과 받아서 활용하는 방법 이번엔 node.js에 데이터베이스를 연결해서 활용하는 방법을 알아보도록 하겠습니다. 데이터베이스는 mysql을 사용했습니다. mysql 모듈 설치 명령프롬프트 창에서 mysql 모듈을 설치합니다. npm install mysql --save DB 접속정보 설정 DB 접속정보는 별도의 파일로 작성해서 필요한 js 파일에서 import해서 사용하도록 구성했습니다. db_info.js 로컬 DB와 운영 DB 정보가 다른 경우가 많으므로 별도로 구분해서 명시하고, hostname을 이용해서 각 서버환경에 맞는 접속정보를 리턴하도록 설정합니다. var mysql = require('mysql'); var os = require('os'); //호스트 이름을 가져오기 위한 모듈 var dbconnInfo = { ..
[Node.js 5강] express 서버 설정 및 기본 구조 설계 이번엔 express 설정 및 웹서비스의 기본구조 설계에 대해서 알아보겠습니다. Express 정의 및 주요기능 express 는 node.js를 위한 빠르고 개방적이며 간결한 웹 애플리케이션 프레임워크 입니다. 아래 주요기능을 보면 아시겠지만 웹서비스를 만드는데 필요한 기능을 제공하는 프레임워크로 보시면 되겠습니다. 주요기능 HTTP 통신 요청(Request; GET, POST, DELETE 등)에 대한 핸들러를 만든다. 템플릿에 데이터를 넣어 응답(response)을 만들기 위해 view의 렌더링 엔진과 결합(integrate)한다. 접속을 위한 포트나 응답 렌더링을 위한 템플릿 위치같은 공통 웹 어플리케이션 세팅을 한다. 핸들링 파이프라인(reqest handling pipeline) 중 필요한 곳..
[Node.js 4강] NPM을 이용해서 웹개발을 위해 필요한 모듈 설치 NPM 이란? node.js의 npm에 대한 개념과 npm을 이용해서 웹 개발을 할 때 필요한 모듈을 설치해도 록 하겠습니다. 전 Java를 이용해서 개발을 해왔기 때문에 라이브러리(jar)를 직접 추가하거나 maven을 이용해서 라이브러리를 추가했었는데 이런 방식보다도 훨씬 빠르고 편리하더군요. Node.js 공식 사이트에서는 node.js와 npm을 이렇게 정의하고있습니다. Node.js®는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임입니다. Node.js는 이벤트 기반, Non 블로킹 I/O 모델을 사용해 가볍고 효율적입니다. Node.js의 패키지 생태계인 npm은 세계에서 가장 큰 오픈 소스 라이브러리 생태계이기도 합니다. NPM(Node Package Man..
[Node.js 3강] 이클립스(eclipse)에 node.js(NodeJS) 개발환경 설정 따라하기 오늘은 이클립스에 node.js 개발환경을 설정하는 방법을 알아보겠습니다. 아래 절차대로 따라하시면 node.js 개발할 수 있는 환경세팅은 금방 하실 수 있습니다. Node.js 설치 아래 주소로 이동해서 Node.js를 설치합니다. https://nodejs.org/ko/ Node.js Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. nodejs.org 프로그램 다운로드 후 exe파일을 실행해서 프로그램 설치합니다. 설치는 쉬워요. next 계속 누르다가 마지막에 finish를 누르면 끝입니다. ㅎㅎ 이클립스에 Node.js 플러그인 설치 이클립스를 실행 후 window-Perspective - Open Perspect..
[Node.js 2강] 이클립스(eclipse) + nodejs + github + cafe24호스팅을 이용해서 실제 개발한 웹사이트 소개 node.js에 대한 연재를 하기 전에 node.js를 공부하면서 개발한 사이트를 먼저 소개하고자 합니다. 단순히 공부를 위해 node.js를 로컬PC에서 개발해보는 것과 실제 오픈할 웹서비스를 기획하고 개발하는 것은 천지차이입니다. 몇억 또는 몇십업 이상 규모의 공공기관 프로젝트를 해오다가 이런 조그마한 사이트를 만들려고 했을 땐 금방 만들겠거니 했습니다. 그런데 처음부터 끝까지 혼자서 개발하고 서비스를 오픈하는데 상당히 오랜 기간이 걸렸습니다. 우리가 학교에서 배운 것을 실제 프로젝트에서 써먹기 어려운 것처럼, 단순히 node.js를 책으로만 또는 인터넷 구글링을 통해 단편적으로 문법만 익히는 것보다는 한두페이지짜리 웹서비스라도 기획하고 개발하는게 훨씬 도움이 됩니다. 코드가 상당히 꼼꼼해지고, 시행..
[Node.js 1강]node js 란? 장점, 단점, 어떤 웹서비스에 사용해야할까? Node.js 란? Node.js는 위키백과에 아래와 같이 정의되어 있습니다. Node.js는 확장성 있는 네트워크 애플리케이션(특히 서버 사이드) 개발에 사용되는 소프트웨어 플랫폼이다. 작성 언어로 자바스크립트를 활용하며 Non-blocking I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능을 가지고 있다. 내장 HTTP 서버 라이브러리를 포함하고 있어 웹 서버에서 아파치 등의 별도의 소프트웨어 없이 동작하는 것이 가능하며 이를 통해 웹 서버의 동작에 있어 더 많은 통제를 가능케 한다. Node.js와 관련된 핵심키워드는 아래와 같습니다. 구글 V8 자바스크립트 엔진 고성능 네트워크 서버 단일 쓰레드(Single Thread) 이벤트 루프(Event Loop) 기반 비동기 I/O 처리(Non-..
[Node.js 6강] html 템플릿 엔진 ejs 연동해서 서버에서 넘어온 데이터 사용하기 EJS 란?​ EJS는 Embedded JavaScript templating의 약어로서, 자바스크립트로 HTML 마크업을 생성할 수 있는 간단한 템플릿 언어입니다. (java개발자라면 익숙한 JSP와 동일한 역할을 한다고 보시면 됩니다.) 형태의 태그를 이용해서 HTML 중간중간 필요한 로직 및 데이터를 추가할 수 있으며, 특히, for, if 문을 통해 서버 데이터를 바로 html로 만들 수 있다는 게 가장 좋습니다. EJS를 이용해서 Node.js 서버로부터 가져온 데이터를 html을 생성할 때 바로 사용할 수 있습니다. 필요한 서버 데이터는 ajax 형태로 호출해서 json으로 받은 후에 html 에 추가하는 방법도 있긴 하지만 매번 이런 식으로 데이터를 세팅하는 것은 은근히 귀찮습니다. EJS ..