Development/Daily Error 34

Cannot find a (Map) Key deserializer for type 해결

문제 Cannot find a (Map) Key deserializer for type [simple type, com.example.GroupView] Map의 키를 단순 String이 아닌 클래스로 했더니 Jackson의 역직렬화 중 에러 발생 키로 사용하는 코드는 아래와 같이 간단한 DTO 객체 public class GroupView { public GroupView(String uuid, String name, String alias) { this.uuid = uuid; this.name = name; this.alias = alias; } private final String uuid; private final String name; private final String alias; } 원인 ..

[iRods] 데이터 오브젝트가 포함된 리소스 삭제하기 CAT_RESOURCE_NOT_EMPTY

iRods Resource 관련 명령어 iadmin 명령어를 사용하기 위해서는 iRods 호스트 (혹은 컨테이너) 에 접근해 iinit 을 먼저 실시 해 주어야 합니다. 모든 iadmin 명령은 한번의 iadmin 후에 iadmin> 상태에서 입력 가능. 보다 자세한 iRods 명령어는 https://docs.irods.org/ 를 참고. mkresc 리소스 생성. Valut 경로는 반드시 마운트가 이루어져 있어야 합니다. 사용방법 iadmin mkresc 이름 타입 [호스트:Path] [ContextString] 예시 # compound 부모 리소스 생성 iadmin mkresc compex compound '' auto_repl=on # replication 부모 리소스 생성 iadmi..

[Java Mail] Could not convert socket to TLS; 문제 해결

문제 서버에서 javax email을 활용해 구글 이메일을 전송 할 때 아래와 같은 에러가 발생 했습니다. org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: Could not convert socket to TLS; nested exception is: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate). Failed messages: javax.mail.MessagingE..

[POI] 엑셀의 숫자를 소수점으로 파싱하는 문제 해결하기

문제 POI 를 활용해 엑셀파일의 각 셀에 있는 값들을 자바에서 읽어 오는 과정에서 문제가 있었습니다. 기존의 코드는 아래와 같습니다. switch (cell.getCellType()) { case FORMULA: value = cell.getCellFormula(); break; case NUMERIC: value = String.valueOf(cell.getNumericCellValue()); break; case STRING: value = cell.getStringCellValue(); break; case BOOLEAN: value = String.valueOf(cell.getBooleanCellValue()); break; default: } 각각의 셀 타입에 따라서 적절한 스트링으로 변환 하..

AJAX POST 요청시 Status Code: 302 하며 /denied로 리다이렉트 시키는 문제 해결

에러 AJAX 비동기 요청으로 GET 에서는 정상적으로 작동하던 메서드가, POST로만 바꾸면 응답을 302로 보내는 문제가 있었습니다. 아무리 이것 저것 다 체크를 해 보아도 응답이 /denied로 가는 리다이렉트가 됩니다. 그래서 결국 denied(text) 라는 텍스트만 덜렁 뜨는 상황이 발생했습니다. 로그인을 한 상태임에도 스프링 시큐리티가 권한을 체크 하다가 뭔가 잘못되었나 싶어서 .permitAll() 로 변경을 해 보아도 마찬가지였습니다. 원인 스프링 시큐리티의 CSRF(Cross-Site Request Forgery) 설정 때문 입니다. 스프링 시큐리티에서는 csrf 설정이 기본적으로 enabled 되어 있기 때문에 csrf 에 대한 토큰을 받도록 명시되어 있으며 GET 요청이 아닌 요청,..

[Spring Redis] incompatible types for field 해결

문제 Redis 를 스프링 세션 저장소로 사용하며 사용자의 로그인 정보를 저장 하고 있었습니다. 그런데 저장되는 DTO 객체를 조금 수정했더니 SerializationException: Cannot deserialize 라며 에러가 발생하기 시작했습니다. 정확히 방금 변경한 필드가 에러메시지에 정확히 표기되었기 때문에 에러의 원인은 명확 했습니다. 원인 원인은 기존에 Redis에 저장되어 있던 세션 데이터와의 충돌 때문이었습니다. 세션에 이미 저장되어 있는 데이터를 어플리케이션에 불러 오며 다시 역직렬화를 시키는 과정에서, 클래스의 구조가 일치하지 않았기 때문에 에러가 발생 한 것 입니다. 해결 해결 과정이 생각보다 간단하지가 않았는데요. 아래에서 언급될 몇가지 이유가 있었습니다. 차근차근 해결을 해 보..

[Java] Unsupported class file major version 61 해결하기

문제 Unsupported class file major version 61 ArchUnit을 통한 아키텍처 테스트를 해 보려는데 Unsupported class file major version 61 에러가 발생했습니다. 원인 class file major version 61은 로드 하려고 시도하고 있는 클래스 파일이 자바 17 혹은 그 이상의 버전에서 컴파일이 되었으며, 자바 17 이상에서만 사용 될 수 있을 때 발생한다고 합니다. 사실 스프링부트 3.0 부터는 요구되는 자바 버전이 17이 될거라는 소식을 듣고, 미리 JDK 17을 사용하며 불편한 상황이 어떤게 있을 지 알아보고, 트러블슈팅이 가능하다면 해보려고 Temurin JDK 17 (AdoptOpenJDK 에서 이전됨) 을 사용하고 있었거든요..

[JPA] No Dialect mapping for JDBC type: 1111

Intro JPA 사용 중 native 쿼리를 사용해야 할 일이 있어 nativeQuery = true 옵션을 걸고 쿼리를 작성 했습니다. 그런데 생소한 에러메시지가 나오며 UUID의 맵핑이 제대로 이루어지지 않았습니다. org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111 원인 https://github.com/spring-projects/spring-data-jpa/issues/1796 이미 오래전부터 알려져있었지만 고치지 않기로 결정 된 Hibernate 이슈 라고 합니다. Hibernate 구현체에서는 addScalar를 활용 하길 추천하지만 특정 구현체에 의존하지 않고 Spring Data JPA 를 이용할 경우에는 cas..

[Maven 에러] java.lang.IllegalStateException: Unable to load cache item

문제 Linux 운영체제에 maven 을 설치 하고, mvn 명령어를 실행 하던 중 아래와 같이 오류가 발생 했습니다. [ERROR] Error executing Maven. [ERROR] java.lang.IllegalStateException: Unable to load cache item [ERROR] Caused by: Unable to load cache item [ERROR] Caused by: Could not initialize class com.google.inject.internal.cglib.core.$MethodWrapper원인 사용중인 메이븐 버전이 설치되어있는 JDK 의 버전을 지원하지 않기 때문에 발생한 문제 입니다. 해결 최신버전의 메이븐을 설치해서 문제를 해결 할 수 있습니..

SCP 사용중 Permission denied 대처법

Intro 모두 알고 계시는 것 처럼 리눅스에서 scp 명령어를 사용하면 손쉽게 remote 저장소에 있는 파일을 로컬에 copy 해 올 수 있습니다. 그런데 대부분의 상황에서 문제 없이 작동하는 이 기능에서도 어쩔 수 없이 Permission denied 에러를 뿜으며 안될 때가 있습니다. scp: Documents/root_file: Permission denied 이때의 대처법을 나누어 보려고 합니다. 원인 원인은 방금의 SCP 접근이 해당 파일에 대한 접근 권한을 가지고 있지 않기 때문입니다. sudo 권한을 가지고 있는 유저라고 하더라도 ssh 로 접속해서 sudo 명령어로 해당 파일에 접근하는건 가능 하지만, scp로 한번에 빼오는건 불가능 합니다. 해결 상황은 매우 당황스럽지만 어렵지 않은 ..

Docker ERROR: the image for the service you’re trying to recreate has been removed

Intro 단순히 도커 이미지를 Puling 하는 과정에서 무시무시한 에러가 발생 했습니다. docker pull browserless/chrome ERROR: The image for the service you're trying to recreate has been removed. If you continue, volume data could be lost. Consider backing up your data before continuing.에러 문구를 읽어보면.. 다시 생성하려고 하는 이미지가 삭제 되었기 때문에, 계속 진행 하게 되면 볼륨 데이터가 삭제 될 수 있다라고 합니다. 이정도 경고면 섣불리 엔터 치기 힘들죠.. 그러면서 계속 하기 전에 데이터를 백업 하라더니, 계속 진행 할 건지..

OAuth2 Redirect 주소 문제 해결

Intro 특정 사이트의 OAuth 로그인이 정상적으로 이루어지지 않고 있는 이슈가 접수되었습니다. 등록된 리다이렉트 URI와 일치하지 않다는 에러가 발생하고 있었고, 확인을 해 보니 등록된 리다이렉트 URL도, 실제 사용 중인 프로토콜도 https 인데, 리다이렉트 uri가 자꾸 http 로 시작하는 주소가 넘어가고 있었습니다. 문제 현 설정은 아래와 같습니다. application.yaml oauth2: clientA: clientId: ${clientA_CLIENTID} clientSecret: ${clientA_SECRET} accessTokenUri: ${clientA_URI} userAuthorizationUri: ${clientA_AUTHURI} redirectUri: "${BASE}/oau..

The getKey method should only be used when a single key is returned

Intro JDBC의 KeyHolder를 사용 하던 중 위와 같은 에러를 만났습니다. 에러 전문은 아래와 같습니다. org.springframework.dao.InvalidDataAccessApiUsageException: The getKey method should only be used when a single key is returned. The current key entry contains multiple keys: [{id=13, item_name=M2Air, price=1690000, quantity=12}] keyHolder.getKey() 를 했을때 하나의 키가 반환 되어야 하지만 여러개의 키가 반환 되어 발생한 에러라고 메시지에 쓰여 있습니다. 상황 NamedParameterJdbcTe..

NGINX 대용량 파일 업로드 502 응답

Intro 대용량의 파일 업로드를 시도 할 때, 특정 용량을 넘어가면 업로드가 되지 않고 502 응답이 오는 문제가 있었습니다. 로컬 개발환경에서는 아무 문제 없지만 운영 및 개발 서버에서 문제가 재현 되었습니다. 300MB 업로드 요청시 응답 시간 정보 일단 20MB, 100MB, 300MB, 1000MB 크기의 더미 파일을 각각 준비 해두고 더미 파일 생성 방법은 아래의 링크를 참고 해 주세요 Linux) 대용량의 더미 파일 생성하기 업로드 테스트를 진행 해 본 결과 300MB 까지는 문제 없이 업로드가 되었으나, 1000MB 파일을 업로드 하려고 하면 자꾸 NginX에서 502 응답을 보내고 있었습니다. 원인 저의 경우에 Nginx 설정 값이 원인 이었습니다. nginx.conf 파일을 확인 해 보..

Spring Boot2.6에서 Springfox3 실행 실패 에러

Intro Kotlin 프로젝트 였지만, Spring Boot 설정과 관련된 내용이기 때문에 java 로 프로젝트를 진행 하시는 경우에도 문제 해결을 하실 수 있습니다. Kotlin 과 스프링 부트를 이용해 API 서버를 만드는 강의를 따라 실습 해 보던 중 에러가 발생했습니다. 강의에서는 springfox 2.x 버전을 사용하며 새로나온 3.x 버전은 설정과정이 살짝 다르기때문에 구버전을 사용한다고는 했지만, 저는 얼마전 회사에서 진행중인 프로젝트에 springfox3.0.0 버전을 이용해 적용을 시켜본 경험이 있기 때문에 별 고민없이 3.0.0 버전을 적용 시켰습니다. build.gradle.kts implementation("io.springfox:springfox-swagger-ui:2.9.2")..