기본 지식 링크
https://brilliantdevelop.tistory.com/152
https://brilliantdevelop.tistory.com/32
https://brilliantdevelop.tistory.com/33
https://brilliantdevelop.tistory.com/34
네트워크
:서로간의 통신을 위해 두 개 이상의 장치들이 연결되어 있는 통신 구조.
인터넷
:수많은 컴퓨터 네트워크들을 연결시키는 네트워크
World Wide Web
안터넷에 연결된 컴퓨터를 통해 사람들이 정보를 공유할 수 있는 전 세계적인 정보 공간.
세계적으로 넓게 퍼져 마치 거미줄 같음. 간단히 Web이라고도 함 .
인터넷에서 HTTP 프로토콜을 사용하여 그림과 문자를 교환하는 전송방식을 말함.
WEB의 구성요소
웹서버(Web Server)
- 클라이언트의 요청을 받아 처리한 후 결과를 클라이언트에 전송해주는 주체
웹 클라이언트(Web Client)
- 필요한 데이터를 웹 서버에 요청하는 주체(사용자)
웹 브라우저(Web Browser)
- 웹 서버로부터 받은 HTML 문서를 해석해주고 보여주는 애플리케이션 (Chrom,fireFox 등)
HTTP- Hyper Text Transfer Protocol
인터넷에서 데이터(Hyper Text)를 주고받을 수 있는 프로토콜(통신규약)
HTTP의 특징
- 대부분의 파일 형식 전송 가능 - HTML외에도 JSON,TEXT,IMAGE 파일 등도 전송 가능
- 클라이언트 서버 구조 - 클라이언트가 요청하면 서버가 응답하는 단방향 통신
- Stateless - 클라이언트의 상태를 저장하지 않는다. 클라이언트가 이전에 무슨 요청을 했는지 모른다.
- Connectionless - 기본적으로 클라이언트와 서버가 한 번 연결 후 클라이언트 요청에 대한
서버의 응답이 끝나면 서버와 클라이언트간의 연결을 끊는다.
URI : Uniform Resource Identifier
인터넷상의 리소스 “자원 자체”를 식별하는 고유한 문자열 시퀀스입니다. (식별자)
URL : Uniform Resource Location
네트워크상에서 통합 자원(리소스)의 “위치”를 나타내기 위한 규약 (식별자+위치)
WAS(Web Application Server)
웹 서버 + 웹 컨테이너
웹 서버
클라이언트의 요청을 받아 HTML문서 등과 같은 정적 웹 페이지를 응답해주는 소프트웨어
처리할 수 없는 동적 컨텐츠(JSP 등)의 요청은 웹 컨테이너로 전달
웹 컨테이너
jsp같은 동적 컨텐츠를 처리 해주는 소프트웨어
웹 컨테이너는 정적, 동적 컨텐츠를 둘다 처리 할 수 있지만
웹 컨테이너가 둘 다 처리하면 부담이 너무크다.
정적컨텐츠를 쉽게 처리해주는 웹 서버가 정적컨텐츠를 처리하고
남은 동적 컨텐츠만 웹 컨테이너에서 처리한다.
(근데 따로 웹 서버를 놓지않으면 웹 컨테이너가 다 처리한다.)
톰캣 : WAS
웹서버(아파치 처럼 동작)
+웹 컨테이너(servlet, JSP를 처리해줄 수 있는 servlet컨테이너)
※ 톰캣을 WAS라 안하고 단순히 서블릿컨테이너라고 하는 관점과
서블릿 관리 이외의 WEB에 필요한 기능을 수행하기 때문에
서블릿컨테이너를 포함하는 WAS라는 관점이 있습니다.
자바 서블릿(Java Servlet)
서블릿이란 웹페이지를 동적으로 생성하기 위해 서버측 프로그램을 말한다.
이는 자바 언어를 기반으로 만들지며 웹 어플리케이션 서버( Web Application Sever)
위에서 컴파일 되고 동작한다.
쉽게 말해, java만으로 자바소스코드안에 HTML태그를 작성해서
웹 페이지를 만드는 자바 프로그램이다.
여기서는 HttpServlet을 상속받은 클래스인 Sum이 servlet이 된다.
소스코드에 문자열형식으로 html태그의 내용이 들어간다.
public class Sum extends HttpServlet{
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
PrintWriter out=response.getWriter();
out.print("<html><body>");
StringBuffer result2=new StringBuffer();
result2.append("<ul>");
int sum2=0;
for(int i=1;i<=10;i++){
sum2+=i;
result2.append("<li>"+i+"="+sum2);
}
result2.append("</ul>");
out.print(result2.toString());
out.print("</body></html>");
}
}
JSP
JSP 란 JavaServer Pages 의 약자이며
HTML 코드에 JAVA 코드를 넣어 동적웹페이지를 생성하는 웹어플리케이션 도구이다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<ul>
<%
StringBuffer result2=new StringBuffer();
result2.append("<ul>");
int sum2=0;
for(int i=1;i<=10;i++){
sum2+=i;
result2.append("<li>"+i+"="+sum2);
}
result2.append("</ul>");
out.print(result2.toString());
%>
</ul>
</body>
</html>
위의 servlet과 jsp의 실행결과는 같다.
servlet에서는 html태그도 모두 out.print()를 해주는 불편함이 있어서 이를 해결하기 위해 jsp가 나왔다.
하지만 servlet은 여전히 웹 페이지를 만드는데 아주 중요한 역할을 한다.
이에 대한 자세한 내용은 나중에 다룬다.
SSR (서버 사이드 렌더링)과 템플릿 엔진
웹에서의 렌더링이란 간단히말해 html을 만드는 과정이다.
브라우저로부터 요청이 오면 Server는 요청에 맞는 적절한 응답을 한다.
웹에서 HTTP을 통해 통신을 한다면 일반적으로 html을 응답에 포함시킨다.
즉, 서버측에서 html을 만든다. 서버측에서 렌더링하기때문에 SSR이다.
이때 자바로만(서블릿) html의 내용을 만들 수 있지만 자바의 html을 문자열로만 만드는건 힘들다.
html과 서블릿을 합쳐 html을 좀 더 쉽게 작성할 수 있는 JSP같은 도구를 이용해 렌더링한다.
이런 JSP같은 도구(html을 쉽게 작성하는 도구)들을 템플릿엔진이라고 한다.