본문 바로가기

분류 전체보기138

[Spring] WebSocket & STOMP 채팅 기능 구현하기 (2) [Spring] WebSocket & STOMP 채팅 기능 구현하기 (1)WebSocket & STOMP의 개념Polling, Long Polling, SSE(Server Sent Event)HTTP의 이해HTTP란?클라이언트와 서버가 서로 데이터를 주고받기 위해 사용되는 통신 규약으로 다음과 같은 데이터 타입을 전송할 수 있다.HThbb-devlog.tistory.com 저번에는 간단하게 웹소켓 통신을 할 수 있도록 구현해보았는데 이번 시간에는 스프링 시큐리티를 통해 인증된 사용자만 메시지를 전송할 수 있도록 설정해보도록 하겠다.현재 프로젝트는 세션-쿠키 방식으로 로그인한 사용자를 확인한다. 1. STOMP와 같은 메시징 시스템에서 메시지의 인증 및 권한 확인을 할 수 있도록 하는 의존성 추가imple.. 2025. 2. 25.
[Spring] WebSocket & STOMP 채팅 기능 구현하기 (1) WebSocket & STOMP의 개념Polling, Long Polling, SSE(Server Sent Event)HTTP의 이해HTTP란?클라이언트와 서버가 서로 데이터를 주고받기 위해 사용되는 통신 규약으로 다음과 같은 데이터 타입을 전송할 수 있다.HTML, TEXT이미지, 음성,hbb-devlog.tistory.com 저번 글에서 WebSocket, STOMP의 개념에 대해서 간략히 살펴보았다.이번 글에서는 해당 개념을 토대로 채팅 기능을 간단하게 구현해보려고 한다. 1. 스프링 부트는 공식적으로 WebSocket, STOMP를 지원하는데 이를 사용하기 위해 의존성을 추가한다.implementation 'org.springframework.boot:spring-boot-starter-webso.. 2025. 2. 25.
WebSocket & STOMP의 개념 Polling, Long Polling, SSE(Server Sent Event)HTTP의 이해HTTP란?클라이언트와 서버가 서로 데이터를 주고받기 위해 사용되는 통신 규약으로 다음과 같은 데이터 타입을 전송할 수 있다.HTML, TEXT이미지, 음성, 영상, 파일 등JSON, XML이렇게 거의hbb-devlog.tistory.com이전 글에서 클라이언트와 서버가 데이터를 실시간으로 주고 받는 방법으로 Polling, Long Polling, SSE를 알아보았는데, 이 방법들은 클라이언트와 서버가 동시에 양방향 통신이 불가능하다는 단점이 있다.웹소켓은 HTML5의 새로운 기능으로, 웹 애플리케이션과 서버 간에 상시 연결을 유지할 수 있는 통신 프로토콜이다.HTTP 프로토콜과 다르게 클라이언트와 서버 간의.. 2025. 2. 23.
IntelliJ에서 snippet 파일을 인식하지 않는 경우 해결 방법 Mac 기준 1. Setting → Editor → File Types → Recognized File Types → AsciiDoc files → *.snippet 추가이렇게 하면 .snippet 파일에서 발생하는 빨간줄이 안보이게 된다. 2. 자동 줄바꿈 설정 (Setting → Editor → Soft-wrap these files → *.snippet 추가) 2025. 2. 1.
Caused by: java.lang.IllegalStateException: No primary or single unique constructor found for interface org.springframework.data.domain.Pageable 에러 해결 컨트롤러에 대한 단위 테스트를 진행하는데 위 에러가 발생하였다.Spring Rest Docs 생성을 위한 테스트 환경에서 MockMvc를 standaloneSetup으로 설정하여 스프링 컨테이너 없이 최소한의 설정으로 진행되도록 하였는데, 여기서 컨트롤러의 Pageable 파라미터를 처리할 수 없기 때문에 발생하는 오류이다.this.mvc = MockMvcBuilders.standaloneSetup(initController()) .apply(documentationConfiguration(provider)) .build(); 따라서 요청 파라미터를 가지고 PageRequest 객체를 생성시켜주는 PageableHandlerMethodArgumentResolver 설정을 추가시켜주어야 한다.Pageabl.. 2025. 2. 1.
[Test] Spring REST Docs 적용하기 Spring REST Docs는 Spring Boot 애플리케이션의 RESTful API 문서를 자동으로 생성해 주는 도구이다.이 때 테스트 코드를 기반으로 API 문서를 생성하기 때문에 실제 API 동작과 일치하는 신뢰성 있는 문서를 제공할 수 있다.기본적으로 AsciiDoc이라는 Markdown과 유사한 마크업 언어를 사용해서 문서를 작성한다. ↔ SwaggerSwagger라는 REST API를 문서화하고 테스트할 수 있는 도구가 존재하는데 이는 적용이 Spring REST Docs에 비해 쉽고, 콘솔에서 API를 호출하여 테스트할 수 있다는 장점이 존재한다.하지만 프로덕션 코드에 API 문서화하는 코드가 의존하며 API 변경 시 문서에 누락될 수 있다는 단점이 존재한다.따라서 이번 시간에는 Spri.. 2025. 1. 30.
[Spring] 스프링에서 직렬화, 역직렬화 테스트를 작성하는데 HTTP Body 정보가 DTO에 매핑이 되지 않는 문제가 발생하였다.찾아보니 JSON이 DTO로 매핑되는 과정에서 기본 생성자가 없기 때문에 발생하는 문제였다.따라서 스프링이 직렬화, 역직렬화를 어떻게 하는지 자세히 알아보려고 한다. - 문제의 코드@Getter@Builder@AllArgsConstructorpublic static class InviteMemberDTO { @NotBlank String email;}직렬화, 역직렬화직렬화객체를 외부 저장이나 전송 가능한 형태(Byte)로 변환JSON, XML 등으로 변환자바에선 ObjectMapper.writeValueAsString() 사용하여 변환 가능하다.역직렬화외부 데이터(Byte)를 프로그램 내에서 사용 가능한 객체로 변환.. 2025. 1. 25.
[Spring] SSE 구현 Polling, Long Polling, SSE(Server Sent Event)HTTP/1.1 200Content-Type: text/event-stream;charset=UTF-8Transfer-Encoding: chunked​ HTTP의 이해HTTP란?클라이언트와 서버가 서로 데이터를 주고받기 위해 사용되는 통신 규약으로 다음과 같은 데이터 타입을 전송hbb-devlog.tistory.com 저번에는 SSE가 무엇인지 간단히 살펴보았는데, 이번에는 SSE를 간단히 구현해보도록 하겠다. 1. 클라이언트는 구독을 위한 요청 전송클라이언트는 EventSource를 통해 SSE 연결 요청const eventSource = new EventSource(''); 2. 서버는 구독 요청에 대해 응답을 전송스프링.. 2025. 1. 15.
Polling, Long Polling, SSE(Server Sent Event) HTTP의 이해HTTP란?클라이언트와 서버가 서로 데이터를 주고받기 위해 사용되는 통신 규약으로 다음과 같은 데이터 타입을 전송할 수 있다.HTML, TEXT이미지, 음성, 영상, 파일 등JSON, XML이렇게 거의 모든 형태hbb-devlog.tistory.com HTTP 통신은 요청-응답(Request-Response) 구조를 따르며, 무상태(stateless), 비연결성(connectionless) 이라는 특징을 가진다.즉, 서버는 클라이언트가 요청을 보낼 때만 응답하고, 응답이 완료되면 연결이 종료되는데, 이러한 특성 때문에 실시간 데이터 통신이 필요한 서비스에서는 한계가 존재한다.이를 해결하기 위해 클라이언트와 서버 간 데이터를 실시간으로 주고받는 방법으로 Polling과 Long Polling.. 2025. 1. 13.