CS/운영체제
[운영체제] 소켓 통신, 서버 - 클라이언트 통신, RPC
개발중인 감자
2023. 10. 23. 01:26
📌 소켓 통신
소켓?
- 커뮤니케이션을 하기 위한 통신의 극점 (end point)
- IP 주소 및 Port 번호를 조합하여 식별
[ 서버 - 클라이언트 아키텍처를 사용 ]
-> 서버는 특정 포트를 listen 하면서 클라이언트 요청에 대기
-> 요청을 받으면, 서버는 클라이언트 소켓으로부터 연결 요청을 수락함으로써 연결 완성.
📌 MSA?
마이크로 서비스 아키텍처
쉽게 말해서 자잘하게 서비스별로 아키텍쳐 구조로 잡고 모여 만든 큰 서비스 아키텍처
문제는 서로 다른 언어들(java, c, python 같은)로 만든 서비스들을 어떻게 한 서비스로 통합(연결) 하지?
-> 소켓 통신한다면 하나하나 규격 맞춰야함 -> 불편함
-> 언어에 구애받지 않고 편하게 하나의 프로시저를 호출하자.
-> 그 프로시저가 원격 프로시저 콜 호출 방법 (Remote Procedure Call, RPC)
📌 원격 프로시저 콜 호출 방법? (RPC?)
- 별도의 코드 없이 다른 주소 공간에서 함수나 프로시저를 실행할 수 있게 하는 프로세스 간의 통신 기술
- IDL를 사용하여 인터페이스를 명시함.
*IDL (출처 : openmaru 블로그 )
IDL(Interface Definition Language, 인터페이스 정의 언어)은 소프트웨어 컴포넌트의 인터페이스를 묘사하기 위한 명세 언어.
어느 한 언어에 국한되지 않는 언어 중립적인 방법으로 인터페이스를 묘사함으로써, 같은 언어를 사용하지 않는 소프트웨어 컴포넌트 사이의 통신을 가능하게 해줌.
- RPC를 사용하면 서버나 클라이언트가 어디에 있는 호출하면 연결됨 -> 보안도 향상됨!
- IDL을 통해 호출에 대한 인터페이스를 정의합니다.
- 정의된 IDL을 기반으로 rpcgen이라는 rpc 프로토콜 컴파일러를 통해 코드(stub)가 생성됩니다. stub을 통해 Client는 procedure 호출을 위한 참조자가 생겼고, Server는 procedure 이해를 위한 참조가 생기게 됩니다.
- Client는 자신의 프로그램에서 함수를 호출하는 것처럼 stub에 정의된 함수를 사용합니다.
- Client에서 Stub에 정의된 함수를 사용할 때 Client stub은 RPC 런타임을 통해 함수를 호출합니다.
- Server는 수신된 procedure 호출에 대한 처리 후 결과 값을 반환합니다.
- 최종적으로 Client 프로그램은 서버의 결과 값을 반환 받습니다.
하지만 RPC는 코드를 이해하기 어려울 뿐더러 에러 발생시 디버깅이 어렵다는 단점이 있음.
요즘은 구글에서 나온 gRPC도 사용하기도 한다.
✔️ gRPC?
구글에서 나온 RPC 프레임워크로, 저용량 메시지와 고성능 RPC를 갖고 있다. 또하 HTTP/2를 사용한다.
저용량 메시지를 가능하게 한 이유로는 프로토콜 버퍼 (Protocol Buffer) 인데, 데이터 구조를 json 이 아닌 바이너리 형태로 주고 받으면서 컴퓨터는 일련의 변환 과정 없이 바이너리 그 자체이기 때문에 빠르게 통신이 가능하다. 또한 용량이 비교적 큰 json에 비해 작아 저용량 메시지 및 고성능 RPC가 가능해진다.