- WebSocket이란
- 웹소켓(WebSochet)은 서버와 클라이언트 간의 효율적인 양방향 통신을 실현하기 위한 구조
Transport protocol의 일종으로 쉽게 이야기하면 웹버전의 TCP 또는 Socket (소켓)이다.
WebSocket은 서버와 클라이언트 간에 socket connection을 유지해서 언제든 양방향 통신 또는 데이터 전송이 가능하도록 하는 기술
Real-time web application에 쓰이며 서버 쪽 또는 클라이언트 쪽 데이터가 실시간으로 업데이트 되는 웹 어플리케이션을 의미한다.
- 웹소켓(WebSochet)은 서버와 클라이언트 간의 효율적인 양방향 통신을 실현하기 위한 구조
- 작동 원리 및 그 외의 정보
-
서버와 클라이언트 간의 WebSocket 연결은 HTTP 프로토콜을 통해 이루어진다.
만약 연결이 정상적으로 이루어진다면 서버와 클라이언트 간에 WebSocket 연결 (TCP/IP 기반으로 하는)이 이루어지고 일정 시간이 지나면 HTTP 연결은 자동으로 끊어진다. - 웹소켓 특징
- 양방향 통신
- WebSocket은 클라이언트와 서버는 지속적으로 연결된 TCP 라인을 통해 양뱡향 통신을 합니다.
- 실시간 통신 / 성능
- WebSocket은 클라이언트와 서버가 연결되어 있기 때문에 실시간 통신이 가능합니다.
그래서 실시간 채팅, 주식 등 실시간 정보가 필요한 서비스에서 주로 활용되곤 합니다.
- WebSocket은 클라이언트와 서버가 연결되어 있기 때문에 실시간 통신이 가능합니다.
- Cross Browser 문제
- Web Socket은 구 버전 브라우저 ( IE 8 이하 )에서는 지원이 불가능하다는 단점이 있습니다.
- Stateful
- WebSocket은 HTTP와 달리 상태를 유지( Stateful )하기 때문에 서버와 클라이언트는 연결을 항상 유지해야 합니다.
따라서 부하가 발생할 수 있다는 단점이 있고, 비정상적으로 연결이 끊어졌을 때 적절하게 대응할 수 있어야 합니다.
- WebSocket은 HTTP와 달리 상태를 유지( Stateful )하기 때문에 서버와 클라이언트는 연결을 항상 유지해야 합니다.
- 양방향 통신
- WebSocket 소켓이 필요할떄
- 실시간 양방향 데이터 통신이 필요한 경우.
- 많은 수의 동시 접속자를 수용해야 하는 경우.
- 브라우저에서 TCP 기반의 통신으로 확장해야 하는 경우.
- 개발자에게 사용하기 쉬운 API가 필요할 경우.
- 클라우드 환경이나 웹을 넘어 SOA(Service Oriented Architecture) 로 확장해야 하는 경우
- Ajax와의 차이
- Ajax의 경우는 웹 브라우저에서 데이터를 호출하면 웹 서버에서 호출된 값을 검색, 작성해서 웹 브라우저로 메시지를 보내는 형식의 구조라면
웹 소켓의 경우는 웹 브라우저에서 호출해서 데이터를 가져가는 기능 포함 반대로 서버에서 클라이언트를 호출할 수 있는 기능까지 있다.
- Ajax의 경우는 웹 브라우저에서 데이터를 호출하면 웹 서버에서 호출된 값을 검색, 작성해서 웹 브라우저로 메시지를 보내는 형식의 구조라면
- Thread란
- 쓰레드는 하나의 프로세스 내부에서 독립적으로 실행되는 하나의 작업 단위를 말한다.
여러개의 쓰레드가 모여 하나의 프로세스를구성하며,
이 하나의 프로세스를 구성하는 여러개의 쓰레드를 멀티쓰레드라고 부른다.
쓰레드는 한번에 하나씩 밖에 동작 할 수 없으며 어떤 쓰레드가 먼저 실행이 될지는 아무도 알 수 없다
- 쓰레드는 하나의 프로세스 내부에서 독립적으로 실행되는 하나의 작업 단위를 말한다.
- Thread의 생성 및 실행
: Thread의 생성은 Thread 클래스를 상속하거나 Runnable 인터페이스를 구현하는 방법이 있다.
Thread는 start() 메서드에 의해서 시작되며 이 start() 메서드에 의해 스케쥴러가 알아서 run() 메서드를 실행한다.
쓰레드를 이용하여 어떤 작업을 하고 싶다면 run() 메서드를 오버라이드 하여 하고 싶은 작업을 구현해주면 된다.
단, 쓰레드의 시작은 꼭 start() 메서드를 통해서 시작해야 한다.
그냥 단순히 run() 메서드를 호출하게 된다면 단지 일반적인 메서드를 호출한것과 다를바가 없다.
- Thread의 생명 주기
: Thread 생성 -------------> Runnable ----------> Runing ---------> Dead
상속 또는 구현 & new start() 스케쥴러 run() 런메서드가 수행상태 stop 메서드
resume(), notify() ↑ ↙ suspand(), wait()
non-Runnable (Blocked)
sleep() 다른말로 blocked - 자기 스스로 Runnable로 복귀 가능하다.
suspand(), wait() - 자기 스스로 Runnable로 복귀 할 수 없다.
- 쓰레드의 동기화 (synchronized)
: 하나의 메서드 또는 동작을 여러개의 쓰레드가 한번에 사용하게 되면 프로그램이 서버리는 DeadLock 현상이 발생 하는 경우가 있다.
이런 경우를 방지하기 위해 DeadLock이 발생할 우려가 있는 부분에 synchronized 를 이용하여 쓰레드를 동기화 시켜준다.