스프링 웹 소켓 (Web Socket)

yuns·2022년 10월 30일
0

Spring

목록 보기
13/13

과거의 인터넷 통신 방법

서버에서 데이터를 가져올 때 URL을 통한 요청 방식(페이지 요청)

Ajax 통신 방법

부분적으로 정보를 갱신할 수 있는 데이터 요청

동일한 페이지의 일부만 수정할 수 있게된다.

WebSocket 통신 방법

  • 클라이언트의 요청이 없으면 서버로부터 응답을 받을 수 없는 구조를 해결하기 위해 나타났다.
  • 서버와 브라우저 사이에 양방향 소통이 가능하다. (클라이언트의 접속 요청 -> 웹 서버의 응답이 진행된 후 연결을 계속 유지함)
  • 웹 페이지를 새로고침 하거나 다른 주소로 이동하지 않아도 새로운 데이터를 제공할 수 있다.
  • 변경 사항의 빈도가 잦고, 실시간성을 보장해야하고, 짧은 대기 시간, 대용량, 고주파수의 조합인 경우 웹소켓이 유용하다.

protected 접근제어자

같은 패키지에서는 접근 제한이 없지만, 다른 패키지에서는 자식 클래스만 접근을 허용한다.

다른 패키지에서 extends A {} 로 A를 상속받았다면, A의 protected 멤버를 사용할 수 있다.


endpoint

API가 서버에서 자원에 접근할 수 있도록 하는 URL
메서드가 같은 URL들에 대해서도 다른 요청을 하게끔 구별하게해준다.


Slf4j

스프링의 Logging Framework (Simple Logging Facade For Java)

클래스에 @Log4j2 어노테이션 달기


STOMP

메세지 전송을 효율적으로 하기 위한 프로토콜
PUB / SUB 구조로 되어있다. (메시지를 전송/ 받아서 처리하느 ㄴ부분이 확실하게 구조로 정해져있다)

PUB

Publisher. 채팅방에 글을 써서 보내는 행위

SUB

Subscriber. 채팅방에 들어가는 행위

Topic

채팅방을 생성하는 것

Message Brocker

publisher로부터 받은 메세지를 subscriber에게 전달해주는 중간 역할을 한다


@Configuration

설정 파일을 만들거나, bean을 등록하기 위한 annotation
빈을 등록할 때 싱글톤이 되도록 보장해준다.
스프링 컨테이너에서 빈을 관리할 수 있게 된다.

@Bean 어노테이션은 반드시 @Configuration과 함께 사용해야만 싱글톤이 보장된다.


스프링 컨테이너에 빈을 등록한다?

빈을 등록해야하는 이유는?

  • 수동으로 빈을 직접 등록해야할 때
  • 개발자가 직접 제어 불가능한 라이브러리를 활용할 때
  • 어플리케이션 전범위적으로 사용되는 클래스를 등록할 때
  • 다형성을 활용해 여러 구현체를 등록해주어야할 때

등록해서 좋은 점은 뭐지?

등록해야하는 순간은 언제지?


@PostConstruct

의존성 주입이 이루어진 후 초기화를 수행하는 메소드

클래스가 service를 수행하기 전에 발생한다

다른 리소스에서 호출 되지 않는다고 해도 수행된다.

장점

빈이 초기화됨과 동시에 의존성을 확인할 수 있다.
빈이 여러번 초기화되는 것을 방지할 수 있다.


웹소켓 서버 연결 시 connection : "upgrade" 의 의미

클라이언트가 서버에게 현재 연결된 프로토콜을 다른 프로토콜로 바꾸도록 요청하는 것

어떤 프로토콜로 바꾸느냐?

아래에 있는 Upgrade : "websocket"으로 바꿔달라는 것이다.

Upgrade는 반드시 "websocket"이라는 값을, connection은 반드시 "upgrade"라는 값을 가지고, 만약 이 값이 없거나 다른 값이면 cross-protocol attack으로 간주하고 웹소켓 접속 과정을 중단한다.


0개의 댓글