에러 창고(44)
-
[에러] Invalid character found in the request target [/api/product/search?searchKeyword=[te] ]. The valid characters are defined in RFC 7230 and RFC 3986
[Reason]만든 검색 api에 테스트로 '[', ']' 이 두 개의 특수 기호를 넣어서 호출시켜 보았더니 잘못된 문자가 포함되어있다는 에러가 발생하였다.검색해보니, SpringBoot는 내장 Tomcat(톰캣)을 사용하고 있으며, 이 Tomcat 의 특정 버전 이상에서 RFC 3986 규격이 적용되었다고 한다.RFC 3986에는 영어 문자(a-zA-Z), 숫자(0-9), -. ~4 특수 문자 및 모든 예약 문자만 허용된다.따라서 한글을 URL 쿼리스트링으로 변환하며 생기는 특수문자가 원인이다. 그런데 유독 다른 특수 기호들은 무사히 넘어오는 반면에 '[', ']' 이 두 가지의 특수 기호만이 심하게 허용되지 않아 발생된 이슈이다. [Solution]@Configurationpublic class T..
2024.07.03 -
[에러] org.springframework.security.web.firewall.RequestRejectedException: The request was rejected because the URL contained a potentially malicious String "%3B"
[Reason]api url을 호출할 때 "%3B" 라고 하는 블랙리스트 텍스트가 포함되어 요청이 거절되었다는 의미의 에러이다.사실 이 해당 에러가 발생된다고 하더라도 api 호출은 정상적으로 실행이 가능하다. [Solution]이 에러는 다른 개발자 분의 방법을 통해 해결하고자 하였다.aop를 통해 api를 호출할 때 먼저 선행적으로 doFilter를 가로채서 해당 요청에 대한 블랙 리스트 텍스트를 잡아 발생되는 해당 에러를 익셉션으로 빠지게끔 하는 것이다. (1)aop 디펜던시를 추가해준다. (2)@Slf4j@Aspect@Componentpublic class AopConfig { @Around("execution(public void org.springframework.security.we..
2024.05.16 -
[에러] docker: Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:3306 -> 0.0.0.0:0: listen tcp 0.0.0.0:3306: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.
[Reason] docker를 설치하고 docker에 mysql을 설치 후, 3306포트에 연결하여 실행하고자 할 때 발생되는 에러이다. 이는 해당 3306 포트에 다른 서비스가 실행되고 있어 mysql을 해당 포트에 연결하여 실행할 수 없다는 의미이다. [Solution] (1) 이전 서비스 종료 후 실행 netstat -ano | findstr {포트 번호} 명령어를 통해 해당 포트를 사용하고 있는 서비스의 pid를 확인해준다. taskkill /pid {포트 번호} /f 명령어를 통해 해당 포트에서 실행 중인 서비스의 pid를 통해 서비스를 종료해주고 다시 docker run -e mysql_root_password={비밀번호} -d -p 3306:3306 mysql:8 명령어를 실행하여 실행해준다..
2024.04.04 -
[에러] javax.management.InstanceAlreadyExistsException: MXBean already registered with name org.apache.commons.pool2:type=GenericObjectPool, name=pool
[Reason] Redis 를 사용하면서 Redis 클라이언트와 소통하기 위해 Jedis를 사용하고자 했고, Configuration을 설정하고 연결한 Jedis를 Bean 객체로 만들어주도록 했다. 이 후 프로그램을 실행 시 위와 같은 에러가 발생하였다. 기본적으로 Spring은 실행하자마자 Bean으로 설정된 모든 객체를 MBean으로 우선 등록하는데, 이에 JedisPool을 MBean으로 등록하고, 이후에 JedisPool의 커넥션으로 설정한 뒤 pool이라는 이름으로 초기화되어 반환하게 되는데 이 때 이미 MBean으로 등록된 JedisPool 객체가 커넥션을 수립 후 반환되어 다시 MBean으로 등록되고자 하여 중복된 MBean이 발생되었다는 에러가 나타난 것이다. [Solution] (1) ..
2024.03.27 -
[에러] Error Code: 1055. Expression #7 of SELECT list is not in GROUP BY clause and contains nonaggregated column '~~' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 0.015 sec
[Reason] 쿼리를 실행했을 때 발생된 에러이다. 에러를 해석해보면, group by 에 조회 컬럼을 명시하지 않은 채 select 절에 해당 컬럼을 조회하려고 넣었기 때문에 발생된 에러이다. 에러 메세지 중 마지막 부분인 sql_mode=only_full_group_by 부분이 바로 현재 설정이 group by 를 사용할 때 명시하지 않으면 포함하지 않은 컬럼은 조회되지 않는 full group by 설정이 기본으로 설정되어있다는 뜻이다. [Solution] - 해결책 (1) sql_mode를 확인하고, 조회되는 테이블에서 ONLY_FULL_GROUP_BY 를 제외한 나머지 값을 복사한 뒤, set session sql_mode 에 붙여넣어 only_full_group_by 설정을 없애준다. - 해..
2024.03.04 -
[에러] org.hibernate.PersistentObjectException: detached entity passed to persist
[Reason] 데이터를 저장하는 데 발생된 에러이다. 해당 에러는 엔티티끼리 연관관계를 맺고 데이터를 저장할 때 발생된다. 즉, 이미지에서 보이는 것처럼 엔티티에 일대다 혹은 다대다 와 같이 연관관계를 맺을 때 cascade 옵션, orphanRemoval 옵션이 적용되어 있으면, 연관관계를 맺은 두 엔티티에 데이터가 저장될 때 두 엔티티가 연관관계를 맺었기 때문에 두 개 모두 데이터가 저장되고 같은 처리가 되어야 한다. 나는 cascade, orphanRemoval 옵션을 적용해놓고 한쪽에만 데이터를 저장하려고 시도했기 때문에 본 에러가 발생한 것이었다. [Solution] 해결책은 간단하다. cascade 옵션과 orphanRemoval 옵션을 없애주면 정상적으로 실행된다.
2024.02.26