2018년 3월 13일 화요일

자바 웹 개발 기초

1. MVC 컴포넌트 역할
  - 컨트롤러 : 서블릿 / 모델 객체 호출 및 결과 얻음 / 모델 객체가 생성한 VO 값 객체 생성 / JSP 호출
  - 모델 : DBMS에 SQL 쿼리 전송 및 결과 얻음 / VO 생성 및 참조
  - 뷰 : JSP / 화면 출력 (VO 참조)

2. JSP 구동 원리
  - JSP 파일을 JSP 엔진을 통해 자바 소스 생성, 이를 자바 컴파일러를 통해 클래스 생성 후 웹브라우저에 응답함
  -  자바 소스는 서블릿 구동 방식에 따라 service() 메서드에서 호출되고 출력 메서드를 통해 서블릿이 생성한 HTMl 화면을 웹 브라우저로 보냄
  - <interface> Servlet ~ <interface> JspPage ~ <interface> HttpJspPage의 _jspService()를 서블릿 컨테이너 속에 service() 메서드 내부에서 호출함
  - 템플릿 데이터 : HTML 이나 XML, 자바스크립트, 스타일 시트, JSON 문자열, 일반 텍스트 등 클라이언트로 출력되는 콘텐츠를 의미함

3. JSP 전용 태그 (JSP내 지정된 문법을 통해 특별한 자바 코드를 생성함)
  - page 지시자 : <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    ~ language 속성 : JSP 페이지에 삽입되는 코드의 스크립팅 언어를 지정함
    ~ contentType 속성 : 출력할 데이터의 MiME 타입과 문자 집합(출력할 데이터를 어떤 인코딩을 할지 선택)을 지정함
    ~ pageEncoding : 출력할 데이터를 어떤 인코딩을 할지 선택하는 문자 집합 / 생략 시 contentType속성을 사용하며 기본값 ISO-8859-1을 사용함
  - 스크립트릿 : <% 자바 코드 %> ~ JSP 안에 java 코드를 넣을 때 사용
  - 선언문 : <%! 멤버 변수 및 메서드 선언 %> ~ 서블릿 클래스의 멤버(변수나 메서드)를 선언할 때 사용하는 태그임
  - 표현식 : <%= 결과를 반환하는 자바 표현식 %> ~ 문자열을 출력할 때 사용

4. 포워딩 / 인클루딩
  - 포워딩 위임 방식 : 서블릿 A에서 서블릿 포워딩 시 서블릿 A의 작업은 종료하고, 서블릿 B에게 모든 작업을 위임함
  - 인클루드 위임 방식 : 서블릿 A에서 서블릿 B에게 작업을 위임한 후 제어권을 반환받고 다시 서블릿 A에서 실행함

5. 데이터 보관소
  - ServletContext 보관소 : 웹 어플리케이션이 시작될 때 생성되어 웹 어플리케이션이 종료될 때까지 유지됨 / JSP에서는 application 변수를 통해 이 보관소를 참조할 수 있음
  - HttpSession 보관소 : 클라이언트의 최초 요청 시 생성되어 브라우저를 닫을 때까지 유지됨 / 로그인할 때 이 보관소를 초기화하고, 로그아웃하면 이 보관소의 값을 비움 / JSP에서는 Session 변수를 통해 이 보관소를 참조 가능
  - ServiceRequest 보관소 : 클라이언트의 요청이 들어올 때 생성되어, 클라이언트에게 응답할 때까지 유지됨 / request 변수를 통해 이 보관소를 참조할 수 있음
  - JspContext 보관소 : JSP 페이지를 실행하는 동안만 유지됨 / JSP 에서는 pageContext 변수를 통해 이 보관소를 참조할 수 있음

6. JSP 액션 태그
  ~ JSP 페이지를 작성할 때 유지 보수를 위해 자바 코드 삽입을 최소해야 함. 이를 위해 JSP 전용 태그를 제공
  - <jsp:useBean> : 자바 인스턴스(자바 빈)을 준비
  - <jsp:setProperty> : 자바 빈의 속성 값을 설정
  - <jsp:getProperty> : 자바 빈의 속성 값을 가져옴
  - <jsp:include> : 정적 또는 동적 자원을 인클루딩 하는 자바 코드를 생성
  - <jsp:forward> : 현재 페이지의 실행을 멈추고 다른 정적 자원 또는 동적 자원으로 포워딩하는 자바 코드 생성

7. EL(Expression Language) 사용
  - 자바 빈의 프로퍼티, 맵, 리스트, 배열의 값을 보다 쉽게 꺼내게 하는 기술 / 스태틱으로 선언된 메서드를 호출 / JSP에서는 주로 보관소에 들어 있는 값을 꺼낼 때 사용 가능
  - ${객체이름.프로퍼티} 또는 ${객체이름["프로퍼티"]} 표기법으로 사용

8. DAO (data access object)
  - 데이터베이스나 파일, 메모리 등을 이용하여 애플리케이션 데이터를 생성, 조회, 변경, 삭제하는 역할을 수행함
  - DAO는 보통 하나의 DB 테이블 또는 DB 뷰에 대응

9. DB 커넥션풀
  - DB 커넥션 객체를 여러 개 생성하여 풀에 담아 놓고 필요할 때 꺼내 쓰는 방식, 자주 쓰는 객체를 미리 만들어 두고, 필요할 때마다 빌리고, 사용한 다음 반납하는 방식을 풀링이라 하는데 이렇게 객체를 모아둔 것을 객체 풀이라 하고, 여러 개의 DB 커넥션을 관리하는 객체를 DB 커넥션풀이라 부름

10. DataSource
  - DriverManager를 통해 DBMS와 연결하는 경우 DB가 바뀌면 웹 어플리케이션 소스도 수정해야됨 하지만 Datasource를 사용하면 톰캣서버에서 웹 애플리케이션과 별도로 구성되어 DBMS에 접근 가능함.