[SW정글][나만무 준비]Docker & Socket.io

JST·2023년 10월 27일

나만무 준비

목록 보기
2/3

Docker

도커는 컨테이너 기반의 오픈소스 가상화 플랫폼이다.

서버에서 이야기하는 컨테이너도 우리가 아는 컨테이너처럼 다양한 프로그램,실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해준다. 백엔드 프로그램, 데이터베이스 서버, 메시지 큐등 어떤 프로그램도 컨테이너로 추상화할 수 있고 조립PC, AWS, Azure, Google cloud등 어디에서든 실행할 수 있다.

docker 작동 방식

프로세스를 격리 하는 방식이기 때문에 가볍고 빠르게 동작한다.
CPU나 메모리는 딱 프로세스가 필요한 만큼만 추가로 사용하고 성능적으로도 거의 손실이 없다.
하나의 서버에 여러개의 컨테이너를 실행하면 서로 영향을 미치지 않고 독립적으로 실행되어 마치 가벼운 VM을 사용하는 느낌을 준다. 실행중인 컨테이너에 접속하여 명령어를 입력할 수 있고 apt-get이나 yum으로 패키지를 설치할 수 있으며 사용자도 추가하고 여러개의 프로세스를 백그라운드로 실행할 수도 있다. CPU나 메모리 사용량을 제한할 수 있고 호스트의 특정 포트와 연결하거나 호스트의 특정 디렉토리를 내부 디렉토리인 것처럼 사용할 수도 있다.

컨테이너 기반 가상화는 Host OS 그리고 Docker 엔진위에서 바로 동작하며 Host의 커널을 공유한다. 커널을 공유하게 되면 io처리가 쉽게 되어 성능의 효율을 높일 수 있다.

컨테이너를 사용하는 것은 가상 머신을 생성하는 것이 아니라 Host OS가 사용하는 자원을 분리하여 여러 환경을 만들 수 있도록 하는 것이다.

이미지

도커에서 가장 중요한 개념은 컨테이너와 함께 이미지라는 개념이다.

이미지는 컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있는 것으로, 상태값을 가지지 않고 변하지 않는다(Immutable). 컨테이너는 이미지를 실행한 상태라고 볼 수 있고 추가되거나 변하는 값은 컨테이너에 저장된다. 같은 이미지에서 여러개의 컨테이너를 생성할 수 있고, 컨테이너의 상태가 바뀌거나 컨테이너가 삭제되더라도 이미지는 변하지 않고 그대로 남아있다.

즉, 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 더 이상 의존성 파일을 컴파일하고 이것저것 설치할 필요가 없다.

결론

도커는 단순한 툴의 사용법을 익히는 개념이 아닌, 완성된 서비스를 패키징하고 배포하는데 사용하는 오픈소스 프로그램이다. 일반인이나 대학생 수준에서 연습삼아 코딩한 내용을 깃허브에 올리듯이 가볍게 접근하기에는 다소 장벽이 있다. 도커는 '컨테이너'라는 개념을 기반으로 하는 가상 환경 구축에 용이한 플랫폼이며, 최근 들어 일반 개발자들도 환경구축에 유용하게 사용하고 있다.

Socket.IO

웹 소켓 연결을 통해 클라이언트와 서버간에 실시간 양방향 통신을 가능하게하는 JavaScript 라이브러리.
실시간 업데이트 또는 양방향 통신이 필요한 응용 프로그램을 구축하는 데 널리 사용된다.
ex) 실시간 주문과 배달 현황 구축

기본 개념

1)Socket: 소켓은 클라이언트와 서버 간의 연결을 나타냅니다. 소켓을 사용하여 실시간으로 데이터를 보내고 받을 수 있습니다.

2)Server: 서버는 클라이언트와의 소켓 연결을 설정하고 관리합니다. 서버는 클라이언트로 이벤트를 방출하거나 클라이언트로부터 이벤트를 수신 할 수 있습니다.

3)Client: 클라이언트는 서버와의 소켓 연결을 설정하고 관리합니다. 클라이언트는 서버와 동일하게, 서버로 이벤트를 방출하거나 서버에서 이벤트를 수신 할 수 있습니다.

Socket.IO 작동 방식

1)Event: 이벤트는 소켓 연결을 통해 클라이언트와 서버간에 전송 된 메시지입니다. 이벤트 이름은 서버와 클라이언트에서 동일하게 선언하여야 합니다. (JSON, 문자열, 이진 등 모든 형식의 데이터 포함 가능)

2)Namespace: 네임 스페이스는 클라이언트와 서버 간의 별도의 통신 채널입니다. 단일 서버에서 여러 네임 스페이스를 작성할 수 있으며 클라이언트는 특정 네임 스페이스에 연결하여 해당 네임 스페이스의 다른 클라이언트에게만 이벤트를 수신하거나 방출 할 수 있습니다.

3)Room: 룸은 함께 결합 된 소켓 그룹입니다. 소켓은 여러 룸에 합류하거나 떠날 수 있습니다. 룸은 연결된 모든 고객에게 방송하는 대신 특정 클라이언트 그룹에 메시지를 보내는 데 유용합니다.

→ Socket.IO는 클라이언트와 서버간에 WebSocket 연결을 설정하여 작동한다.

  • 서버는 들어오는 연결을 확인하고 클라이언트가 방출하는 이벤트를 처리한다.
  • 클라이언트는 서버에 연결하고 이벤트를 방출하거나 이벤트를 확인할 수 있다.
  • 클라이언트가 이벤트를 방출하면 서버는 이벤트를 수신하여 클라이언트로 응답을 다시 보내거나 동일한 네임 스페이스 또는 방에 있는 다른 클라이언트로 이벤트를 브로드 캐스트 할 수 있다.

0개의 댓글