8.30 필기 (본격적 쇼핑몰 프로젝트 전 이론 복습 - JSP 이용)

myminimin·2023년 8월 30일
0

[교재] 자바 웹 다루는 기술

👻 필기

  • 정적(static) 웹 프로그래밍 - 아파치 같은 웹 서버를 이용해서 웹 페이지들을 브라우저에 표시하는 방식

    	- 웹 서버 : 각 클라이언트에게 서비스를 제공하는 컴퓨터를 의미
    	- 클라이언트 : 네트워크로 서버에 접속한 후 서버로부터 서비스를 제공받는 컴퓨터를 의미
    	- HTTP 프로토콜 : (Hyper Text Tansfer Protocol), www 서비스를 제공하는 통신 규약을 의미. 웹 서버와 클라이언트는 이 프로토콜을 이용해 정보를 주고 받는다.
    	- HTML : (Hyper Text Markup Language), www 서비스를 제공하기 위한 표준 언어.
    	- 자바스크립트 : HTML 웹 페이지의 여러 가지 동적인 기능을 제공하는 스크립트 언어.
    	- CSS(Style Sheet) : HTML 문서에서 서체나 색상, 정렬 등 세부적인 HTML 페이지의 디자인에 관련된 여러 가지 기능을 제공.

    이러한 정적 웹 프로그래밍의 방식은 고정된 정보만 제공하고 정보 수정 시 관리자가 직접 HTML 소스를 수정해야 변경이 되기 때문에 '실시간'으로 변경 사항이 반영되지 않았다.

  • 동적 웹 프로그래밍

정적 프로그래밍에서 관리자가 하던 역할을 웹 애플리케이션 서버(WAS)에서 실행되는 애플리케이션이 수행한다. 따라서 실시간 환율 정보가 저장되어 있는 데이터베이스에 클라이언트 요청이 있을 때마다 실시간으로 제공이 가능해졌다.

CGI 방식을 이용, 요청 시마다 process라는 메모리를 생성 후 반환하고 이런 식... -> 인터넷 환경이 발전하고 사용자가 늘어나면서 과부하가 와서 개선하여 나온 것이 JSP, ASP, PHP와 같은 동적 웹 프로그래밍 기술이라고 한다.)

  • JSP 프로그램의 특징

thread 방식으로 실행 -> process 방식은 요청을 받을 때마다 process를 계속 생성했다면 thread 방식은 요청을 받으면 최초 한 번만 환율 조회 기능을 메모리에 로드해놓고 동일한 요청이 들어오면 메모리에 존재하는 환율 조회 기능을 재사용함! (각각의 요청에 대한 기능을 메모리에 따로따로 로드하지 않음)


  • 웹 애플리케이션
  • 웹 애플리케이션 구성 요소의 기능
    - webShop : 웹 애플리케이션의 루트 디렉터리. 다른 웹 애플리케이션 이름과 중복을 허용하지 않으며, 여기에는 JSP HTML 파일이 저장.
    - WEB-INF : 웹 애플리케이션에 관한 정보가 저장되는 곳. 이 디렉터리는 외부에서 접근할 수 없다.
    - classes : 웹 애플리케이션이 수행하는 서블릿과 다른 일반 클래스들이 위치.
    - lib : 웹 애플리케이션에서 사용되는 여러 가지 라이브러리 압축 파일(jar 파일)이 저장되는 곳. DB 연동 드라이버나 프레임워크 기능 관련 jar 파일이 여기에 저장된다. lib 디렉터리의 jar는 클래스패스가 자동으로 설정된다.
    - web.xml : 배치 지시자(deployment descriptor)로서 일종의 환경 설정 파일이다. 웹 애플리케이션에 대한 여러 가지 설정을 할 때 사용된다.
  • 컨테이너에서 웹 애플리케이션 실행하기
    : 웹 애플리케이션은 단독으로 실행할 수 없어서 톰캣과 같은 웹 컨테이너에서 실행해야 한다.

    server.xml에 웹 애플리케이션의 위치를 등록해 놓고 실행할 수 있는데 이때 server.xml에 등록하는 웹 애플리케이션을 컨텍스트(Context)라 부른다.

  • 컨텍스트의 주요 특징
    - 웹 애플리케이션당 하나의 컨텍스트가 등록
    - 웹 애플리케이션 이름과 같을 수도 있고 다를 수도 있다
    - 컨텍스의 이름은 중복될 수 없다
    - 웹 애플리케이션의 의미를 가장 잘 나타낼 수 있는 명사형으로 지정
    - 대소문자를 구문
    - server.xml에 등록


  • 서블릿
    서버 쪽에서 실행되면서 클라이언트의 요청에 따라 동적으로 서비르를 제공하는 자바 클래스. 하지만 독자적으로 실행되지 못하고 톰캣과 같은 JSP/Servlet 컨테이너에서 실행된다.

서블릿의 특징
1. 서버쪽에서 실행
2. 정적 웹 프로그램의 문제점을 보완하여 동적인 여러 가지 기능을 제공
3. thread 방식
4. 자바로 만들어져 객체 지향의 특징을 가짐
5. 컨테이너에서 실행
6. 컨테이너 종류 상관없음 (플랫폼 독립적)
7. 보안 기능을 적용하기 쉬움
8. 웹 브라우저에서 요청 시 기능을 수행

  • 서블릿 API 계층 구조와 기능
    - 서블릿 API는 Servlet과 ServletConfig 인터페이스를 구현해 제공하며 GenericServlet 추상 클래스가 이 두 인터페이스의 추상 메서드를 구현. 그리고 이 GenericServlet을 다시 HttpServlet이 상속.

클라이언트 요청 시 public service() 메서드를 먼저 호출 -> protected service() 메서드를 호출 -> request 종류에 따라 doXXX() 메서드를 호출하는 과정

  • 서블릿 동작 과정
    서블릿은 thread 방식을 사용하기 때문에 최초 한 번만 init() 메서드를 호출하며 FirstServlet 인스턴스를 메모리에 로드하고 그 이후 동일한 요청시에는 메모리에 FirstServlet이 존재하는 지를 확인 후 있다면 YES -> doXXX()를 바로 호출하여 서비스를 한다.

최초 실행 시 init 메서드를 호출하고 새로고침 할 때마다 재사용하기 때문에 doGet 메서드만 호출하는 것을 보자.

  • form 태그를 이용해 서블릿에 요청하기

로그인 클릭 -> input 태그의 name 속성 값(lee, text)과 쌍으로 전송. -> 서블릿(action="login"이라는 이름의)에서는 전송된 입력 데이터를 받음.

  • form 태그의 여러 가지 속성과 기능

  • HttpServletRequest 요청 실습
    - form 태그로 전송된 정보를 서블릿에서 받아 와서 출력하는 과정

  • 자바스크립트로 서블릿에 요청하기
    - form 태그에서 자바스크립트로 정보 전송 후 자바스크립트에서 서블릿에 요청 후 웹에 출력이 되는 과정

  • 서블릿으로 회원 정보 테이블의 회원 정보 조회

  • PreparedStatement를 이용한 회원 정보 실습
    - 위에서 사용한 Statemet 인터페이스는 DB 연동할 경우 연동할 때마다 DBMS에서 다시 SQL문을 컴파일해야 하므로 속도가 느리다는 단점이 있다.
    - PreparedStatement 인터페이스는 SQL문을 미리 컴파일해서 재사용함.

눈으로 보면 Statement를 사용했을 때와 결과는 같지만 DB를 연동할 경우 수행 속도가 좀 더 빠르다는 차이가 있다.

  • DataSource 이용해 데이터베이스 연동하기

위의 예제에서 connDB()처럼 웹 애플리케이션이 필요할 때마다 DB에 연결해서 작업하는 방식은 단점이 연결에 시간이 많이 걸린다는 점이 있다.

특히 온라인 쇼핑몰의 경우 동시에 수십 명, 많게는 수백 명까지 접속해서 상품 조회, 주문하기 등의 기능을 사용하기 때문에 위의 방법처럼 DB와 연동해 작업해야 한다면 비효율적이다.

그렇기 때문에 웹 애플리케이션이 실행됨과 동시에 DB와의 연동을 미리 설정해두는데 이 기술을 ConnectionPool 이라고 한다.

tomcat의 context.xml 파일에 DB를 연결할 때 필요한 설정들을 미리 넣어둔다

0개의 댓글