์ด ์ฅ์ ์คํ๋ง์์ ์คํ๋ง MVC๋ก ๋์ด๊ฐ๋ ์ฅ์ด๋ค. ์ง๊ธ๊น์ง๋ ์คํ๋ง์ ๊ธฐ์ด์ ์คํ๋ง ํ๋ก์ ํธ์ DB ์ฐ๋ํ๊ธฐ ๋ฑ์ ๋ด์ฉ์ ๋ฐฐ์ ๋ค๋ฉด ์ด์ ๋ ์คํ๋ง์ด ์ง์ํ๋ ์น MVC ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํด ์น ํ๋ก๊ทธ๋จ์ ์์ฑํ๊ฒ ๋๋ค. build.gradle์ ์์กด์ค์ ์ ํด์ฃผ๊ณ ์๋ฒ๋ ์ค์นํ๊ณ ์ค์ ํ์ผ ์์ฑํ๊ณ web.xmlํ์ผ ์์ฑํ๊ณ ์ปจํธ๋กค๋ฌ ํ์ผ์ด๋ ํ๋ฉด์ ๋ณด์ผ jsp ํ์ผ๊น์ง ์์ฑํด์ค๋ค. ๊ทธ๋ค์ ์น ๋ธ๋ผ์ฐ์ ์ ์ ์ ํ ์ฃผ์๋ฅผ ์ ๋ ฅํ๋ฉด jspํ์ผ์ ์์ฑํ ๋๋ก ํ๋ฉด์ด ๋์จ๋ค.
๊ทธ.๋ฌ.๋. ์ฑ ์์ ํ๋ผ๋ ๋๋ก ํ๊ณ ์๋ฒ๋ฅผ ๋์์ํค๊ณ ํด๋น URL๋ก ๋ค์ด๊ฐ ๋ณด๋ฉด 404 NOT FOUND๊ฐ ๋ฌ๋ค. ์ค๊น..?
์ผ๋จ ์ฑ ์์ ์ฌ์ฉํ ๊ฒ์ eclipse๊ณ ๋๋ VSCode์๋ค. IDE๋ถํฐ ๋ค๋ฅธ ๊ฒ ์์์ด์๊ณ , java ๋ฒ์ ๋ ๋ค๋ฅด๊ฒ ์ฐ๊ณ ์๊ณ , gradle ๋ฒ์ , tomcat ๋ฒ์ , ....... ๊ทธ๋ฅ ๋๊ฐ์ด ํ๋ ๊ฒ ๊ฑฐ์ ์์ ์ ๋๋ก ํ๊ฒฝ์ด ๋ฌ๋๋ค. ์ด ๋ง์ ์ด๋ค ๊ฒ์ด ๋ฌธ์ ์ธ์ง ํ์ ํ๊ธฐ ํ๋ค๋ค๋ ์๊ธฐ์๋ค. ๋ณ์๊ฐ ๋๋ฌด ๋ง์๋ค. ์ธ๋ฉด์ ์ค๋ฅ ์ฝ๋๋ฅผ ๋ถ์ํ๋ค.
์ฑ
์์๋ ํ๋ก์ ํธ๋ฅผ ์๋ฒ์ ์ฌ๋ฆฌ๊ณ ์คํํ ํ ์น ๋ธ๋ผ์ฐ์ ์ฃผ์์ฐฝ์ localhost:8080/ํ๋ก์ ํธ ํด๋๋ช
/hello?name=์ด๋ฆ ์ด๋ฐ URL๋ก ์ ์ํ๋ฉด

์ด๋ฐ ํ๋ฉด์ด ๋ฐ ๊ฑฐ๋ผ๊ณ ํ๋๋ฐ.... ๋ถ๋ช
๊ทธ๋ฌ๋๋ฐ........... ์ญ์๋ ์ ๋ด๋ค. ์ด์ ํ ๋ฒ์ ๋๋ฉด ์ด์ํ ์ง๊ฒฝ์ด๋ค. ํ๋ฉด์ ๋ญ๋ผ๊ณ ๋ด๋์ง ๋ณด์.

๋ฆฌ์์ค๋ฅผ ์ฐพ์ ์ ์๋ค๊ณ ๋ฌ๋ค. ํ๊ฐ ๋ฌ๋ค. ์ ํ๋ผ๋ ๋๋ก ํ๋๋ฐ ์ ๋ ๊น...
์์ฒญ๋ ๋ฆฌ์์ค[/app/hello]์(๋) ๊ฐ์ฉํ์ง ์์ต๋๋ค.
์ด ๋ฉ์์ง๋ฅผ ๋ ๊ตฌ๊ธ๋ง ํด๋ดค๋ค. ์ด ์ค๋ฅ๋ ์๋ฒ ์ค์ ์์ CLASSPATH๋ฅผ ์๋ชป ์ก์์คฌ์ ๋ ๋์จ๋ค๊ณ ํ๋ค. ์ด๊ฑธ ํด๊ฒฐํ ์ฌ๋๋ค์ ์ ๋ถ๋ค eclipse๋ฅผ ์ฐ๊ณ ์์๋ค. ๋๊ฐ์ด VSCode๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋์ ์์๋ค.. VSCode๋ก Spring Boot ๋ง๊ณ Spring MVC๋ก ํ๋ก์ ํธ๋ฅผ ํ ์ฌ๋์ ์๋ ๊ฑธ๊น....? ๋ ์ด์ VSCode๋ก ํด๊ฒฐํ ๋ฐฉ๋ฒ์ด ์์ด ๋ณด์๋ค.. ๊ทธ๋์ ๊ทธ๋ฅ eclipse๋ก ๊ฐ์ํ๊ธฐ๋ก ํ๋ค. ์๋ฒ ์ค์ ์ค๋ฅ์ธ๋ฐ ๊ตฌ๊ธ๋งํด๋ ๋์ค์ง ์๋ VSCode์์ ์๋ฒ ์ค์ ํ๊ธฐ๋ฅผ ๋ด๊ฐ ํด๊ฒฐํ ์ ์์ ๊ฒ ๊ฐ์ง ์์๋ค. (์๋ค๋ฉด ์๋ ค์ฃผ์ธ์.. ์ ๋ ๋ชป ์ฐพ์์ด์....)
๊ทผ๋ฐ eclipse๋ก ํด๋ดค๋๋ฐ๋ 404๊ฐ ๋ด๋ค...ใ ๋ธ๋ผ์ฐ์ ์ ๋์ค๋ ๋ด์ฉ์ ๋๊ฐ์๋๋ฐ ์๋ฒ ์คํ ์ ์ฝ์ ์ฐฝ์ ์ค๋ฅ๊ฐ ๋ด๋ค.

์ฌ๊ฐ: ํํฐ [encodingFilter]๋ฅผ ์์ํ๋ ์ค ์ค๋ฅ ๋ฐ์
java.lang.ClassCastException: class org.springframework.web.filter.CharacterEncodingFilter cannot be cast to class jakarta.servlet.Filter
์ฌ๊ธฐ์ encodingFilter๋ ๋ด๊ฐ web.xml์์ ์ค์ ํ ํํฐ ์ด๋ฆ์ด๋ค. org.springframework.web.filter.CharacterEncodingFilter๊ฐ jakarta.servlet.Filter๋ก cast ๋ ์ ์๋จ๋ค. ๋ ๊ตฌ๊ธ๋ง์ ํด๋ดค๋ค.
java.lang.ClassCaseException๋ ํด๋น class๋ฅผ ์ฐพ์ ์ ์๊ธฐ ๋๋ฌธ์ ๋์ค๋ ์ค๋ฅ๋ผ๊ณ ํ๋ค. ์ด๋ค ๋ธ๋ก๊ทธ(๋ฐ์ ์ถ์ฒ ์์)์์๋ ์ด๋ฅผ ํด๊ฒฐํ ๋ฐฉ๋ฒ์ผ๋ก
๋ ๊ฐ์ง๋ฅผ ์ ์ํ๋ค. ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ์๋ํ์ ๋๋ ๋ณ ๋ณํ๊ฐ ์์๊ณ , ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ์๋ํ๋๋ ์ค๋ฅ ๋ด์ฉ์ด ๋ฐ๋์๋ค.

java.lang.ClassCastException: class org.springframework.web.servlet.DispatcherServlet cannot be cast to class jakarta.servlet.Servlet
์ด๋ฒ์ dispatcher๋ผ๋ ์ด๋ฆ์ผ๋ก ์ค์ ํ ์๋ธ๋ฆฟ์ด cast ๋ ์ ์๋ค๋ ๋ง์ธ ๊ฒ ๊ฐ๋ค. ์ฌ๊ธฐ์ dispatcher๋ ๋ด๊ฐ web.xml์์ ์ค์ ํ ์๋ธ๋ฆฟ ์ด๋ฆ์ด๋ค. ์ด๋ฒ์๋ ๊ตฌ๊ธ๋ง์ ํด๋ดค๋ค. jakarta.servlet.Servlet ์ด๋์ด ๋ญ๊ฐ ์์ํ๋ค. ์ฐพ์๋ณด๋ ์ง๊ธ ๋ด๊ฐ ์ฐ๊ณ ์๋ tomcat ๋ฒ์ ์ด 10์ด์๊ณ 9์ 10์ ํฐ ์ฐจ์ด๊ฐ ์์ผ๋ฉฐ 9๊น์ง๋ API ๊ตฌํ์ฒด๊ฐ JavaEE(javax.)์ด๊ณ 10๋ถํฐ๋ JakartaEE(jakarta.)๋๋ค. ์ฆ, ๋ด๊ฐ ์ง๊ธ ์ฌ์ฉํ๊ณ ์๋ API ๋ฐฉ์์ JavaEE์ธ๋ฐ ์๋ฒ๋ jakartaEE ๋ฐฉ์์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ตฌ๋์ด ์ ๋๋ ๊ฒ์ด์๋ค. Homebrew๋ก tomcat์ ์ค์นํ ๋ ๋ฒ์ ๋ณ๋ก ํฐ ์ฐจ์ด๊ฐ ์๋ ์ค ์๊ณ ๊ฐ์ฅ ์ต์ ์ tomcat ๋ฒ์ ์ ์ค์นํ ํ์ด์๋ค. ๊ทธ๋์ tomcat9๋ฅผ ๋ค์ ๊น๊ณ tomcat9์ ํ๋ก์ ํธ๋ฅผ ์ฌ๋ฆฌ๋๊น ์ ๊ตฌ๋๋๋ค. ์์ ํํฐ๋ ์ฌ์ค์ tomcat์ ๋ฌธ์ ์๋ ๊ฒ ๊ฐ๋ค. ๊ฒฐ๊ตญ... ๋ ๋ฒ์ ๋ฌธ์ ์๋ค. ๋ฒ์ ๋ณ ์ฌ์์ด๋ ์ฃผ์์ ์ ์ ์๊ณ ์ฌ์ฉํด์ผ ํ๋ค๋ ๊ตํ์ ๋ ์ป์๋ค.
์ด ์ฅ์ 9์ฅ์์ ์์ฑํ ์ฝ๋๋ก ์คํ๋ง MVC ํ๋ ์์ํฌ๊ฐ ๋์ํ๋ ๋ฐฉ์์ ์ค๋ช ํ ์ฅ์ด๋ค. ์๋ก ์์ฑํ๋ ์ฝ๋๋ ์์๊ณ , ์ด๋ป๊ฒ ๋์ํ๋์ง ์ดํดํ๋ฉด์ ์ฝ๊ณ ์ง๋๊ฐ๋ค.
์ด๋ฒ ์ฅ์ ํด๊ฒฐ๋ ๊ฒ ๊ฐ์ง ์์๋ ์ค๋ฅ๋ฅผ ํด๊ฒฐํ ์ ์๋ ๊ฐ์ง ์๊ฐ์ด์๋ค. ํด๊ฒฐํ์ง ๋ชปํ ์ค ์๊ณ ๊ทธ๋ฅ Spring Boot๋ก ๋์ด๊ฐ๊น ์์ฒ ๋ฒ ๊ณ ๋ฏผํ๊ณ , ์ค์ ๋ก ์ด์ ๊น์ง๋ง ํด๋ ๊ทธ๋ฅ Spring Boot๋ก ๋์ด๊ฐ์ผ๊ฒ ๋ค๊ณ ์๊ฐํ๊ณ ํ๋ก์ ํธ๊น์ง ๋ง๋ค์๋ค. ๊ทธ๋ฐ๋ฐ ๊ทธ๋๋ ๋๊น์ง ์ ํด๋ณด๋ฉด ์์ด ์์ํ์ง ์์ ๊ฒ ๊ฐ์ ๋ง์ง๋ง์ผ๋ก ํด๋ณด์ ํ๊ณ ๋์ ํ๋ค. VSCode๋ก ํด๊ฒฐํ ๊ฒ ์๋๋ผ ์ฐ์ฐํจ์ด ์กฐ๊ธ ๋จ๊ธด ํ์ง๋ง ๊ทธ๋๋ ์ด๊ฒ ์ด๋๋ ์ถ๋ค. ์ด์ฐจํผ ์ฑ
์์๋ eclipse๋ก ํ์ผ๋ VSCode๋ ๋ชป ํ๋ ๊ฒ ๋น์ฐํ๊ฐ ์ถ๊ธฐ๋ ํ๊ณ , VSCode๋ก ์๋ฒ ์ฐ๋ํ๋ ๊ฑด ํ๊ณ๊ฐ ์๋ ๊ฑด๊ฐ ์ถ๊ธฐ๋ ํ๊ณ ... ์ด์จ๋ ๊ฐ ์์ ์ฝ๋๋๋ก ์งํํ๋ค๋ ๊ฒ์ ์์๋ฅผ ๋๊ณ ์ด๋ฒ ์ฅ์ ๋ง์น๋๋ก ํ๊ฒ ๋ค. (๊ทผ๋ฐ ์ VSCode๋ก๋ ํด๊ฒฐ์ด ์๋๋๊ฑธ๊น.. ์์ง๋ ๊ถ๊ธํ๋ค. Deployment Assembly์ Java Build Path๋ฅผ ์ถ๊ฐํ ์ ์์ด์ ๊ทธ๋ฐ๊ฑธ๊น..? ํน์๋ ํด์ tomcat9์ ํ๋ก์ ํธ๋ฅผ ์ฌ๋ ค๋ดค๋๋ฐ ์ญ์๋ ์๋๋ค.. ์ค๊น.. ๋๋ฌด ์๊ณ ์ถ๋ค...)
P.S. VSCode์ ์ฝ๋ ์๋์์ฑ ๊ธฐ๋ฅ์ ๋์น ์ ์๊ธฐ ๋๋ฌธ์ ์์ผ๋ก ์์ค ์ฝ๋ ์์ฑ์ VSCode๋ก, ์๋ฒ์ ์ฌ๋ ค์ ๊ตฌ๋ํ๋ ๊ฒ์ eclipse๋ฅผ ์ฌ์ฉํ ์์ ์ด๋ค. ์์ ์๋ eclipse๋ ์๋ง ์ผ๋๋ฐ VSCode๋ฅผ ๊ฒฝํํ๊ณ ๋๋ ๋๋ฌด ๋ถํธํ๋ค.. ์๋ ์๋ ์ด๋ป๊ฒ ์ผ์์๊น...?
java.lang.ClassCastException: class org.springframework.web.filter.CharacterEncodingFilter ํด๊ฒฐ๋ฐฉ๋ฒ- https://jeaha.dev/73
cannot be cast to jakarta.servlet.Servlet ํด๊ฒฐ๋ฐฉ๋ฒ - https://velog.io/@softpeter/cannot-be-cast-to-jakarta.servlet.Servlet-%ED%95%B4%EA%B2%B0%EB%B0%A9%EB%B2%95
tomcat 9/10 ๋ฒ์ ๋ณ ์ฐจ์ด - https://blog.itcode.dev/posts/2022/02/12/tomcat-9-and-10