본문 바로가기

전체 글

High Availability(이중화) 설정 - PaceMaker 개요 고가용성(HA)은 시스템 또는 서비스가 높은 비율의 시간 동안 계속 작동하고 액세스할 수 있는 능력을 의미합니다. 고가용성을 달성하려면 현재 Active상태인 시스템에서 하드웨어 또는 소프트웨어 적인 Fail 발생시 서비스 중단 없이 다른 하나가 원활하게 대신할 수 있어야 합니다. PaceMaker는 CentOS, RedHat계열 리눅스OS 에서는 가용성을 달성할 수 있는 무료 솔루션입니다. 설정방법에 대해 알아보겠습니다. HostName 구성 2대의 머신에 각각 hostname을 설정하고 서로 hostname으로 접근가능해야 합니다. /etc/hosts파일에 hostname을 추가하면 됩니다. ex) 서버 구성 Type HostName IP Address A Server ServerA.locald.. 더보기
Node.js Socket Programming (4) 이번 챕터에서는 Socket.io라이브러리에 대해 소개합니다. Socket.io란? Socket.io는 WebSocket 연결을 통해 클라이언트와 서버 간에 실시간 양방향 통신 채널을 제공하는 라이브러리입니다. 채팅 응용 프로그램, 멀티플레이어 게임 및 공동 편집 도구와 같은 실시간 응용 프로그램을 개발하는 데 아주 유용한데 특히 채팅 서버 구현에 특화된 기능을 제공합니다. Room 기능을 사용하면 1:1, 1:N을 대상으로 하는 메시지전송 기능을 쉽게 구현할 수 있으며 Broad Casting을 기능을 사용하여 메시지를 사용하면 서버가 연결된 모든 클라이언트 또는 특정 클라이언트 그룹에만 메시지를 보낼 수 있습니다. 지원 플랫폼 Socket.io는 데스크톱 및 모바일 브라우저를 포함한 다양한 웹 브라우.. 더보기
Node.js Socket Programming (3) 이번 챕터에서는 Node.js에서 WebSocket서버와 클라이언트 구현 방법에 대해 소개합니다. WebSocket은 TCP 기반의 실시간 통신 프로토콜로 Request and Response모델인 HTTP와 달리 지속적인 연결을 통해 클라이언트와 서버 간의 대화식 통신을 가능하게 합니다. WebSocket이 널리 사용되면서 기존에 웹에서 비효율적인 실시간 통신이 데스크탑 어플리케이션 수준으로 높아지게 되었습니다. WebSocket은 웹 브라우저와 웹 서버에서 구현되도록 설계되었지만 클라이언트와 서버 간의 실시간 통신이 필요한 모든 응용 프로그램 및 모바일 웹과 모바일 어플리케이션에까지 많이 사용하는 추세입니다. 채팅 응용 프로그램, 온라인 게임 및 금융 거래 플랫폼과 같이 실시간 업데이트 또는 실시간 .. 더보기
Node.js Socket Programming (2) 이번 챕터는 레거시 시스템 어플리케이션에서 프로토콜을 정의하는 일반적인 방식에 대해 기술합니다. 지금은 HTTP 기반의 JSON Format처럼 String형태로 데이터를 주고받는게 일반적이지만 과거에는 Network나 System Overhead를 최대한 줄이기 위해 Binary형태로 데이터를 주고 받았습니다. TLV Encoding이 가장 흔하게 사용됩니다. TLV Encoding TLV(Type-Length-Value) 인코딩은 효율적이고 유연한 방식으로 구조화된 데이터를 인코딩하는 데 사용되는 방법입니다. 네트워크를 통해 또는 서로 다른 시스템 간에 데이터를 전송해야 하는 통신 프로토콜에서 일반적으로 사용됩니다. TLV 인코딩을 사용하려면 다음 단계를 따라야 합니다. 데이터 구조 정의: TLV를 .. 더보기
Node.js Socket Programming (1) 이번 시리즈는 Node.js에서 TCP/UDP/Websocket등을 활용한 실시간 통신 구현방안에 대해 소개하고자 합니다. 최근에는 Restful API가 트렌드로 자리잡으면서 주로 HTTP기반으로 통신하며 주고받는 컨텐츠만 고려하도록 (Low Level단에서 벌어지는 일은 신경쓰지 않아도 되는)해주는 좋은 라이브러리들이 많이 있습니다. TCP/IP, UDP를 직접 다루는것은 Low Level 작업으로 인식합니다. 하지만 레거시 시스템에서는 아직도 HTTP가 아닌 TCP/IP나 UDP기반의 Custom프로토콜을 정의하여 구현된 것이 대부분이고 이러한 장비나 시스템과 연동하기 위해서는 여전히 소켓 프로그램에 대한 기본 지식이 있어야 합니다. 기본개념에 대해서는 인터넷상에 좋은 자료들이 많이 있기 떄문에 여.. 더보기
Node.js로 Restful API Server 만들기(5) 지난글에 이어서 Express를 사용시 유용한 MiddleWare들에 대해 소개합니다. Express.static express.static은 Node.js를 간단한 웹서버로써 활용하기 위해 지정된 디렉토리의 HTML, CSS, JavaScript, 이미지 및 기타 자산과 같은 파일을 제공하는 미들웨어 기능입니다. 간단한 웹서버 용도로 사용하기 좋습니다. 만일 대용량 트래픽을 처리하는 웹서비스인 경우 Apache-WebServer 도입을 권고합니다. Apach vs Express.Static(Node.js) Express.static과 Apache 모두 파일컨텐츠를 빠르고 효율적으로 제공할 수 있습니다. 그러나 Apache는 캐싱 및 기타 성능 최적화를 보다 세밀하게 제어할 수 있으므로 트래픽이 매우 많.. 더보기
Node.js로 Restful API Server 만들기(4) 이번글에서는 Express를 사용하면 유용한 MiddleWare들에 대해 소개합니다. MiddleWare는 Node.js Express WebServer에 기능을 추가 하는 모듈입니다. 미들웨어는 HTTP Request와 Reponse주기 사이에서 자동 호출됩니다. Express 미들웨어 기능은 다음과 같은 다양한 용도로 사용할 수 있습니다. 로깅 요청 요청 데이터 파싱(예: JSON 또는 양식 데이터) 사용자 인증 보안 정책 시행(예: CORS) 오류 처리 express.json() express.json()은 Request Body에서 들어오는 JSON 데이터를 구문 분석하고 req.body 개체에서 사용할 수 있도록 g해주는 미들웨어 함수입니다. Express 4.6.10버전부터 내장되어 있어 별다.. 더보기
Node.js로 Restful API Server 만들기(3) 이전글에서 작성했던 test Router에 실제 API 구현시 자주 사용하는 항목들을 추가해 보도록 하겠습니다. 예제 1) 파라메터 검사 var express = require('express'); var router = express.Router(); router.get('/get/username', function(req, res, next) { let username = req.query.username; if (username == null || username.length === 0) { res.send(JSON.stringify({ code : 400, message : "missing parameter" })); return; } res.send(JSON.stringify({ code : 2.. 더보기