ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • #1 JSP Project 02(Blog) - 기본지식
    JSP 2021. 6. 25. 12:56

    210625 유투버 '데어프로그래밍'님 강의 참조

     

     

     

     

    1.웹 서버 vs 웹 어플리케이션서버

    • 웹 서버 - 'HTTP' 주소로 접근이 가능한 폴더. 이 폴더를 웹서버처럼 가능케 하는것이 '아파치'
    • 웹 어플리케이션 서버 - 'HTTP' + 'HTML' 기반의 웹브라우저가 읽지못하는파일(e.g. jsp)을 자체적으로 변환하여 브라우저가 읽을 수 있는 'HTML'로 변환시켜주는 어플리케이션(프로그램) 서버 (e.g. 톰켓), 즉 변환,컴파일,실행까지 해주는 프로그램

    2. Stateless

    • 웹브라우저는 'HTTP 프로토콜'을 기반으로 하며 이 약속은 문서(HTML) 공유가 목적이다. 즉 브라우저상에서는 모든것들은 'HTML'로 이루어진다. 이때 요청은 'REUQEST' / 응답은 'RESPONSE'로 이루어진다.
    • 여기서 중요한 포인트가 'STATELESS'이다. 클라이언트와 서버간에 요청/응답은 1번만 으루어지고 끝나면 반드시 선이 끊어지는것이 'STATELESS' 상태. 자원공유가 주 목적이기때문에 자원의 공유가 끝나면 서버를 끊고 서버 부하를 최소화 시키는게 목적('STATEFUL'은 그 반대 개념)

    3. HTTP 헤더와 바디 그리고 MIME 타입

    • 헤더 - 클라이언트/서버 간에 요청/응답이 있을 때 서버가 클라이언트에게 어느 파일형태로 응답을 해야하냐고 나타내는 부븐
    • 바디 - 시리얼 라이저블을 통해 직렬화된 데이터가 담김
    • 즉, 헤더를 보고 바디를 분석 할 수 있다. 이때 헤더를 보고 이 파일에대한 설명이 'MIME TYPE'이라고 부른다. 헤더에는 해당파일의 'content-type'을 가지고 있는데 이것을 'MIME TYPE'이라 부른다(e.g. avi -> video/x-msvideo)

    4. MIME TYPE 실습

    //필터가 @WebServlet통해 맵핑을 해준다
    //localhost:8080/blog/test하면 여기로 들어온다 
    @WebServlet("/test")
    public class ApiServerTest extends HttpServlet {
    	private static final long serialVersionUID = 1L;
           
        public ApiServerTest() {
            super();
        }
        //GET/POST요청시 톰켓이 함수 파라미터를 분석해서 던져준다. 
        //요청에 단순 응답이면 'GET' = 'SELECT'
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		doPost(request, response);
    	}
    	//요청에 데이터를 저장이면 'POST' = 'INSERT'
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		//content-type을 분석해야하면 getContentType을 써야함
    		//현재 요청데이터의 context-type : x-www-form-urlencoded
    		String food = request.getParameter("food");
    		String method = request.getParameter("method");
    		//insert가 DB에 잘되는지 항상 체크
    		int result = 2; // 1이면 정상
    		PrintWriter out = response.getWriter();
    		if(result==1) {
    			out.println("{\"food\":"+food+",\"method\":"+method+"}");
    		} else {
    			out.println("{\"error\":\"fail\"}");
    		}
    		out.flush();
    	}
    }

    - 1이면 정상

    - 2이면 에러

    지금까지 테스트는 context-type이 'x-www-form-urlencoded'라고 나와 있기 때문에 어떤식으로 클라이언트/서버가 서로 요청과 응답을 해야하는지 쉽게 할 수 있다. 

    하지만 json으로 던지게되면 아래와 같이 나온다. Json용으로 코드를 짤수있지만 코드길이 및 구조가 너무나도 길어지기때문에 아무도 그렇게 짜지않고 요청과 응답시에 이미 바디/헤더/MIME으로 구분을해서 서로 상호응답을 하도록 설계되어있다. 

Designed by Tistory.