이전 포스팅에서 packaging을 jar->war로 변경하면서 디렉토리 구조, 실행 환경 등이 바뀐 것을 볼 수 있었다.
서블릿 / JSP 라이브러리 설정
webapp 디렉토리에 index.jsp 파일을 생성하면 아래와 같은 에러가 발생하는데 이는 서버(톰캣) 관련 라이브러리를 포함하지 않았기 때문에 나타난다.
따라서 프로젝트를 오른쪽 클릭해서 Build Path > Configure Build Path를 선택한 후
Library 탭에서 Add Library를 선택하고
Server Runtime 을 선택한 뒤
본인의 서버를 선택해주면 된다.
아래와 같이 해당 라이브러리가 추가된 것을 확인할 수 있다.
여기서 Tomcat 라이브러리를 사용하겠다는 것은 위에 추가된 Tomcat 자체가 라이브러리라는 것이 아니라 Tomcat을 설치하고 생성된 폴더에 있는 lib 폴더는 Tomcat을 운영하는데 필요한 실제 library 들이 있는 폴더이다.
우리는 여기에 있는 실제 library들을 사용하겠다는 뜻이다.
하지만 이는 절대경로로 추가가 된 것이므로 향후 다른 작업환경이라든지 경로가 바뀌었을 때 대처를 할 수 없다. 그렇다고 프로젝트마다 라이브러리를 가져가도록 하기에도 불편하다. Maven은 이에 대해 편의를 제공해준다.
일단 추가했던 Server Runtime [Apache Tomvat v8.5] 를 Remove 해주자.
그렇다면 라이브러리를 어떻게 포함시킬 것인가??
POM.xml을 살펴보면 <dependencies> 라는 태그가 있고 그 안에 <dependency>가 있다. 이 말은 즉, 부품이란 뜻이고
다른 말로는 <library>라고 말할 수 있겠다.
지금까지 필요한 라이브러리가 있으면 위에서 했던 작업처럼 직접 홈페이지를 방문해서 다운로드 받고 그 경로를 추가하는 번거로운 작업을 진행했었다.
하지만 Maven을 사용하면 필요한 라이브러리들을 <dependencies> 태그 안에 준비해 둘 수가 있는 것이다.
Maven 라이브러리
먼저 메이븐 라이브러리가 어디로 다운되는지 알아야 한다. 이전 터미널에서 입력할 때 maven-archetype-quickstart라는 archetypeArtifactId를 타이핑하였고 이에 아주 많은 실행 내용이 지나갔다.
해당 과정이 메이븐 원격 저장소로부터 로컬 저장소로 다운 받는 과정이다. 하나의 프로젝트에 필요한 라이브러리들이 Dependencies의 내용에 알맞게 다운이 되며 추후 다른 프로젝트가 생성되어도 겹치는 라이브러리는 공유하고 로컬 저장소에 없는 것들만 추가로 받는다.
즉, 아래 예시처럼 java, web 프로젝트가 각각 있고 두 프로젝트에 겹치는 라이브러리가 있다면 이는 공유하는 것이다.
이때 이 원격 저장소에서 가져온 것은 기본적으로 로컬 ${user.home}/.m2/repository 경로에 저장한다.
Maven 원격 저장소(중앙 저장소)에서 필요한 라이브러리를 검색할 수 있으며 직접 다운 받을 수도 있다.
하지만 JSP 라이브러리가 필요한데 정확히 무슨 버전을 다운로드 받아야할지 모를때가 대부분일 것이다.왜냐하면 우린 Tomcat에 포함되어 있는 JSP를 자연스럽게 사용하기 때문이다.
그래서 Tomcat 9버전에 따른 JSP 라이브러리가 필요하다면 tomcat jsp 와 같이 키워드를 검색하고 적절한 API를 선택한다. 그럼 Tomcat 버전에 따라 다양한 라이브러리들이 있는데 그 중 본인이 사용하고 있는 버전에 맞는 API를 클릭하면 아래와 같은 페이지가 나온다.
난 Toncat-8.5.83을 eclipse에서 사용하였고 Tomcat JSP API 도 같은 버전을 선택하여 copy하였다.
이때 Maven 탭 내에 있는 내용을 클릭만 해도 Copied to clipboard!라며 친절히 복사되었음을 알려준다.
이 내용을 <dependencies>내에 삽입해준다. 저장하면 이에 대해 원격에서 로컬로 저장이 진행된다.
dependency를 추가하면 로컬의 .m2/repository/org/apache/tomcat에 jsp 라이브러리가 저장된 것을 확인할 수 있다.
또한 project내의 Maven Dependencies에도 추가된 것을 확인할 수 있다. 이때 우린 JSP dependency만 추가를 했지만 JSP를 사용함에 있어서 필요한 종속적인 라이브러리도 같이 저장된 것을 볼 수 있다.
이제 처음에 추가했던 Index.jsp 파일을 보면 error 표시가 사라진 것을 확인할 수 있다.
만약 Maven을 사용하지 않고 일일이 라이브러리를 추가했다면 Class Not found 라는 error가 발생했을 것이다.
그러면 해당 라이브러리를 추가해주고 또 class not found가 발생하는 끝도 없는 라이브러리 추가 늪에 빠지게 된다...
드디어~~Maven을 사용하는 큰 이유 중 하나를 파악하게 됐다!!!