달력

11

« 2019/11 »

  •  
  •  
  •  
  •  
  •  
  • 1
  • 2
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30


 

 

<context:component-scan> 태그

·         Component Scan 지원하는 태그입니다.

·         Bean 있는 모든 Component들을 자동으로 찾아 Bean Container 등록합니다.

·         , 의존성 관계 등록은 따로 하지 않습니다.

·         특정 패키지 안의 클래스들을 스캔하고, Annotation 확인 bean 인스턴스를 생성합니다. @Component @Controller @Service @Repository 등의 Bean 등록 Annotation 존재해야 bean 스캔한 생성할 있습니다

·         @Autowired @Qualifier Annotation 인식할 있습니다.

·         @Component 통해 자동으로 Bean 등록하고, @Autowired 의존관계를 주입 받는 어노테이션을 클래스에서 선언하여 사용했을 경우에는 해당 클래스가 위치한 특정 패키지를 Scan하기 위한 설정(<context:component-scan> 태그) 스프링 설정 XML 해주어야 합니다.

·         component-scan 선언했다면 context:annotation-config 선언할 필요가 없습니다.

·         component-scan 수동  DI(setter, contructor) 혼용해서 사용할 있습니다.

 

 

패키지명 이후의 하위 패키지를 검색해 @Component 어노테이션을 포함하는 모든 클래스를 Bean으로 자동 등록해 줍니다.

<context:component-scan base-package="packagename" />

<context:component-scan base-package="codedragon.di.annotation" />

 

 

 

<context:include-filter> & <context:exclude-filter>

<context:include-filter>태그와 <context:exclude-filter>태그를 같이 사용하면 자동 스캔 대상에 포함시킬 클래스와 포함시키지 않을 클래스를 구체적으로 명시할 있습니다.

 

<!-- 모든 Bean들을 스캔해서 등록합니다.  -->

<context:component-scan base-package="com.tistory.com.SpringBBS"/>

<mvc:annotation-driven></mvc:annotation-driven>

 

use-default-filters="false"속성은 expression 지정한 타입만 include 시켜줍니다.

<!-- Controller 타입의 Bean 스캔해서 등록합니다.  -->

<context:component-scan base-package="com.tistory.com.SpringBBS" use-default-filters="false">

<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>

</context:component-scan>

<mvc:annotation-driven></mvc:annotation-driven>

 

<!-- Controller 타입을 제외한 모든 Bean들을 Root Context에서 로딩합니다. -->

<context:component-scan base-package="com.tistory.com.SpringBBS">

<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>

</context:component-scan>

 

 

Posted by codedragon codedragon

댓글을 달아 주세요



 

 

Interceptor 수행 도식도

·         단일 interceptor 수행

·         다중 interceptor 수행

 

 

 

 

단일 interceptor 수행

Interceptor에는 3가지 콜백 메소드가 정의되어져 있습니다.

 


 

단계

설명

1

요청이 들어오면 Dispatcher servlet 통해 Interceptor 거치게 됩니다.

 

2

처음 요청이 들어오면 Interceptor preHandle() 수행하게 됩니다.

 

3

Controller 수행됩니다.

Controller 해당 로직을 수행한 결과를 postHandle() 전달합니다.

4

적절한 View통해 응답을 해주게됩니다.

5

응답 페이지가 출력됩니다.

6

Response 끝나면 afterCompletion() 수행됩니다.

 

 

 

 

 

 

다중 interceptor 수행

여러 개의 Interceptor 존재하는 경우 수행 순서


 


Posted by codedragon codedragon

댓글을 달아 주세요


 

 

pom.xml 통해 Spring 프레임워크 설치하기

 

·         라이브러리 검색 하기

·         pom.xml 의존관계(dependency) 설정

·         Maven 프로젝트 업데이트

 

 

 

 

라이브러리 검색 하기

메이븐 중앙 저장소에서 필요한 라이브러리를 조회한 의존성에 추가해줍니다.

 

메이븐 중앙 저장소에 접속합니다.

http://mvnrepository.com/


 

 

 

"org.springframework" 원하는 라이브러리를 검색합니다.

org.springframework


 

https://mvnrepository.com/search?q=org.springframework


 

 

첫번째 항목인 "1. Spring Context" 클릭합니다.


 

 

 

정식출시전의 M버전과 RC버전은 Maven Central에서 배포되지 않고 다른 리포지토리에서 배포되는 것을 확인할 있습니다.

탭을 클릭해 다른 리포지토리의 라이브러리 버전도 확인할 있습니다.


 

 

Central 리포지토리에서 바로 직전 버전의 최신 RELEASE버전을 클릭합니다.


 

 

 

정보확인

https://mvnrepository.com/artifact/org.springframework/spring-context/5.0.13.RELEASE


 

 

 

Maven 탭의 박스를 클릭하여 dependency 태그를 복사합니다.


 

 

 

 

 

pom.xml 의존관계(dependency) 설정

 

<dependencies> 태그를 추가합니다.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <groupId>com.tistory.codedragon.HelloWorld</groupId>

  <artifactId>HelloWorld</artifactId>

  <version>0.0.1-SNAPSHOT</version>

  <packaging>war</packaging>

  <build>

    <plugins>

      <plugin>

        <artifactId>maven-compiler-plugin</artifactId>

        <version>3.8.0</version>

        <configuration>

          <source>1.8</source>

          <target>1.8</target>

        </configuration>

      </plugin>

      <plugin>

        <artifactId>maven-war-plugin</artifactId>

        <version>3.2.1</version>

      </plugin>

    </plugins>

  </build>

</project>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <groupId>com.tistory.codedragon.HelloWorld</groupId>

  <artifactId>HelloWorld</artifactId>

  <version>0.0.1-SNAPSHOT</version>

  <packaging>war</packaging>

  <build>

    <plugins>

      <plugin>

        <artifactId>maven-compiler-plugin</artifactId>

        <version>3.8.0</version>

        <configuration>

          <source>1.8</source>

          <target>1.8</target>

        </configuration>

      </plugin>

      <plugin>

        <artifactId>maven-war-plugin</artifactId>

        <version>3.2.1</version>

      </plugin>

    </plugins>

  </build>

  <dependencies>

 

  </dependencies>

</project>

 

 

<dependencies> 태그안에 복사한 의존성 라이브러리 태그를 붙여넣기 합니다.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <groupId>com.tistory.codedragon.HelloWorld</groupId>

  <artifactId>HelloWorld</artifactId>

  <version>0.0.1-SNAPSHOT</version>

  <packaging>war</packaging>

  <build>

    <plugins>

      <plugin>

        <artifactId>maven-compiler-plugin</artifactId>

        <version>3.8.0</version>

        <configuration>

          <source>1.8</source>

          <target>1.8</target>

        </configuration>

      </plugin>

      <plugin>

        <artifactId>maven-war-plugin</artifactId>

        <version>3.2.1</version>

      </plugin>

    </plugins>

  </build>

  <dependencies>

          <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->

<dependency>

    <groupId>org.springframework</groupId>

    <artifactId>spring-context</artifactId>

    <version>5.0.13.RELEASE</version>

</dependency>

  </dependencies>

</project>

 

 

 

빌드가 이루어집니다.


 

 

 

 

 

 

Maven 프로젝트 업데이트

 

"Package Explorer"에서 생성한 프로젝트명 선택 >> 마우스 우클릭 >> [Maven] >> [Update Project..]

 


 

 

 

 

 

[OK]


 


 

 

 

"Spring Elements" 항목이 새로 생긴것을 확인할 있습니다.


 

 


Posted by codedragon codedragon

댓글을 달아 주세요


 

 

IoC 도식도

·         프로젝트

·         IoC 아닌 경우 도식도

·         IoC 경우 도식도

 

 

 

 

 

프로젝트

objMC객체는 objA objB객체에 의존합니다.

objMC객체에서 필요한 objA objB객체 생성방법은 loC 아닌 경우와 loC 경우로 나눌 있습니다.

 


 

 

 

 

 

IoC 아닌 경우 도식도

개발자가 직접 new해서 객체를 생성하여 사용합니다.

objMC객체가 objA objB객체를 직접 생성합니다.


 

 

 

 

 

 

IoC 경우 도식도

IoC 제어권이 역전 되었으므로 Container 객체를 생성한 개발자 코드에 주입시켜주는 방식입니다.

objMC 직접 new하지 않고 objA objB객체를 외부에서 생성하여 objMC객체로 넣어줍니다.

외부에서 생성하는 방법으로 setter 이용하는 방법과 Constructor 이용하는 방법이 있습니다.


 

 

loC 이용한 것이 Spring Framework입니다.


 


Posted by codedragon codedragon

댓글을 달아 주세요


 

 

Spring Exception 특징

특징

설명

Controller 기반

·         부가기능을 제공하는 Advice클래스를 작성합니다

·         XML설정파일에 <aop:config>태그를 이용하여 Aspect 설정합니다. , 어드바이스와 포인트컷을 설정합니다.

Global Excpeiton Handler

·         예외처리는 cross-cutting concern, 애플리케이션 전체에 포인트컷이 적용되어야 합니다.

·         @ControllerAdvice 어노테이션을 포함한 클래스는 전역 예외처리 컨트롤러가 됩니다.

·         컨트롤러에서 캐치한 예외는 JSP같은 View 혹은 JSON으로 응답이 가능합니다.

 

 


Posted by codedragon codedragon

댓글을 달아 주세요



 

 

JUnit Library 검색 설치

 

메이븐 저장소로 이동합니다.

http://mvnrepository.com/

 

 

"JUnit"으로 검색

JUnit

https://mvnrepository.com/search?q=jackson

 

 

 

첫번째 항목 선택


 

 

최신 RELEASE 버전번호 클릭

https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api


 

 

 

Maven항목의 dependency 정보 복사

https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api/5.4.1


 

 

 

pom.xml 파일의 <dependencies> 태그안에 붙여넣기 하여 추가합니다.

<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->

<dependency>

    <groupId>org.junit.jupiter</groupId>

    <artifactId>junit-jupiter-api</artifactId>

    <version>5.4.1</version>

    <scope>test</scope>

</dependency>

 

 

Project Explorer [Maven Dependencies]항목을 펼치면 라이브러리가 추가된 것을 확인할 있습니다.


 


Posted by codedragon codedragon

댓글을 달아 주세요


 

 

 

Layered Architecture

·         계층화 아키텍처

·         효율적인 개발과 유지보수를 위해 계층화 형태로 구성하여 개발을 합니다.

·         대부분의 중규모(Mid-Range) 이상, 대규모 어플리케이션에서 적용합니다.

·         레이어는 독립된 R&R 가집니다.

 

 

 

 

 

 

Layered Architecture 영역

크게 3 영역으로 나뉘어 집니다.

 

영역

설명

프리젠테이션 영역

·         Presentation Layer

·         사용자와 상호작용을 담당합니다.

·         사용자의 요청을 분석하고 응답을 수행합니다.

비즈니스 영역

·         Business Layer

·         기능(function) 수행합니다.

·         트랜잭션(transaction) 수행합니다.

데이터 영역

·         Data Accesss Layer

·         데이터의 저장과 조회를 담당합니다.

·         주로 데이터베이스(DBMS) 연동하는 작업을 수행합니다.

 

 


 



Posted by codedragon codedragon

댓글을 달아 주세요



 

 

 

에러 메시지

GetMapping cannot be resolved to a type

RequestParam cannot be resolved to a type


 

 

 

 

 

 

 

 

해결방법

Controller관련 어노테이션(Annotation), Parameter 처리 어노테이션에서 발생하는 에러를 해결할 있습니다.

 

 

 

pox.xml 의존성 추가

pox.xml Spring 라이브러리가 추가되어져 있는지 확인한 추가하면 해결됩니다.

 

<dependencies>

 

      <!-- Spring 프레임워크 설치 -->

<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context</artifactId>

<version>5.0.13.RELEASE</version>

</dependency>

<!-- Spring MVC 라이브러리 -->

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->

<dependency>

    <groupId>org.springframework</groupId>

    <artifactId>spring-webmvc</artifactId>

    <version>5.1.6.RELEASE</version>

</dependency>

</dependencies>

 

 

 

 

 

 

Mave Project Update

프로젝트 선택 >> 마우스 우클릭 >> [Mave] >> [Update Project…]

 

 

 

 

 

 

해결완료!!!


 



 


Posted by codedragon codedragon

댓글을 달아 주세요


 

 

 

Static Web Resource 처리

·         Server 처리가 필요 없는 static web resource 요청시 Server 거치지 않고 곧바로 응답이 필요한 곳에 사용합니다.

·         특정 URL 요청이 오면 static resource 인식하고 바로 응답을 수행합니다.

·         <mvc:resources>태그로 구현합니다.

 

 

 

servlet-context.xml

 <mvc:resources location="/WEB-INF/resources/" mapping="/resources/**"></mvc:resources>

 

 

location="/WEB-INF/resources/"

실제 응답할 파일이 있는 위치를 지정합니다.

mapping="/resources/**"

HTTP 요청 URL 지정합니다.

**

** /resources/안의 모든 내용을 의미합니다.

 

 

 

요청 URL -> 응답 URL

dispatcherServlet Front에서 요청을 받으면 처리할 Controller 넘기지 않고(Server 가지 않고)

해당 요청을 static resource 인식하여 요청시 바로 응답 URL 처리되게 됩니다.

요청 URL

http://localhost:8080/SpringBBS/resources/scripts/jQuery.js

응답 URL

/WEB-INF/resources/scripts/jQuery.js

 

 



Posted by codedragon codedragon

댓글을 달아 주세요


 

 

 

"Spring Explorer" 오픈 하기

Spring Explorer뷰는 "Spring" 모드에 기본적으로 추가되어져 있습니다.

우측에 [Spring Explorer] 아이콘을 클릭하면 창이 오픈됩니다.


 

 


Posted by codedragon codedragon

댓글을 달아 주세요