-

오늘은 스프링(Spring) 에서 di기법의 이해도를 위한 코딩을 설명?하겠다.

사실 설명이라고 하기에도 너무 허접스러운 설명 이라서 독자분들이

잘알아 들을지 의문이 든다. 여기저기 복사를 해와서 참고 해온것도 있지만 스스로 이해하여 비유한것도 있으니 

태클은 정중하게 받아드리겠습니다. 저도잘모르니깐요^^ ㅋㅋㅋㅋ

그래도 잘 안다는 생각을 가지고 무작정 따라하기 시작하겠습니당.


혹시나 DI 이가 무엇인지 궁금하시다면  DI알아보기 를 클릭하셔서 참고해주세요.


1.STS 개발툴 을 열어서 프로젝트 생성.

개발툴이 설치 되지 않았다면. 

spring 개발툴 설치하고 셋팅하기 . 를 클릭!


STS를 실행하고 PACKAGE EXPLORER 에서 마우스 오른쪽 딸깍(클릭)

Spring Project 를 생성한다.



2. 스프링 프로젝트 를 클릭하면 아래화면이 나온다.




3. 선택하고 Next 클릭하면 아래 화면이 보일것이다.

패키지명을 써주고 finish 클릭



4. 클릭을 하면 화면 오른쪽 아래에 먼가 로딩이 되고 다운되는 모양처럼 생긴것이 보일것이다. (아래화면같은)




5. 위 사진처럼 다운이 오래걸릴수도 있다. 그이유는 바로 아래 사진 처럼  

프링을 할때 필요한 기본 패키지와 설정xml파일 및 라이브러리가 다운되기 때문이다. 


전부 다운됬다면 아래 처럼 프로젝트를 눌르면 저렇게 생긴 파일들 이있을것이다.


만약 스프링 개발툴이 처음이라면 먼가 어색하게 느껴질 것이다. 

이클립스라면 src폴더에 자바 파일을 만들고 webcontent 에 view화면을 만들었을 텐데 

이건 또 뭐냐 ;;  하나씩 풀어서 해석해볼게요 !!



아래사진에 화살표가 가르키고 있는 부분이 이클립스 개발툴 에서는 webcontent 역할을 하고 있다. 


아래사진의 화살표가 가르키는 곳은 이클립스 개발툴 에서 src 부분은 java파일을 만드는 곳이다. 




위 사진 처럼 스프링 프로젝트 로 생성을 하게 되면 이클립스의 다이나믹 웹 프로젝트 와는 완전 다른 방식의 폴더들이 생성된다.

 위의 경로를 작 숙지하여 경로를 잘이해하자 !!


6. 프로젝트 내에 pom.xml 이라고 기본적으로 만들어진 파일을 더블클릭하여 들어가면



아래 화면이 나옵니다. 이화면은 스프링의 설정파일 이라고 생각하시면 됩니다.


처음 화면에는 코드화면이 아니고 아래 카테고리의 Overview 가 들어가지기때문에 그냥 pom.xml 을 한번 눌러주면 위처럼 코드화면이 나온다.


설정에 대한 설명

<?xml version="1.0" encoding="UTF-8"?>

<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/maven-v4_0_0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>com.test</groupId>

<artifactId>spring</artifactId>

<name>webtest</name>

<packaging>war</packaging>

<version>1.0.0-BUILD-SNAPSHOT</version>

<properties>

<java-version>1.6</java-version>

<org.springframework-version>3.1.1.RELEASE</org.springframework-version>

<org.aspectj-version>1.6.10</org.aspectj-version>

<org.slf4j-version>1.6.6</org.slf4j-version>

</properties>

<dependencies> <!-- <dependencies> 안에 필요한 라이브러리를 -->

<!-- Spring -->

<dependency> <!-- <dependency> 안에 적으면 자동으로 다운로드받아 추가시킨다 -->

<groupId>org.springframework</groupId>

<artifactId>spring-context</artifactId>

<version>${org.springframework-version}</version>

<exclusions>

<!-- Exclude Commons Logging in favor of SLF4j -->

<exclusion> <!-- <exclusion>을 통해 이전에 다운로드 받은 중복파일을 제외할수있다 -->

<groupId>commons-logging</groupId>

<artifactId>commons-logging</artifactId>

 </exclusion>

</exclusions>

</dependency>


위 코드에서 스프링안에서 쓸 라이브러리를 써주기만 하면 

자동으로 다운받아진다. 



7. 또다른 설정 파일에 대해 알아보자.


아래 사진의 화살표가 가르키고 있는 xml 파일들은 둘다 설정파일이다. 하나씩 설명을 해 나가겠다.





servlet-context.xml 설정파일 설명


 <?xml version="1.0" encoding="UTF-8"?>

<beans:beans xmlns="http://www.springframework.org/schema/mvc"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:beans="http://www.springframework.org/schema/beans"

xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd

http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->

<!-- Enables the Spring MVC @Controller programming model -->

<annotation-driven />

<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->

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

<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->

<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<beans:property name="prefix" value="/WEB-INF/views/" />

<beans:property name="suffix" value=".jsp" />

</beans:bean>

<!-- 스캔하는곳  -->

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

</beans:beans>


<beans:property name="prefix" value="/WEB-INF/views/" /> 파일이 저장될 경로

<beans:property name="suffix" value=".jsp" /> 저장되는 파일의 확장자를 설정해준다

만약 이 두가지 코드가 없으면 풀네임으로 적어줘야한다. ex)/WEB-INF/views/name.jsp

스캔하는곳의 경로를 com.test 으로 했을경우 해당 경로에 있는 모든 하위 파일을 스캔한다.






root-context.xml 설정파일 설명

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<!-- Root Context: defines shared resources visible to all other web components -->

</beans>


root-context와 servlet-context는 똑같다

다만 beans 와 beans:beans로 root설정 차이를 확인할수 있다




주입받는곳에 set메소드가 존재해야한다

ex)

public void setCImpl(CImpl cImpl){

this.cImpl = cImpl;

}


요새는 @(어노테이션)을 통해 생성한다

클래스 위에 @Service를 써주면 객체가 자동생성된다


의존성 주입방법

ex) @Autowired private CImpl cImpl; 


@Controller도 @Service와 같은 역할을 할수 있기에 객체를 생성하고 

@Autowired를 통해 의존성 주입을 받을 수 있다


@ = 스테레오 타입 = 컴포넌트 어노테이션(Controller, Service, Repository)


servlet-context.xml에서

scan을 통해 스테레오타입을 스캔해 내용이 스캔되어야 객체가 생성된다

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


web.xml

<load-on-startup>1</load-on-startup>

은 톰캣이 실행될때 시작된다

<servlet-mapping>

에서 모든 연결을 캐치한다


다만 DI를 이용해도 커플링이 사라지지 않기때문에

interface를 이용해서 상위개체로 대체한다


결합도가 높을수록 팀단위로 작업하기 힘들어지기때문에

결합도를 최대한 낮추기 위해 DI와 interface를 활용한다


다른 카테고리의 글 목록

서버측 언어/JAVA 카테고리의 포스트를 톺아봅니다