서버정지시 fail : https://www.inflearn.com/questions/356957
build.gradle 설정 : https://www.inflearn.com/questions/176890
강의 정말 유익하게 잘보고 있습니다!
강의 시청 중 장애를 만나 이를 해결하려다 여러 문제가 복합적으로 터졌고 답변과 구글링을 통해 어찌저찌 해결은 했으나 제가 맞게 해결한건지 아니면 임시방편으로 때운건지 알고싶어서 질문드립니다. 현재 사용중인 intellij는 edu버전(ce와 거의 비슷하다고 알고있습니다)입니다. 장애가 발생한 실습은 mvc패턴 적용편의 MvcMemberFormServlet과 new-form 작성이었는데요. 이전 강의들에선 기본적으로 빌드 툴을 그래들에서 인텔리제이로 바꿔서 진행하는 것이 낫다고 하셔서 그대로 진행했습니다.
하지만 이번강의에선 무료버전을 사용중이면 빌드툴을 그래들로 실행하라고 매뉴얼에 적혀있어 바꾼 뒤 진행했습니다.
그런데 new-form 작성이 끝나고 서버를 재부팅하자
Execution failed for task ':ServletApplication.main()'.> Process 'command 'C:/Program Files/Java/jdk-11.0.14/bin/java.exe'' finished with non-zero exit value 1가 발생하였고
혹시나 싶어서 빌드툴을 인텔리제이로 바꾼 뒤 실행하자 ApplicationContext 관련 장애가 발생하여 구글링을 하기 시작했고
위에 작성한 답변들을 바탕으로 이렇게 생각하였습니다.
1. ApplicationContext가 스프링 컨테이너와 관련이 있다고 배웠었고 톰캣은 웹 서버와 스프링 컨테이너를 내장하고 있기때문에 톰캣이 정상 작동하지 않아서 ApplicationContext가 발생했고 이는 dependency문제때문인가?
2. 구글링해서 알아보니 JSP를 jar에서 실행하지 못하는건 jar와 war의 디렉터리 구조가 다르고 WAR의 WEB-INF 디렉터리가 tomcat의 default기 때문이라고 되어있어 혹시 web-inf 바깥의 jsp파일이 존재하기 때문에 그러는 것일까?
그래서 1. build.gradle의 providedRuntime 삭제 2. 빌드툴을 인텔리제이로 변경 3. gradle JVM 경로 재설정
이 과정을 진행했는데도 문제가 해결되지않아 계속 살펴보았고 결국 WEB-INF밖에 위치한 모든 JSP파일을 지운 후에야 서버가 정상적으로 켜졌습니다. 결과적으로 보면 jsp파일의 경로가 잘못되어 생긴 문제 같은데 너무 글이 길어진 것 같아 죄송하지만 해결하는 과정에서 생긴 exception들이 너무 많아 혼란스러워 이렇게 질문드립니다.
1. jsp 실습을 위해 WAR를 사용하신 것 같은데 WAR는 별도의 설정이 없다면 외부 톰캣을 라이브러리로 받아 실행해야하는데 이 과정에서 인테리제이 ce버전은 providedRuntime 코드를 인식하지 못하여 톰캣이 실행되지 않아 이 코드를 지워 jar같이 내장 톰캣을 사용하도록 바꾼 것이 맞나요?
2. 알아본바로 실행가능한 .jar는 내장 톰캣이 web-inf내에 위치하지 않은 jsp는 사전정의된 구조를 따르지 않아 실행할 수 없다고 되어있던데 dependency에서 providedRuntime 코드를 지워 내장 톰캣을 사용토록 한 것이 맞다면 jar와 같은 방식으로 빌드되어 web-inf 바깥의 jsp를 인식하지 못한 것인가요?
3. 빌드툴을 인텔리제이에서 그래들로 바꾸면 자바 플러그인 등 더 많은 기능을 포함하여 빌드하기때문에 Execution failed for task ':ServletApplication.main()가 발생하는 것 같은데 이 생각이 잘못된건가요?
너무 질문글이 길어 보시느라 소중한 시간을 뺏은 것 같아 너무 죄송합니다 ㅠㅠ 그래도 글에서 어느게 맞고 어느게 틀린건지 조금이라도 답변해주시면 정말 감사할거같아요.
아닙니다 영한님. 강의 정말 잘보고 있습니다! 아무래도 ce버전인만큼 ide 관련해서 정확한 답변을 주실 수 없을 것 같았지만 강의 실습에 문제가 없는 상황이니 괜찮습니다. 강의를 들으며 스스로 한 번 왜 이렇게 됐는지 고민해보겠습니다.