위와 같은 HTTP 통신 규약의 단점을 해소하고자 웹 소켓 통신 규약 방식을 사용할수 있습니다.
클라이언트와 서버간의 TCP 연결을 길게 유지하고, 서로 "양방향" 으로 통신하며 "실시간" 데이터를 전달해주는 통신규약 입니다.
- ❗ 클라이언트의 요청 없이 원하는 시점에 데이터가 넘어 옵니다.
- 아래의 사진처럼 HTTP 헤더에
websockt이라는 정보를 담아 요청합니다.
웹 소켓을 사용하려면 의존성을 추가 해줘야 합니다.
implementation 'org.springframework.boot:spring-boot-starter-websocket'
- 웹 소켓 핸들러
TextWebSocketHandler: 문자열 메시지 기반으로 통신하기 때문에 메소드를 재정의 하여 사용합니다.
- 단순히 데이터만 보내는 통신 규약인 WebSocket 통신 과정에서,
어떤 방식으로 통신을 할지가 아닌 주고받는 메시지의 모양이 어떻게 생겨야 하는지를 정의합니다.
EX : 채팅방 생성, TOPIC 구독
https://velog.io/@koseungbin/WebSocket
https://velog.io/@qkrqudcks7/STOMP%EB%9E%80
➡ 자바 8 버전 이후 default 메소드를 통해 위와 같은 규칙이 깨지게 되었습니다.
➡ 인터페이스 내부에서 default 를 붙인 메소드를 작성하면 로직이 포함된 코드를 작성할수있습니다.
public interface Vehicle {
default void print(String car) {
System.out.println("I want to " + car);
}
}
public class Car implements Vehicle {
public static void main(String[] args) {
Car car = new Car();
car.print("benz");
}
}
❓ 사용 이유
기존의 코드를 최대한 수정하지 않으면서 설계된 인터페이스에 새로운 기능을 추가하고 가능하게 하기위해 사용합니다.