devops

API 디자인과 프로세스 통신, JSON 본문

DevOps

API 디자인과 프로세스 통신, JSON

vata500 2022. 6. 17. 13:57
반응형

마이크로서비스도 하나의 프로세스 단위로 실행되기 때문에, 프로세스 통신이라고 보는게 맞다. IPC(Inter-Process-Communication)은 개발 도메인보다 더 대중적으로 쓰이는 용어다.

프로세스 간 통신

서비스와 서비스가 통신하려면 인터페이스가 존재해야하고, 인터페이스가 요구하는 데로 커뮤니케이션해야한다. 

동기/비동기

HTTP 프로토콜은 기본적으로 TCP 연결(혹은 UDP)을 만들고 이 위에서 요청에 따라 즉시 응답오는 형태로 구현이 되어 있다. 세상에는 요청에 따른 응답이 즉시 도착하는 커뮤니케이션만 존재하지 않는다.

+ HTTP는 동기? 비동기?

HTTP는 동기적인 매커니즘으로 분류한다. 서로 통신하는 PC는 모두 켜져 있어야하며, 클라이언트는 서버가 응답을 해줄 것이라고 기대하기 때문이다.

동기 : 요청/응답
비동기 : 비동기 요청/응답 단방향 알림(푸시와 같은)

일대일 및 일대다 통신

뉴스레터 구독 서비스는 구독자 모두에게 동일한 메시지를 제공하는 일대다 커뮤니케이션이다. HTTP는 트랜잭션에서 여러 클라이언트에게 동시 응답하지 않는다. 여러 클라이언트를 상대할 수 있지만, 그렇다고 동시에 커뮤니케이션을 하는 것이 아니기 때문에 일대일이라고 볼 수 있다.

프로세스 간의 직접/간접 연결

프로세스간의 연결을 위해 중간에 메시지 브로커가 위치해서 메시지 자체를 관리하는 형태의 연결도 있다. 이 경우는 비동기적 처리며, 둘 중 하나의 프로세스가 실행하고 있지않아도 메시지를 주고 받을 수 있게 해준다.


JSON

JSON 탄생배경

Javascript Object Notation의 줄임말로 데이터 교환을 위해서 만들어진 객체 형태의 포맷이다. 네트워크에서 어떤 객체 내용을 다른 프로그램에 전송한다고 가정한다면 다음처럼 쓸 수 있다.

const message = {
  sender: "타이거코인",
  receiver: "라이언",
  message: "헤이 라이언 술한잔 어때",
  createdAt: "2021-01-12 10:10:10"
}

여기서 메시지 객체가 전송가능하기 위해선 같은 프로그램을 사용하거나, 문자열처럼 범용적으로 읽을 수 있는 형태여야 한다.

객체는 타입변환을 이용해서 String으로 변화 시 객체 내용을 포함하지 않는다. Javascript에서 객체에 메소드나 형변환을 시도하면 [object Object]라는 결과를 리턴한다.

이 문제를 해결하기 위해서는 객체를 JSON으로 변환하거나 JSON을 객체의 형태로 변환해야 한다.

  • JSON.stringify : Object type을 JSON으로 변환
  • JSON.parse : JSON을 Object type으로 변환

여기서 stringify를 직렬화(serialize)라고 한다.

JSON으로 변환된 객체의 타입은 문자열이다. 발신자는 객체를 직렬화한 문자열을 누군가에게 객체 내용을 보낼 수 있다. 수신자는 JSON.parse를 사용해서 객체의 형태로 만들 수 있다.

let packet = `{"sender":"타이거코인","receiver":"라이언","message":"야 나와 술 ㄱㄱ","createdAt":"2021-01-12 10:10:10"}`

let obj = JSON.parse(packet)
console.log(obj)
/*
 * {
 * sender: "타이거코인",
 * receiver: "라이언",
 * message: "야 나와 술 ㄱㄱ",
 * createdAt: "2021-01-12 10:10:10"
 * }
 */
 console.log(typeof(obj))
 // `object`

직렬화된 JSON에 메소드 JSON.parse를 적용해서 객체 형태로 변환한다.

여기서 JSON.parse를 역직렬화라고 한다.

JSON의 기본 규칙

  자바스크립트 객체 JSON
키는 따옴표 없이 쓸 수 있음 반드시 큰 따옴표를 붙여야 한다.
문자열 값 문자열 값은 어떠한 형태의 따옴표도 사용가능 반드시 큰 따옴표를 붙여야 한다.

JSON은 키와 값 사이, 키-값 쌍 사이에 공백이 있어선 안된다.

 

반응형
Comments