인텔리J(Intellij)로 Spring boot를 사용하여 Java Application을 만드는 와중, 인텔리J에서 직접 실행을 할 때에는 이상이 없었으나, Jar로 빌드를 한 후 실행을 하게 되면, Could not find com.mysql:mysql-connector-j 위와 같은 에러 문구가 뜨면서 실행이 되질 않았다. 그렇게 원인을 찾아본 순간, 내 Gradle 설정에 MySQL Connector가 2개 중복 설정이 되었다는 것을 깨달았다. 그리고 이렇게 중복으로 설정된 가장 큰 원인은 MySQL Connector가 버전에 따라 패키지 명이 바뀌게 되면서 인지를 하지 못했기 때문이었다. MySQL 8.0.31 이전 버전우선 예전부터 내가 자주 사용하였던, 8.0.31 이전 버전의 커넥터는 ..
스프링 부트로 프로젝트를 생성한 후, RestController를 사용해야 돼서, 어노테이션을 걸었지만 해당 어노테이션관련 라이브러리 Import가 되질 않았다. 내가 설치한 Dependency는 아래와 같았는데 RestController는 당연히 기본적으로 적용이 될거라 생각한 나의 착각이었다. 스프링부트가 아닌 일반적인 스프링 기반으로 프로젝트를 할 경우 아무런 문제없이 라이브러리가 추가되었었기 때문이었다. 디펜던시(Dependencies) 추가 원인을 찾은 결과 spring-web을 설치해야 하는데 나는 web을 rest와 연관지어 생각지 못했기 때문에 web을 추가하게 되었다. implementation 'org.springframework.boot:spring-boot-starter-web' 위..
자바(Java)에서 숫자를 퍼센트(%) 형식으로 표시하려면 일반적으로 NumberFormat 형식과 고전적으로 값을 곱하는 방식이 존재하는데요. 두가지의 방법의 차이와 NumberFormat 사용법에 대해서 알려드리도록 하겠습니다. 비교할 데이터 public class TestMain { public static void main(String[] args) { double a = 0.23; double b = 0.045; double c = 0.00713; } } 명확한 값의 차이를 알기 위해, 위와 같이 3가지의 값을 지정해봤습니다. 고전적인 방식 퍼센트값은 당연하게도 0~1의 사이인 값으로 되어 있습니다. 이렇게 값이 정해져있기 때문에 퍼센트로 치환하는 방식 역시 생각보다 쉬울 수 있는데요. /** ..
내부적으로 사용하는 MySQL의 테이블이 대문자로 되어 있었고, 이를 Spring boot의 JPA를 활용하여 접근을 하고자 하였다. Entity와 Repository를 만들고, 이제 JPA를 연결하려 시도를 하였는데 다음과 같은 에러가 발생하였다. 에러 화면 에러를 보면, gpt_member라는 테이블이 없다고 나오는데 내가 만든 테이블의 명칭은 대문자로 "GPT_MEMBER"라는 테이블이었다. 즉, 내부적으로 소문자로 테이블을 호출하고 있다는 것이었다. Entity 클래스를 보면, 분명 대문자로 어노테이션이 되어 있는 것을 확인할 수 있다보니, 내부적으로 소문자로 치환해서 변환하는 것 같아서 ChatGPT에게 문의를 해도 이해를 하지 못하는 것 같았다. 문제 해결 구글링해본 결과 이와 같은 JPA 문..
에러 메세지 Exception in thread "main" java.lang.UnsupportedClassVersionError: org/springframework/boot/SpringApplication has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 59.0 at java.base/java.lang.ClassLoader.defineClass1(Native Method) at java.base/java.lang.ClassLoader.defineClass(C..
jdbcTemplate으로 로그인을 구현 도중 아래와 EmptyResultDataAsccessException 에러(Error)가 발생하였는데 이는 QueryForObject 일 경우 값이 없을 때 발생하는 에러이다. 에러발생 org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0 at org.springframework.dao.support.DataAccessUtils.nullableSingleResult(DataAccessUtils.java:97) ~[spring-tx-5.3.18.jar:5.3.18] at org.springframework.jdbc.core.JdbcTempla..
에러메세지 java.lang.AbstractMethodError: com.mysql.jdbc.Connection.isValid(I)Z at com.zaxxer.hikari.pool.PoolBase.checkValidationSupport(PoolBase.java:464) ~[HikariCP-4.0.3.jar:na] at com.zaxxer.hikari.pool.PoolBase.checkDriverSupport(PoolBase.java:447) ~[HikariCP-4.0.3.jar:na] at com.zaxxer.hikari.pool.PoolBase.setupConnection(PoolBase.java:416) ~[HikariCP-4.0.3.jar:na] at com.zaxxer.hikari.pool.Po..
사진을 서버에 전송하는 프로그램을 개발하는 도중 아래와 같은 에러가 발생하였다. 에러 로그 WARN 7268 --- [nio-8080-exec-3] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.multipart.support.MissingServletRequestPartException: Required request part 'file' is not present] Ajax 펑션 function uploadPhoto() { var file = $('input[name="file"]').get(0); var formData = new FormData(); formData.append('file', file); $..
크론탭(Crontab)에서 Shell을 만들어 Java 프로그램을 실행할 때, 위와 같은 에러가 나는 경우가 발생한다. 위 에러는 jarfile을 access(접근, 실행) 할 수 없다는 의미이며, 이유는 파일을 찾지 못했기 때문이다. 파일이란 내가 있는 위치에서 실행을 하면 문제가 없지만, crontab이나 다른 곳에서 실행을 하는 경우 위치를 못잡는다. 그럴 땐 jar 파일마저도 path를 모두 붙여서 실행하든지, change directory를 한 후 실행을 하면 문제가 없어진다. 기존 Shell 내용 변경해야 될 내용 jar가 있는 폴더가 /home/test 라는 폴더일 경우 cd /home/test java -jar xxx.jar 위와 같이 cd로 디렉토리를 이동하는 것을 java 실행 전에 추..
UnsupportedOperationException 에러는 일반적으로 List 형을 new로 초기화하지 않는 상태에서 Arrays로 생성하였을 시 주로 발생한다. 케이스 public static void main(String[] args) { List tempList = Arrays.asList("aaa"); System.out.println(tempList); tempList.add("bbb"); } 일반적으로 값을 세팅하고, 변경하지 않을 거라면 위와 같이 List형을 Arrays.asList로 초기화해도 아무런 문제가 없으나, new로 생성하지 않는 List의 값을 변경하려 한다면 UnsupportedOperationException 에러가 발생한다. 위 코드를 실행하면 다음과 같은 결과가 나온다..
Springboot의 경우 내장에서 띄우는 서버가 Tomcat이고, Tomcat은 Default 포트로 8080을 사용하고 있는데 Boot Dashboard에서 동일한 포트로 프로젝트를 띄울 수 없다. 그리고 이미 다른 서버에서 8080을 사용하고 있는 경우, 포트번호를 변경해야 하는데 아래와 같이 손쉽게 수정이 가능하다 사용중 포트 에러 로그 *************************** APPLICATION FAILED TO START *************************** Description: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that's list..
에러 메세지 Path with "WEB-INF" or "META-INF": [WEB-INF/views/xxx.jsp] 위와 같은 에러가 발생했다면 원인은 스프링부트에서 jsp에 대한 설정을 하지 않았기 때문이다. 처리 방법 그레이들(Gradle) 기준으로 다음가 같이 의존성(dependency)를 추가한다 implementation 'javax.servlet:jstl' implementation 'org.apache.tomcat.embed:tomcat-embed-jasper' dependency를 추가 한 후 그레이들 설정을 저장 한 뒤, gradle refresh를 진행한다.