반응형

Computer Science/Network 8

[Network] gRPC: MSA에서 서비스 간 저용량 고성능으로 통신하기

최근 MSA(Micro Servie Architecture)가 다양한 서비스에 적용됨에 따라 각각의 마이크로 서비스들이 통신하는 네트워크 비용이 자연스레 상승하게 되었습니다. 그런데 시스템들 간 모듈들이 언어가 다양하다 보니 데이터를 주고받는 게 쉽지 않았고, REST API로 개발하여 통신을 주고받으려고 하니, 각 모듈별로 서버를 띄우는 것도 부담스러운 환경이 되었습니다. 이에 따라 좀 더 가볍고 빠르며, 언어에 종속적이지 않게 메세지를 주고받을 수 있는 방법을 고민하던 중 나온 것이 바로 gRPC입니다. gRPC란 google에서 만든 RPC라는 뜻으로 프로세스간 통신을 위한 기법 중 하나입니다. 특징적으로는 다른 서버에 있는 함수를 호출할 때 마치 같은 서버에 있는 함수를 호출하듯 간편하게 호출할 ..

[Network] Port와 포트 포워딩(Port-Forwarding)이란?

Port란 예를 들어 하나의 서버가 있을 때 이 서버는 다양한 역학을 하게 되는 경우가 있습니다. 웹사이트를 전달해주는 역할, 그리고 파일을 요청하는 역할이 있다고 해보겠습니다. 이럴 경우 클라이언트가 서버에 요청을 보냈을 때, 웹사이트 요청인지 파일 요청인지 구분할 수 있는 방법이 필요하게 됩니다. 이때 바로 Port를 사용하게 됩니다. 포트는 숫자로 표현하게 되어 있으며 65535번까지 존재하며 아래와 같이 3종류로 표현이 됩니다. 0번 ~ 1023번: 잘 알려진 포트 (well-known port) 1024번 ~ 49151번: 등록된 포트 (registered port) 49152번 ~ 65535번: 동적 포트 (dynamic port) 잘 알려진 포트 번호의 대표적 예는 다음과 같습니다. 20 :..

[Network] CORS(Cross-Origin Resource Sharing)란?

CORS란? CORS란 Cross-Origin Resource Sharing의 약자로 번역하면 교차 출처 리소스 공유라는 뜻이다. 기본적으로 클라이언트에서 서버로 요청을 보낼 때, 클라이언트와 서버의 도메인이 일치하지 않으면 요청이 차단됩니다. 예를들어 localhost:8000번 클라이언트에서 localhost:8080 서버로 요청을 보내면 서버는 다른 포트 즉 다른 도메인에서 연결이 왔기 때문에 요청을 차단하게 됩니다. 이러한 요청이 왔을 때 구글 크롬 탭을 열어보면 아래와 같이 Access-Control-Allow-Origin 헤더가 없다는 에러가 뜨게 됩니다. CORS 문제를 해결하기 위해서는 응답헤더에 Access-Control-Allow-Origin이라는 헤더를 넣어주어야 합니다. 이 헤더는 ..

[Network] http와 https 차이

HTTPS란? HTTP는 Hyper Text Protocol의 약자로써 www(world wide web)사에서 정보를 주고 받는 프로토콜니다. 이름에서도 알 수 있듯이 http는 텍스트 교환방식이기 때문에 누군가 네트워크에서 신호를 가로챈다면 내용이 노출된다는 보안상의 문제가 있습니다. 이러한 문제를 해결하기 위해 나온 것이 바로 https입니다. https는 인터넷 상에서 정보를 암호화하는 SSL(Secure Socket Layer) 프로토콜을 이용해서 클라이언트와 서버가 데이터를 주고받는 통신 규약입니다. 따라서 http보다 보안상에 우위에 있습니다. SSL / TLS 인터넷 상에서 데이터를 안전하게 전송하기 위한 인터넷 암호화 통신 프로토콜을 의미합니다. 데이터를 송신할 때 http는 애플리케이션..

[Network] TCP 신뢰성의 특징: 흐름제어 / 혼잡제어

TCP의 가장 큰 특징은 신뢰성입니다. 신뢰성이란 중간에 데이터가 유실되지 않는 것을 이야기하는데 이러한 신뢰성을 구성해주는 대표적인 방법으로 흐름제어와 혼잡제어가 있습니다. 흐름제어 먼저 흐름제어에 대해 알아보겠습니다. 흐름제어란 송신 측과 수신 측의 데이터 처리 속도 차이를 해결하기 위한 기법입니다. 수신측이 송신측 보다 처리 속도가 빠르다면 문제가 될 것이 없지만, 만약 송식 측이 수신 측보다 전송 속도가 빠르게 되면 전송된 패킷은 수신측의 제한된 저장 용량을 초과하여 이후에 도착하는 데이터가 손실될 수 있습니다. 만약 데이터가 손실 된다면 추가적으로 응답과 데이터의 재전송이 이루어져야 하기 때문에 리소스의 낭비로 이어질 수 있습니다. 이러한 위험을 줄이기 위해 송신측의 데이터 전송량을 수신측의 처..

[Network] TCP / UDP

TCP TCP란 인터넷 상에서 데이터를 메세지 형태로 보내기 위해서 ip와 함께 사용하는 프로토콜 입니다. TCP는 아래와 같은 특성을 가지고 있습니다. 1. 연결형 서비스 입니다. 2. 높은 신뢰성을 가지고 있습니다. 3. 3 way-hand-shaking으로 연결하고 4way-handshaking으로 해제합니다. 4. UDP보다 속도가 느립니다. 3-way handshaking 1. 클라이언트에서 Server로 연결 요청을 하기위해 SYN 데이터를 보냅니다. 2. 서버에서 해당 포트를 LISTEN하고 있는 상태로 SYN 데이터를 받고, 정상적으로 데이터를 받았다는 대답(ACK)와 client도 포트를 열어달라는 SYN데이터를 함께 보냅니다. 3. 클라이언트에서는 SYN + ACK를 받고 ESTABLI..

[Network] Get방식의 Query string방식과 Path value방식

GET방식은 http method 중에서 url을 통해 정보를 전달하는 방식이다. 그런데 이러한 get을 사용하는 방법에는 두 가지가 있는데 그것에 대해 알아보겠다. 예를 들어 우리가 sns 서비스를 개발하고 있다고 가정해보자. 그렇다면 서비스는 필연적으로 user의 정보를 컨트롤해야 할 것이다. 아래는 그러한 예시들을 query방식과 params방식으로 구분하여 예시를 작성하였다. Query String 만약 우리가 user의 id 값을 get 방식으로 받아와야할 때 이러한 방식으로 사용할 수 있을 것이다. /users?id=123 그럼 우리는 백엔드에서 id값을 받아올 수 있게 된다. Node.js의 경우 해당 값을 아래의 코드와 같이 데이터를 받아올 수 있다. const {id} = req.quer..

[Network] REST API와 Http Protocal

REST API 서버에 요청을 보낼 때는 주소를 통해 요청의 내용을 표현한다. 주소가 /index.html이면 서버에 index.html을 보내달라는 뜻인 것처럼 말이다. 하지만 요청이 항상 html일 필요는 없다. 예를 들어 /login이라는 주소를 통해 html을 요청하는 대신 세션 저장이라는 동작을 취할 수 있다. 이렇게 요청이 주소를 통해 들어오므로 서버가 이해하기 쉬운 주소를 사용하는 것이 좋다. 이기서 이번 포스팅의 주제인 REST API가 등장한다. REST API란 REpresentational State Transfer의 약자이다. 네트워크 구조의 한 형식으로 서버의 자원을 정의하고, 자원에 대한 주소를 지정하는 방법을 가리킨다. 주소는 의미를 명확히 전달하기 위해 명사로 구성된다. 예를..

반응형