이번에는 spring 환경설정, xml 파일 작성 및 프로젝트를 구현하기 위한 기본 설정을 해보겠다.
1. 환경설정
2. pom.xml
3. web.xml
4. servlet-context.xml
5. root-context.xml


나는 나중에 com.snspj.controller로 다시 바꿔줬다.
Window>preferences 들어가서 encoding 검색, Workspace, css, html, jsp files 인코딩을 utf-8로 변경한다.

이번 프로젝트에서는 자바 1.8버전을 사용할 것이기 때문에 STS.ini파일을 열어서 자바 버전을 11->1.8로 변경해준다.


Window>preferences 에서 installed JREs에 들어가서 Add버튼을 누르면 아래와 같은 창이 뜨는데 여기서 Standard VM을 선택하고 다음으로 넘어간다.

jdk 1.8의 경로를 가져와 적용해준다.

프로젝트 우클릭>Properties>Project Facets들어가서 자바 버전을 1.8로 변경해준다.

톰캣 서버 연결


위와 같이 서버를 연결한 뒤, 하단 부분에 Servers에 tomcat을 클릭하면 다음과 같은 화면이 나온다.

위와 같은 화면에서 Server Locations에서 두번째 옵션으로 변경하고(나중에 어찌하다가 첫번째 옵션을 선택해버림 ㅜㅜ), Server Options에서 Publish module~을 체크해준다.


<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<!-- db관련 라이브러리 설정: db사용을 위해 커넥터가 꼭 있어야 한다. -->
<!-- MySQL connector/j -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.39</version>
</dependency>
<!-- 마이바티스 관련 라이브러리 설정 -->
<!-- mybatis core 모듈 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- mybatis-spring: 마이바티스와 스프링을 연결 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<!-- 스프링 jdbc 모듈 설치 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>

기존 log4j를 주석 또는 제거 처리 한다. (Logging부분을 전체 주석.) 그 밑에 아래와 같은 코드 삽입.
<!-- logback 설정을 넣어준다 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.7</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
<version>1.16</version>
</dependency>
<!-- 문자 인코딩 시작 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 문자 인코딩 끝 -->

<context:component-scan base-package="com.snspj.controller" />
<context:component-scan base-package="com.snspj.service" />
<context:component-scan base-package="com.snspj.dao" />
<context:component-scan base-package="com.snspj.domain" />
위와 같은 코드를 밑부분에 삽입한다. 아마 controller는 이미 작성되어있을 수 있음.
<?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:context="http://www.springframework.org/schema/context"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd
http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
<!-- Root Context: defines shared resources visible to all other web components -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"></property>
<property name="url" value="jdbc:log4jdbc:mysql://localhost:3306/jsp_test"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</bean>
<bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="/resources/mybatis-config.xml"></property>
<property name="mapperLocations" value="/resources/mappers/**/*Mapper.xml"></property>
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg>
</bean>
</beans>
이렇게 환경설정을 모두 마치고 나서 잘 구동이 되는지 테스트 해보려고 했는데 문제가 생겼다. 처음에는 뭔 오류인지 모르고 tomcat 파일의 modules에 들어가서 path에 '/'를 add해줬다.

그런데도 오류가 해결되지 않길래 Console을 통해 에러메세지를 보니 위의 root-context파일에서 /resources/mappers/~의 경로를 인식을 못하는 에러였다. 이 외에도 sqlSessionFactory ~ 관련된 에러도 있었는데 아마 둘 다 작성한 경로에 문제가 있어서 그런 거라 생각했다. 따라서 src부터의 경로도 써보고, 여러 가지 다른 경로를 대입해서 돌려봤는데 해결되지 않았다. 열심히 구글링해본 결과, classpath를 사용하면 편하다는 것을 알게됐다.
classpath를 사용하여 경로를 적었는데도 해결되지 않아서 근본적으로 classpath는 무엇을 의미하는지 찾아보았다.
클래스 패스에 관한 설명은 다음 블로그에 자세히 나와있었다.
자바 클래스패스(classpath)란?
클래스패스란(Class Path)란??클래스패스란 말 그대로 클래스를 찾기위한 경로이다. 자바에서 클래스패스의 의미도 똑같다. 즉, JVM이 프로그램을 실행할 때, 클래스파일을 찾는 데 기준이 되는 파
effectivesquid.tistory.com
spring에서 classpath의 기본 경로는 src/main/resources/ 이기 때문에 코드를 다음과 같이 수정하였다.
<property name="configLocation" value="classpath:/mybatis-config.xml"></property>
<property name="mapperLocations" value="classpath:mappers/**/*Mapper.xml"></property>
그랬더니 잘 돌아간다.

| 맛집 공유 SNS 프로젝트#02_01. 게시글 리스트 구현 (0) | 2024.02.03 |
|---|---|
| 맛집 공유 SNS 프로젝트#01_2. 회원가입 기능 구현(주소api) (0) | 2024.01.16 |
| 맛집 공유 SNS 프로젝트#01_2. 회원가입 기능 구현 (0) | 2024.01.16 |
| 맛집 공유 SNS 프로젝트#01_1 로그인 기능 구현 (1) | 2024.01.13 |
| 맛집 공유 SNS 프로젝트#0_1. MySQL (1) | 2024.01.08 |