본문 바로가기

Java/이론

[ JAVA ], [ JSP(.war) ], [ Thymeleaf(.jar) ]

틀릴 수도 있는 글

 

면접에서 Thymeleaf 써 봤냐고 여쭤보셨다. 차이점을 찾아보다가 WEB, WAS, java 관련까지 갔다.

 

다음 그림을 보면서 이해해야 한다. 보통 서버라고 하면 Web Container안에 있는 WEB, WAS를 통틀어서

말하게 된다. 여기서는 WEB Server, Web Application Server를 확실히 얘기 해야겠다.

 

java랑 thymeleaf랑 같다.

필자가 이렇게 생각하는 이유는 다음과 같다. 우선 java안에서 html파일을 생성한 후에 return하면 웹에서

똑같이 생성된다. 이렇게 되면 jar로 배포해도 된다는 것을 의미한다. Thymeleaf는 Java 코드 안에서 사용할 수 있는

라이브러리이다. 결과적으로 java안에서 html을 사용한다는 것은 같다. 그런데 문제는 동적 웹 애플리케이션을 개발

할 때의 문제이다. 결국 Web Application Server가 필요한데 이제부터 JSP와 thymeleaf의 차이점이다.

 

다음은 대략적인 client가 Web Container에 요청을 할 때의 대략적인 그림이다.

 

 

[ JSP (Java Server Page) ]

"HTML을 포함하는 파일"이며 HTML안에 JAVA코드가 있다.

 

- 클라이언트가 요청을 보내면 Web Server에서 "Servlet"으로 변환한다. 즉 java로 해석하는 것이 아니라 JSP라는

별도의 파일로 해석한 후 Servlet으로 변환하는 것이다. 만약 Servlet에 정적인 콘텐츠(*.html, *.css, *.js)

만 있으면 WEB Server에서 바로 Client에게 리턴해준다. 

 

[ Thymeleaf ]

"Thymeleaf는 Java 코드 안에서 사용할 수 있는 라이브러리" 이다.

 

- JSP는 WEB Server에서 Servlet으로 변환한다. 그러나 Thymeleaf는 결과적으로 정의와 같이 결과론적으로

  Java코드이다. 그러므로 Web Application Server에서 java코드를 해석하고 html을 return하는 것이다. JSP 자체로

  WEB Server에서 해석하는 것이 아니라 Web Application에서 무조건 해석한 후 HTML파일을 parsing하는 것이므로

  WEB Server를 이용하는 JSP보다는 느릴 것이다.

 

※ 꼬꼬무

 

근데 SpringBoot는 Tomcat안에 HTTP Server 있는데 왜 JSP는 jar로 배포하면 안 돼?

그에 대한 답은 Spring Boot의 내장 톰캣(Tomcat, Jetty, Undertow 등)은 주로

JAR 파일 형태로 실행되도록 설계되어 있다.

 

springboot가 아니라 SpringFrame는 Thymeleaf도 .war로 배포해야 한다.

springboot는 Servlet으로 변환하는 JSP에 대한 지원을 확실하게 지원하지 않게 설계했기 때문이다.

 

즉, 단순히 "Thymeleaf는 jar배포가 가능해. JSP는 .war로만 해야돼" 라는 말은 틀린 것이다.

정확히는 "SpringBoot가 Servlet으로 변환하는 기능을 제공해주지 않고 java로 작성하면 그 파일에 맞게

Web Application Server에 전달해줄게" 라는 말이 맞다.

 

단순히 SpringFrameWork와 SpringBoot의 차이점을 내장 톰캣이라고만 알고 있었으면 정확한

차이점을 몰랐을 것이다.

'Java > 이론' 카테고리의 다른 글

[ JVM ] , [ Reflection ] - 나의 생각, 기술적 이론 X  (0) 2024.07.09
getter(), setter() 쓰는 이유  (0) 2024.07.06
Inner Class  (0) 2024.07.06
[ int, double, float, NULL ]  (0) 2024.07.06
[ static ], [ final ]  (0) 2024.07.05