증권웹(조회 & 실시간) 서버 + 클라이언트
- 마스터
- 호가
- 체결등


>Simple Architecture

>삼성전자/KR7005930003/005930/ 모두 검색키로 사용가능

app.js
0.01MB
index.html
0.04MB

Windows에서 Redis 서버를 여러 개 설치하여 각기 다른 포트를 사용하는 방법은 다음과 같습니다.

  1. Redis 설치 파일 복사:
    • Redis 설치 디렉토리(예: C:\Redis)를 여러 개 복사합니다.
    • 각 복사본은 다른 인스턴스를 위해 사용됩니다. 예를 들어 C:\Redis\Redis1, C:\Redis\Redis2와 같은 식으로 만듭니다.
  2. Redis 설정 파일 수정:
    • 각 디렉토리에 있는 redis.windows.conf 파일을 엽니다.
    • port 설정을 변경하여 각 인스턴스가 다른 포트를 사용하도록 설정합니다. 예를 들어, Redis1 인스턴스의 redis.windows.conf 파일에서 port 6379를 port 6380으로 변경합니다.
  3. 서버 실행:
    • 각 디렉토리에서 Redis 서버를 실행합니다. 예를 들어, 명령 프롬프트를 열고 다음 명령을 실행합니다. 
    • bash
      코드 복사
      cd C:\Redis\Redis1 redis-server.exe redis.windows.conf
    • 각 인스턴스에서 다른 포트 번호로 실행이 되며, 다른 인스턴스(Redis2 등)도 동일한 방법으로 다른 포트에서 실행하면 됩니다.
  4. 서비스로 등록(선택 사항):
    • 각 Redis 인스턴스를 Windows 서비스로 등록하고 싶다면 redis-server.exe에 --service-install 옵션을 사용해 서비스로 등록할 수 있습니다.
    • 각 서비스에는 고유한 이름을 지정하고 각 설정 파일을 참조하도록 설정해야 합니다.
      bash
      코드 복사
      redis-server --service-install redis.windows.conf --service-name Redis6380
  5. 클라이언트 연결:
    • 이제 Redis 클라이언트를 통해 각기 다른 포트(예: 6379, 6380, 6381 등)로 접속하여 원하는 인스턴스를 사용할 수 있습니다.

이 과정을 통해 Redis 서버를 Windows 환경에서 여러 개의 포트로 실행할 수 있습니다.

 

Node.Server Port 변경 Redis Connect

// 포트와 호스트를 지정하여 Redis 클라이언트 생성
        redisClient = createClient({
            url: 'redis://127.0.0.1:6380' // 새로운 포트 6380으로 연결
        });

besideredisClient = createClient({
            socket: {
                host: '127.0.0.1', // Redis 서버 호스트
                port: 6380 // 변경된 포트 번호
            }
        });

Agent 데이타 수집을 통한
Application Monitoring Service 개요)

1. Agent 데이타 수집

1.1.CPU(Central Processing Unit)
    % Processor Time: CPU 사용률의 총합을 나타내며, 특정 프로세서의 사용률을 모니터링하는 데 유용합니다.
    Processor Queue Length: 실행 대기 중인 프로세스 또는 스레드 수를 나타냅니다. 이 값이 지속적으로 높으면 CPU 병목 가능성이 있습니다.
1.2. 메모리 (Memory)
    Available MBytes: 사용 가능한 메모리 용량으로, 메모리 부족 상태를 파악하는 데 중요합니다.
    Pages/sec: 메모리 페이지가 디스크에 읽기/쓰기된 횟수입니다. 이 값이 높다면 메모리 부족을 나타낼 수 있습니다.
    Cache Bytes: 시스템의 캐시 메모리 크기를 나타냅니다. 일반적으로 캐시 메모리가 많을수록 시스템 성능이 향상됩니다.
1.3. 디스크 (Disk)
    % Disk Time: 디스크가 사용 중인 비율을 보여줍니다. 디스크가 과도하게 사용 중일 경우 I/O 병목 현상이 발생할 수 있습니다.
    Disk Bytes/sec: 초당 디스크에서 읽기 및 쓰기된 바이트 수를 측정합니다. 디스크 성능과 처리량을 파악하는 데 유용합니다.
    Avg. Disk Queue Length: 디스크 요청 큐의 평균 길이입니다. 이 값이 높으면 디스크가 과도하게 사용 중일 가능성이 있습니다.
1.4. 네트워크 (Network)
    Bytes Total/sec: 네트워크 인터페이스를 통해 초당 전송된 총 바이트 수입니다. 네트워크 사용률을 파악하는 데 유용합니다.
    Packets/sec: 초당 전송된 패킷 수로, 네트워크 연결 상태를 확인하는 데 유용합니다.
    Output Queue Length: 네트워크 인터페이스 대기열의 길이로, 이 값이 높으면 네트워크 병목이 발생할 가능성이 있습니다.
1.5. 시스템 (System)
    System Up Time: 시스템이 부팅된 후 경과한 시간입니다.
    Context Switches/sec: 초당 발생하는 문맥 교환 수로, 많은 문맥 교환은 시스템 부하가 크다는 신호일 수 있습니다.
    Processes: 현재 실행 중인 프로세스 수로, 과도한 프로세스 실행이 성능 저하를 유발할 수 있습니다.
1.6. 특정 프로세스 (Process-Specific)
    특정 애플리케이션의 성능을 모니터링할 때 유용합니다.
    % Processor Time (for a specific process): 특정 프로세스의 CPU 사용률을 나타냅니다.
    Private Bytes: 특정 프로세스가 사용하는 비공유 메모리 크기입니다.
    Handle Count: 특정 프로세스가 사용하는 핸들 수를 나타내며, 핸들 누수 여부를 확인할 수 있습니다.
1.7. GPU (Graphics Processing Unit) -(Windows 10 이상)
    GPU 사용량은 그래픽이 많이 사용되는 애플리케이션이나 게임의 성능을 모니터링할 때 유용합니다.
    GPU Engine Usage: 각 GPU 엔진의 사용량을 보여줍니다.
    Dedicated/Shared GPU Memory Usage: GPU에서 사용하는 전용 및 공유 메모리 양입니다.

2. Redis를 통한 Application.Monitoring.Service.DB에 저장

3. Node.js를 통한 WebBrowser와 데이타 송수신을 통한 표시

 

1) 기초자산 Kospi200기준 선물,옵션추가

app.js
0.01MB
index.html
0.12MB

Node.js를 통한 Redis 실시간 데이타+조회(+로그인)
- Redis Search & RealTime Push(Exture3.0 Stock)
- Kse 추가
- Kosdaq 추가
- Elw,Etn,Etf 추가

1. 첫화면에서 로그인한다.
2. 로그인정보는 현재 클라이언트의 정보를 서버에 보낸다.
3. 서버에 정보를 보내면서, 동시에 Redis에 접속해서, 실시간데이타를 받아로도록 한다.
// Function to fetch data from Redis list using BLPOP (blocking pop)
async function fetchDataFromRedis() {
console.error('fetchDataFromRedis entered:[' + redisPublicKey + ']');

    try {
        const result = await redisClient.blPop(`QCS:${redisPublicKey}`, 0); // redisPublicKey 사용
        if (result) {
            const data = JSON.parse(result.element);
            return Array.isArray(data) ? data : [data]; // Ensure data is an array
        }
    } catch (err) {
        console.error('Error fetching data from Redis:', err);
    }
    return [];
}

// Polling Redis every second and sending data to WebSocket clients
setInterval(async () => {
    if (redisClient && redisPublicKey && redisPublicKey.length >= 4) { // Redis 클라이언트 연결 여부 체크
        const processedData = await fetchDataFromRedis();
        console.log('Sending data:', processedData); // Log the data being sent
        connectedClients.forEach((client) => {
            if (client.readyState === client.OPEN) {
                client.send(JSON.stringify(processedData));
            }
        });
    }
}, 1000); // 1 second interval
// Redis Public Key 설정 엔드포인트
app.post('/set-public-key', async (req, res) => {
    const { publicKey } = req.body;

    if (publicKey) {
        redisPublicKey = publicKey; // publicKey 업데이트
        console.log('Redis Public Key updated to:', redisPublicKey);
        await connectToRedis(); // Redis에 연결 시도(로그인시에)
        res.json({ message: 'Public Key updated successfully.' });
    } else {
        res.status(400).json({ error: 'Public Key is required.' });
    }
});


로그인후에 Node.js에서 Redis에 접속을 시도한다.)

- NODE.SERVER
- REDIS.TICKER.SERVER
- 실시간 PUSH & 조회

app.js
0.01MB
index.html
0.10MB

외부VPN을 통한 NODE.SERVER 조회

1) HOME.VPN.라우팅.설정(SK BROADBAND)

2) HOME.UBUNTU(LINUX) DESKTOP.CONTROL
2.1) REDIS.TICK.SERVER - SQLite조회해서, REDIS에 전송
2.2) REDIS에서 데이타 POP후에, WEB.BROWSER에 WEB.SOCKET으로 전송(REAL.TIME 데이타등)


3) 외부에서.VPN접속.설정후에.브라우져를 통한.조회

비고) WiseGuard VPN에 대해서


WireGuard VPN에서 PrivateKey와 PublicKey는 VPN 연결을 보안하고 암호화하는 데 중요한 역할을 합니다. 
이 두 키는 비대칭 암호화 방식을 따르며, 각 역할은 다음과 같습니다.

1. PrivateKey (개인 키)
PrivateKey는 각 클라이언트 또는 서버가 비밀로 유지해야 하는 개인 키입니다. 
이 키는 외부에 노출되지 않아야 하며, 오직 해당 장치에서만 사용됩니다.
암호화와 서명: 이 키를 사용하여 데이터를 암호화하거나 서명할 수 있습니다. 
PrivateKey로 암호화된 데이터는 해당 PrivateKey와 짝을 이루는 **PublicKey(공개 키)**로만 복호화할 수 있습니다.
WireGuard 설정: WireGuard 설정 파일에서 PrivateKey 항목에 개인 키가 포함됩니다. 이 키는 VPN 터널을 설정하는 데 사용됩니다.

2. PublicKey (공개 키)
PublicKey는 각 장치의 공개된 키로, 다른 장치들이 이 키를 사용해 해당 장치로 안전하게 통신할 수 있도록 합니다.
공유: PublicKey는 클라이언트와 서버 간에 공유됩니다. 
즉, 연결하려는 다른 장치에 이 공개 키를 제공하여 암호화된 데이터를 주고받을 수 있습니다.

WireGuard 설정: WireGuard 설정 파일에서 PublicKey는 각 피어(peer, 즉 통신 상대)의 공개 키를 나타냅니다. 이는 해당 피어와의 통신을 암호화하고 보장하는 역할을 합니다.

동작 방식

키 생성: 각 장치는 고유한 PrivateKey와 PublicKey 쌍을 생성합니다.

PublicKey 교환: 클라이언트와 서버는 서로의 PublicKey를 공유하여 암호화된 통신을 설정합니다.

데이터 암호화: 클라이언트는 서버의 PublicKey를 사용해 데이터를 암호화하고, 서버는 자신의 PrivateKey를 사용해 이 데이터를 복호화합니다. 
반대로 서버도 클라이언트의 PublicKey로 데이터를 암호화하고 클라이언트는 자신의 PrivateKey로 복호화합니다.
이렇게 PublicKey와 PrivateKey는 WireGuard VPN에서 데이터의 기밀성, 무결성 및 인증을 보장하는 핵심 요소로 작동합니다.


 

증권정보.홈페이지(Infra.Introduction)
1) 조회
2) 실시간

Ubuntu에서 Node.js를 설치하려면 다음 단계를 따르세요:

패키지 목록 업데이트:

sudo apt update
Node.js 설치: Node.js는 여러 방법으로 설치할 수 있지만, 가장 간편한 방법은 NodeSource PPA를 사용하는 것입니다. 다음 명령어를 실행하여 Node.js를 설치합니다.

curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs
위 명령어에서 setup_18.x는 Node.js의 최신 LTS 버전을 설치합니다. 다른 버전이 필요하다면, 해당 버전의 번호로 변경하세요.

설치 확인: 설치가 완료되면 Node.js와 npm(노드 패키지 관리자)이 제대로 설치되었는지 확인합니다.

node -v
npm -v
이제 Node.js와 npm이 정상적으로 설치되었습니다. 필요한 패키지를 설치하거나 프로젝트를 시작할 수 있습니다!

npm install express
npm install @redis/client
npm install ws

sinfo@sinfo:~$ netstat -an | grep 3000
tcp6       0      0 :::3000                 :::*                    LISTEN
sinfo@sinfo:~$

sudo ufw status
sudo ufw allow 3000
sudo ufw status
sudo ufw enable

sudo ufw allow 8080
sudo ufw status
sudo ufw enable


app.js 수정부분)

app.listen(port, '0.0.0.0', () => {
    console.log(`HTTP Server is running at http://0.0.0.0:${port}`);
});
const wss = new WebSocketServer({ port: 8080, host: '0.0.0.0' });
위의 수정으로 WebSocketServer도 모든 인터페이스에서 접속을 허용하게 됩니다.


index.html 수정부분)

<script>
    // ... (이전 코드)

    const ws = new WebSocket('ws://192.168.45.54:8080'); // 수정된 부분

    // ... (이후 코드)
</script>
이제 수정한 코드를 사용하여 index.html을 테스트해 보세요. 추가적인 질문이 있으면 언제든지 말씀해 주세요!


 

app.js
0.00MB
index.html
0.05MB

+ Recent posts