Spring boot는 WAS 설정이 필요없는 Framework
Jhipster를 설치하고 환경세팅하려다가 이러한 문구를 발견하였다[1].
Spring boot : 스프링에서 어려운 설정이나 WAS에 대한 설정없이 바로 개발에 들어갈 수 있도록 만드는 프레임워크
WAS라는 단어가 자주 보였는데, 나는 이러한 단어를 본 적이 없다. 찾아보니 풀어쓰면 Web Application Server였다. 아직 명확한 뜻을 이해하지 못했다. WAS가 뭘까?
WAS의 구조
Web Application Server는 Web Server를 포함하는 개념이라고 한다. 정확히는 Web server + Web Container이다. 그리고 Web Container에 대한 설명에서 이러한 문구를 발견했다[2].
JSP와 Servlet을 실행시킬 수 있는 소프트웨어
웹 프로그래밍 수업에서 JSP와 Servlet을 배우지 않아서... 이 부분에 대해서도 간단히 찾아봤다.
JSP와 Servlet의 차이
우선 두 가지 모두 JAVA를 이용한 서버 개발에 사용되는 것이다. JSP와 Servlet을 비교한 내용은 아래와 같다[3].
- JSP
- HTML 내부에 JAVA 코드가 들어감
- Hello world 예제코드[4]
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<h1>Hello world!</h1>
</body>
</html>
- Servlet
- JAVA 코드에 HTML이 들어감
- Hello world 예제코드[5]
package ...
import ...
public class HelloController extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
PrintWriter out = resp.getWriter();
out.println("<html>");
out.println("<body>");
out.println("Hello!!! World!!!");
out.println("</body>");
out.println("</html>");
}
}
예제코드를 보니 차이가 명확했다. JSP는 html이고, Servlet은 Java였다. 그리고 JSP는 결국 http request 요청을 받으면, html 내용을 해석하여 Servlet으로 바꾸고 Java 어플리케이션을 실행하여 응답하는 형식이라고 한다[3].
Web Container의 역할
즉, Web Container는 Client의 요청에 따라 Java 어플리케이션을 생성해내고, 이 어플리케이션이 응답을 처리하도록 해주는 역할이다. 위 예제가 약간 부실할 수도 있지만, 두 예제를 비교하면 한 눈에 보기에도 JSP가 더 간단해보인다. Servlet 예제를 보면 html의 tag를 모두 하나씩 출력해주고 있다. 그러나 JSP가 결국 Web Container에서 Servlet으로 변환한다면, 속도 측면에서는 servlet이 더 효율적일 수도 있다는 생각이다.
Web server와 WAS의 차이
그래서 현재까지 조사한 바로는 Web server와 WAS의 가장 큰 차이는 정적(static) 컨텐츠와 동적(dynamic) 컨텐츠의 제공이다. WAS는 Web server + Web Container이며, Web Container가 Java 어플리케이션을 통해 컨텐츠를 작성하고, Web server는 이미 작성된 file이 응답으로 client에게 돌아간다. 결국 WAS 흔히 말하는 web언어가 아닌 언어로 웹서버를 구축하기 위한 미들웨어라고 생각하면 될 것 같다.
정리
먼저 이 내용을 정리하게 된 이유다. Spring을 해보면서 서버를 구축하기 위한 많은 과정이 생략되었다고 느꼈는데, 중간에 빠진 무언가를 찾을 수 있는 실마리였던 것 같다. Java로 서버를 구축해보지 않은 입장에서 이 부분은 나에게 중요한 내용이었다. Servlet을 더 살펴보면 더 많은 것이 이해될 거라 생각한다.
두 번째로, 웹 서비스 아키텍처에 대한 이해에 도움이 되었다. 진작에 알았어야 하는 내용이지만... 여태 공부하면서 Java에도 웹에도 관심이 없었는데, Java로 웹서버를 구축하는 내용은 들여다 본 적도 없었다. 이제라도 이런 부분을 접해서 다행이고, 솔직히 재밌다.
세 번째는 의문점인데, 정적/동적 컨텐츠의 정의이다. 우선 php도 요청에 따라 다양한 응답을 할 수 있다고 생각한다. php는 WAS가 없다(컴파일하여 어플리케이션을 생성하는 것이 아니니까)라는 것은 이해가 되는데, WAS와 Web server의 차이가 동적/정적 컨텐츠라면, php는 정적 컨텐츠를 제공하는 것인지가 의문이다. 작성된 file로 응답을 하는 것이기 때문이라면 용어의 모호함이 있다고 생각한다.
참고
[1] https://velog.io/@dsunni/JHipster-JHipster%EB%9E%80
[2] https://helloworld-88.tistory.com/71
[3] https://javacpro.tistory.com/43
[4] https://m.blog.naver.com/lgr0406/221707091953
[5] https://deveric.tistory.com/6
[6] https://ko.wikipedia.org/wiki/%EC%9B%B9_%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88
[7] https://galid1.tistory.com/486
[9] https://soyeondev.tistory.com/147
'고민하기' 카테고리의 다른 글
기업이 말하는 백엔드 개발자 (4) | 2021.07.14 |
---|---|
Python의 Hashable (Dictionary의 key가 되는 기준은 무엇일까?) (0) | 2021.07.12 |
[번역 - Cornell Univ.] 분할 상환 분석 (Amortized Analysis) (0) | 2021.07.09 |
빅오(O)는 왜 최악의 경우가 아닐까 (0) | 2021.07.02 |
구글 파이썬 스타일 가이드 - 2.12 Default Argument Values (Mutable vs Immutable) (0) | 2021.06.29 |