여태까지 Spring-boot를 사용했던 케이스는 STS(Spring Tools Suite)을 사용하여 개발을 했었는데요. Java 어플리케이션은 IntelliJ로 개발을 하다보니, 어느덧 IntelliJ로 Spring-boot를 개발을 해봐야 겠다라는 생각을 가지게 되었습니다. 15년 가까이 Eclipse를 사용했지만, 이제는 놔줘야 될때가 온 것도 같습니다. 아직도 많은 SI 사이트들은 전자정부프레임워크를 사용할테지만, IntelliJ와 성능 차이가 너무 심하게 나서 저는 도저히 못쓸 것 같네요. 그럼 IntelliJ로 Spring 설정하는 법을 설명하도록 하겠습니다. Spring Boot 프로젝트 생성 IntelliJ를 실행한 후, New Project를 선택합니다. New Project 탭이 뜨면..
내부적으로 사용하는 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); $..
개발을 할 때 Base URL을 매번 Controller에서 설정하는 것은 여간 귀찮은 것이 아니다. 그리고 Base URL이 바뀔 경우 모든 클래스를 다 수정하는 것도 문제가 될 수 있다. Spring boot에서는 매우 간단하게 Base URL을 설정하는 방법을 제공한다. 예제 import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class RestController { @RequestMapping("/rest/v..
폼(Form) 생성 폼이란 데이터를 담아놓은 집합 같은 걸로 폼을 전송하게 되면 태그 안에 있는 데이터를 전송할 수 있게 된다. 물론 다른 폼에 있는 데이터를 가져올 수도 있지만 submit을 할 때 폼 자체를 전송하거나 폼 내부의 값들을 serialize하여 전송하는 경우가 대부분이다. 로그인폼(login.jsp) 아이디 패스워드 폼 파라미터 전송을 실습하기에는 로그인 만큼 좋은 것이 없을 것이다. 심플하게 테이블 코딩을 하였고, 값은 아이디와 패스워드가 존재하며, 실행은 login/action 경로로 값을 전달하게 된다. 파라미터 처리 및 매핑 LoginController.java 파라미터를 처리하고 페이지를 매핑하는 용도로 loginController를 생성한다. package com.tistory..
스프링툴슈트(STS)에는 기본적으로 웹기능들이 세팅되어 있지 않다. 그러다보니 JSP 등을 개발하기가 상당히 까다롭고 불편한데 이클립스 마켓에서 플러그인(plugin)을 설치하는 것으로 해결이 가능하다. 이클립스 마켓플레이스(Eclipse Marketplace) 이클립스에서 상단 메뉴의 가장 우측에 있는 Help 메뉴의 선택 후 하단을 보면 위 스샷처럼 이클립스 마켓(Eclipse Marketplace)가 존재한다. 위 마켓에 들어간 후 Eclipse Enterprise Java and Web Develper Tool eclipse web으로 검색을 하면 이와 같이 "Eclipse Enterprise Java and Web Develper Tool" 이라는 것이 나오는데 Install을 선택하여 플러그인..
바로 이전에 Json 형태로 데이터를 출력하는 것을 만들었는데 이번에는 JSP를 연동하는 기능을 만들어보고자 한다. 스프링부트는 기존 스프링과 달리 JSP를 default로 제공하지 않기 때문에 이렇게 별도로 세팅을 해야 하는 번거러움이 있긴 하다. 의존성(Dependency) 추가 모든 view 페이지는 jsp로 진행하며, jsp는 스프링에서 별도의 디펜던시(dependency)를 추가해야 한다. 만약 maven으로 하였다면, pom.xml에 다음과 같은 dependency를 추가한다 jstl jstl 1.2 org.apache.tomcat.embed tomcat-embed-jasper provided 디펜던시를 추가 하였으면 Gradle Project를 Refresh한다. 그레이들을 리프레쉬하면, 디..
스프링부트(Spring Boot)로 매우 간단히 JSON 구조로 데이터를 출력할 수 있는데 본 포스팅은 프로젝트를 만들고 JSON 구조로 api까지 출력해보는 것을 만들어보고자 한다. 우선 web 형태로 프로젝트를 생성한다. 아래 참고 [Spring] 스프링 부트(Spring boot)로 웹 프로젝트 만들기 스프링부트(Springboot)로 프로젝트를 시작하기 위해서는 우선 프로젝트가 어떤 성격을 띄었는지를 알고, 해당 성격에 맞는 설정을 한 후 Generate를 하는 방법이 있다. 예를 들어 프로젝트가 웹개발 needneo.tistory.com 웹 starter로 프로젝트를 생성하였다면, 다음과 같이 VO(Value Object를 생성한다. Entity 클래스 package com.tistory.nee..
개발을 한지 얼마 되지도 않았고 뭐가 뭔지 잘 모르겠는 스프링 뉴비(newbie)분들은 프로젝트를 하기 전에 우선 프로젝트의 구조를 익히는 것이 좋을 것입니다. 이 포스팅은 너무 자세히는 설명하지 않고 간단히 프로젝트의 구조에 대해서 설명해보겠습니다. 스프링부트 프로젝트 구조 STS를 열고 내가 이미 만들어 놓은 프로젝트를 자세히 보면 아래와 같은 구조로 되어 있을 것입니다. 하나하나 위치별로 다시 설명을 드리자면 자바코드 최상단에 위치한 src/main/java에 있는 곳은 자바 코드가 위치해야 하며, com.tistory.needneo같은 것은 패키지 명입니다. 일반적으로 패키지명을 먼저 설계해서 만들어 놓은 후 자바코드들을 넣습니다. 가장 많이 작업할 공간이며, 패키지명을 잘 설계하는 것과 코드를 ..