Java 기반 클라우드 융합 개발자 과정 - KH 정보교육원/9월

22.09.13 - [ Spring ] pom.xml / web.xml / context.xml 설정 파일 및 DB 설정 파일

giggs 2022. 9. 19. 15:02

 

 

 

 

 

-- INDEX --

 

 

1. pom.xml 2. web.xml 3.root-context.xml 4.servlet-context.xml 5. 스프링 DB 설정
프로젝트 관련 정보 루트 스프링
서블릿 생성환경
스피링 전역 바구니 서블릿 전용 바구니 5개의 라이브러리
3개의 <bean>

 

 

 

 


 

 

 

스프링 설정 파일

 

 

 

 

 

 

1. pom.xml

  • Project Object Model
  • 프로젝트에 관한 정보들이 xml 파일에 작성 되어있다.
  • maven에 의해 관리된다.
  • < properties > = 변수를 만드는 부분

 

 

 

1-1 : 프로젝트 관련 기본 설정 사항

 

 

 

 

 

  • <java-version>11</java-version>
  • <source>${java-version}</source>
  • <target>${java-version}</target>
  • <org.springframework-version>5.3.18</org.springframework-version>
  • 서블릿 디펜던시 수정 (톰캣 버전에 맞춰서)
  • JSP 디펜던시 수정 (톰캣 버전에 맞춰서)
  • jstl 은 lib 에 직접 추가

 

 

 

 


 

 

 

2. web.xml 살펴보기

  • 웹 프로젝트가 실행될 때, 가장 먼저 읽혀진다.

 

 

 

 

 

 

 

2-1 : <context-param>

  • 모든 서블릿과 필터가 공유하는 루트 스프링 컨테이너의 정의
  • spring이 객체 생성하는 경우 자동으로 연결시켜주는데
  • context 바구니에 들어있어야지 자동 주입이 되는 것이다.
  • 이때의 바구니는 servlet바구니고 ( = DS 바구니)
  • web.xml에서 다룰 바구니는 root 바구니에 대한 정보를 설정하는 곳이다.

 

 

 

 

여기에 있는 파일 정보를 통해 ---> root바구니에 대한 정보를 확인할 수 있다.

( 그 바구니에 어떤 것이 들어갈 것이지, 어떻게 구성되어있는지 )

 

 

 


 

 

2-2 : < servlet > <servlet-mapping>

  • 생성될 서블릿 설정 관련 작업 

 

 

 

 

appServlet이 만들어질 때 본인만의 바구니가 만들어질 것인데 그냥 만들어지는 것이 아니라..

이 클래스 경로와 - xml 파일을 참조해서 본인만의 바구니가 만들어질 것이다.

 

 

 

 


 

 

 

 

 

3. root-context.xml 파일

  • 스프링 전역에서 사용 될 bean 객체를 등록한다.

 

 

 

 

 

 

 

SQL 세션 객체를 예로 들면

root-context.xml 바구니에 만들어 놓으면

다른 서블릿들이 필요할 때 가져다 사용할 수 있다.

 

 

 

 

 


 

 

 

 

 

4. servlet-context.xml 파일

  • 서블릿 전용 컨텍스트(바구니) 에 대한 설정

 

 

 

 

 

 

 

DS는 이제

이 문서를 참조해서

바구니와 bean

관리할 것이다.

 

 

 

 

 

 

 

 

 

@어노테이션을  ( @Component / @Controller / @Service / @Repository ) -

이용해서 bean으로 등록 -  DS전용 바구니에 담기게 해 주었다.

 

정석으로는 이 context.xml 파일에

직접 <bean>등록을 해주어야한다.

 

 

 


 

 

 

4-1 : <annotation-driven /> 

  • 어노테이션으로 bean등록 관리
  • <annotation-driven /> : 활성화시켜주어서 가능했던 것!

 

 

 


 

 

4-2 : @Component 스캔

  • 컴포넌트로 들어올 애가 있나 탐색하는 것
  • @Component는 { @Controller , @Service , @Repository } 애들

 

 

 

 

  • base-package = " 경로 "
  • 해당 경로에 있는 애들을 쭉 탐색하면서 어노테이션을 스캔하며 등록해준다.

 

 

 


 

 

4-3 :  <resources mapping=" "  location" " /> :

  • 정적 요청에 대한 처리 
  • 정적 리소스란? 
  • -> 단순 html파일, 이미지, 동영상, 파일 등  - 굳이 서블릿 안 거치고 보여줄 수 있는 파일들 
  • 현재 우리 프로젝트에서는 요청을 보내면 — 모든 요청을 DS가 처리한다
  • 굳이 서블릿을 거칠 필요가 없는 (정적 리소스) 요청임에도 불구하고

 

 

 

 

 

# <resources mapping = " " location = " "  />

  • 디스패쳐 서블릿 (DS) 너가 – 이 요청은 안 건드렸으면 좋겠다 해주는 것이다.
  • 이런 형태의 요청이 발생했을 때 – <mapping>
  • 서블릿이 직접 처리하는 것이 아니라
  • 여기 있는 경로로 가서 파일을 찾아라 하는 내용이다. - <location>

 

 

 


 

 

 

4-4 : <beans:bean class = " ViewResolver " >

  • ViewResolver 객체 - bean으로 등록
  • 컨트롤러에서 리턴하는 문자열 앞뒤로 이런 내용을 추가해준다는 내용

 

 

 

 

prefix는 앞쪽에 / suffix는 뒤쪽에 추가해준다.

 

 

 

 

 

 

 


 

 

 

 

 

5. 스프링 DB 설정

  • # 모든 서블릿 애들이 사용할 것이므로 – root-context.xml 바구니에 담아주기
  • # 바구니에 bean으로 담아주기 위해서 xml파일 이용하기
  • ( @어노테이션 달아주는 방식은 사용하지 못한다. 내가 만든 클래스가 아니라 수정안되므로 )

 

 

 

 


 

 

 

5-1 : 라이브러리 등록

  • 스프링은 자신이 통제해서 사용해야 한다.
  • sqlSession을 사용하기 위해 sqlSessionTemplate가 필요했던 것처럼
  • mybatis 사용하기위해 MybatisSpring이 필요하다
  • db 다녀오는 커넥션 매번 얻기는 부담스럽다.- dbcp 라이브러리 사용

 

 

 

# 스프링 마이바티스

# 스프링 jdbc 

# 커넥션 풀 사용

 

 

 

 

 

스프링 버전이 변경되면 변경되어야 하는

JDBC-스프링 부분에 등록해놓은 변수 활용하여

스프링 버전 입력

 

 

 


 

 

 

5-2 : <bean>  등록 - 이론

 

 

# 라이브러리 객체를 사용하기 위해 해당 객체를 감싸고 있는 새로운 객체를 통해서 이용한다.

  • ( 사용자가 직접 객체에 접근하고 명령하는 것을 방지 )

 

 

# 감싸고 있는 객체를 만드는 방법은 - .xml 파일을 이용해서 만들어준다.

  • <bean class=" " id=" "> 태그를 이용해서 <bean />

 

 

# <bean />으로 객체 생성할 때 필요한 파라미터값(=인자값)을 전달해주어야 만들어진다

  • <constructor-arg > 
  • SqlSessionTemplate 객체 만드려고 하면 팩토리가 필요하다
  • SqlSession 얻을 때 빌더로 -> factory를 만들고 openSession()했던 것처럼

 

# 파라미터 값에 객체를 넣어줄 때에는value가 아닌 ref 사용

  • < constructor-arg  ref=“”>

 


 

5-3 : <bean>  등록 - 실습

 

1. SqlSessionTemplate 

  • <bean>은 기본 생성자를 부르는 것인데 – SqlSessionTemplate 는 기본 생성자가 없다.
  • 만들 때 생성자 인자로 무엇인가를 넘겨주어야겠다.
  • 객체를 전달할 때는 value가 아닌 ref로 사용
  • 어떤 객체가 필요한가 봤더니 SqlSessionFactory 객체가 필요하다.

 

 

이 객체와 이 객체가 연결된 것이다.

이렇게 해주면

 SqlSessionTemplate 객체 생성에는 이제 문제가 없다..

 

 


 

 

2. SqlSessionFactoryBean

  • 다만 팩토리를 만드는데 필요한 객체가 아직 없다
  • ( 마치, factory빌더로 – factory를 만든 것처럼 팩토리를 만드는데 어떤 객체가 필요하다 )
  • 어떤 객체?
  • DB 관련 환경정보를 가지고 있는 객체 = dataSource

 


 

3. BasicDataSource

  • dataSource의 담아줄 커넥션 연결 정보가 담겨있는 객체
  • <property 로 4개의 변수에 각각 값 세팅해주고 전달

 

 

 


 

 

5-4 : DB 연결 정리

 

# Mybatis 라이브러리 등록하고

  • - SqlSessionTemplate, SqlSessionFacyoryBean 객체 사용하겠다고 <bean> 등록

 

# dbcp 라이브러리 등록하고

  • - BasicDataSource 객체 사용하겠다고 <bean> 등록

 

 

 

데이터 소스(커넥션풀) -> 팩토리(데이터소스) -> SqlSessionTemplate(팩토리)

 

의 과정으로  커넥션 얻었다!