ㅤㅤㅤ
스프링 웹 프로젝트 기본 설정! 본문
스프링 프레임웍을 사용하여 프로그램을 개발할 수 있는 환경을 만들어 보겠습니다. http://spring.io 에서 Eclipse와 통합된 String tool Suite 를 제공하고 있습니다. STS도 Eclipse 기반으므로 스프링 프레임웍 외에 필요한 플러그인을 설치하여 자바, PHP 등 개발에 사용할 수 있습니다. 여기서는 설치해둔 Eclipse가 있다는 가정하에 STS를 플러그인 형태로 설치해 보겠습니다 (Eclipse의 설치는 "Eclipse 설치하기" 를 참조하면 되겠습니다).
1. Eclipse 를 실행합니다. 메뉴바에서 Help -> Eclipse Marketplace 를 실행합니다.
2. Find 에 STS 를 입력하고 Go 버튼을 눌러 검색합니다. 검색된 항목중에 Spring Tool Suite(STS) From Eclipse 3.8.3 RELEASE 를 Install 버튼을 눌러 설치합니다.
3. Confirm Selected Features 화면 입니다. 모든 항목을 선택하고 Confirm 버튼을 누릅니다.
4. 라이센스에 동의합니다. Finish 버튼을 누릅니다.
5. 설치가 진행되고 있습니다.
6. 설치가 완료되고 Eclipse 를 재시작해야 한다는 알림창입니다. Yes 버튼을 누르면 자동으로 재시작됩니다.
7. 스프링 플러그인이 설치되었습니다. 이제 스프링 샘플 프로젝트를 만들고 실행해 봅니다. File -> New -> Project를 선택합니다.
8. 프로젝트 위저드 화면 입니다. Spring 아래의 Spring Legacy Project 를 선택합니다. Next 를 눌러 진행합니다.
9. Project name 에 spring_test 를 입력합니다. Use default location 이 체크되어 있으면 기본 workspace 아래에 생성됩니다. Templates 는 Spring MVC Project 를 선택합니다. Next 버튼을 누릅니다.
10. 템플릿을 다운로드 받을지 물어 봅니다. Yes 를 클릭합니다.
11. java 프로그램들이 들어갈 기본 패키지를 지정합니다. 각자 원하는 패키지명을 입력하면 되겠습니다. 여기서는 com.tistory.pentode 를 사용합니다. Finish 버튼을 누릅니다.
12. 프로젝트가 생성되었습니다. 아래 이미지는 좌측 Package Exploer 에서 srping_test 프로젝트를 클릭하여 확장해둔 것 입니다. 하단에 Problem 탭을 보면 Warning이 하나 떠 있습니다. jdk 1.6 이 없다는 내용입니다. 앞에서 선택한 템플릿은 jdk 1.6 을 사용하고 스프링3 을 사용하도록 설정되어 있는 것입니다. 스프링 버전은 그대로 사용하고 jdk 만 우리가 지금 사용하고 있는 jre1.8 로 바꾸겠습니다.
13. 프로젝트명 spring_test 에 마우스 오른쪽 키를 눌러서 팝업 메뉴에서 Build Path -> Configure Build Path 를 선택합니다.
14. jre 1.6 을 사용하도록 되어 있는게 보입니다. Libraries 탭에서 우측의 Add Library 버튼을 누릅니다.
15. JRE System Library 를 선택하고 Next 버튼을 누릅니다.
16. Workspace default JRE(jre1.8.0_111) 을 선택하고, Finish 버튼을 누릅니다.
17. 기존의 JRE 1.6 을 선택하고 Remove 버튼을 눌러 삭제합니다. OK 버튼을 누릅니다.
18. 하단의 Problem 탭의 Warning이 사라졌습니다. 이제 프로젝트를 실행시켜볼 차례입니다.
19. 프로젝트명에 마우스오른쪽 키를 누르고 팝업메뉴에서 Run As -> Run on server 를 선택합니다.
20. Apache 하위에 Tomcat v7.0 Server 를 선택합니다. Always use this server when running this project를 체크합니다. 체크하지 않으면 실행할 때 마다 이 창을 보게 됩니다. Next 버튼을 누릅니다.
21. Tomcat 은 설치되어 있지 않습니다. 이 단계에서 tomcat 을 다운로드 해서 설치를 합니다. 앞에서 Tomcat 7.0 을 선택하였습니다. apache-tomcat-7.0.47 을 다운로드 하여 설치할 수 있다고 보여주고 있습니다. 설치를 할 곳은 C:\util\tomcat\apache-tomcat-7.0.47 폴더 입니다. Download and Install 버튼을 눌러 설치를 시작합니다.
22. 라이센스에 동의하고 Finish 버튼을 누릅니다.
23. Tomcat 을 설치할 디렉토리를 선택합니다. 주의해야 할것은 선택한 폴더 아래에 apache-tomcat-7.0.47 폴더를 자동으로 만들어 주지 않습니다. 선택한 폴더 안에 bin, conf등 여러 폴더들을 바로 만들어 버리므로 상위폴더를 직접 만들고 그 폴더를 선택해야 깔끔합니다. C:\util\tomcat\apache-tomcat-7.0.47 폴더를 만들고 선택합니다. 확인 버튼을 누릅니다.
24. Tomcat installtion directory 를 Browse 버튼을 눌러서 선택합니다. 직접 입력해도 됩니다. Next 버튼을 누릅니다.
25. spring_test 모듈이 localhost 서버에 배포됨을 보여줍니다. Finish 를 눌러 실행합니다.
26. 방화벽에서 Tomcat의 네트웍 액세스를 허용할지 묻는 창이 뜹니다. 허용합니다.
27. 에러가 발생합니다. 8080 포트가 이미 사용되고 있다는 내용 입니다. Tomcat을 시작할때 포트가 기본으로 8080 을 사용하도록 되어 있습니다. 앞에서 Oracle 11g Express Edition 을 설치할때 ( http://pentode.tistory.com/66 ) Oracle HTTP Listener 가 8080 포트를 사용하도록 설정되어 있었습니다. 그래서 충돌이 발생합니다. Oracle 의 HTTP Listener 를 중지 시키도록 합시다.
28. Oracle HTTP Listener 를 중지하기 위하여 명령창에서 다음 명령을 실행합니다.
sqlplus '/ as sysdba'
exec dbms_xdb.sethttpport(0);
commit;
29. 이제 Run AS -> Run on server 를 선택하여 다시 실시킵니다. 방화벽 차단 메세지가 다시 보입니다. 액세스 허용을 누릅니다.
30. 실행되었습니다. Hello World! 가 출력 되었습니다.
지금까지 Spring Framework 를 이용한 웹프로그래밍 개발에 필요한 환경을 설정 했습니다. Eclipse 에 Spring tool Suite Plugin 을 설치하였습니다. 시작에서도 예기했지만, Eclipes 환경에 STS 가 통합된 툴을 다운 받아 사용하는 것도 가능합니다.
앞으로 스프링 프레임웍을 사용하여 프로그램을 개발하는 연습을 해보도록 하겠습니다.
"Spring Framework을 사용한 웹애플리케이션 개발환경 만들기" 에서 기본 설치했던 샘플 Spring MVC 프로젝트의 Spring Framework 버전은 3.1.1 입니다. 이것을 현재 버전인 4.3.4 으로 변경합니다. 간단히 될 줄 알았는데, 내가 이러려고 STS 플러그인을 설치했나 싶을 정도로 이것저것 걸리는게 많더군요. 메이븐을 좀 더 공부해야 겠다는 생각이 절로 듭니다. 먼저 기본환경을 확인해보고 어떻게 변경할지 본 후 설정을 해 봅니다.
기본 환경
- Spring Framework 3.1.1
- java version 1.6
- Maven compiler
source 1.6
target 1.6
- servlet-api 2.5
- jsp-api 2.1
변경 될 환경
- Spring Framework 4.3.4
- java version 1.8
- Maven compiler
source 1.8
target 1.8
- servlet-api 3.0
- jsp-api 2.2
설정을 변경해 봅시다. pom.xml 을 수정합니다.
1. java version을 1.6 에서 1.8로 springframework 버전을 3.1.1로 4.3.4로 변경합니다.
<properties>
<java-version>1.8</java-version>
<org.springframework-version>4.3.4.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
2. Servlet api 버전을 2.5에서 3.0.1 로 변경합니다. 여기에서는 artifactId 도 servlet-api 에서 javax.servlet-api로 바꼈습니다.
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
3. jsp api 버전을 2.1에서 2.2로 변경합니다.
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
4. maven compiler 설정을 소스와 타겟을 1.8로 변경합니다.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
5. 이제 프로젝트 설정을 수정합니다. 프로젝트 오른쪽 버튼 클릭해서 Properties 를 선택합니다.
6. Java Build Path 를 선택합니다. Libraries 에서 JavaSE1.6을 1.8로 변경합니다. 변경 방법은 "Spring Framework을 사용한 웹애플리케이션 개발환경 만들기" 를 참조하세요.
7. Java Compiler 설정에서 Compiler compliance level 을 1.8로 지정합니다. Build Path 가 잘 설정되었다면 1.8이 되어 있을 겁니다.
8. Project Facets에서 Dynamic Web Module 을 3.0 으로, java는 1.8로 설정합니다. 설정이 변경이 안되는 경우가 있습니다. 이 때는 이클립스를 종료한 후 프로젝트 폴더아래 .settings 폴더에 있는 org.eclipse.wst.common.project.facet.core.xml 파일을 텍스트 에디터로 열어서 직접 수정한 후 이클립스를 실행하고 다시 변경하면 됩니다.
9. 프로젝트명에 마우스 오른쭉 키를 누르고 팝업 메뉴에서 Maven -> Update Project 를 선택해서 설정 내용을 적용합니다.
모든 설정이 적용되었습니다. 프로젝트명에 빨간색이 없고, 하단의 Probles 탭에 아무 내용도 없어야 합니다. 물론 실행시켜도 잘 동작해야 합니다. 추가로 적용 도중에 다음과 같은 에러가 발생했었습니다.
Archive for required library: 'C:/Users/PENTODE/.m2/repository/org/springframework/spring-beans/4.3.4.RELEASE/spring-beans-4.3.4.RELEASE.jar' in project 'spring_test' cannot be read or is not a valid ZIP file spring_test Build path Build Path Problem
jar 파일이 다운로드 되기는 했지만, 잘못된 파일이라는 내용이 나오더군요. 여기저기 찾아보니 여러가지 해결책이 있었지만, 나의 경우 해결할 수 있었던 방법은 사용자 폴더 아래 maven 로컬 리포지토리를 ( .m2/repository ) 모두 삭제하고, Maven -> Update Project 를 다시 실행하니 해결이 되었습니다.
출처: http://pentode.tistory.com/69 [쉬고 싶은 개발자]
Spring4 + MyBatis + Oracle 을 연동해 봅니다. 앞에서 만들었던 샘플 프로젝트 ( "Spring MVC 샘플 프로젝트 버전3 에서 버전 4로 마이그레이션 하기" ) 를 사용합니다.
1. 먼저 설치한 Oracle 데이터베이스에 유저를 추가하고 테스트용 테이블 을 생성합니다. SYSTEM 계정으로 들어가서 다음 명령으로 사용자를 추가합니다. 아이디와 비밀번호는 xeuser 입니다.
GRANT CONNECT, RESOURCE TO xeuser IDENTIFIED BY xeuser;
SQL Developer 에서 명령 실행은 실행하고자 하는 쿼리를 블럭으로 선택한 후 F9 또는 Ctrl+Enter 입니다.
이제 생성된 계정으로 들어가서 테스트용 테이블을 생성합니다.
CREATE TABLE TB_BOARD ( NUM NUMBER(10) NOT NULL, NAME VARCHAR2(20) NOT NULL, TITLE VARCHAR2(100) NOT NULL, CONTENT CLOB NULL, READ_COUNT NUMBER(10) DEFAULT 0 NOT NULL, WRITE_DATE DATE NOT NULL ); ALTER TABLE TB_BOARD ADD CONSTRAINT PK_BOARD PRIMARY KEY (NUM); INSERT INTO TB_BOARD VALUES (1, '홍길동','게시물 작성', '글 내용', 0, SYSDATE); SELECT * FROM TB_BOARD; ALTER TABLE TB_BOARD DROP CONSTRAINT PK_BOARD; DROP TABLE TB_BOARD;
SQL Developer 에서 스크립트 실행은 F5 입니다. 아래의 DROP 명령은 삭제할 때 만 사용합니다.^^
2. pom.xml 파일에 필요한 의존성을 추가합니다. 추가 후 프로젝트에 마우스 오른쪽 키를 클릭하여 Maven -> Update Project 를 실행합니다.
<!-- 오라클 JDBC 드라이버를 가져오기 위해 리포지토리를 추가합니다. -->
<repositories>
<repository>
<id>oracle</id>
<url>http://maven.jahia.org/maven2</url>
</repository>
</repositories>
<!-- 스프링에서 JDBC 를 사용하기 위한 라이브러리 입니다. -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- 컨넥션 풀을 위한 라이브러리 -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!-- 오라클 JDBC 드라이버 -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>12.1.0.2</version>
</dependency>
<!-- MyBatis 라이브러리 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
<!-- 마이바티스와 스프링 연동을 위한 라이브러리 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
필요한 라이브러리가 있을 경우 http://serarch.maven.org 등에 들어가서 검색을 해서 찾아서 넣으면 됩니다.
3. root-context.xml 파일에 데이터베이스 연결 설정, MyBatis 설정, Transaction 을 추가 한다. 스프링 루트 컨텍스트 입니다.
<?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 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:xe" />
<property name="username" value="scott" />
<property name="password" value="tiger" />
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="mapperLocations" value="classpath:com/bookoff/spring/mybatis/*.xml" />
<property name="dataSource" ref="dataSource" />
<property name="configuration">
<bean class="org.apache.ibatis.session.Configuration">
<property name="mapUnderscoreToCamelCase" value="true" />
</bean>
</property>
</bean>
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache">
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.bookoff.spring.dao" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
</beans>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
<!-- 데이터베이스 연결 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:xe" />
<property name="username" value="xeuser"/>
<property name="password" value="xeuser"/>
</bean>
<!-- SqlSession -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- MyBatis 설정 파일의 위치를 지정합니다. -->
<property name="configLocation" value="classpath:/mybatis-config.xml" />
<!-- SQL 파일의 위치를 지정합니다. -->
<property name="mapperLocations" value="classpath:/sqlmap/*.xml" />
</bean>
<!-- SqlSession -->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache">
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<!-- 지정된 베이스 패키지에서 DAO(Mapper) 를 검색하여 등록합니다.
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.tistory.pentode.service.dao" />
</bean>
<!-- 트랜잭션 매니저 bean 을 등록합니다. -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 아노테이션 기반의 트랜잭션을 사용합니다. -->
<tx:annotation-driven transaction-manager="transactionManager"/>
</beans>
위에서 beans, tx 등의 네임스페이스가 사용되었습니다. 파일 상단에 xmlns 로 지정 되는 부분입니다. 파일 내부에서 사용되는 태그의 네임페이스가 지정되어야 합니다. eclipse 의 에디터로 설정파일을 열면 하단의 네임스페이스 탭에서 필요한 네임스페이스를 선택하여 쉽게 추가할 수 있습니다.
4. 웹 컨텍스트를 설정합니다.
<?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"
xmlns:tx="http://www.springframework.org/schema/tx"
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
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.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="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<context:component-scan base-package="com.bookoff.spring" />
<tx:annotation-driven transaction-manager="transactionManager"/>
</beans:beans>
<?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-4.3.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.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.tistory.pentode" />
</beans:beans>
위에서 두개의 컨텍스트를 설정했습니다. Root 컨텍스트와 Web 컨텍스트 입니다. 스프링 컨텍스트는 빈을 관리한다고 생각하면 되겠습니다. Root 가 최상위가 되고 그 하위 컨텍스트로 Web 컨텍스트가 만들어집니다. 웹 컨텍스트는 여러개 만들 수 있습니다. Servlet-Dispatcher 를 여러개 설정하면 됩니다.
같은 레벨의 컨텍스트 사이에서는 상대방의 Bean 에 접근을 할 수가 없지만 상위 컨텍스트의 Bean 에는 접근이 가능합니다. 즉 Root 컨텍스트는 모든 하위 컨텍스트에서 공유가 되는겁니다. 그래서 보통 공통으로 사용할 필요가 있는 데이터베이스 연결, 서비스, DAO 등을 Root 컨텍스트에서 설정하고, 웹 컨텍스트에서만 사용되는 Controller 는 각각의 웹 컨텍스트에서 설정하는 식으로 많이 사용됩니다.
root-context.xml 과 servlet-context.xml 파일에서 보면 각각 <bean/> 태그와 <beans:beans/> 태그가 사용되고 있다는 것을 알 수 있습니다. 둘의 기능적 차이는 없습니다. 완전히 같은 것 입니다. 그런데 표기 방법이 달라지는 것은 디폴트 네임스페이스 때문입니다.
최상위 요소 <beans 바로 뒤에 나오는 xmlns= 로 바로 시작하는 네임스페이스가 디폴트 네임 스페이스 입니다. 디폴트 이외에는 xmlns:beans= 처럼 네임스페이스를 적어야 합니다. 디폴트 네임스페이스는 본문에 태그를 적을때 네임스페이스를 빼고 적어도 됩니다.
<beans xmlns="http://www.springframework.org/schema/beans"
....... />
<!-- 기본 네임스페이스가 beans 이므로 바로 쓸 수 있습니다. -->
<bean ....> </bean>
</beans>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
.... />
<!-- 기본 네임스페이스가 mvc 이므로 bean 앞에 네임스페이스를 적어야 합니다. -->
<beans:bean ...> </beans:bean>
</beans:beans>
'プログラミング > WebProject' 카테고리의 다른 글
마이바티스 오라클 셋팅 참고 자료 (0) | 2017.06.19 |
---|---|
스프링 프레임웍에서 MyBatis, Oracle 사용하는 방법 (0) | 2017.06.16 |
Spring MVC 프로젝트 버전3 에서 버전 4로 마이그레이션 하는방법 (0) | 2017.06.16 |
Spring Framework을 사용한 웹애플리케이션 개발환경 만들기 (0) | 2017.06.16 |