'프레임워크' 태그의 글 목록 :: 잡다한 프로그래밍
반응형

1. DOM이란?

돔(DOM)이란 Document Object Model의 약자로 HTML 및 XML 문서를 웹 브라우저가 인식한 객체를 의미(일종의 인터페이스)

DOM은 다음과 같은 다음과 같은 workflow를 따른다. 즉 html를 읽어서 DOM 트리, CSS 트리를 만들고 DOM의 위치를 잡고 거기에 그리고 색을 채운다.


2. DOM의 단점?

단순히 HTML을 서버에서 받아 브라우저에 그릴 때는 문제가 생기지 않는다 하지만 SPA(Single page application) 같은 것들이 생겨나면서 자바스크립트를 이용해 DOM을 변경하려고 브라우저에 요청을 할 경우 다음과 같은 문제가 발생한다. 예를 들어 트위터나 페이스북에서는 스크롤을 내리면 많은 데이터가 로딩이 되고 이는 쉽게 말해 div가 많아진다는 의미인데 이때 javascript를 이용하여 DOM을 조작하면 성능에 이슈가 생긴다. 왜냐하면 위 그림과 같은 workflow가 다시 이루어지기 때문이다. 이때 만약 100번을 요청했다면 100번을 다시 painting 하는데 이러한 이슈가 발생한다.

ex) <ul> 내부에 li를 추가할때 개수가 매우 많아지면 브라우저 속도가 느려지는 이슈 발생


3. Virtual DOM 이란?

DOM의 이슈를 Virtual DOM으로 해결할 수 있다. 100번의 DOM 조작 요청이 오면, 가상 돔은 브라우저 대신 변경 내용을 가상 돔에 반영한다.(이때 화면에 그리지 않음) 변화가 반영되었다면 내용을 브라우저에게 전달하여 그리게 한다.(100번 그리던 것을 1번만 그린다) 따라서 다음과 같은 이슈를 Virtual DOM을 통해 개선할 수 있다.

반응형
반응형

1. 정적(Static) 페이지란?

정적 페이지

다음 사진과 같이 사용자의 request가 있을 때 (index.html을 요청하는 것) 웹 서버는 파일 시스템의 index.html을 사용자에게 response 해주는 방식이 정적 페이지 방식이다.


2. 동적(Dynamic) 페이지란?

동적 페이지

위 사진과 같이 사용자의 request를 웹 애플리케이션 서버(톰캣)에서 Servlet에 전달한다

Servlet내부에서는 요청에 맞는 재정의 된 함수(doGet)를 실행하고 얻은 결과를 response 해준다

이때 DB와 함께 연동된 처리일 수 있으며 사용자는 함수에 따라 동적인 결과를 얻게 된다.


3. 웹 애플리케이션 서버 구성도

웹 어플리케이션 서버 설명

위 사진과 같이 WAS가 구성된다 앞서 설명한 동적 페이지와 유사한 그림이다

사용자의 request를 web server가 jsp, servlet으로 전달하고 이를 동적으로 처리하고 (이때 DB와의 커넥션이 있을 수 있음) 이를 다시 Web Server로 다시 client에게 전달하는 방식으로 처리하게 된다


4. 구현하기

#1. 프로젝트 생성

프로젝트 생성

File > New > Dynamic Web Project를 선택하여 프로젝트를 생성한다.

프로젝트 생성

Project name을 설정한다 여기서는 servlettest로 설정하였다.

Target runtime은 톰켓 8.0 버전으로 진행하였다.

프로젝트 생성

설정해 줄 것이 없으므로 다음으로 넘어간다

프로젝트 생성

Web.xml을 생성하기 위해 체크를 해주고 Finish를 누른다

 

#2. index.html 생성

html 만들기

생성된 프로젝트에 WebContent를 우클릭하여 다음과 같이 html 파일을 생성한다.

html 만들기

index.html의 코드는 다음과 같다

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Servlet Test Page</title>
</head>
<body>
	<form action="DoLogin" method="POST">
		Username: <input type="text" name="username"> <br/>
		Password: <input type="password" name="password"> <br/>
		<input type="submit" value="제출"/>
	</form>
</body>
</html>

기본적인 흐름을 알기 위한 코드로 form 안에 username을 입력하기 위한 input과 password를 입력하기 위한 input이 존재한다 form은 POST방식으로 전달하기 위해 method = POST이며, action은 실제 서블릿에서 DoLogin이라는 함수에서 처리한다는 의미이다.

 

#3. index.html 결과 화면

html 결과

만약 html을 성공적으로 작성하고 실행하였다면 다음과 같은 결과가 확인된다.

이때 사용자가 제출 버튼을 누르게 된다면 다음과 같은 오류 화면이 발생할 것이다.

 

error 화면

왜냐하면 /DoLogin을 처리해줄 서블릿이 존재하지 않기 때문이다 따라서 /DoLogin을 처리해줄 서블릿을 생성해보자.

 

#4. 서블릿 생성 하기

서블릿 패키지 생성

생성된 프로젝트에 Src를 우클릭하여 다음과 같이 Package를 생성한다. 패키지명은 원하는 명으로 해도 상관없으나 이 프로젝트에서는 servlet이라고 패키지명을 작성하였다.

서블릿 생성

생성된 패키지를 우클릭하여 New > Servlet을 클릭하여 서블릿을 생성한다

서블릿 생성

서블릿 명은 DoLogin으로 작성 하였다 (이는 html form에서 action을 DoLogin으로 지정했기 때문)

서블릿 생성

다음은 자동으로 URL이 /DoLogin으로 매핑되어있으므로 건드리지 않고 넘어간다.

서블릿 생성

다음은 재정의 하여 사용할 함수의 목록을 보여준다 아래에 현재 doPostdoGet이 체크되어있지만 실습에서는 POST를 사용하기로 하였으므로 doPost만 체크하고 서블릿 생성을 완료한다.

 

생성된 DoLogin 서블릿의 코드는 다음과 같다.

package servlet;

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

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

/**
 * Servlet implementation class DoLogin
 */
@WebServlet("/DoLogin") //URL에노테이션으로 되어 있음
public class DoLogin extends HttpServlet { //HttpServlet상속 받아야함
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public DoLogin() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		PrintWriter out = response.getWriter();
		String htmlResponse = "<html>";
		htmlResponse += "<h2> Your name is : " + username + "<br/>";
		htmlResponse += "<h2> Your password is : " + password + "<br/>";
		htmlResponse += "</html>";
		
		out.println(htmlResponse);
	}
}

String username = request.getParameter("username")으로 form의 username input이 보낸 value를 저장하고

PrintWriter를 사용해 html을 response해준다.

 

@WebServlet("/DoLogin")이 부분이 form에서 /DoLogin으로 요청을 보낸 부분을 처리하겠다고 명시해주는 에노테이션 부분이다. 에노테이션에 대한 자세한 설명은 ~~에서 확인할 수 있다.

 

#5. 프로젝트 실행 결과

다음과 같이 서블릿을 생성을 완료하고 이전과 같이 html을 제출하였다면 다음과 같은 화면이 보이게 될 것이다.

프로젝트 성공

5. 설명

코드 구조

프로젝트에서 작성한 구성을 그림으로 표현하면 다음과 같다 사용자는 html폼을 이용하여 POST방식으로 /DoLogin이라는 요청을 보내고 서블릿에서는 DoLogin 클래스의 재정의된 doPost를 사용하여 이를 처리하여 사용자에게 다시 반환하는 방식이다.

 

간단한 서블릿을 활용한 웹 서버 애플리 케이션 예제였다

반응형
반응형

1. 프레임 워크란?

SW의 구조와 클래스를 제공한다.


2. 라이브러리와 프레임워크의 차이

라이브러리 : 클래스의 집합으로 다른 개발자가 만들어놓은 함수라고 생각하면 좋다. 사용자는 이 라이브러리를 가져다 사용한다.

 

프레임워크 : 프레임워크에서 기본 골격을 잡아놓고 프레임워크의 제어 흐름에 맞게 코드를 작성하여 사용한다. 라이브러리와 다르게 프레임워크에서 사용자의 코드를 호출한다고 생각하면 좋다.


3. 스프링이란?

POJO기반의 엔터프라이즈 애플리케이션 개발을 쉽고 편하게 해주는 프레임워크

자바 애플리케이션을 개발하는데 필요한 구조를 제공하는 프레임워크로, 스프링의 전체적인 구조를 처리하므로 개발자는 애플리케이션 개발에 집중할 수 있다는 장점이 있다.

반응형

+ Recent posts