본문 바로가기

내일 배움 캠프/그땐 (응답하라 추억시대)

망형 토폴로지에 대한 고찰

728x90

문제

내가 구축한 건 API와 API사이의 다리이다.

서비스와 서비스를 이어야 한다.

시도 

1. distributor와 비슷한 users.topology.js 파일을 만든다.

2. Users 전체 정보 조회 url을 기준으로 정보 조회가 가능한 서버를 만든다.

3. 함수를 불러오면 실행이 된다.

 

users.topology.js

import TcpServer from '../classes/server';
import { makePacket } from '../utils/makePacket.js';
import dotenv from 'dotenv';
dotenv.config();

// 접속 노드 관리 오브젝트
// Server 클래스 상속
class usersTopology extends TcpServer {
  map = {};

  constructor() {
    super('users', process.env.USERS_PORT, [
      'POST/users',
      'GET/users',
      'PATCH/users',
      'DELETE/users',
      'POST/users/login',
    ]);
  }

  // 노드 접속 이벤트 처리
  onCreate(socket) {
    console.log('onCreate', socket.remoteAddress, socket.remotePort);
    this.sendInfo(socket);
  }

  // 노드 접속 해제 이벤트 처리
  onClose(socket) {
    const key = socket.remoteAddress + ':' + socket.remotePort;
    console.log('onClose', socket.remoteAddress, socket.remotePort);
    delete this.map[key];
    this.sendInfo();
  }

  // 노드 등록 처리
  onRead(socket, json) {
    const key = socket.remoteAddress + ':' + socket.remotePort;
    console.log('onRead', socket.remoteAddress, socket.remotePort, json);

    if (json.uri === '/users' && json.method === 'GET') {
      this.map[key] = {
        socket: socket,
      };
      this.map[key].info = json.params;
      this.map[key].info.host = socket.remoteAddress;
      this.sendInfo();
    }
  }

  // 패킷 전송
  write(socket, packet) {
    socket.write(JSON.stringify(packet) + '¶');
  }

  // 접속 노드 혹은 특정 소켓에 접속 노드 정보 전파
  sendInfo(socket) {
    const packet = makePacket('/users', 'GET', 0, []);

    for (let n in this.map) {
      packet.params.push(this.map[n].info);
    }

    if (socket) {
      this.write(socket, packet);
    } else {
      for (let n in this.map) {
        this.write(this.map[n].socket, packet);
      }
    }
  }
}

//객체 생성
new usersTopology();

해결

이제 user.topology.js를 통해 유저 서비스에 접근하여 정보를 어디서든지 볼 수 있다.

단, 실시간 업데이트가 안 된다. setInterval을 이용하여 도전 중이다.

알게 된 점

망형 토폴로지와 마이크로 <서비스> 아키텍처는

서비스 단위로 연결을 한다. (뇌피셜이나 느낌이 좋다.)