발단
html escaping 된 정보가 그대로 DB 에 저장되어 있기에 이를 unescaping 처리하여 사용자에게 보여져야 한다는 요구사항을 처리하는 과정에서 발생하게 된 문제를 해결하는 과정을 나열합니다.
html escaping 된 정보 해결 방법 접근
- SSR 환경에서 작업중임으로 html entity( )등과 같은 텍스트에 대한 직접 변환을 처리
- SSR 로는 그대로 값을 내려주고 프론트에서 escaping 하여 값을 처리
SSR 환경을 사용하고 있음으로 1번 방식을 선택
1번 방식은 간단하나 html entity 요소들이 많기에 라이브러리를 사용하기로 하였다.
마침 apache commons-net 을 사용중에 있음으로 StringEscapeUtils 클래스를 사용하려 하였다.
문제발생
문제1. deprecated 된 StringEscapeUtils 클래스
이유를 확인하여 보니 단순히 프로젝트를 옮겨 진행하였기 때문에 옮긴 프로젝트에 대한 의존성을 추가하여주면 된다.
추가가 필요한 의존성
org.apache.commons:commons-text
문제2. Could not initialize class.. 오류 발생
StringEscapeUtils 에 대한 클래스의 초기화에 성공하지 못했다는 오류 문구이다.
개발 환경에서 기존에 사용중이던 commons-net 라이브러리와 충돌이 있을까 싶어 검색을 하던 차에 아래 링크를 발견하게 되었다.
내용에 따르면 commons-text 의 StringEscapeUtils 는 여러 static 초기화를 해야하는데 ClassLoader 가 최초에 클래스를 로드할 때 초기화가 실패하면 위와 같은 오류 문구를 접할 수 있다고 한다.
또, commons-text 가 commons-lang3 라이브러리에 의존한다고 설명하는데 이를 호환해주게끔 처리하는게 이 이슈를 고치는데 도움이 된다고 하고 있다.
해결
현재 프로젝트에서 common-net 3.10.0 을 사용중에 있고, 해당 라이브러리는 commons-lang3 3.12.0 을 포함하고 있다 링크에서 설명한대로 commons-text 1.11.0 과 버전이 맞지 않아 동작하지 않을 것이다.
위 상황에서 commons-lang3 의 버전을 높이느냐 혹은 commons-text 의 버전을 낮추느냐 두가지 선택사항이 있게된다.
commons-lang3 의 버전을 따로 올리게되면 common-net 이 포함하는 라이브러리의 버전과 차이가 생김으로 commons-text 의 버전을 낮추어 1.10.0 을 적용하니 오류가 발생하지 않고 해결하게 되었다.
즉, commons-lang3:3.12.0 은 commons-text:1.10.0 과 호환한다.
'ETC' 카테고리의 다른 글
[ETC] Synology 에서 발행한 인증서는 어디에 위치해 있을까?(feat. reverse proxy, let's encrypt) (0) | 2024.06.04 |
---|---|
[ETC] Swagger 와 OAS(Open Api Specification)는 어떤 관계가 있는걸까? (1) | 2023.07.11 |