본문 바로가기

스프링

스프링(SPRING) 게시판 1탄(설계 및 설정)

반응형

이번에 게시판을 만들어 볼 건데 기초에 충실한 CRUD가 완벽하게 만들어보자.

지금 까지 개발하면서 느낀게 있는데

무턱대고 코딩부터 시작하면 한 번에 생각 안 나는 게 있기 마련이고, 또한 작업 중 까먹는 일이 다반사다.

그래서 먼저 설계와 DB작업부터 시작하는 편이다.

설계는 간단하게 개발자와 사용자의 입장에서 필요한 기능들을 메모장에 적으며 하는 편이다.

- 게시판 설계

게시판 설계 메모장

sql 문 작성하면서 완료 된 사항을 체크해주며 작업한다.

이런 식으로 대충 설계를 했다면 DB SQL문을 작성하러 간다.

그전에 테이블을 먼저 만들자 DB는 오라클을 사용했다. 

- 테이블 생성

게시판 테이블 생성

필요한 기능에 맞춰 테이블을 잘 참조해가며 설계하면 된다. 

회원 테이블, 게시글 테이블, 게시글 댓글 테이블, 게시글 파일 테이블, 댓글 좋아요 테이블을 만들었다.

필요한 시퀀스도 같이 만들어주자.

이제

게시판 더미데이터 생성

SQL문에 필요한 더미데이터를 넣어주자. for문을 돌리면서 시퀀스를 이용해 넣어주었다. 

게시판 더미데이터 생성 후

그 후 메모장에 써놓은 기능들을 하나씩 SQL문으로 작성한다.

- SQL문 작성

게시판 SQL작성

이렇게 하나하나 잘 생각하면서 만든 후 점검을 해보고 사용할 mybatis 형식에 맞춰서 바꾼 다음 가져가기만 하면 되도록 해놓았다.

하나하나 작성하면서 완료된거 메모장에 체크!

자 여기까지 설계해놓은것들을 모두 작성했다면

이클립스를 켜서 코딩을 할 차례이다. 가장 먼저 스프링 프로젝트를 만든 후 (이름은 잘 짓자..)

하나하나 설정을 해주어야 한다.

내 순서는 pom.xml -> web.xml -> root-context.xml -> servlet-context.xml -> mybatis-context.xml로 설정해주었다.

차례차례 설정해주자.

먼저 pom.xml 에 필요한 라이브러리와 버전을 맞춰서 설정해준다. 라이브러리도 기능을 생각하면서 같이 생각하면 편하다.

- pom.xml 설정

스프링 버전을 5.0.7 로 바꾸고 자바버전 1.8로 바꿔주었다.

필요한 라이브러리(mybatis,lombok,jstl 등등)를 적어주자

라이브러리는 https://mvnrepository.com/  이 곳에서 필요한 것을 복사해오자

- web.xml 설정

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

	<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/spring/root-context.xml</param-value>
	</context-param>
	
	<!-- Creates the Spring Container shared by all Servlets and Filters -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<!-- Processes application requests -->
	<servlet>
		<servlet-name>appServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
		<multipart-config>
			<max-file-size>31457280</max-file-size>
			<max-request-size>104857600</max-request-size>
			<file-size-threshold>31457280</file-size-threshold>
		</multipart-config>
	</servlet>
		
	<servlet-mapping>
		<servlet-name>appServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	
	<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>
	</filter>
	<filter-mapping>
	        <filter-name>encodingFilter</filter-name>
	        <url-pattern>/*</url-pattern>
	</filter-mapping>
	
	<error-page>
		<exception-type>java.lang.Throwable</exception-type>
		<location>/common/throwable</location>
	</error-page>
	<error-page>
		<exception-type>java.lang.Exception</exception-type>
		<location>/common/exception</location>
	</error-page>
	<error-page>
		<error-code>400</error-code>
		<location>/common/400</location>
	</error-page>
	<error-page>
		<error-code>403</error-code>
		<location>/common/403</location>
	</error-page>
	<error-page>
		<error-code>404</error-code>
		<location>/common/404</location>
	</error-page>
	<error-page>
		<error-code>405</error-code>
		<location>/common/405</location>
	</error-page>
	<error-page>
		<error-code>500</error-code>
		<location>/common/500</location>
	</error-page>
	<error-page>
		<error-code>503</error-code>
		<location>/common/503</location>
	</error-page>
	<error-page>
		<error-code>401</error-code>
		<location>/common/401</location>
	</error-page>
	<error-page>
		<error-code>408</error-code>
		<location>/common/408</location>
	</error-page>

</web-app>

web.xml 에는 인코딩을 위한 필터와 에러처리를 위한 에러 페이지 처리, 파일 업로드를 위한 mutipart-config 설정을 해주었다. 

애초에 이렇게 설정을 싹 해주면 나중에 추가 할 필요도 없어지고 개발이 편리해진다 ㅎㅎ

기초 설계의 중요성이다.

- root-context.xml

root-context.xml

..생략

	<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
		<property name="driverClassName"
			value="oracle.jdbc.driver.OracleDriver"></property>
		<property name="jdbcUrl"
			value="jdbc:oracle:thin:@localhost:포트:xe"></property>
		<property name="username" value="계정" />
		<property name="password" value="비밀번호" />
	</bean>
	
	<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
		<constructor-arg ref="hikariConfig" />
	</bean>
	
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	    <property name="dataSource" ref="dataSource"></property>
	    <property name="configLocation" value="classpath:/mybatis-config.xml"></property>
	</bean>

	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
		<constructor-arg index="0" ref="sqlSessionFactory" />
	</bean>

	<mybatis-spring:scan base-package="kr.th.bo.mapper" />
	<context:component-scan base-package="kr.th.bo.service" />
</beans>

sessionFactory(DB세션 팩토리)빈에다가 dataSource와 이따가 만들 mybatis-config.xml 설정 파일 경로도 넣어주었다

커넥션 풀은 HikariCP를 사용했다. 그리고 사용할 mapper, service 패키지를 스캔해주었다.

- servlet-context.xml

servlet-context.xml

..생략
<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="kr.th.bo" />
	
	<beans:bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver"></beans:bean>
	
</beans:beans>

여기서는 컨트롤러 패키지를 스캔해주고 파일 업로드 mutipartResolver를 빈으로 만들어준다.

- mybatis-context.xml

mybatis-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<settings>
	  	<setting name="cacheEnabled" value="true"/>
	  	<setting name="multipleResultSetsEnabled" value="true"/>
	  	<setting name="useColumnLabel" value="true"/>
	  	<setting name="useGeneratedKeys" value="false"/>	
	  	<setting name="autoMappingBehavior" value="PARTIAL"/>	
	  	<setting name="defaultExecutorType" value="SIMPLE"/>
	  	<setting name="jdbcTypeForNull" value="NULL"/>
	  	<setting name="mapUnderscoreToCamelCase" value="true"/>	
	 </settings>
	
	<typeAliases>
	  <typeAlias alias="member" type="kr.th.bo.vo.MemberVO"/>
	  <typeAlias alias="board" type="kr.th.bo.vo.BoardVO"/>
	  <typeAlias alias="comment" type="kr.th.bo.vo.CommentVO"/>
	  <typeAlias alias="thumbs" type="kr.th.bo.vo.ThumbsVO"/>
	  <typeAlias alias="cri" type="kr.th.bo.vo.domain.Criteria"/>
	  <typeAlias alias="page" type="kr.th.bo.vo.domain.PageingInfo"/>
	</typeAliases>
	
	<mappers>
        <mapper resource="mapper/MemberMapper.xml"/>
        <mapper resource="mapper/BoardMapper.xml"/>
    </mappers>
    
</configuration>

mybatis 사용시 필요한 설정을 세팅해주고 vo들도 typeAliases로 별칭을 설정해준다.(다 만든 후 캡처한 거라 이미 다 있지만 필요할 때마다 추가해주면 된다.) 그리고 매퍼. xml과 context.xml 설정을 연결해준다.

이제 설정은 다해주었다.

여기까지 했으면 벌써 반은 온 것이다. 나머지는 비즈니스 로직과 jsp만 잘해주면 끝이다 

다음 글에서는 뷰를 만들고 비즈니스 로직을 시작해보자.

반응형