웹 동작 방식 이해하기 - Web 2

휘Bin·2023년 4월 25일
0
post-thumbnail

웹 애플리케이션을 작성하려면 브라우저와 서버의 관계를 이해할 줄 알아야 한다.
서블릿과 JSP가 어떻게 브라우저에 데이터를 전달하고, 브라우저는 이를 어떤식으로 사용하는지 알아보자!

Request(요청) / Response(응답)

  • Get 방식 : 주소창에 직접 원하는 데이터를 적거나 링크를 호출
    -> 웹의 주소를 호출할 때 필요한 데이터를 '?', '&,=' 이런 것을 이용해 같이 전송하는 방식. 주소와 데이터를 한번에 같이 보내기 때문에 단순 링크로 처리되어 쉽게 공유가 가능하다.
    -> 주로 특정한 정보를 조회하는 용도로 사용된다.
  • POST 방식 : 입력 화면에 필요한 내용을 '전송'과 같은 버튼 등을 클릭해서 호출
    -> 주소와 데이터를 따로 보내는 방식이다. 회원가입, 로그인 등에 많이 이용된다.
    -> 웹 화면을 통해서 실제 처리가 필요한 작업을 위해 사용된다.

브라우저에서 서버에 위와 같은 방식으로 데이터를 요구하는 것을 요청(Request), 서버는 이에 대한 응답(Response)으로 데이터를 만들어 브라우저에 보낸다.


위와 같은 구조를 이루는데, 서버는 브라우저로 응답(Response)을 보내면서 정적, 동적 데이터에 따라 다르게 처리한다.

  • 정적(static) 데이터 : 항상 동일한 고정된 데이터를 전송하는 방식으로 주로 파일로 고정된 HTML, CSS, 이미지 등의 데이터

  • 동적(dynamic) 데이터 : 필요할 때마다 다른 데이터를 동적으로 전송하는 방식으로, 메일처럼 상황에 따라 동적으로 서버에서 데이터를 만들어 보내는 방식.

항상 정적 데이터를 보내는 역할을 수행하는 서버를 '웹 서버(Web Server)', 동적 데이터를 만들어 보내는 경우를 '웹 애플리케이션 서버(Web Application Server - WAS)' 라고 구분한다.

톰캣의 경우는 엄격하게 보면 WAS로 볼 수 있지만, 대부분의 WAS는 웹 서버 기능도 포함해 정적, 동적 자원 모두 처리할 수 있다.

HTTP

브라우저의 요청과 서버의 응답 사이에는 중요한 약속을 통해 처리되는데, 이런 데이터 교환 약속을 '프로토콜(protocol)'이라 하고, 웹에서는 HTTP(Hyper Text Transfer Protocol)이라는 방식으로 데이터를 주고 받는다.

https://www.velog.com/
http = 프로토콜
www.velog.com = 호스트(도메인)

  • Https는 HTTP에 보안이 좀 더 강화된 프로토콜이다.

브라우저에서 URL을 호출하면 요청과 응답이 하나의 쌍으로 묶여 처리된다.

  • 비연결성

웹의 특성상 다수의 이용자가 브라우저를 통해 서버를 호출하는 구조이기 때문에 서버에서 최대한 많은 이용자에게 서비스를 제공하기 위해 '비연결성'이라는 방식을 택한다.
비연결성이란, 요청과 응답을 처리한 후에 연결을 종료한다는 것이다.
'새로 고침'을 해본 경험들이 다들 한번씩은 있을텐데, 이를 하는 이유는 이미 브라우저와 서버의 연결이 끝나 과거의 결과만이 존재하기 때문에 그러하다.
서버는 빨리 하나의 요청을 처리하고 연결을 종료해서 다음 요청을 다시 받는 식의 태도를 취해, 적은 리소스를 이용해 최대한 많은 수의 요청을 처리하고자 하는 것이다.

자바 서버 사이드 프로그래밍

서버 사이드 프로그래밍이란, 서버 쪽에서 프로그래밍을 통해 데이터를 처리할 수 있도록 구성하는 것이다. 간단한 개발을 해도 많은 고민거리가 생기는데, 이를 매번 반복한다면 굉장한 낭비일 것이다.
따라서 자바는 자주하는 고민에 대한 처리를 JavaEE라는 기술 스펙으로 정리했고, Servlet과 JSP는 JavaEE의 여러 기술 중에 하나인 것이다.

  • 서블릿(Servlet) 기술

JavaEE 기술 스택은 매우 방대하지만, 가장 기본적인 기술은 서블릿JSP이다.
서블릿 기술이란, 서버에서 동적으로 요청과 응답을 처리할 수 있는 API들을 정의한 것이다.
JSP는 서블릿과 비슷한 원리지만, 좀 더 HTML을 쉽게 이용할 수 있는 방식으로 코들 작성하게 한다.
일반적으로 '서블릿'으로 코드를 이용한 처리, 'JSP'로는 화면 개발을 하는 식으로 역할 분담해 개발한다.

서블릿 클래스를 보면 init(), doGET(), destroy()등이 보이는데, 이는 서블릿 API에서 지정된 메소드이다. 이들의 호출 주체는 개발자가 아닌, 서블릿 컨테이너가 서블릿들을 관리하면서 호출한 것이다. 이러한 메소들을 '서블릿의 라이프 사이클'이라고 한다.

JSP 기술

JSP는 서블릿 기술과 비슷하며 서버에서 동적으로 데이터를 구성하는 기술이다.
둘은 '동일한 목적'을 가지고 있지만 두 개의 공존하는 이유는, 두 기술의 '목적' 자체는 다르기 때문이다.

서블릿 코드는 자바 코드를 이용해 HTML 문자열을 만들어내는 방식을 취하지만, JSP 기술은 HTML 코드를 그대로 이용하다가 필요할 때 약간의 자바 코드를 넣는 방식을 취한다.

JSP 코드가 자바 코드가 아님에도 서블릿과 동일하게 처리되는 이유는 JSP파일이 컴파일 되고 실행될 때는 서블릿 코드로 변환되어 실행되기 때문이다.

서블릿과 JSP

  1. 서블릿과 JSP 모두 JavaEE 스펙의 일부이다
  2. 서블릿과 JSP를 실행하기 위해서는 서블릿 컨테이너가 필요하다
  3. 서블릿 컨테이너가 서블릿과 JSP 객체를 생성하고 생명 주기를 관리한다.
  4. JSP는 내부적으로 서블릿과 같게 코드가 변환된다.
  5. JSP는 HTML 내에 자바 코드를 추가하는 방식이고, 서블릿 방식은 자바 코드 안에 HTML 코드를 넣는 방식이다.
profile
One-step, one-step, steadily growing developer

0개의 댓글