Spring Boot

[Spring boot] 인텔리제이 설정 에러. "Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed;..."

라임오렌지원 2022. 12. 3. 18:44

RequestDto에 Builder를 써줄 필요는 없었지만, 어쩌다가 썼다가 발생한 에러.

빌더와는 무관할 것 같은데 왜 에러가 나는지 궁금했다.

500 에러요 ???

 

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; ...

 

이게 무슨 에러람 .. ? 하고 찾다가 원하는 답을 얻지 못해 집으로 돌아가서

윈도우 데스크탑으로 git pull 받아 시도해봤다.

그런데 이게 웬열. 정상적으로 데이터가 들어갔고, 맥북으로 다시 들어와서 시도했는데 맥북은 여전히 같은 에러였다.

 

같은 코드인데 왜 맥북만 에러가 나지 ? 

 

뭔가 스프링 프레임워크에서 일어난 것 같다.

친구에게 도움을 요청.

 

해결 방법은 설정을 바꿔주면 되었다.

알고보니 윈도우에서 쓰고있는 인텔리제이 설정과 맥에서 쓰고있는 인텔리제이 설정이 달랐다.

 

 

 

intelliJ IDEA 에서 Preferences 를 들어가면

이렇게 되어있었는데, Gradle로 바꿔주면 된다.

 

 

이게 무슨 차이일까 ??

 

* 그 전에, Build와 Compile 이란?

Build ???

빌드를 이야기하면 컴파일이라는 단어도 같이 정리되곤 하는데 컴파일은 빌드 안에 포함된다고 생각하면 된다.

인텔리제이와 같은 IDEA에서는 보통 프로젝트를 실행하면 자동으로 빌드를 실행한다.

-> 프로그래밍 된 코드를 컴파일하고 실행 가능한 결과물로 만드는 과정.

IDEA에서는 보통 실행을 시키면 컴파일을 포함한 빌드 과정을 거쳐 실행 가능한 결과물을 만들고 그것을 실행시킨다.

 

Compile ???

사람이 이해할 수 있는 프로그래밍 언어로 작성된 코드를 컴퓨터가 이해할 수 있는 더욱 저차원적인 코드 또는 기계어로 변환하는 것을 의미한다. 자바의 경우 JVM이 이 컴파일러 역할을 수행해주고 있다. 이와 같은 컴파일 과정을 거치면서 프로그래밍 언어로 작성된 코드가 문법적으로 이상은 없는지 또는 Checked Exception은 없는지 검사를 하고 알려준다.

 

 

Gradle Build

오픈 소스 빌드 자동화 도구.

Gradle은 build.gradle 파일을 사용하며 Maven과 동일하게 개발자가 사용할 라이브러리를 정의해 둘 수 있다.

Gradle 역시 정의된 라이브러리뿐 아니라 그 라이브러리를 사용하는데 필요한 종속된 다른 라이브러리까지 관리해 자동으로 다운로드하여 사용할 수 있게 해 준다.

 

 

IntelliJ IDEA Build

인텔리제이 자체에서 제공하는 빌드 자동화 도구.

IntelliJ 빌드 시스템은 IntelliJ의 자체 빌드 메커니즘으로 단순하게 프로젝트의 모든 수정 내용과 종속 파일을 컴파일하는 기능이다.

여기서 문제는 수정 내용과 종속된 파일만 빌드한다는데 있다는 것.

안타깝게도 Maven과 Gradle과 달리 순수하게 빌드를 수행한다.

그로 인해 아티팩트 생성, 리포지토리 배포, CodeGen과 같은 다른 작업을 수행하지 않는다.

 

위와 같은 이유로 인해 대부분의 개발자들은 Maven과 Gradle과 같은 빌드 툴을 사용한다고 한다.

그리고 둘의 가장 큰 차이점은 증분 빌드 이냐 아니냐 라는 것인데.

 

증분 빌드(Incremental build)

증분된 부분, 즉 변경된 부분만 빌드를 하는 방식으로 변경되지 않은 것에 대해서는 건너뛰고 빌드를 진행해서

빠른 빌드를 원할 경우 선택하는 방법이다.

IntelliJ IDEA가 바로 증분 빌드인데. -> 그래서 IntelliJ IDEA가 Gradle 빌드 방식보다 빠르게 빌드를 수행할 수 있었던 것.

 

하지만 증분 빌드이므로 IntelliJ IDEA 빌드 방식은 "최신이다" 라고 판단하여 건너뛰고 빌드를 진행해,

빌드를 진행하고 나온 결과물에 실제로 변경된 부분이 반영되지 않고 빌드가 완료될 수 있다.(두 번째 참고사이트에서 이미 삭제한 파일에 대해서 변경사항이 없다고 판단해 삭제됐던 파일이 그대로 포함된 상태로 빌드가 완료되었다.)

따라서, 정확한 빌드를 원한다면 IntelliJ IDEA 빌드 방식이 아닌 Gradle 빌드 방식을 선택해야 한다.

 

 

https://smoh.tistory.com/467

 

[IntelliJ] Java 빌드 시스템: IntelliJ, Maven, Gradle

자바 빌드 시스템에 대해 알아봅니다. 1. Maven 전통적인 빌드 툴입니다. 시작은 Apache ANT의 대안으로 시작되었으며 자바 프로젝트의 전체적인 관리를 가능하게 함과 동시에 많은 편리함과 이점을

smoh.kr

 

https://pamyferret.tistory.com/m/62

 

Build Gradle vs IntelliJ IDEA

작년에 처음 IntelliJ IDEA를 사용하기 시작하면서 이클립스와는 다른 단축키들을 익혔었다. 그 중 하나가 Gradle Project를 Gradle로 빌드 할건지 IntelliJ IDEA로 빌드할 것이지 설정이었다. 처음에는 기본

pamyferret.tistory.com

 

 

 

설정을 바꾸고 다시 확인한 결과, 데이터가 잘 들어갔다 !

728x90