JSP - 이론

박종휘·2022년 9월 22일
0

JSP - 국비

목록 보기
1/2
post-thumbnail

✔ Eclipse에서 JSP 프로젝트 생성하기

Project Explorer에서 우클릭 후 Dynamic Web Project 클릭
project name 설정 후 next 2번 누르고 Generate web.xml deployment descriptor 체크 후 finish를 눌러주어 생성한다.



웹 서버 프로그램

1. CS 모델

  • Client Server 모델
  • 간단한 구조로 되어 있는 구조로, 대부분 Server에서 데이터를 처리하고, 클라이언트는 UI를 담당한다.
  • 구조가 간단하여 속도가 좋은 특징이 있으나 확장성은 조금 떨어진다.

1-1. 장점

  • 구조가 간단하여 속도가 빠르다.

1-2. 단점

  • 구조상 확장의 어려움이 있다.
  • Client 프로그램을 다운로드 받아 PC에 설치해야하는 배포의 번거로움
  • 버그를 수정하여도 배포하기 어려움

2. Socket 통신

  • 서버와 클라이언트 양방향 연결이 이루어지는 통신으로, 클라이언트도 서버로 요청을 보낼 수 있고, 서버도 클라이언트로 요청을 보낼 수 있는 통신이다.
  • 클라이언트와 서버 양쪽에서 서로에게 데이터 전달을 하는 방식의 양방향 통신
  • 보통 스트리밍이나 실시간 채팅 등 실시간으로 데이터를 주고 받아야 하는 경우에는 Connection을 자주 맺고 끊을 수가 없다. 그래서 소켓 통신이 적합하다.
  • 계속 연결을 유지하는 연결지향형 방식이다.

3. Web 환경

  • CS 환경이 배포가 어렵다는 단점을 보완한 모델
  • 브라우저만 있으면 어디서든 쉽게 접근 가능

3-1. 장점

  • OS와 브라우저의 제품에 상관없이 어디서든 동작 가능
  • 수정된 부분을 쉽게 배포 가능

3-2. 단점

  • 성능이 떨어지고, 속도가 느림
  • 화면의 복잡도가 증가하면서 성능이 떨어짐
  • 너무 다양한 기술들이 접목되어 관리하기 어려움

4. HTTP 통신

  • HTTP란 Hyper Text Transfer Protocol의 약자로 HTML 파일을 전송하는 프로토콜이라는 의미를 가진다.
  • 초기에는 HTML 파일을 전송하려는 목적으로 만들어졌으나 현재는 JSON, Image 파일 등 또한 전송한다.
  • HTTP 통신은 클라이언트에서 서버로 요청을 보내고 서버가 응답하는 방식으로 통신이 이루어진다. 응답에는 클라이언트의 요청에 따른 결과를 반환한다.
  • 클라이언트의 요청이 있을 때 서버가 응답하는 방식 → 단방향 통신
  • 서버의 응답에는 응답 코드가 같이 전송되며, 사용자의 응답 코드와 메세지 응답으로부터 오는 바디를 통해 요청 값을 전달 받는다.
  • 초기에는 서버가 응답한 후 클라이언트의 Connection을 곧바로 끊어버렸으나, 최근에는 성능상의 이유로 Keep Alive 옵션을 통해 일정 기간동안 클라이언트와 Connection을 유지하는 방식으로 통신이 가능해졌다.

5. 정리

  • HTTP 통신은 클라이언트의 요청이 있을 때, 서버가 응답하는 단방향 통신
  • JSON, image, HTML 파일 등 다양한 파일을 전송 받을 수 있다.
  • 응답을 받은 후 Connection이 끊어지는 것이 기본 동작이지만, keep alive 옵션도 가능
  • 자주 데이터를 주고 받는 환경이 아닌 경우 HTTP 통신을 통해 받는 것이 유리하다.
  • 자주 데이터를 주고 받아야 하는 환경에서는 소켓 통신이 유리하다.
  • HTTP 통신은 단방향, 소켓 통신은 양방향 통신

6. 통신 프로토콜

  • 통신 프로토콜 또는 통신 규약은 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고 받는 양식과 규칙의 체계이다.

7. 프로토콜의 예시

  • HTTP : Hyper Text Transfer Protocol
  • HTTPS : Hyper Text Transfer Protocol Secure
  • FTP : File Transfer Protocol
  • SFTP : Secure File Transfer Protocol
  • TELNET : TErminaL NETwork
  • SMTP : Simple Mail Transfer Protocol
  • SSH : Secure Shell

8. 정적 웹 페이지 (Static Web Pages)

  • 언제 접속해도 같은 응답을 보내준다.
  • HTML, CSS, JS 파일 등이 서버에 업로드되면 개발자가 수정하기 전까지 매번 같은 파일을 브라우저에 건네준다.

9. 동적 웹 페이지 (Dynamic Web Pages)

  • 웹 서버가 동적 웹 페이지에 대한 요청을 받은 경우 서버는 추가적인 처리 과정 이후 클라이언트에게 응답을 보낸다.
  • 동적 페이지는 방문자와 상호작용하기 때문에 페이지 내용은 그때 그때 다르다.
  • 댓글, 날씨, 주가 정보 등과 같이 정보 변경이 잦은 곳에 많이 사용된다.

10. 웹호스팅

  • 웹 호스팅이란 홈페이지(웹사이트)를 올려 놓을 인터넷상의 공간을 임대해주는 서비스

11. 도메인

  • 도메인은 이름 -> 건물을 짓는다고 치면 건물 명에 해당
    • 가고자하는 위치 : 롯데타워
      실제 위치 : 서울특별시 송파구 잠실6로 올림픽로 300

      찾고자 하는 사이트 주소 : naver.com
      실제 주소 : 125.209.222.142

12. 인터넷 주소 체계

	프로토콜		도메인			포트번호		폴더, 파일명
    http://		localhost		8080		jsp/Hello.jsp
    			facebook.com	80			news/index.html
  • localhost : 모든 컴퓨터가 "자기 자신"을 가리키는 특수 도메인
  • 포트번호 : 특정 컴퓨터에 통신을 위해서 열려있는 문
    -> 모든 컴퓨터는 0 ~ 65535번까지의 포트번호를 가지고 있다.
    -> 이 포트번호를 통해서 통신이 진행될 수 있으며, 기본적으로 모든 포트번호는 차단되어있다.
    (포트를 차단하는 역할을 하는 프로그램이 방화벽이다.)

13. web-was 서버차이

13-1. WEB 서버 (Web Server)

  • WEB서버는 정적인 자료를 처리하는 서버이다.

13-2. WAS 서버 (Was Server)

  • WAS서버는 동적인 자료를 처리하는 서버이다.

    • 클라이언트에서 요청하는 페이지는 크게 정적인 페이지와 동적인 페이지로 나뉠 수가 있는데, WEB서버와 WAS서버가 요청 정보에 맞게 역할을 분배하여 처리한다.
    • Apache Server : WEB 역할을 하는 서버의 이름
    • Tomcat Server : WAS 역할을 하는 서버의 이름
    • Apache Tomcat Server : WEB + WAS 서버라고 칭할 수 있다.

✔ Apache Tomcat 설치 & 서버 세팅

  1. https://tomcat.apache.org/ 에 들어간다.
  2. 자신의 java 버전을 확인하여 apache tomcat의 버전을 선택한다.
  3. 자신이 다운받을 버전으로 들어가 다운 받는다.
  4. bin 파일에 들어가서 startup.bat(window)를 더블 클릭한다.
    (맥은 startup.sh) : 웹 서비스 진행 가능
  5. eclipse에서 server를 클릭한다.
  6. apache에서 자신에게 맞는 버전을 클릭 후 server name을 지정해준다.

    apache tomcat 다운받았던 폴더로 경로를 지정해 준다.
    어떤 프로젝트를 연결할지 선택 후 finish를 누른다.

sever를 더블 클릭하면 Overview를 볼 수 있다.
기본 포트는 오라클 리스너 포트와 동일하기 때문에 포트 충돌이 난다.
포트 변경 후에 server에서 우클릭한 다음에 restart를 누른다.
server startup이라는 문구가 console창에 뜨면 서버가 start가 된 것이다.


  1. 경로 요청시 기본 값 지우기

modules를 선택한다.
server를 선택하고 edit를 누른다.
처음 기본 값은 '/프로젝트명'으로 되어 있을 것이다.
이것을 경로 요청 시, 간단하게 하기 위하여 '/' 로 변경해준다.

14. 서블릿(Servlet)

  • 클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술
  • 자바를 사용하여 웹을 만들기 위해 필요한 기술

✔ servlet 역할을 하는 라이브러리 가져오기

  • 라이브러리는 apache tomcat이 가지고 있다.
    apache tomcat 폴더에서 servlet-api.jar를 복사하여 lib파일에 넣어준다.
    프로젝트 properties 들어가서 libraries - add jars - servlet-api.jar를 순서대로 선택후 apply - apply and close를 누른다.

✔ 서블릿 클래스 만들기 & 서블릿 등록하기

MyServlet.java

package com.koreait.web.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

// 프론트 단(웹)에서 자바영역으로 myservlet 클래스를 호출한다.
// -> service 메서드에서 그 요청을 받기로 약속이 되어있음
// -> 약속되어있는 라이브러리를 임포트해서 사용
public class MyServlet extends HttpServlet { // Servlet의 역할을 하기위해서는 HttpServlet 추상 클래스를 상속받는다.

	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) 
	// HttpServletRequest 요청 객체, HttpServletResponse 응답 객체
	// 사용자가 요청보낸 데이터는 request에 담기고 사용자에게 응답보낼 데이터는 response에 담긴다.
	// 사용자가 보낸 데이터를 꺼낼 때는 request에서 꺼내고 사용자에게 보여주고 싶은 데이터를 response에 담기만 하면
	// 라이브러리 안에서 알아서 사용자에게 전달한다.
			throws ServletException, IOException {
		
		// 설계된 약속에 맞춰 service 메서드 안에 작업하고 싶은 내용을 작업하면 된다.
		
		PrintWriter out = response.getWriter(); 
		// 문자열 출력 -> java io에 있는 printwriter 클래스를 가지고 객체 생성
		// response안의 getWriter메서드를 호출하여 out 객체에 할당
		out.println("Hello Servlet");
	}
	
} // -> servlet 클래스로 사용 가능

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>day01</display-name>
  <welcome-file-list> 
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
<!-- 
welcom file은 디폴트 되어있는 값 
그래서 index.html을 요청보낼 때는 index.html을 쓰지 않아도 요청 가능
-->

  <!-- 서블릿 등록 -->
  <servlet>
	  <servlet-name>mServlet</servlet-name>
	  <servlet-class>com.koreait.web.servlet.MyServlet</servlet-class>
  </servlet>

  <servlet-mapping>
	  <servlet-name>mServlet</servlet-name>
	  <url-pattern>/hello</url-pattern>
  </servlet-mapping>
  
  <!-- 
  		사용자 url 요청 : http://localhost:9090/hello
  		
  		url 패턴의 /hello로 요청이 들어오고,
  		servlet의 mServlet으로 요청이 가고,
  		com.koreait.web.serbvlet.MyServlet 이 경로에 있는 클래스가 호출된다.
   -->

</web-app>

결론
url 패턴의 /hello로 요청이 들어옴 -> servlet-mapping 태그의 url-pattern의 /hello를 캐치 -> mServlet이라는 servlet-name을 찾아감 -> servlet 태그의 mServlet으로 감 -> MyServlet 클래스로 요청이 넘어감 -> HttpServletRequest 객체에서 받아오고 HttpServletResponse 객체에 "Hello Servlet"이라는 문자열을 담아 응답을 넘겨줌

profile
개린이의 개발 고수되기 작전!

0개의 댓글