프로그래밍/서버, DBMS 26

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

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

[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)); 캐시이므로, 서버 켜질때 ..

[웹 서버] Proxy 서버와 Forward, Reverse 프록시

1. 프록시 서버란 무엇인가? Proxy는 대리, 대리인 의미를 가진 단어이다. 이 처럼 단어 의미에서 짐작해볼 수 있듯, 서비스를 제공하는 서버 대신 무언가를 수행하는 서버이다. 프록시 서버의 주된 역할은, 웹 서비스 프로그램(이하 웹 서버)의 로드 감소이다. 좀 더 쉽게 이해하기 위해서 웹 서비스의 전체적인 과정을 아래의 그림을 보고 이야기 하자. 일반적으로 웹 서비스는 크게 (1) 클라이언트 - (2) 웹 - (3) 웹 서버의 3개의 영역을 관통하면서 제공된다. (1) 클라이언트는 서비스를 이용하는 사용자이며, 자신이 원하는 페이지, 파일을 (2) 웹을 통해 (3) 웹 서버에 요청하게 되며, (3) 웹 서버는 (1) 클라이언트의 요청에 맞는 데이터를 준비해서 응답한다. 위와 같이 연속된 웹 서비스 ..

LGU+ 인터넷 전화 고급형 센트릭스 - API 기반의 수신 전화 CID

본 내용은 단순 필기용으로 작성됨. LGU+ 인터넷 전화중 고급형 센트릭스 모델은 OPEN API를 가입하지 않아도, API 사용이 가능함. 초기 고급형 센트릭스 모델의 ID는 전화번호이며, 비밀번호는 초기화하여 사용해야함. ( 해당 전화번호로 인증번호 발송되는 형식 ) 웹 페이지는 https://centrex.uplus.co.kr/premium/index.html 아이디와 비밀번호를 찾는 용도로만 사용됨 API 메뉴얼은 http://openapi.uplus.co.kr이며, 상단 플래시를 켜야 다운로드 탭이 보임. 다운로드 탭에서 기기별 (IMS Centrex, Centrex, DCS) 메뉴얼과 샘플 프로그램이 있음 고급형 센트릭스는 Centrex를 참고하면 됨. REST API는 ID(전화번호)와 PA..

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