Post

[강의 정리] 1장 - 웹과 자바


강의 정리

방통대 JSP 프로그래밍 강의를 듣고 내용을 정리하며 복습을 한다.

웹의 의미

  • 팀 버너스 리가 제안
  • 인터넷 기반의 정보 공유 서비스
    • World Wide Web, WWW또는 W3라고도 한다.
    • 인터넷 상에 분산되어 존재하는 다양한 정보를 통일된 방법으로 찾아볼 수 있게 하는 정보 서비스
  • 인터넷 기반의 전 세계적 정보 공유 공간
    • 분산된 웹 서버에 존재하는 하이퍼텍스트 문서들이 서로 연결된 시스템

웹 관련 기본용어

  • 하이퍼텍스트
    • 웹 상에 존재하는 문서 형태
    • 텍스트 외에 이미지, 동영상 등의 멀티미디어 요소를 포함한다.
    • 하이퍼링크를 통해 다른 하이퍼텍스트와 연결된다.
    • 문서와 문서가 연결된 구조
    • 웹 브라우저를 이용해 하이퍼텍스트를 볼 수 있다.
    • HTML로 표현되며 HTTP 프로토콜을 사용하여 전송된다.
  • W3C
    • World Wide Web Consortium의 약자
    • 국제 웹 표준화 기구
    • HTML, HTTP, XML 등의 웹 관련 기술을 관리한다.

웹 문서

  • 정적 웹 문서
    • 정적인 텍스트로 문서의 내용이 바뀌지 않는다.
    • 클라이언트가 서버에게 정적 웹 문서를 요청하면 서버는 해당 문서를 찾아서 전달한다.
    • 정적 웹 문서를 요청하면 항상 동일한 결과가 전달된다.
  • 동적 웹 문서
    • 동적 웹 문서를 사용하여 최종 결과가 동적으로 만들어진다.
    • 클라이언트 측 처리와 서버 측 처리 방식이 있다.
    • JSP는 동적 웹 문서를 작성하는 기술이다.

웹 애플리케이션

  • 웹에서 실행되는 응용 프로그램
  • 웹 애플리케이션의 구분
    • 클라이언트 측 실행 / 서버 측 실행
    • 컴파일 방식 / 비컴파일 방식

웹 서비스의 제공과 구성 요소

  • 웹 클라이언트
    • 웹 브라우저는 웹 서버에 요청을 보내고 응답 결과를 출력
    • 크롬, 엣지 등 브라우저
  • 웹 서버
    • 클라이언트의 요청을 처리하도록 프로세스를 관리
    • 요청을 처리한 결과를 클라이언트에 보낸다.
  • 웹 애플리케이션 서버(웹 컨테이너)
    • 웹 애플리케이션의 실행 환경
    • JSP 프로그램을 실행시키고 결과를 웹 서버에 전달
  • 데이터베이스
    • 웹 서비스 수행에 필요한 데이터를 저장하고 제공
  • 실행 순서
    • 웹 브라우저 -> HTTP 요청 -> 웹 서버 -> 웹 애플리케이션 서버 -> 데이터베이스
    • 데이터베이스 -> 웹 애플리케이션 서버 -> 웹 서버 -> HTTP 응답 -> 웹 브라우저

웹 애플리케이션 실행 위치

  • 클라이언트 측 실행
    • 웹 문서에 동적 요소를 포함시켜 클라이언트에 전송
    • 웹 브라우저가 해석하여 페이지를 생성
    • 애플릿, JavaScript, 플래시 등
    • 보안의 문제가 있다.
  • 서버 측 실행
    • 서버에서 실행되어 응답 문서를 동적으로 생성
    • 웹 애플리케이션 서버가 수행한 결과가 브라우저에 전송됨
    • 서블릿, JSP, ASP, PHP, CGI 방식
    • 서버의 부담이 있다.

웹 애플리케이션 구현 방식

  • 컴파일 방식
    • 컴파일 과정을 통해 실행 파일이나 바이트 코드가 만들어져 사용된다.
    • JAVA 서블릿, JSP
    • Perl, C, C++을 이용한 CGI 방식
    • 동작 속도가 빠르다.
  • 비컴파일 방식
    • 매 요청마다 스크립트를 해석하여 실행하는 방식
    • JavaScript는 클라이언트에서 실행되는 스크립트 언어

CGI(Common GateWay Interface)

  • 동적으로 웹 페이지를 생성하기 위한 방식 중 하나
    • 고급 언어 프로그램을 실행시켜 HTML 코드를 생성한 후 전달한다.
  • 클라이언트의 요청이 있으면 해당 프로그램을 실행시키기 위해 개별 프로세스를 생성한다.
    • 동일한 CGI를 요청해도 요청의 개수만큼 프로세스를 생성하므로 웹 서버에 부하를 준다.
  • 웹 서버가 응용 프로그램을 직접 호출한다.
    • 클라이언트의 요청이 많아지면 급격히 성능이 저하된다.

WAS(Web Application Server)

  • 웹 애플리케이션을 실행하고 관리하는 별도의 전담 프로그램
    • 모든 요청에 대해 매번 프로세스를 생성하지 않는다.
    • 하나의 자바 가상 기계 내에서 수행한다.
    • 요청을 처리하기 위해 스레드를 생성한다.
  • 웹 페이지 생성 외에도 많은 기능을 수행한다.
    • API 제공, 부하 균형, 고장 조치 등
  • 동적 웹 서비스를 담당하는 서버
    • 스레드 방식을 사용한다.
  • 서버의 성능을 개선하기 위해 웹 서버의 기능을 분리
  • 웹 서비스의 처리를 위해 동적 페이지를 만들거나 비지니스 로직을 처리한다.
    • 이 부분만 얘기하면 웹 컨테이너라고 한다.

웹 서버

  • 클라이언트로부터의 요청을 받고 결과를 전달하는 기능
    • Apache HTTP Server, IIS, Nginx
  • HTTP 프로토콜을 사용하여 클라이언트와 통신한다.
    • HTTP는 클라이언트와 웹 서버 간 웹 문서를 전송하기 위한 통신 규약
    • 웹 서버를 HTTP 서버라고 한다.
    • W3C 홈페이지에서 HTTP 관련 문서를 보는 것이 가장 자세하게 나와있다.
  • 웹 서버의 구체적 기능
    • 클라이언트가 요청한 웹 문서를 찾아 전달
    • 클라이언트 요청에 대한 기본적 사용자 인증을 처리
    • 문제가 있으면 정해진 코드 값으로 응답
    • 프로그램 실행 요청이 있으면 처리 후 그 결과를 전달

서블릿

  • Server + Applet의 합성어
    • 웹 페이지를 동적으로 생성하기 위한 서버 측 JAVA 클래스
    • JAVA 언어에 기초한 웹 프로그램의 개발 기술
  • JAVA 언어로 서블릿 클래스를 만들고, 컴파일된 바이트 코드를 서버에 탑재하여 웹 서비스를 제공
    • 소스를 수정하면 다시 컴파일하여 서버에 탑재해야 한다.
  • JSP는 소스가 수정되어도 WAS가 자동으로 처리하여 바이트 코드를 만들어 웹 서비스를 제공한다.
  • 서블릿은 개발자가 수행해야 한다.

JSP

  • 서블릿 대신 사용할 수 있는 스크립트 형식의 언어
    • HTML 페이지 내에 삽입된다.
  • JSP 페이지는 서블릿으로 변환됨
    • 웹 애플리케이션 서버가 자동으로 JSP 페이지를 변환하고 컴파일하여 웹 서비스를 제공한다.
  • JAVA EE를 구성하는 기술 중의 하나다.
    • EE(엔터프라이즈 에디션)는 기업용, 대규모 등
    • SE(스탠다드 에디션)의 확장판이다.
  • JSP의 특징
    • JAVA 언어의 특성을 활용한다.
    • 표현 언어, 표현식, 액션 태그 등의 스크립트적 요소를 제공한다.
    • 다양한 개발 환경이 오픈 소스로 제공된다.
    • JSP는 오픈 소스 형태로 운영되므로 다양한 기술이 지원된다.
    • JSP 기술은 플랫폼에 독립적이다.
    • 반면에 .NET 기술은 개발과 운용 환경에 제약이 있다.
  • JSP 처리 과정
    • 클라이언트 요청(.jsp) -> JSP 페이지 -> 서블릿(JAVA 프로그램) 변환 -> 서블릿(클래스 파일) 컴파일
    • 서블릿(클래스 파일) 컴파일 -> 클라이언트에 응답(HTML)

웹 컨테이너

  • 웹 컴포넌트를 저장하고 서블릿의 생명주기를 관리
    • 클라이언트의 서블릿 요청을 실행시키는 역할
  • 서블릿 컨테이너라고도 한다.
    • JAVA로 구현된 서블릿 엔진(서블릿 실행 환경)
    • JSP를 서블릿으로 변환하는 기능을 포함
  • Tomcat, WildFly, WebLogic, WebSphere, JBoss 등
  • 웹 서버에서 서블릿이 실행되기 위한 환경
    • 웹 서버
    • 자바 실행 환경(JDK)
    • 서블릿 컨테이너(예: Tomcat)

JSP 컨테이너

  • JSP 페이지를 서블릿 프로그램으로 변환
  • 대부분의 서블릿 컨테이너는 JSP 컨테이너 기능을 포함함
  • JSP컨테이너 자체가 서블릿으로 구현되어 있음
    • 서블릿 컨테이너에 의해 실행됨

HTTP 프로토콜

  • 웹 서버와 클라이언트가 통신하는 규약
    • TCP 프로토콜에 기초한 애플리케이션 계층 프로토콜
  • Connection oriented & Stateless 특성
    • 요청을 위해 네트워크 접속을 해야 함
    • 서버가 응답한 후에 서버는 클라이언트의 상태를 유지하지 않음
    • 웹 서버의 부담이 줄어드나 상태 관리를 위해 쿠키나 세션 등이 필요
  • HTTP 요청과 응답 절차
    • 연결 설정, 요청 메시지 전송, 응답 메시지 전송, 연결 끊기

HTTP 요청 메시지 구조

  • 시작 라인
    • 요청 방식, URI, 버전 번호
    • GET /index.html HTTP/1.1
    • GET : 웹 서버에게 요청 대상에 대해 처리 방식을 지정
    • /index.html : 서버에 존재하는 파일의 URI
    • HTTP/1.1 : HTTP의 버전
    • GET 방식일 때는 요청 몸체는 사용되지 않는다.
  • 요청 헤더
    • 한 라인에 하나씩 헤더 정보를 기술
    • 각 라인은 “헤더필드이름:값” 형식으로 구성됨
    • 요청 헤더의 끝에 공백 라인을 둠
  • 요청 메시지의 몸체
    • POST 요청 방식에서만 의미 있음
    • HTML 폼에서 작성한 데이터를 POST 방식으로 전송할 때 사용됨

HTTP 응답 메시지 구조

  • 시작 라인, 응답 헤더, 응답 몸체로 구성됨
  • 시작 라인은 HTTP 버전, 서버의 응답 코드, 설명으로 구성됨
  • 서버의 응답 코드와 설명
    • 200 OK : 클라이언트 요청이 성공적으로 끝남
    • 400 Bad Request : 잘못된 요청
    • 401 Unauthorized : 인증 오류
    • 403 Forbidden : 사용자 허가 모드 오류
    • 404 Not Found : 요청한 문서가 존재하지 않음
    • 405 Method Not Allowed : 요청한 방식을 서버가 지원하지 않음
    • 500 Internal Server Error : 서버에서의 실행 오류
    • 503 Server Unavailable : 일시적으로 요청을 처리할 수 없음
    • 400번대 응답 코드는 클라이언트 요청에 문제가 있다.
    • 500번대 응답 코드는 서버 쪽에 문제가 있다.