Spring

[Spring] Spring Boot + Oracle Cloud 연동하여 배포하기 [4-1] - 버킷으로 이미지 업로드 구현 중 마주친 에러 탐방기

PlatinumeOlive 2024. 4. 5. 01:34

에러 극복기

시간 없으신 분들은  그냥 지나가셔도 되는 부분입니다. 가볍게 보시고, 혹시 이유를 아시는 분 계시면 댓글 부탁드립니다!

 

처음에는의존성에 jersey를 제외하고 httpClient만 주입해주었습니다. 그랬더니 java.util.NoSuchElementException: No http provider available 에러가 발생했습니다. 로그를 더 보면 옆에, jersey를 주입하라고 나와 있습니다. 아마 HttpProvier 클래스가 jersey 라이브러리에 있는 것 같았습니다.

 

그래서 jersey를 위에 올린 사이트에 검색해서 넣어주었습니다.

검색 사진

implementation 'com.oracle.oci.sdk:oci-java-sdk-common-httpclient-jersey:3.37.0'

 

아 이제 넣으니까 되겠지? 라는 기대를 가지고 돌려봤지만.. 또 다른 에러에 직면했습니다.

로그를 읽어보면, javax.ws.rs-api/2.1.1 버전이 없다는 내용이였습니다.

 

분명 저는 jersey를 가장 최신 버전으로 주입받았고, 스프링 부트도 3.x 버전인데 ' 왜 여기서 javax가 나와..? '

회사 이름이 바뀌면서, 스프링 3.x 대에서는 전부 jakarta로 라이브러리 명칭이 바뀌었을테고 jersey 최신버전이면 바뀔만 하지 않나..? 라는 생각이 들었습니다.

 

의아해서 jersey에 포함된 의존성을 뒤적거려봤습니다.

위 사진에서는 jersey3지만, jersey도 동일

jakarta.ws.rs-api 가 있는걸 확인할 수 있는데도, javax로 설정되어 있는지 동작하지 않습니다.

 

그래서 일단 의존성을 추가해보았습니다.

implementation 'javax.ws.rs:javax.ws.rs-api:2.1.1'

 

 

추가해도 또 에러가 발생합니다. 이유를 읽어보면, Linkage Error이라고 나옵니다. ClientBuilder를 Casting하는데 문제가 생겼다고 나오네요. 문제가 되는 부분을 찾으러 가보겠습니다.

 

jersey에 있는 JerseyHttpClientBuilder에서 javax.ws.rs에 있는  ClientBuilder를 이용하는데, 이때 매개변수로 ClientConfig를 넣어주어 오류가 발생하였습니다. 실제로는 Configuration 타입이 필요하다고 합니다..

 

분명 로그에 있는대로 javax.ws.rs-api 의존성을 넣어줬는데 이런 오류가 발생하니 황당했습니다.

 

그렇게 삽질과 구글링을 반복하던 찰나,, 어이없게도 해결책을 발견했습니다.

 

jersey가 아니라 jersey3였다

 

버전도 같고, 그냥 스프링 3.x나 스프링3이라고 부르나, 표기 차이인줄만 알았습니다.

 

그냥 혹시나 해서 바꿔서 넣어봤는데 바로 되더라구요 ㅎㅎ.. 알고보니 버전명은 같아도 jersey는 1.x, 2.x버전이고 jersey3가 새로 나온 jersey 3세대 버전이였습니다. 그래서 새로 받은 jersey3는 jakarta.ws.rs-api를 정상적으로 사용하고 있는걸 볼 수 있었습니다.

jersey3에서 jakarta를 정상적으로 주입받는 모습

문득, jersey는 그럼 javax.ws.rs-api를 의존성에 넣지도 않았고, 필요하다고 해서 넣어줘도 에러를 뱉어내는데 뭐가 잘못된게 아닌가? 라는 생각이 들었지만, 제가 놓친 부분이 있겠지 하고 넘겼습니다.. 혹시 모르니 oci jersey 깃허브에 Issue생성하러 갈것이니 답신이 온다면 업데이트 해보겠습니다 ㅎㅎ

성공 !

 

혹시 아시는 분들 있으면 댓글로 남겨주세요


참고 자료

https://docs.oracle.com/en-us/iaas/Content/API/SDKDocs/javasdk.htm

 

SDK for Java

 

docs.oracle.com

https://central.sonatype.com/search?q=oci-java-sdk-common

 

Maven Central: Search

Search and discover Java packages with our advanced search functionality.

central.sonatype.com

https://riverblue.tistory.com/53

 

Spring OCI(oracle cloud infrastructure) Java SDK 활용 (1) Object Storage bucket 정보 가져오기

Storage AWS나 오라클 같은 클라우드 서비스에는 파일을 업로드 할 수 있는 Storage 서비스가 있다. 대표적으로 AWS의 S3가 있는데 확실히는 잘 모르지만, AWS에서는 이 S3를 활용할 수 있는 api를 제공하

riverblue.tistory.com