[Spring] 구조, 디렉토리, 설정, tomcat, jakarta, properties

*Spring Framework

 - 다양한 기능을 제공하는 Open Source Framework.( 무료 )

 - Rod Johnson 최초 제안.

 - Spring IoC ( Inversion of Control )에서 Spring Framework으로 변환.

 - 기능 : DI, AOP, ORM, JDBC, MVC,,, 다양한 기능을 제공.

 - spring.io에서 개발툴 ( STS )Framework 제공.

 - 경량 Framework( 빠르다 애플리케이션이 실행될 때 필요한 객체만 로드되고

     필요없는 객체는 추후 지연로딩( lazy loading) 되기 때문에 메모리를절약할 수 있다. )

 - 스프링을 서비스하기위해 별도의 서버가 필요 없다.

 - 분산처리를 지원하지 않는다. ( web 으로 해결 )

-Spring legacy

   모든 설정을 개발자가 수행.

-Spring boot

  대부분의 설정을 Spring boot에서 대신 수행.

  개발자는 설정보다 개발에 집중.

 

  - 스프링 기반에 애플리케이션을 빠르고, 손쉽게 개발할 수 있도록 도와주는 도구.

 장점 :

  -간편한 설정 ( Spring Legacy에 비해 복잡한 설정이 줄고, 개발자는 업무로직 구현에 집중 )

  -높은 생산성. (빠르고 쉽게 개발하고, 실행할 수 있게 해준다.)

  -내장된 기능. ( 내장 서버, 보안기능 등 다양한 기능이 내장되어있다.)

  -자동화된 설정 ( 설정이 자동으로 처리되어 개발 초기에 시간을 줄여준다. )

 단점:

  -복잡성 :강력한 기능을 제공하나, 너무 많은 기능이 포함되어 복잡

   ( 옵션과 설정이 많아 초보자가 이해하고 관리하기 어렵다.)

  - 추가적인 리소스의 사용 ( 내장서버와 다양한 라이브러리가 포함되어 크기가 상대적으로 크다.)

  - 프로그램의 시작시간이 길어질 수 있다.

    ( 소규모 프로젝트는 크게 영향을 주지 않으나, 대규모 프로젝트나 서버리스 환경에서는

      도입을 고려해야하는 상황이 발생할 수 있다. )

  - 지원되지 않는 기능 : 특정 DBMS연동 x, 특정프로토콜 지원x  => customizing하면 된다.

  - 유연성부족 : 개발자가 원하는 설정을 직접 추가하거나 수정하기 어렵다.

 

*Spring MVC 구조/ 동작

*DispatherServlet : 모든 요청을 받아서 (진입점) HandlerMapper에게 요청을 보내고, 요청을 처리할 수 있는

        Contoller명과 method을 얻는 일

*HandlerMapper : 요청 받은 URL( /a , /요청명 )처리할 수 있는 Controller을 검색하는 일.

*Controller : web 요청을 처리하는 일. ( web 요청은 method단위로 처리 )

                  -web parameter처리, 관계유지, scope객체에 값 설정, 이동방식설정

*ViewResolver : Controller에서 반환되는 JSP명을 받아서 prefixsuffix를 붙여 JSP가 존재하는 지 추적하는 일

                     InteralResourceViewResolver :JSP추적, ThymeleafViewResolver : html추적

 

*디렉토리 구성

*배포 시에 Servlet/JSP실행할려면 : ( 개발은 되나 배포후 실행이 안됨 )

   ServletInitializer.java SpringMvcApplication.java와 병합.

 

 

*내장탐켓사용 ( tomcat-embed-jasper )

<dependency>

    <groupId>org.apache.tomcat.embed</groupId>

    <artifactId>tomcat-embed-jasper</artifactId>

</dependency>

*JSTL : boot 3.0이상

 -Tomcat10.x – 포함 동작

   ( jakarta 패키지 사용)

-jakarta.servlet-api

<dependency>

    <groupId>jakarta.servlet</groupId>

    <artifactId>jakarta.servlet-api</artifactId>

    <version>6.0.0</version>

    <scope>provided</scope>

</dependency>

-jakarta.servlet.jsp.jstl-api

<dependency>

    <groupId>jakarta.servlet.jsp.jstl</groupId>

    <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>

    <version>3.0.0</version>

</dependency>

-jakarta.servlet.jsp.jstl

<dependency>

    <groupId>org.glassfish.web</groupId>

    <artifactId>jakarta.servlet.jsp.jstl</artifactId>

    <version>3.0.1</version>

</dependency>

 

*개발설정

 application.properties

 - 개발, 운영, 테스트를 다양한 환경으로 분리하여 테스트 가능

*실행 과 배포시 사용할 properties 설정

spring.profiles.active=dev

spring.profiles.active=prod

*InteralResourceViewResolver객체에서  JSP를 찾기 위해 Controllermethod가 반환하는

   JSP명 앞(prefix)  (suffix)에 붙이게 되는 이름을 설정.

spring.mvc.view.prefix=/WEB-INF/views/

spring.mvc.view.suffix=.jsp

 /WEB-INF/views/test.jsp