DI (Dependency Injection)


1. IoC (Inversion of Control)

  • IoC(Inversion of Control)란, 프로그램을 구동하는데 필요한 객체에 대한 생성, 변경 등의 관리를 개발자가 아닌 컨테이너에서 직접 관리하는 것
  • 스프링은 IoC 구조를 통해 구동 시 필요한 객체의 생성부터 소멸까지 해당 객체에 대한 관리를 직접 수행

1.1. 스프링 IoC 컨테이너

  • 스프링에서 관리하는 객체를 빈(Bean)이라고 하고, 해당 빈들을 관리한다는 의미로 컨테이너를 빈 팩토리(Bean Factory)라고 함

1.2. 스프링 IoC 컨테이너의 역할

  • 객체(Bean)의 생명주기와 의존성을 관리
  • 객체(Bean)의 생성, 초기화, 소멸 등의 처리를 담당
  • 개발자가 직접 객체를 생성할 수 있지만 해당 권한을 컨테이너에 맡김으로써 소스 코드 구현의 시간을 단축 가

1.2. 스프링 IoC 컨테이너의 종류

  • 애플리케이션 컨텍스트(Application Context) 빈 팩토리(BeanFactory)를 확장한 IoC 컨테이너로 빈(Bean)을 등록하고 관리하는 기능은 빈 팩토리(BeanFactory)와 동일하지만 스프링이 제공하는 각종 부가적인 서비스를 추가 제공

 

2. DI(Dependency Injection)

2.1. DI(Dependency Injection)

  • DI(Dependency Injection)란 하나의 객체가 사용하는(의존하는) 다른 객체를 외부에서 생성하고 주입받아 사용하는 것
  • 객체를 주입받는 방법으로는 메소드를 통한 의존성 주입 방법과 생성자를 통한 의존성 주입 방법이 존재

2.2. 스프링 DI

  • 스프링에서는 컨테이너가 설정 정보를 읽어와서 자동으로 객체들의 의존 관계를 주입
  • 스프링 컨테이너를 통해 의존성을 주입받게 되면 유지 보수가 편해지고 개발자가 작성해야 할 코드가 단순해지며 객체 간의 종속 관계(결합도)를 해소 가능

 

3. 스프링 DI 설정 방법

  • 스프링은 객체들의 의존 관계를 연결할 수 있는 3가지의 설정 방법을 제공

3.1. XML 방식

  • 스프링 컨테이너 구동 시 생성해야 하는 객체(Bean)들과 의존 관계를 XML 파일로 작성하는 방식
  • <beans> 요소는 최상위 요소로 하위 요소들로 다양한 스프링 설정 가능(DI, AOP, Transaction 등)
  • <bean> 요소는 스프링 컨테이너가 관리할 빈을 선언하는 요소
<beans>
  <bean id="student" class="com.ismoon.spring.person.model.vo.Student"/>
</beans>
  • Setter 메소드를 통해 의존 관계가 있는 빈을 주입하려면 <property> 요소를 사용(단, 일치하는 Setter 메소드가 있어야 됨)
<beans>    
  <bean id="student" class="com.ismoon.spring.person.model.vo.Student">
    <property name="name" value="홍길동"/>
    <property name="wallet" ref="money"/>
  </bean>

  <bean id="money" class="com.ismoon.spring.wallet.model.vo.Wallet" />
</beans>
  • 생성자를 통해 의존 관계가 있는 빈을 주입하려면 <constructor-arg> 요소를 사용(단, 일치하는 매개변수가 있는 생성자가 있어야 됨)
<beans>    
  <bean id="student" class="com.ismoon.spring.person.model.vo.Student">
    <constructor-arg name="name" value="홍길동"/>
    <constructor-arg name="wallet" ref="money"/>
  </bean>

  <bean id="money" class="com.ismoon.spring.wallet.model.vo.Wallet" />
</beans>
  • <import> 요소를 사용하여 다른 XML 설정을 가져올 수 있음
<beans>    
  <import resource="config.xml"/> 
</beans>

3.2. Java 방식

  • 스프링 컨테이너 구동 시 생성해야 하는 객체(Bean)들과 의존 관계를 Java 파일로 작성하는 방식
  • 스프링 컨테이너가 자바 파일을 설정 파일로 식별하기 위해서는 @Configuration 어노테이션을 클래스에 작성해야 함
@Configuration
public class JavaConfig {
}
  • 자바 파일에서 빈을 선언하기 위해서는 객체를 리턴하는 메소드를 만들고 @Bean 어노테이션을 메소드에 작성해야 함
@Configuration
public class JavaConfig {
  @Bean
  public Student student() {
    return new Student();
  }
}
  • Setter 메소드를 통해 의존 관계가 있는 빈을 주입 가능
@Configuration
public class JavaConfig {
  @Bean
  public Student student() {
    Student student = new Student();

    student.setName("홍길동");
    student.setWallet(wallet());

    return student;
  }

  @Bean
  public Wallet wallet() {
    return new Wallet();
  }
}
  • 생성자를 통해 의존 관계가 있는 빈을 주입 가능
@Configuration
public class JavaConfig {
  @Bean
  public Student student() {
    return new Student("홍길동", wallet());
  }

  @Bean
  public Wallet wallet() {
    return new Wallet();
  }
}
  • @Import 어노테이션을 사용하여 다른 Java 설정 파일을 가져오는 것이 가능
@Configuration
@Import(Config.class)
public class JavaConfig {
}

3.3. 어노테이션 방식

  • 스프링 컨테이너 구동 시 생성해야 하는 객체(Bean)들과 의존 관계를 어노테이션을 사용하여 구성하는 방식
  • 어노테이션으로 빈을 선언하기 위해서는 빈으로 생성하고 싶은 클래스에 @Component을 작성해야 함
@Component
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
  private String name;
  private Wallet wallet;
}
  • @Component 어노테이션이 작성된 클래스를 빈으로 생성하기 위해서는 컴포넌트 스캐닝(Component Scannig)을 통해서 스프링 컨테이너 구동 시 해당 클래스를 찾아 빈으로 등록하도록 설정해야 함
<!-- XML 방식 -->
<beans>    
  <context:component-scan base-package="com.ismoon.spring" />
</beans>
// Java 방식
@Configuration
@ComponentScan("com.ismoon.spring")
public class JavaConfig {
}
  • @Autowired 어노테이션을 사용하여 스프링 컨테이너에서 빈을 찾아 자동으로 의존성 주입 가능
  • @Autowired 어노테이션은 필드, 메소드, 생성자에 적용 가능
  • @Value 어노테이션을 사용하여 빈이 아닌 값을 주입 가능
@Component
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
  @Value("홍길동")
  private String name;
  @Autowired
  private Wallet wallet;
}

스프링 프레임워크(Spring Framework)


 

1. 스프링 프레임워크(Spring Framework)

  • 자바 애플리케이션 개발을 위한 오픈 소스 프레임워크로 줄여서 스프링(Spring)이라고 불림
  • 동적인 웹 애플리케이션을 개발하기 위한 여러 가지 서비스를 제공하고 있으며 대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부 표준프레임워크의 기반 기술로서 쓰이고 있음

 

2. 스프링 프레임워크의 특징

  • 자바 개발의 복잡도를 간소화하기 위한 스프링 프레임워크의 특징은 다음과 같음

2.1. DI (Dependency Injection, 의존성 주입)

  • 설정 파일이나 어노테이션을 통해 객체 간의 의존 관계를 설정하여 개발자가 직접 객체 간의 의존 관계를 생성할 필요가 없음

2.2. AOP (Aspect Oriented Programming, 관점 지향 프로그래밍)

  • 트랜잭션, 로깅, 보안 등 공통으로 필요로 하는 기능의 경우 해당 기능들을 분리하여 관리

2.3. POJO (Plain Old Java Object)

  • 일반적인 J2EE 프레임워크에 비해 특정 라이브러리를 사용할 필요가 없어 개발이 쉬우며, 기존 라이브러리의 지원이 용이

 

3. 스프링 프레임워크의 동작 구조

  • 스프링 프레임워크 기반의 애플리케이션에서는 스프링 컨테이너 안에서 애플리케이션에서 필요한 객체가 생성되고 소멸
  • 즉, 스프링 컨테이너는 애플리케이션에서 필요한 객체를 생성하고, 객체들을 서로 연결하고, 소멸하는 등 객체의 생명 주기를 관리
  • 스프링 컨테이너가 어떤 객체를 생성하고, 객체들을 어떻게 연결할지는 개발자가 설정해야 하는데 설정 방식은 크게 XML, 자바, 어노테이션을 통한 오토 와이어링 방식이 있

 

4. 스프링 프레임워크의 구성 모듈

  • 스프링 프레임워크의 구성 모듈은 크게 6개의 카테고리로 구분되어 있음

4.1. 코어 컨테이너 계층

  • 애플리케이션에서 필요한 객체들의 생성, 설정 등의 처리 방법을 관리하는 컨테이너
  • 모든 스프링 관련 모듈은 이 코어 컨테이너 기반으로 구축

4.2. AOP 계층

  • 스프링은 AOP 계층을 통해 애스펙트 지향 프로그래밍(AOP)을 풍부하게 지원
  • AOP는 주로 애플리케이션 전체에 걸친 관심사와 각 객체 간의 결합도 낮추는데 이용

4.3. 데이터 액세스 / 통합 계층

  • JDBC나 데이터베이스에 연결하는 계층으로, 트랜잭션에 해당하는 기능을 담당하여 영속성 프레임워크와 연결을 담당
  • 이 모듈들을 이용하면 데이터 베이스 관련 코드를 깔끔하고 간단하게 만들 수 있고 데이터 베이스 리소스를 닫지 않아서 발생할 수 있는 문제를 예방할 수 있음

4.4. Web 계층

  • 스프링의 특징을 활용하여 객체 간의 결합도를 낮추는 MVC 관련 모듈들을 제공

4.5. 테스트 계층

  • 스프링에서 애플리케이션 테스트를 위한 모듈을 제공
  • 스프링 애플리케이션 컨텍스트에서 빈을 로드하고 이 컨텍스트에 있는 빈을 이용하여 테스트 코드를 작성할 수 있음

1. 스프링 사이트 접속 후 STS3(Spring Tool Suite 3)를 다운로드

다운로드 :https://github.com/spring-attic/toolsuite-distribution/wiki/Spring-Tool-Suite-3

 

Spring Tool Suite 3

the distribution build for the Spring Tool Suite and the Groovy/Grails Tool Suite - spring-attic/toolsuite-distribution

github.com

 

window에 맞는 sts3 다운로드

 

2. 다운로드된 압축 파일의 압축을 풀고 STS.exe를 실행

압축 풀기
실행파일
workspace 설정

3.JDK 설정

  • 상단 메뉴 -> Window -> Preferences에서 Compiler 검색 후 Compiler compliance level을 21로 변경
  • 상단 메뉴 -> Window -> Preferences에서 Installed JREs 검색 후 앞에서 설치 한 JDK의 경로에서 JRE를 찾아서 지정

Compiler 설정
jre 추가
버전에 맞는 jdk 설정

4.Encoding 설정

  • 상단 메뉴 -> Window -> Preferences에서 Encoding 검색 후 검색된 항목의 Encoding을 UTF-8로 변경

UTF-8로 설정
4개 모두 utf-8로 설정

5. Tomcat 설정

  • 상단 메뉴 -> Window -> Preferences -> Server -> Runtime Environment에서 앞에서 다운로드 한 톰캣을 찾아서 등록
  • Servers 뷰에서 Runtime Environment에 등록한 톰캣을 생성하고 톰캣을 실행하여 정상적으로 동작하는지 확인

add
다운로드 받은 tomcat 클릭 후 next
다운로드 받은 tomcat 경로 입력 후 finish
서버 추가
다운로드 받은 tomcat 버전에 맞게 클릭 후 finish

 

아파치 메이븐(Apache Maven)


1. 아파치 메이븐(Apache Maven)

  • 메이븐(Maven) 이란 자바용 프로젝트 관리 도구로 프로젝트의 빌드 과정을 자동화해주는 프레임워크
  • POM(Project Object Model) XML 문서를 통해 해당 프로젝트의 버전 정보 및 빌드, 라이브러리 정보들을 통합하여 관리

2. POM(Project Object Model)

  • 프로젝트에서 사용하는 자바 버전, 라이브러리, 플러그인 구성을 통합하여 관리할 수 있게 설정 정보를 XML로 문서화한 것
  • 메이븐으로 프로젝트를 생성하면 프로젝트 최상위 디렉터리에 pom.xml 파일이 생성 (프로젝트에 1개의 파일만 존재)
  • pom.xml에서는 주로 프로젝트 정보, 빌드 환경, 의존성 등을 설정
<project>
  <!-- 프로젝트 정보 설정 -->
  <modelVersion>4.0.0</modelVersion> 
  <groupId>com.ismoon</groupId> 
  <artifactId>spring</artifactId> 
  <name>springProject</name> 
  <version>1.0</version>

  <!-- 의존성 설정 -->
  <dependencies> 
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope> 
    </dependency>
  </dependencies>
</project>

 

3. 메이븐 설치

  • 아파치 메이븐 홈페이지(https://maven.apache.org/download.cgi) 접속 후 다운로드
  • 다운로드 후 압축을 풀고 bin 폴더를 Path 환경 변수에 등록
  • "명령 프롬프트" 실행 후 아래의 명령어를 입력하여 메이븐이 정상적으로 설치되었는지 확인
> mvn -v
Apache Maven 3.8.6 (84538c9988a25aec085021c365c560670ad80f63)
...

download
압축 풀기
시스템 환경변수
Path에 다운로드 받은 폴더/bin 경로 추가
경로 추가
cmd창 mvn -v

프레임워크(Framework)


1. 프레임워크(Framework)

  • 프레임워크(Framework)란, 어느 정도 구현되어 있는 틀을 가지고 그 안에서 기능 구현을 할 수 있도록 여러 가지 기능을 제공하는 소프트웨어
  • 프레임워크는 소프트웨어를 구현하는 개발 시간을 줄이고, 반복적으로 해야 하는 공통적인 부분을 최소화할 수 있도록 설계되어 있음
  • 프레임워크는 일정 수준 이상의 품질을 보장하는 애플리케이션을 개발할 수 있는 환경을 제공

 

2. 라이브러리와 프레임워크, API

2.1. 라이브러리(Library)

  • 라이브러리는 소프트웨어를 개발을 필요한 기능들을 재사용하기 편리하도록 미리 만들어 놓은 도구

2.2. 프레임워크(Framework)

  • 프레임워크는 애플리케이션의 공통적인 개발 환경을 제공해 주는 소프트웨어
  • 프레임워크 안에 라이브러리가 포함되어 있고 필요에 따라서 개발자가 라이브러리를 추가 가능

2.3. API(Application Programming Interface)

  • 애플리케이션에서 사용할 수 있도록 운영 체제나 서버, 프로그래밍 언어 등이 제공하는 기능을 제어할 수 있게 만든 인터페이스

 

3. 프레임워크의 특징

  • 개발자가 따라야 하는 가이드를 제공
  • 개발할 수 있는 범위가 정해져 있음
  • 개발자를 위한 다양한 도구, 플러그인들을 지원

3.1. 프레임워크의 장점

  • 개발 시간을 줄일 수 있음
  • 유지 보수가 쉽고 추상화된 코드 제공을 통해 확장성이 뛰어남
  • 정형화되어 있어 일정 수준 이상의 품질을 보장받을 수 있음

3.2. 프레임워크의 단점

  • 기본 설계에 대한 이해가 어렵기 때문에 학습 난이도가 높음
  • 기본 설계된 구조에 의해 자유로운 개발에 한계가 있음
  • 사용하지 않는 기능에 대한 라이브러리가 포함될 수 있음

 

4. 프레임워크의 종류

4.1. 영속성 프레임워크

  • 데이터의 저장, 조회, 변경, 삭제를 다루는 클래스 및 설정 파일들을 제공하는 프레임워크
    • Mybatis
    • Hibernate

4.2. 자바 웹 프레임워크

  • Java EE를 통한 웹 애플리케이션 개발에 초점을 맞추어 필요한 요소들을 모듈화하여 제공하는 프레임워크
    • Spring Framework
    • 전자정부표준 (Spring 기반)
    • Struts

4.3. UI 프레임워크

  • UI를 보다 쉽게 구현할 수 있는 도구를 제공하는 프레임워크
    • Bootstrap
    • Quasar Framework

4.4. 기능 및 지원 프레임워크

  • 특정 기능이나 업무 수행에 도움을 줄 수 있는 기능을 제공하는 프레임워크
    • Log4j
    • JUnit 5
    • ANT, Maven, Gradle

 

MVC(Model-View-Controller) 패턴


1. MVC(Model-View-Controller) 패턴

  • MVC 패턴은 디자인 패턴 중 하나로 데이터 처리(Model), 클라이언트가 보는 페이지(View), 그리고 중간에서 이들을 제어하는 컨트롤러(Controller)로 역할을 분담해 설계하는 디자인 패턴
  • MVC 패턴을 활용하게 되면 각각 정해진 역할에만 집중하기 때문에 유지 보수 및 확장성이 용이한 장점이 있지만 설계하는 시간과 개발 시간이 증가하는 단점이 존재

2. Model (.class)

  • 비즈니스 영역의 로직 처리와 데이터 처리 부분을 담당
    • VO(Value Object), DTO(Data Transfer Object)는 계층 간 데이터 교환을 위한 용도의 객체
    • DAO(Data Access Object)는 Data에 접근하기 위한 용도의 객체
    • Service는 전달할 데이터들을 가공하고 비즈니스 로직을 처리하기 위한 용도의 객체

3. View (.jsp)

  • 사용자 인터페이스 부분을 담당
  • 주로 모델(Model)로부터 전달받은 데이터들을 사용자에게 보여주는 역할

4. Controller (Servlet)

  • 뷰(View)와 모델(Model), 모델(Model)과 뷰(View)를 제어하는 부분을 담당
  • 뷰(View)를 통해 사용자가 입력한 값을 전달받거나 모델(Model)로부터 처리된 데이터를 뷰(View)로 전달하는 역할

 

 

JDBC(Java DataBase Connectivity)


1. JDBC(Java DataBase Connectivity)

  • 자바에서 데이터베이스에 접근할 수 있게 해주는 표준 Programming API
  • 자바와 데이터베이스 연결 시 사용하는 DBMS에 알맞은 JDBC 드라이버를 사용해야 함
  • JDBC 드라이버를 사용하면 DBMS의 종류 상관없이 동일한 방법으로 데이터베이스에 다양한 작업 가능

 

2. JDBC 주요 객체

2.1. DriverManager

  • DriverManager 클래스는 JDBC 드라이버를 통하여 Connection을 만드는 역할을 한다.
  • Class.forName() 메소드를 이용해서 JDBC 드라이버를 등록하면 드라이버 내부에 있는 클래스들을 동적으로 로드
Class.forName("org.mariadb.jdbc.Driver"); // MariaDB
Class.forName("oracle.jdbc.driver.OracleDriver"); // 오라클
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); // MSSQL

2.2. Connection

  • DriverManager 클래스를 통해 실제 데이터베이스와 연결된 Connection 객체를 얻을 수 있음
  • Connection 객체는 직접 생성이 불가능하고 DriverManager.getConnection() 메소드를 호출하여 Connection 객체를 얻어올 수 있음
Connection connection = DriverManager.getConnection("jdbc:mariadb://localhost:3306/web", "web", "web");

2.3. Statement

  • Connection 객체를 통해 데이터베이스에 SQL 구문을 전달하여 실행시키고 결과를 반환받는 역할을 하는 객체
  • Statement 객체는 직접 생성이 불가능하고 Connection 객체의 createStatement() 메소드를 호출하여 Statement 객체를 생성 가능
Statement stmt = connection.createStatement();
  • SQL 구문의 종류에 따라 실행에 필요한 메소드가 달라짐
// SELECT 쿼리 실행 (ResultSet 객체를 리턴한다.)
ResultSet rs = stmt.executeQuery("SELECT * FROM emp");

// INSERT, UPDATE, DELETE 쿼리 실행 (정수값을 리턴한다.)
int result = stmt.executeUpdate("DELETE FROM emp WHERE emp_no = 10")

2.4. PreparedStatement

  • SQL 구문을 미리 컴파일 하고 실행 시간 동안 인수 값을 위한 공간을 확보한다는 점에서 Statement와 다
  • PreparedStatement 객체는 직접 생성이 불가능하고 Connection 객체의 prepareStatement() 메소드를 호출하여 PreparedStatement 객체를 생성 가능
String query = "SELECT * FROM emp WHERE emp_no = ?";
PreparedStatement pstmt = connection.prepareStatement(query);

pstmt.setInt(1, 10);

ResultSet rs = pstmt.executeQuery();

2.5. ResultSet

  • ResultSet 객체는 SELECT 쿼리의 실행 결과에 의해 생성된 테이블(Result Set)을 담고 있으며 커서(cursor)로 조회된 행들의 데이터에 접근 가능
ResultSet rs = stmt.executeQuery("SELECT * FROM emp");

while(rs.next()){
  System.out.println(rs.getInt("emp_no") + ", " + rs.getString(2));
}

'servlet-jsp' 카테고리의 다른 글

[Servlet-JSP] 서블릿(Servlet)  (0) 2024.07.01
[Servlet-JSP] 웹 통신 개요  (0) 2024.06.28
[Servlet-JSP] 톰캣(Tomcat) 설치  (0) 2024.06.28

서블릿(Servlet)


1. 애플릿(Applet)

  • 웹 브라우저에서 실행되는 자바 응용프로그램으로 서버에서 클라이언트 쪽으로 실행 파일을 내려받아서 실행되는 방식
  • 현재는 HTML5, CSS3, JavaScript 등의 기술들의 발전으로 애플릿을 사용하고 있지 않음

 

2. 서블릿

  • Server Side Applet으로 자바 언어로 구현되는 서버 프로그램
  • 서블릿은 웹 브라우저로부터 요청을 받아 처리하고 결과를 다시 웹 브라우저로 전송하는 역할
  • 일반적인 자바 클래스와 다르게 javax.servlet.http.HttpServlet 클래스를 상속해야 함
  • HttpServlet 클래스는 서블릿이 웹상에서 HTTP 프로토콜을 이용해 서비스를 처리하기 위해 반드시 상속해야 하는 클래스
public class 클래스명 extends HttpServlet {
  ...
}

 

3.서블릿 메소드

3.1. doGet()

  • 클라이언트에서 GET 방식으로 요청이 전송될 경우 호출되는 메소드
    • 데이터를 요청할 때, url(Query String)에 포함해서 보내는 방식
    • head에 데이터를 포함
    • 보안적으로 취약하며, 길이의 제한이 있음
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
  // GET 요청에 응답할 로직을 구현
}

3.2. doPost()

  • 클라이언트에서 POST 방식으로 요청이 전송될 경우 호출되는 메소드
    • 데이터를 요청할 때, body에 포함해서 보내는 방식
    • 데이터가 url에 보이지 않기 때문에 보안에 취약하지 않
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
  // POST 요청에 응답할 로직을 구현
}

 

4. 요청 객체와 응답 객체

4.1. HttpServletRequest

  • 클라이언트(웹 브라우저)에서 서버에 보내는 요청 정보를 제공하는 객체
  • javax.servlet.ServletRequest를 상속
  • 주요 메소드

4.2 HttpServletResponse

  • 서버가 클라이언트(웹 브라우저)로 보내는 응답 정보를 처리하는 객체이다.
  • javax.servlet.ServletResponse를 상속한다.
  • 주요 메소드

 

5. 서블릿 동작 구조

  • 클라이언트가 웹 브라우저를 통해 요청을 보냄
  • 해당 요청이 서블릿에 대한 요청이면 서블릿 컨테이너에게 처리를 넘김
  • 서블릿에서 요청에 대한 실행이 완료된 후에는 서블릿 컨테이너가 실행 결과를 웹서버에 전달
  • 웹서버는 서비스를 요청한 클라이언트에 응답
  • 컨테이너의 서블릿에 대한 설정은 배표 서술자(web.xml)에 작성
  • 정적인 요소는 Web Server에서 처리하고 동적인 요소는 WAS에서 처리하는 것이 일반

 

6. 서블릿 생명주기

  • 첫 번째 요청일 경우, 서블릿 객체를 생성하고 init() 메소드를 호출
    • 이후 요청에 대해서는 서블릿 객체 생성, init()메소드는 호출하지 않음
  • 다음에 service() 메소드가 클라이언트 요청 방식에 따라 doGet() 또는 doPost() 메소드를 호출
  • 최종적으로 서블릿이 서비스되지 않았을 때 destroy() 메소드를 호출
    • destroy() 메소드는 보통 서버가 종료되었을 때, 서블릿의 내용이 변경되어 재 컴파일 될 때 호출

 

7. 배포 서술자 (Deployment Descriptor)

  • 배포 서술자(Deployment Descriptor)는 애플리케이션에 대한 전체 설정 정보를 가지고 있는 파일
  • 배포 서술자의 정보를 가지고 웹 컨테이너가 서블릿 구동
  • 웹 애플리케이션 폴더의 WEB-INF 폴더에 web.xml 파일이 배포 서술자
  • 설정 정보
    • Servlet 정의, Servlet 초기화 파라미터
    • Session 설정 파라미터
    • Servlet/JSP 매핑, MIME type 매핑
    • 보안 설정
    • Welcome file list 설정
    • 에러 페이지 리스트, 리소스, 환경 변수

 

8. 서블릿 매핑

  • 사용자의 요청을 서블릿에게 전달하기 위해서는 서블릿을 등록하고 매핑해야 함
  • 서블릿을 등록하고 매핑하는 방법은 web.xml과 @annotation을 이용하는 방법이 있음
<servlet>
   <servlet-name>서블릿 이름</servlet-name>
   <servlet-class>서블릿 클래스</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>서블릿 이름</servlet-name>
    <url-pattern>접근 URL 패턴</url-pattern>
</servlet-mapping>
@WebServlet("접근 URL 패턴")
public class 서블릿이름 extends HttpServlet{
  // servlet code
}

+ Recent posts