프로그래밍 93

[서버] 웹 서비스 단일 로그인 (아이디당 1세션 유지)

대부분의 웹 서비스 프레임워크에서 세션을 관리하는 기능을 제공한다. 이런 세션 기능들은 1번 로그인을 하면, 브라우저내의 어떤 탭에서도 로그인이 유지된다. 하지만 일부 프로젝트는 반드시 1계정 1세션 유지가 정책이 되어야 하는 경우도 있다. [세션의 정의와 세션 관리 기능이 동작하는 방법] 어떤 프레임워크를 사용하든지, 세션은 서버 기준의 1개의 일시적인 연결이다. 즉, 어떤 클라이언트가 접근하였을때 세션 ID를 만들고, 로그인시 클라이언트의 정보를 해당 세션 ID(Key)에 대한 값(Value)로 저장한다. 그리고 마지막으로 클라이언트 브라우저에게 해당 세션 ID(세션 ID, 세션 Key를 혼용하겠음)를 전달해주면서, 해당 세션키를 이후 모든 연결에 전달하라고 요구한다. 이 경우 브라우저는 이 세션키를..

[자바스크립트] Node.js, 자바스크립트 Object(Associative array) 종료 및 콜백

jQuery에서 동일한 DOM의 반복적인 selector를 사용을 방지하기 위해서나, K-V 형식으로 데이터를 저장할때 Object를 많이 사용한다. 이런 Object안에서 전체 Key를 찾아 순회할 때, Object.keys(obj)형식을 많이 사용한다. 특히, Object.keys(obj).forEach(function(k,v){})를 이용하여 Loop 문까지 한번에 처리하는 경우가 많은데, 여기서 Callback을 사용하는 경우 callback 호출후에도 루프가 Break되지 않는 문제가 생긴다. var obj = { 'abc':1 , 'bcd':2'}; function run(obj, callback){ Object.keys(obj).forEach(function(k,v){ if(k == 'abc..

[C/C++] Simple Polygon의 Triangulation – OpenGL

1. Visual Studio 2015와 OpenGL 사용 아래 글 참조 http://fatc.club/2017/03/25/1814 2. 코드 https://github.com/ChangdaeJeong/triangluation-openGL 위의 깃허브 참조 3. 데모 영상 콘솔창 + OpenGL 영상 https://www.youtube.com/watch?v=pxCs9ynF_OA&feature=youtu.be OpenGL 영상 https://www.youtube.com/watch?v=fBwQU2o17aQ 4. 기타 Triangulation 할때, Upper & Lower Chain을 이미 알고 있다는 가정하에, 구현하였음. 초기 시작시 X-coordinate 순으로 점이 추가됨. 그 다음 Upper Cha..

[VB] 윈도우에서 프로그램을 백그라운드로 실행하는 방법

1. 백그라운드 프로세스 백그라운드 프로세스는 화면에 출력되지 않고, 서비스 처럼 동작하는 프로세스로 호출하기 위해서는 아래와 VBS 코드를 작성하면 된다. 2. VBS VBS 코드란 Visual Basic Script로 MS의 Visual Basic 언어로 작성된 스크립트 파일을 말한다. VBS는 Windows 98 이후쭉 내장되어 왔다. 3. 코드 Set WshShell = CreateObject("WScript.Shell") WshShell.Run chr(34) & "절대/상대 주소" & Chr(34), 0 Set WshShell = Nothing 위의 코드를 메모장에 복사하고 저장한다. 그리고 .txt를 .vbs 확장자로 바꾸어 준다. 여기서 절대 주소는 "C:\Users\UserName\Desk..

[VMware] Host와 VM 인스턴스간 파일 공유 - 우분투

웹 서버 개발시, 개인적으로 VM이나 AWS으로 서버를 생성한다. 그래야 나중에 뒷처리도 깔끔하고 향후 웹 서버 세팅시 바닥환경부터 필요한 패키지등등을 알 수 있기 때문이다. 그러나, VM을 설치할 때마다 필요한 파일을 USB나 기타 방법으로 옮길 수는 없다. 그래서 사용한것이 VMware에서 제공하는 파일 공유. (1) 현재 작업중인 인스턴스의 Settings->Options ->Shared Folders 에서, Add를 눌러 추가할 수 있다. (2) VM 웨어 세팅 VM웨어에서 바로 세팅된다면, 그대로 사용해도 무방하다. 만약 에러가 발생하여, 리눅스상에서 폴더가 설정되지 않는다면 VM 툴을 재설치 해야한다. 현재 사용중인 인스턴스탭을 우클릭하여, Reinstall VM tools를 선택하자.그러면 ..

[C, C++] 1~N 연속된 수로 이루어진 랜덤 배열

1~N, N~M으로 이루어진 배열 또는 이미 지정된 값들로 구성된 배열을 랜덤하게 생성하는 방법에 대해 누군가 질문한 적이 있다. 만일 테스트 용도로 그 값들을 랜덤하게 생성해야 한다면, 시간에 따른 RAND함수로 도출하는 것은 절대적으로 리소스 낭비가 크다. 예를 들어, 1~10까지의 수로 이루어진 배열 [1,2,3,4,5,6,7,8,9,10]을 랜덤하게 뽑으려면 확률상 몇번의 RAND()를 불러야 할까? 따라서 랜덤으로 배열을 만드는 것 보다. 이미 만들어진 배열을 랜덤으로 섞는 것이 더 유리하다. C++이나 Java와 같은 언어에서는 이미 이런 기능을 함수로 만들어 제공한다. 함수의 이름은 Shuffle이다. 만약 셔플 함수를 제공하지 않는 다면 아래와 같이섞을 수 있다. void shuffle(i..

[Node.js / Javascript] 초당 처리 횟수 제한을 위한 윈도우 함수

API 크롤링이나, 기타 데이터 수집을 위해서 함수 또는 특정 프로시저를 실행할 때 횟수제한에 걸리지 않도록 윈도우를 잡아서 처리하는 코드 다만, 이 코드는 setInterval을 사용하므로 CPU 소모량이 클 수 있다. 소스코드 function AWS(limit, secs){ this.list = []; this.limit = limit; this.window = secs*1000; this.push = function(a, b){ this.list.push([-1, a, b]); } this.pop = function(){ if(this.list.length==0) return "EMPTY"; var now = new Date().getTime(); var st = -1; for(var i = 0 ;..

[Node.js] Express-session 기반 로그인 세션 관리시, 로그인 리다이렉트 Ajax 처리

Node.js 상에서 로그인 세션을 관리하는 패키지인 Express-session을 사용하게 되면, 별도의 관리 로직을 구성하지 않아도 알아서 Request와 Response에 로그인 정보를 담아준다. 하지만 로그인에 따라 각 다른 페이지를 구성하거나, 노출 여부를 결정하는 경우라면 각 라우터의 URL 매칭마다 이를 확인해주어야 한다. 매번 똑같은 함수를 계속해서 호출하거나, 복붙 할 수 없으므로 Middleware 형태의 인증 확인 절차를 거친다. 아래와 같은 코드를 많이 보았을 텐데, 실제 이와 같이 처리하게 되면 해당 라우터를 거치는 모든 요청들이 ensureLoggedIn 함수를 거쳐 로그인 여부가 판단되고, 로그인 페이지로 리다이렉트하거나 라우터로 가던길 계속 간다. router.get('/',..

[Node.js] Node.js와 외부 프로그램(Java, C, C++) 연결 (bridge)

서버를 만들다 보면 NPM 패키지에 포함되지 않은 기능이 필요한 경우가 생긴다. 이런 경우, 어쩔수 없이 다른 프로그래밍 언어를 사용해야하는 경우가 발생한다. 또한 성능 문제로 반드시 C,C++를 써야하는 경우가 생기기도 한다. Node.js에서 타 언어 프로그램을 호출하는 경우 여러가지 방법이 있지만, 나의 경우에는 한가지 프로그램만 실행하면 되었기 때문에 child_process 패키지의 exec를 사용했다. (터미널 터맨드와 동일) (1) STDOUT을 이용한 처리 방법 물론 이 방법은 터미널 명령이기 때문에 위험하다. (하지만.. 뭐 소스가 변조되지 않는 이상은 문제가 없을 것이고, 이미 변조 단계에 들어섰다면 서버 소스와 DBMS 정보를 다 털린것과 다름없기 때문에..) var exec = re..

[Node.js] Jade(pug) 템플릿 엔진 속도 문제

요약 : 1. Node.js에서 사용하는 Pug 템플릿 엔진 (Jade)를 이용하면 간단한 페이지도 로드되는데 굉장히 오래 걸린다. 2. 코드를 구성하기 나름이지만, 쿼리 + Pug 컴파일 + 변수 대입 + 요청 응답의 4단계에서 컴파일 타임이 약 8할이상 시간이 걸린다. (응답시간 1초의 경우 약 800ms이상 소요) 3. Pug 엔진에서 캐시가 가능하다. 결과 : 컴파일 시간이 0ms으로, 응답시간이 5배 이상 빨라진다. var fn = pug.compileFile('파일.pug',{ basedir:__dirname, cache:true }); res.writeHead(200, {'Content-Type' : 'text/html'}); res.end(fn(varlist)); 캐시이므로, 서버 켜질때 ..

페이스북으로 공유카카오톡으로 공유카카오스토리로 공유트위터로 공유URL 복사