타업체에서 진행하던 프로젝트를 인수인계받은 뒤 웹소켓 기능 구현을 위해 스프링웹소켓 라이브러리를 사용하기로 결정.
스프링 웹소켓의 경우 스프링 4.X 이상의 버전에서 사용가능하기에 버전을 올리면서 생긴 오류 해결 후 웹소켓 기능을 구현하는 과정에서 발생한 오류에 대한 정리
* 전정부=전자정부 프레임워크
전정부 3.1.0 (스프링 3.2.9)
>> javax.websocket-api 를 이용하여 소켓 통신 구현
>> "/__ws__/ws.do" 로 접근 시 소켓 통신 성공
=========
전정부 3.10.0 (스프링 4.3.25)
>> springWebSocket 을 이용하여 소켓 통신 구현
>> "/__ws__/ws.do" 로 접근 시 에러 발생
>> 주요 에러문구
>>>> sitemesh를 통한 html 반환 과정에서 ${layoutIdx}, ${layOutStr} 에 값이 들어가지 않아 파일을 찾을 수 없다는 jsp 에러문구
>>>> 소켓 통신의 반환은 text/html 이 아닌데 html을 반환하다가 에러 발생
>> 예상 원인
>> 1. egov-com-servlet.xml 에 선언된 웹소켓 핸들러가 제대로 동작하지 않는다.
>> 2. 버전업을 하면서 권한, 인가로직이 변경되어 "/__ws__/ws.do" 로 접근 시 권한에러가 발생하고 에러페이지를 반환하는 과정에서 html 에러가 발생한다.
>> 3. url 필터링과정에서 문제가 발생했다.
>>>> 그렇다면 왜 전정부 3.1.0 에서는 정상적으로 통신이 되었는가?
>> 1. servlet.xml - mvc:interceptor 에 exclude-mapping을 추가했지만 변화 X
>> 2. decorator.xml 에 exclude-pattern 에 추가할 경우 500 에러는 사라지지만 여전히 text/html 으로 반환
>> sitemesh의 경우 마지막에 html을 반환할 때 사용되는 라이브러리로 그 이전에 요청이 들어오는 순간 부터 내부 처리 과정중에 http>ws로 프로토콜 변환이 안되는 것 같음
>> 가장 유력한 오류 원인: 스프링 웹소켓을 사용할 때, egov-com-servlet.xml 에 등록한 websocket 설정이 정상적으로 동작하지 않아서 "/__ws__/ws.do" 경로를 처리하지 못하고 있음.
>> 전정부 3.10.0 버전에서 javax.websocket-api 정상동작 확인
>> 추가로 /__ws__/ws.do 외에 다른 경로 (ex. /myHandler)로 path 설정 시 404 에러 확인
>> 스프링-웹소켓에 path 설정이 정상적으로 이루어지지 않고 있음.
>> <url-pattern>*.do</url-pattern> 에 의해서 일반적인 웹페이지로 인식되고 에러페이지 반환에서 오류가 발생한것으로 확인됨
>> 결론 - 스프링 웹소켓에서 path 지정했는데 정상적으로 등록안되는 원인을 찾아 해결하면 될 것
===============================================
오류 해결 방법
웹소켓 구현은 공식 문서를 따라 config, handler 클래스를 생성하여 진행했는데 여기서 config 에 @Configuration, @EnableWebSocket 외에 추가로 @EnableWebMvc 를 추가해 줘서 문제를 해결하였다.
* 공부할 내용
1. @EnableWebMvc 란 무엇이며 어떤 역할을 가지고 있는지
2. 해당 어노테이션이 전자정부프레임워크에서 "org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" 와 "egovframework.rte.ptl.mvc.bind.annotation.EgovRequestMappingHandlerAdapter" 과 관련이 있는지
'회고' 카테고리의 다른 글
egov 3.6 > egov Boot 4.2 회고 (with security) (0) | 2024.05.24 |
---|---|
JWT 에 대한 생각 정리 (0) | 2024.02.29 |
20231208 회고 (0) | 2023.12.08 |
20231115 업무 회고 (0) | 2023.11.15 |
20231019 업무 회고 (1) | 2023.10.19 |