목차

반응형

서버 데이터 백업한답시고 공공기관에서 과제를 내줬다.

리눅스 서버와 윈도우 서버에서 특정 경로의 파일 개수와 용량을 확인하란다.


디렉토리 용량 du -sh 경로

디렉토리의 파일 개수(recursively) find 경로 -type f | wc -l


윈도우에서는 보통 폴더의 속성을 눌러보면 파일 개수와 용량이 나오지만 드라이브에서 파일의 총 개수를 확인하는 곳은 못 찾았다.

dir /a-d /s /b folder_name | find /c ":"
명령어를 이용하면 된다.


반응형
반응형

vue를 사용하고자 이것저것 찾아보았다.


인터넷에서 흔히들 올린 vue 사용방법은 아래 사진처럼 node 서버를 사용하는데 서버의 API를 독자적으로 호출해서 데이터를 받아와야한다.


http://vuejs.kr/2017/02/05/express-with-vue/

잘못됐다는게 아니라 아니라 걍 내가 불편하다는거임 ;;



하지만 ejs 형식을 자주 쓰던 나는 이 방식이 정말 맘에 안들었다.

아니 서버 요청을 하는데 페이지에다가 데이터를 한번에 넣어주면 안되나?


그래서 인터넷에서 찾아보니 express-vue 라는 npm은 내가 원하는 방식으로 vue 페이지에 데이터를 넣어주는 방식이어서 사용하기로 마음먹었다. - 사용하려는 과정에서 삽질을 많이 하였다.

express-vue

express-vue 샘플앱


얼마나 간편한가 ejs와 비슷하다.


express-vue를 사용하기 위한 소스를 첨부하겠다.

먼저 npm을 설치한다

$ npm install --save express-vue


var express = require("express");
var app = express();
var expressVue = require("express-vue");
const vueOptions = {
VUE_DEV: true,
rootPath: path.join(__dirname, '/views')
};
const expressVueMiddleware = expressVue.init(vueOptions);
app.use(expressVueMiddleware);

express-vue를 세팅한다.


vue파일을 위치시켜야한다.

본인같은 경우는 root폴더 아래에 views라는 폴더를 만들어서 vue파일을 넣었다.


router.get('/user_list', function (req, res) {
util.basicLog(logger, req);
user.user_list2().then(function (result) {
if (!util.checkNull(result)) {
const data = {resultList: result, length: result.length, title: "제목"};
res.renderVue("admin/user_list.vue", data);
}
else util.return(res, "F", "일치하는 데이터가 없습니다.");
})
});

renderVue를 사용하여 return하고자 하는 vue 페이지와 데이터를 넣어준다.


node서버에 vue 파일이 존재하면 서버를 시작할때마다 vue파일을 미리 읽어오는 작업을 한다.

Preached -> vue 파일이름

이 메시지를 통해서 본인의 vue파일이 올라갔는지 확인 할 수 있다.


express-vue를 사용하면서

여기서 두 가지 에러가 났었다.

1. vue 파일 컴파일?오류

Error: render function or template not defined in component: anonymous

원래 vue를 사용하려면 Vue 객체를 생성한 뒤 사용해야 하지만

이 express-vue는 anonymous 컴포넌트를 사용하여 vue를 사용하는 것 같다.

(나도 anonymous 컴포넌트가 뭔지 잘 모른다.)

어떻게 고칠지 찾아보다가 express-vue에서 제공하는 starter 샘플을 봐서 고쳤다.

vue 소스에서 반드시 선언해야하는 부분이 선언되지 않아서 그런것같다.

template과 module.exports 부분이 없어서 그렇다.

정상적으로 작동하는 vue 소스를 올리도록 하겠다.

<template>
<div>
<h1>{{title}}</h1>
<p><a href="/post">Click here for an example of a Post</a></p>
<p><a href="/todo">TodoMVC</a></p>
<button v-on:click="test">버튼</button>
<table class="table">
<thead class="thead-dark">
<tr>
<th scope="col">Index</th>
<th scope="col">이름</th>
<th scope="col">이메일</th>
<th scope="col">가입여부</th>
</tr>
</thead>
<tbody>
<tr v-for="result in resultList ">
<th scope="row">{{result.id}}</th>
<td>{{result.name}}</td>
<td>{{result.email}}</td>
<td>{{result.use_at}}</td>
</tr>
</tbody>
</table>
</div>
</template>

<script>
module.exports = {
data: function () {
return {
title: ''
}
},
methods: {
test: function () {
console.log('hi');
}
}
}
</script>

data부분은 넣어주는 값이 없지만 단순히 data부분을 선언해주는 것 만으로도 express에서 넣어주었던 데이터를 받아오는 효과가 있는듯하다.

또한 methods는 여러분들이 생각하는 vue의 methods가 맞다 위의 버튼을 누르면 콘솔에 hi가 찍힌다.


2. vue 파일 경로 불일치

{"errno":-4058,"code":"ENOENT","syscall":"stat","path":"C:\\Users\\안지환\\Desktop\\WebstormProjects\\server_renewal\\views\\user_list.vue"}

위의 메시지는 renderVue를 하였으나 vue 파일을 찾지 못해서 발생하는 문제다.

상대경로를 적당히 조절해서 경로를 맞춰주도록 하자.


그밖에도 에러가 난다면 express-vue 샘플앱을 참고하면 좋을 것 같다.

반응형
반응형

링크 주소에서 tabNo라는 parameter의 값을 받아온다. (parameter가 1개뿐이어야함)

예시) http://ajh322.tistory.com?tabNo=5

  var tabNo = location.search.split('tabNo=')[1];


.float_wrap.tab_auto li에 selected 클래스를 줄 것인데, 이미 selected가 먹혀있을수도 있으니 일단 selected를 다 지워준다.

jQuery('.float_wrap.tab_auto li').each(function(child){

$(this).removeClass('selected');

})


li에 selected를 준다.

jQuery('.float_wrap.tab_auto li').eq(tabNo).addClass('selected');

반응형
반응형

CK에디터에서 XSS취약점을 이용하여 본문에 위와 같은 태그값을 전송하면


스크립트가 작동한다.


웹 브라우저 콘솔에서 CK에디터의 설정값을 봐보면 removeFormatTags라고 특정 태그의 값은 삭제해주는 기능이 있다.

저기다가 svg를 추가해주면 svg로 시작하는 구문은 작동안한다.


ckeditor.js파일에 가보면 removeFormatTags라는 부분이 있다.

이곳에 svg를 추가해주면 된다.

반응형
반응형

공공기관 사이트에서 CK에디터의 버전정보가 보이지 않도록 버전확인 기능을 삭제해달라고 요청이 왔다.


글을쓰는 지금 생각해보면 CK에디터로 해킹을 할정도의 생각이 있는 사람이면 어차피 자바스크립트단에서 CK에디터 객체에서 버전정보를 찾을 수 있을텐데 이게 뭔소용일까


여튼 저 ?버튼을 누르면


CK에디터의 버전정보를 확인 할 수 있다.


CK에디터를 불러오고나서 F12를 누르고 개발자도구 콘솔에 CKEDITOR.config.pluigins를 입력하면 ck에디터에서 활성화 되어있는 플러그인들이 나온다.

버전정보를 확인하는 기능도 about이라는 이름의 플러그인이다.


CK에디터 config에서 {name:'about'}이 부분을 지워준다.


그러면 버전정보 확인하는 부분이 없어졌다.


반응형
반응형

nodejs에서 vue를 사용할때 대부분의 예시나 튜토리얼은 꽤나 복잡하게 다뤘다.

특히 데이터를 넘길때 기존 express에서 render를 사용하여 데이터를 넘기는 것처럼 넘기지 않고 무조건 ajax와 비슷한 axios를 사용하여 데이터를 주고 받는 것을 보면서 불편함을 느꼈다.

않이;; 나는 그냥 데이터 최초로 넘겨주기만 할껀데 굳이 내가 axios를 써야하나?

render처럼 데이터를 초기에 넘겨주는 방식은 없나?



찾아보니 express-vue라는 npm이 있었다.



방식은 ejs에서 render를 통하여 데이터를 넘겨주는 방식과 비슷하다.


(ejs 렌더링 코드)




그냥 설명서에 나와있는대로 코드를 썼더니 

"Error: render function or template not defined in component: anonymous". 오류가 나면서 안된다.

해결방법을 찾으려고 했는데 정확한 원인도 모르고 해결방법도 별로 안나와있었다.

느낌상 템플릿쪽에서 나는 문제고 템플릿이 선언이 안되어 있어서 그런 것 같았다.


포기하려다가 express-vue 프로젝트의 example / starter라는 항목을 발견했다.(진작 발견했으면 편했을텐데...)



https://github.com/express-vue/express-vue-mvc-starter

express-vue의 프로젝트를 사용하는 방법에 대해서 알 수 있는 샘플 프로젝트이다.



프로젝트에서 app폴더 내에 main.vue를 까보면 아래와 같다.



나도 저렇게하면 되겠지? 하고 가져다가 썼다.



일단 페이지는 저런식으로 나와버리고 콘솔에서도 "Unexpected token export"라는 오류가 발생했다.

먼가 느낌상 코드상의 문제는 아니라고 생각이 들었다.

main.vue쪽에서 export부분이 es6용 코드를 es5에서 가져다가 써서 생긴 문제라고 생각이 들었다.




그래서 아래의 export 부분을 es5코드로 바꾸었다.


이후 잘 된다.

아무래도 불편하기도 하고 es6로 빨리 업그레이드를 해야할 것 같다.

반응형
반응형

톰캣을 돌리다 보면 java.lang.OutOfMemoryError: PermGen space 오류를 만날때가 있다.

로컬에서는 손쉽게 해결이 가능하지만 아무래도 cui 환경에서는 당황하기 쉽다.


회사의 동료가 갑자기 메모리 오류가 나서 지원을 하게 되었다.

일단 tomcat을 구동할때 불러오는 스크립트를 찾아야한다.

catalina.sh라고 알려져있는데 작업하던 서버에는 없었다.



vi /etc/rc.d/init.d/tomcat -> 톰캣버전에따라 다르다 나같은경우는 tomcat6

vi로 까보면 각종 설정이 있다. 근데 tomcat 환경설정을 하는 스크립트는 없다.

이곳에서 또 tomcat 환경설정을 해주는 스크립트를 불러온다.

/를 누르고 검색모드에서 TOMCAT_SCRIPT를 찾는다.


vi로 까본다.


그러면 그곳에 또 톰캣 conf파일이 있다.

얘를 까본다.



그러면 이제 좀 뭔가 톰캣설정하는 구문들이 보이는데(JAVA_OPTS 이런거)

여기다가 적당히 메모리를 증진시켜주는 명령어를 넣어준다.

JAVA_OPTS=" -Xms512m -Xmx1024m -XX:MaxPermSize=256m"



그러면 이제 톰캣 재시작하고 제대로 반영이 제대로 되었는지 확인해본다.



ps -ef |grep tomcat6 -> (톰캣버전은 알아서 맞춰서 적어야함)

확인해보면 적었던 명령어로 제대로 돌아가고 있는 것이 확인이 된다.


이후 오류메시지가 안떴음.





반응형
반응형

웹사이트(jsp)에 휴대폰 인증을 붙였는데 인증하고나서 아래 오류가 뜨면서 다음 페이지로 안넘어 갈 때가 있다.


blocked a frame with origin null from accessing a cross-origin frame


대강 이 오류는 근원이 다른 홈페이지(내 홈페이지, 인증 모듈 홈페이지)javascript를 통하여 근원이 다른곳에서 window를 조작하려고 할 때 발생하는 오류다.


보통 휴대폰 인증 모듈의 샘플에는 부모 윈도우를 조작하기 위해 opener.window.name 이런식으로 조작하는데

윈도우의 이름을 지정해줘서 그 값으로 조작해주면 잘 된다.



본인인증을 호출하는 홈페이지에서 호출하기전에 window.name을 통하여 윈도우 이름을 바꿔준다.


이후 타겟을 opner.window.name에서 "window"로 바꿔준다.

반응형
반응형

참고로 사용하는 view는 ejs 방식입니다.


우리가 원하는 최종 결과무울~



스마트 에디터는 html과 php에 적합한 에디터인것같군요 어쩌면 node js를 위한 에디터가 따로 있을거라는 생각도 갑자기 듭니다만 일단 한번 해보겠습니다.


https://github.com/naver/smarteditor2

에서 네이버 스마트 에디터를 다운로드합니다.



스마트 에디터 프로젝트를 까보면 위와 같습니다.

workspace는 뭔지 모르겠군요 저는 빨리하고 잘꺼니까 그냥 용량이 큰 dist로 합니다.

dist는 제느낌상 distibution인것같군요.


그러면 설명서에 저 파일에 모든것이 담겨있다고 나와있는데 저 파일을 한번 크롬에다가 드래그해서 열어봅니다.


당연히 한번에 안되죠 쉬운게 세상에 어딨습니까


크롬 개발자도구에서 콘솔을 열어보니 저도모르겠습니다 알고싶지도않고

accessing a cross-origin frame. 문제인데 이건 크롬에서 보안상의 문제로 자주 겪어보았습니다.

IE에다가 드래그해서 html파일 열어보니 에디터가 잘만 생성되는군요.

저거는 서버에다가 적용시켜주면 없어지는 오류니까 쌩까고 지나가도록 하겠습니다.


아까 그 대빵 html파일을 까서 소스를 복사합니다.


node서버에 새로운 라우터를 팝니다.

그리고 ejs파일도 새로 만들어줘서 그곳에 html소스를 넣습니다.


그 모습은 다음과 같죠.

그리고 아까 만든 라우터로 이동하면~


당연히 안됩니다.

왜냐면 js파일과 각종 css파일들도 같이 불러와야하기 때문이죠.

콘솔을 한번 까봅니다.


어휴 점점 글쓰기가 싫어집니다.

저기서 가장 큰 문제는 js 파일들을 불러와야하는 것 이겠죠?



콘솔의 가장 위에서도 보면 huskyEZ크레이터 뭐시기 js파일이 없다는 문제가 뿜 뜨는군요.

일단 js파일들을 연결시켜줘봅시다.


dist폴더를 editor라는 폴더로 이름을 바꾸고 복사해서  node프로젝트의 public 폴더에 넣도록하겠습니다.


public 폴더에다가 넣어야지 마음껏 접근이 가능하니까요.

그리고 가장먼저 HuskyEZCreator.js 파일을 ejs내에서 public과 연결해줍니다. 

제 경로는 다음과 같았습니다. ../js/service/HuskyEZCreator.js


그러면 새로운 에러가 발생합니다.

SmartEditor2Skin.html을 불러올 수 없다는 것인데...


SmartEditor2Skin는 기본 경로가 위와 같은데 에러메시지 잘 참고해서 맞춰주도록 합시다.


저는 위처럼 했습니다.


고럼 에디터가 뿅 나타나는군요.


문제는 저 에디터에는 이미지를 업로드하는 기능이 없다.

흠... 이미지가 있는 에디터를 다시 찾아서 돌아오도록 하겠다.

반응형
반응형


서버단에서 이런 데이터들이 모여져있는곳에서 데이터를 정렬한다던가 데이터를 수정할때 미쳤다고 JQuery나 자바스크립트를 사용할 수 없다고 생각이 들었다.

언젠가는 Vue, React, Angular(얘는 좀 오바)를 사용해서 관리자 페이지를 구성해야겠다고 생각하고 있었다.

C#도 공부해야하는데 흠...

이러다가 정말 잡부가 되는건 아닌지... 걱정은 들지만 저기서 사용하려는 Vue는 익혀두면 정말 도움이 많이 될 것같다.

반응형