본문 바로가기

교육 및 세미나/신입사원 교육

10일차(2018.01.16)

JSP(Java Server Pages)

8. 이클립스 JSP 개발 환경 구축

1) 프로젝트(new) 생성 시 『Dynamic Web Project』 선택

2) 프로젝트 명 입력 시 식별자 작성 규칙을 준수

3) Target Runtime 지정 → 톰캣 설치 디렉터리 연결

※ 실제 실무 프로젝트에서는 웹 애플리케이션 서버가 이클립스에 플러그인 형태로 설치되어 운영되는 것이 아니라... 단독으로 웹 서버가 구축되고 이 환경에 맞게 개발이 이루어지게 된다. 또한, 아파치 토캣 이외의 다른 웹 어플리케이션 서버(제우스?)를 사용할 수 있다.

4) 프로젝트 생성 후에는 Server 탭에서 톰캣 서버 등록 ( 단, 서버를 새로 등록했을 경우 서버 관련 설정을 재구성 )

5) 톰캣 서버에 프로젝트 등록 → add and remove

6) 톰캣 서버 시작(재시작)

※ 이 시점에서... 포트번호 설정 및 확인 필요 (현재의 실습 환경은... 아파치 톰캣의 포트번호를 변경한 상태)

7) JSP 페이지 작성(확장자 『.jsp』) → WebContent 디렉터리 하위에 작성

※ 페이지 작성 전에 Encoding 방식을 확인하고 설정한다. (UTF-8)

※ JSP 기본 페이지는 (현재 이클립스 Oxygen.2 Release (4.7.2) 버전)

default 값으로 HTML 4.01 로 작성되어 있다.

HTML 5 로 변경을 해야 할 상황이라면 JSP 템플릿을 수정한 이후에 작업한다.

8) 톰캣 서버가 실행되고 있는 상태에서 웹 브라우저의 URL 주소 창에 다음과 같은 주소를 요청한다. (클라이언트 입장)

http://서버주소:포트번호/프로젝트명/파일이름.jsp

http://localhost:8090/WebPrj03/NewFile.jsp

※ 관찰

- First.jsp 생성 및 구성 이후

- 브라우저를 통해 해당 페이지 구성 내용 확인

- 『C:\WebStudy\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\WebPrj03\org\apache\jsp』

위의 경로를 통해 『First_jsp.java』파일 내용 확인.

- 우리가 클라이언트에게 전달할 내용을 직접 그리는 것이 아니라 이와 같은 방식으로 그려달라고 대필자(Servlet)에게 주문서를 작성하는 것.

확장자가 html 인 형태로 작성된 파일은 우리가 직접 그린 문서를 클라이언트에게 바로 전달했다면 jsp 는 우리가 제안만 할 뿐 직접 그리는 것이 아니라는 것을 파악하고 있어야 한다.

JSP 구성 요소

디렉티브(지시어) directive

페이지에 대한 설정 정보 지정.  클래스 속성 변경.

<%@ %>

page

페이지에 대한 기본 정보 입력. (생성하는 문서의 타입, 출력 버퍼의 크기, 에러 페이지 등)

현재 문서를 나타내는 객체.

page 디렉티브는 JSP 페이지와 관련된 속성을 정의하고 이 속성들은 웹 컨테이너에 정보를 제공한다.

또한 한 페이지에 page 디렉티브는 한 번 이상 나올 수 있고 위치도 관계가 없다.

하지만 보통 상단에 기술한다.

- 주요 속성

· language : 스크립트 코드에서 사용되는 프로그래밍 언어 지정

· contentType : 생성할 문서 타입

· import : 사용할 자바 클래스 지정

· session : 세션 사용 여부 지정

· buffer : 출력 버퍼 크기 지정

· autoFlush : 출력 버퍼가 다 채워졌을 경우 자동으로 버퍼에 있는 데이터를 출력

스트림에 보내고 비우고 만들지에 대한 설정 여부 지정

· info : 페이지에 대한 설명

· errPage : 실행 도중 에러 발생 시 보여줄 페이지 지정

· pageEncoding : 페이지 자체의 캐릭터 인코딩 지정

taglib

태그 라이브러리(tag library)

사용자가 만든(정의한) 태그 모음(사용자가 직접 기능 설정)

include

다른 문서를 포함하는 기능

여러 JSP 페이지에서 공통적으로 포함하는 내용이 있을 때 이러한 내용을 매번 반복해서 입력하지 않고 별도의 파일을 저장해 두었다가 JSP 파일에 삽입하도록 하는 것이다. → 생산성 향상

include 디렉터리의 처리 과정은 정적으로 include 지시자를 사용한 JSP 페이지가 컴파일 되는 과정에서 include 되는 JSP 페이지의 소스 내용을 그대로 포함해서 컴파일한다.

즉, 복사&붙혀넣기 방식으로 두개의 파일을 하나로 구성한 후 같이 변환되고 컴파일된다.

스크립트 요소

스크립트 릿(Scriptlet : 스크립릿 : 스크립틀릿)

JSP 에 JAVA 코드를 기술

<%  %>

JSP 문서 내에 JAVA 코드를 기술하는 부분이기 때문에 오로지 자바 코드만 올 수 있다.

스크립트 릿에 선언된 변수는 지역 변수의 성격을 가지게 되며 자바에서 메소드 내에 선언된 변수라고 할 수 있다.

표현식(Expression)

HTML 문서 결과값에 포함시키고자 할 때 사용(브라우저에 등장시킬 수 있는 영역)

<%=  %>

선언부(Declaration)

스크립트 릿이나 표현식에서 사용할 함수를 작성할 때 사용

<%!  %>

스크립트 릿이나 표현식에서 사용 가능한 변수나 메소드를 정의하는 부분이기 때문에 선언부에서 선언된 변수는 서블릿으로 변환되는 과정에서 멤버 변수의 입장을 취하게 되며 전역 변수의 성격을 가진다.

또한, 『_jspInit()』,『_jspDestroy()』와 같은 생명주기 운영을 위해 메소드를 재정의할 수 있다.

Spring

Spring Framework 이해하기

개요

1. Framework

: 애플리케이션을 구현하고 관리하는 환경(틀)

2. Spring Framework

: 설정 정보(xml)에 의해 애플리케이션을 구성하고, 객체를 생성하고, 관리하는 주체.

스프링 프레임워크(Spring Framework)의 개념

  • 스프링은 자바 엔터프라이즈 어플리케이션 개발에 사용되는 어플리케이션 프레임워크.

어플리케이션 프레임워크는 어플리케이션 개발을 빠르고 효율적으로 할 수 있도록 어플리케이션의 바탕이 되는 틀과 공통 프로그래밍 모델 그리고 API 등을 제공해준다.

- 어플리케이션의 바탕이 되는 틀 → 스프링 컨테이너

  • 스프링은 스프링 컨테이너 또는 어플리케이션 컨텍스트라고 불리는 스프링 런타임 엔진을 제공한다.
  • 스프링 컨테이너는 설정 정보(XML : 배치 기술서)를 참고해서 어플리케이션을 구성하는 오브젝트(객체)를 생성하고 관리한다.
  • 스프링 컨테이너는 독립적으로 동작할 수도 있지만 보통 웹 모듈에서 동작하는 서비스나 서블릿으로 등록해서 사용하게 된다.
  • 스프링을 사용하려면 먼저 스프링 컨테이너를 다루는 방법과 스프링 컨테이너가 어플리케이션 오브젝트를 이용할 수 있도록 설정 정보를 작성하는 방법을 알아야 한다. ==> 설정 정보(xml)에 의해 어플리케이션을 구성하고 객체를 생성, 관리하는 주체

- ★★★공통 프로그래밍 모델 → IoC(역제어)/DI(dependency injection), 서비스 추상화, AOP

프레임워크라는 어플리케이션을 구성하는 오브젝트(객체)가 생성되는 동작하는 방식에 대한 틀을 제공해줄 뿐 아니라 어플리케이션 코드가 어떻게 작성되어야 하는지에 대한 기준도 제시한다.

이런 틀을 보통 프로그래밍 모델이라고 한다.

스프링은 세 가지 핵심 프로그래밍 모델을 제공한다. (핵심 철학, 핵심 가치)

① IoC/DI

IoC/DI 라고 불리는 오브젝트 생명 주기와 의존관계에 대한 프로그래밍 모델이다.

스프링은 유연하고 확장성이 뛰어난 코드를 만들 수 있게 도와주는 객체지향 설계 원칙과 디자인 패턴의 핵심 원리를 담고 있는 IoC/DI 를 프레임워크의 근간으로 삼고 있다.

스프링 프레임워크에서 동작하는 코드는 IoC/DI 방식을 따라 작성되어야 스프링이 제공하는 가치를 제대로 누릴 수 있다.

스프링이 직접 제공하는 모든 기술과 API, 심지어 컨테이너도 IoC/DI 방식으로 작성되어 있다.

스프링을 바르게 이해하고 효율적으로 사용하는데 기본이 되며 가장 중요한 기술이다.

IoC(Inversion of Control) : 제어의 역전

- 객체 관리의 주체

- Inversion of Control : 제어의 역전

- 객체 생성과 관리를 직접 하는 것이 아니라 (클래스)외부(컨테이너)에서 만들어진 오브젝트(객체)를 제공받는 입장이 되는 것

- Bean : 스프링이 관리하는 대상

- Bean Factory : 객체를 관리하는 주체. 일반적으로 이 기능을 확장한 Application Context 를 사용하게 된다.

- Application Context : Bean Factory 의 확장 버전

- 설정 정보 : 어떤 객체들이 관리 대상인지 설정한 정보 ①XML, ②Annotation 등을 이용한다. 객체들의 의존 관계도 기술되어 있다.

- IoC 컨테이너 : 객체를 등록하고 관리하는 공간

DI(Dependency Injection) : 의존성 주입

- 객체 관리의 방법.

- 자바에서 객체를 생성하고 관리하는 방법은 모두 has-a 관계를 통해 처리해 왔기 때문에 이들은 모두 의존관계가 치밀하고 밀접한 상황일 수 밖에 없다. 이 때문에... 이러한 강한 결합 상태는 유연성을 떨어뜨리는 결과를 초래하게 된다. 이러한 결합 상태를 풀어주는 과정(방법)이 바로 DI이다.

- Dependency Injection : 의존성 주입(의존관계 주입)

- 의존관계 주입 : 의존 객체를... 이 객체를 사용하는 객체에... 외부에서 주입하는 액션(상태)

- 의존관계 : A 가 실행되기 위해서 B 를 필요로 하는 상태

- 의존객체 : A 입장에서의 의존객체는 B (주입되는 객체)

→ 우선... A 객체에 B 객체의 주소를 넘겨줌으로써 B 객체를 사용하게 된다면 A 객체는 여전히 B 객체를 사용하는 데는 문제가 없고, B 객체는 A 객체와의 결합 상태가 느슨해진다고 할 수 있다.

이 때, 넘겨주는 방법은 생성자 또는 setter() 메소드를 이용하는 방법이 있다. DI 를 위해 객체는 작은 객체부터 생성해서 큰 객체로 DI 하게 된다. 이 때, 완성된 오브젝트(객체)가 만들어질 때까지 객체를 관리할 주체가 필요하게 되는데 그 역할을 하는 것이 바로 컨테이너인 것이다.

② 서비스 추상화

스프링을 사용하면 환경이나 서버, 특정 기술에 종속되지 않고 이식성이 뛰어나며 유연한 어플리케이션을 만들 수 있게 되는데, 이를 가능하게 해주는 것이 바로 서비스 추상화이다. 구체적인 기술과 환경에 종속되지 않도록 유연한 추상 계층을 두는 방법이다.

추상 = 유연

'교육 및 세미나 > 신입사원 교육' 카테고리의 다른 글

12일차(2018.01.18)  (0) 2018.01.19
11일차(2018.01.17)  (0) 2018.01.19
9일차(2018.01.15)  (0) 2018.01.15
8일차(2018.01.12)  (0) 2018.01.12
7일차(2018.01.11)  (0) 2018.01.12