본문 바로가기

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

마이크로 서비스 아키텍처에서 서비스와 서비스 사이의 정보교환

728x90

문제

서비스와 서비스 사이에서 DB데이터를 서로 접근하고 싶다.

정확하게는 userId를 기반으로 하여 Users테이블에 있는 nickname을 Posts에서 가져오고 싶다.

시도

 // Users 접속 함수
 // 로그인을 목적으로 작성했던 것이라 변수명에 Login이 들어가는데 아직 수정을 하지 못하였다.
  connectToUsers(host, port, onNoti) {
    // Users 전달 패킷
    const packet = makePacket('/users', 'GET', 0, this.context);
    let isConnectedLogin = false;

    this.clientLogin = new TcpClient(
      host,
      port,
      (options) => {
        // Users 접속 이벤트
        isConnectedLogin = true;
        this.clientLogin.write(packet);
      },
      // Users 데이터 수신 이벤트
      (options, data) => {
        onNoti(data);
      },
      // Users 접속 종료 이벤트
      (options) => {
        isConnectedLogin = false;
      },
      // Users 통신 에러 이벤트
      (options) => {
        isConnectedLogin = false;
      },
    );

    // 주기적으로 재접속 시도
    setInterval(() => {
      if (isConnectedLogin !== true) {
        this.clientLogin.connect();
      }
    }, 3000);
  }
}

1. app.js에 TCP Client를 상속받아 UsersModule 서버의 Client를  만든다.

2. 부모 클래스인 TCP server에 로그인 접속 함수인 connectToUsers을 만든다. (GET /users 유저 정보 전체 조회)

3. TCP server를 상속받아 만들어지는 BoardsModule 서버의 생성자 안에 connectToUsers을 넣어준다.

4. Boards서버에서 모든 유저 정보에 접근이 가능해진다.

 

- Boards 서버를 켤 때 connectToUsers 가 한 번 실행되긴 하는데 서버에 무리가 가지 않는지 검토 중이다.

(소중한 서버)

 

해결

이제 유저 정보를 찾아서 nickname을 표시할 수 있으나 자동화가 되지 않아

로그인 하면 userId를 자동으로 받아오는 방법을 연구하고 있다.

미들웨어와 같은 기능을 하는 매개를 넣는 아이디어가 있다.

연구중.

 

알게 된 점

서비스와 서비스 사이에서 부모 서버 클래스에 접속 함수를 만들면 자식 서버 클래스에서 상속받아 활용해 볼 수 있다.