maven archetype 버전 함정: 생성기가 만들어준 기본값은 내 환경 기준이 아니었다

maven-archetype-webapp이 만든 pom.xml 컴파일 버전 1.7, web.xml 2.3 때문에 안 돈다. javax와 jakarta 차이(톰캣 9 vs 10), 버전이 세 군데 흩어져 있는 문제까지.

조회
목차

서블릿 게시판의 첫 단계. 브라우저에서 주소를 치면 내가 만든 자바 클래스가 응답하는 것까지다. 코드는 몇 줄 안 되는데 띄우기까지가 하루였다.

톰캣 버전 하나 때문에 예제가 다 안 돌았다

깔려 있던 톰캣이 11이었고, 자료는 전부 9 기준이었다.

톰캣 10부터 서블릿 패키지 이름이 바뀌었다.

javax.servlet    // 톰캣 9까지
jakarta.servlet  // 톰캣 10부터

오라클이 자바 EE를 재단에 넘기면서 javax라는 이름을 못 쓰게 돼서 생긴 변경이다. 기능은 똑같고 이름만 다르다.

근데 JSP/Servlet 자료가 거의 다 javax 기준이라 예제를 그대로 옮기면 안 돈다. 톰캣 9를 따로 깔았다.

만들어준 프로젝트 뼈대가 2001년이었다

Maven의 maven-archetype-webapp으로 프로젝트를 만들었다. 만들어준 거니까 맞겠지 하고 그대로 썼다.

파일기본값문제
pom.xml컴파일 버전 1.7JDK 21은 1.7을 아예 못 받는다
web.xml서블릿 2.3 규격2001년 규격. 쓰려는 건 4.0

여기서 알게 된 게, 버전이 세 군데에 따로 적혀 있다는 거였다.

  • JDK 버전 (내 컴퓨터에 깔린 것)
  • pom.xml의 컴파일 버전
  • web.xml의 규격 버전

이게 서로 안 맞아도 각자는 조용하다. 파일을 열어봐도 아무 표시가 없다. 실행할 때가 되어서야 터진다.

복사한 XML에 닫는 태그가 안 따라왔다

라이브러리를 추가하려고 사이트에서 XML을 복사해 붙였는데 이런 에러가 났다.

Duplicated tag: 'groupId' @ line 16

</dependency> 닫는 태그가 안 따라와서 <dependency> 하나 안에 라이브러리 세 개가 다 들어가 있었다. groupId가 세 번 나오니 Maven이 어느 라이브러리 정보인지 몰라서 못 읽은 거다.

그리고 같은 실수를 web.xml에서도 했다. 새로 여는 태그를 넣고 원래 있던 걸 안 지워서 여는 태그 2개, 닫는 태그 1개가 됐다.

헤더는 블로그 말고 톰캣한테 물어봤다

web.xml 맨 위 헤더를 정확히 뭘 써야 하는지 몰랐다. 블로그마다 조금씩 달랐다.

그러다 톰캣이 자기 설정 파일을 갖고 있다는 걸 알았다.

/opt/homebrew/opt/tomcat@9/libexec/conf/web.xml

여기 18~22줄에 정확한 4.0 헤더가 있었다. 톰캣이 자기가 쓰는 걸 적어놓은 거니까 블로그보다 확실한 출처다.

에디터가 이상한 데서 돌고 있었다

자바랑 상관없는데 하루를 잡아먹은 것 중 하나라 적어둔다.

VS Code가 /Applications에 없는데 실행은 되고 있었다. 프로세스 경로를 보니 이랬다.

/private/var/folders/.../AppTranslocation/B4D4AFF4-.../Visual Studio Code.app

macOS가 격리 속성이 붙은 앱을 임의의 임시 경로로 옮겨서 실행하는 기능이다(App Translocation). 그래서 code 명령도 안 잡히고 자동 업데이트도 안 됐다. 버전이 한참 전에 멈춰 있었다.

터미널에서 mv/Applications에 옮겼는데도 계속 임시 경로로 떴다. mv는 격리 속성을 안 지운다. Finder로 옮기면 지워진다.

남길 것

  • 생성기가 준 기본값은 내 환경 기준이 아니다. 만들어준 파일도 버전부터 확인한다.
  • 버전이 여러 군데 흩어져 있고, 안 맞아도 조용하다. 실행할 때 터진다.
  • XML을 복사할 때 닫는 태그까지 왔는지 본다. 같은 실수를 두 파일에서 반복했다.
  • 도구가 쓰는 설정 파일이 가장 정확한 예제다. 톰캣의 conf/web.xml처럼.
  • 뼈대만 만들어도 바로 커밋한다. 커밋 안 한 건 없는 것과 같다.
  • macOS 앱은 압축 풀고 바로 실행하지 말고 /Applications로 옮긴다. 옮길 때는 Finder로.

더 봐야 할 것

  • javax 자료가 정말 더 많은 게 맞는지. 서블릿 클래스 쓰면서 확인해볼 참
  • 톰캣이 두 개(9, 11) 깔려 있는데 나중에 헷갈리는 일이 생길지

사이트 내 검색

제목·태그·설명·본문으로 발행 글을 찾습니다