티스토리 뷰
07. 스프링(Spring) 개발 - 프로젝트 생성 및 시작
이번글에서는 아주 단순한 CRUD(등록, 조회, 수정, 삭제) 게시물 관리를 만들어 보겠습니다. 이 글에서 중점 두는 것은 어떤 순서로 어떤 점을 고려해서 제작해야 하는가에대한 노하루를 전달하는 것입니다.
모든 게시물 관리의 시작 형태는 등록, 조회, 수정, 삭제를 기준으로 합니다. 여기에 반드시 하나가 더 추가되는 것이 화면상에 데이터의 목록을 보여주는 리스트 기능이라 할 수 있습니다.
웹 프로젝트의 경험이 없을 때는 게시물 관리하는 프로그램을 만드는 것이 쉬운 일이라고 생각 하는 경우가 많지만, 실제로 작업을 진행해 보면 예상하지 못했던 문제가 많습니다. 간단하지만 기본이 되는 프로젝트 일수록 본인이 직접 만들어 보고 본인의 노하우를 쌓을 필요가 있습니다.
7.1 개발 준비
개발을 시작 할떄는 항상 현재 만들어야 하는 목표를 눈으로 볼 수 있게 하는 것이 중요합니다. 눈으로 결과를 보는 것은 개발 이전에 신경 써야만 하는 점에 대해서 사전에 파악이 가능하고. 개발 중에는 올바르게 개발이 진행되고 있는지를 확인하는 척도입니다.
영역 |
준비 |
설명 |
데이터베이스 관련 |
관련 스키마, 계정의 생성 |
개발에 사용할 스키마를 정의하고, 개발에 필요한 사용자 계정을 생성합니다. |
테이블의 설계와 생성 |
실제 작업할 테이블을 설계하고, 각 테이블의 관계를 ERD 등을 사용해서 그려둡니다. |
|
더미(dummy) 데이터의 추가 | 테스트를 위한 가상의 의미 없는 데이터(dummy)를 추가해서 개발 시 결과를 확인 할 때 사용합니다. | |
스프링 MVC 관련 | 패키지 구조 결정 | 개발에 사용할 패키지 이름이나 코드 규칙 등을 미리 지정합니다. |
개발 역할 분담 | 팀원들 간의 개발 역할을 어떻게 할 것인지를 결정합니다. (수평적 혹은 수직적인 분할) | |
테스트 방법의 수립 | 개발의 중간에 팀원들의 현재 상황을 올바르게 인식 할 수 있는 테스트 방법을 서로 공유하고, 이를 지키도록 합니다. | |
화면 관련 | 화면 방식의 결정 | JSP 위주의 개발인지, HTML 위주와 JavaScript를 주로 사용하는 개발인지를 명확히 정리합니다. |
절대 경로, 상대 경로의 결정 | 페이지에서 사용하는 링크의 처리를 하나로 통일해서 진행합니다. |
7.2 프로젝트의 생성
프로젝트는 'ex01'이라는 이름으로 STS상의 'Spring project'를 이용합니다.
패키지 명은 'com.marshmello'로 진행하도록 하겠습니다.
'ex01' 프로젝트의 pom.xml을 사용해서 JDK의 버전과 스프링의 버전을 수정해줍니다.
프로젝트 속성 역시 JDK 1.8에 맞도록 변경합니다.
프로젝트에 필요한 라이브러리를 pom.xml을 이용해서 추가합니다.
org.springframework spring-test ${org.springframework-version} org.springframework spring-jdbc ${org.springframework-version} mysql mysql-connector-java 5.1.35 org.mybatis mybatis 3.2.8 org.mybatis mybatis-spring 1.2.2 org.bgee.log4jdbc-log4j2 log4jdbc-log4j2-jdbc4 1.16
테스트를 올바르게 진행하기 위해서 JUnit의 버전과 Servlet의 버전을 변경합니다.
javax.servlet javax.servlet-api 3.1.0 junit junit 4.12 test
파일첨부 : pom.xml
마지막으로 설정과 관련된 파일들을 추가합니다. 파일들의 위치는 'src/main/resources'폴더를 이용합니다. log4jdbc.log4j2.properties 파일과 logback.xml,mybatis-config.xml 파일을 추가합니다.
log4jdbc.log4j2.properties
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
logback.xml
<?xml version="1.0" encoding="UTF-8"?> <configuration> <include resource="org/springframework/boot/logging/logback/base.xml"/> <!-- log4jdbc-log4j2 --> <logger name="jdbc.sqlonly" level="DEBUG"/> <logger name="jdbc.sqltiming" level="INFO"/> <logger name="jdbc.audit" level="WARN"/> <logger name="jdbc.resultset" level="ERROR"/> <logger name="jdbc.resultsettable" level="ERROR"/> <logger name="jdbc.connection" level="INFO"/> </configuration>
mybatis-config.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> </configuration>
파일첨부 : mybatis-config.xml
모두 등록 후 화면
개발 패키지 구성
com.marshmello.controller - 스프링 MVC의 컨트롤러 패키지
com.marshmello.dao - MyBatis의 DAO 패키지
com.marshmello.service - 서비스 인터페이스와 구현 클래스 패키지
com.marshmello.vo - Value Object가 사용하는 패키지
resources/mappers폴더 - MyBatis의 XML Mapper 위치
7.3 데이터베이스 관련 설정
DataSource는 MyBatis를 사용하기 위해서 반드시 root-context.xml을 사용해서 등록합니다.
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 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy" /> <property name="url" value="jdbc:log4jdbc:mysql://localhost:3306/marshmello?autoReconnect=true&useSSL=false" /> <property name="username" value="root" /> <property name="password" value="1234" /> </bean> </beans>
파일 첨부 : root-context.xml
DataSource의 'src/test/java' 폴더 내 테스트 코드 작성
package com.marshmello.ex01; import java.sql.Connection; import javax.inject.Inject; import javax.sql.DataSource; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "file:src/main/webapp/WEB-INF/spring/*.xml" }) public class DataSourceTest { @Inject private DataSource ds; @Test public void testConnection() throws Exception { try (Connection con = ds.getConnection()) { System.out.println(con); } catch (Exception e) { e.printStackTrace(); } } }
파일 첨부 : DataSourceTest.java
실제 테스트는 try-with 구문을 이용해서 자동으로 Connection 객체가 close() 될 수 있도록 작성합니다.
실행결과는 정상적으로 Connection 객체가 만들어 지는것을 확인할수 있어야 합니다.
테이블 생성 작업
만들어질 게시판의 테이블은 다음과 같이 작성합니다.
CREATE DATABASE SAMPLE; USE SAMPLE; CREATE TABLE TBL_BOARD( BNO INT PRIMARY KEY AUTO_INCREMENT, TITLE VARCHAR(200) NOT NULL, CONTENT TEXT, WRITER VARCHAR(50) NOT NULL, REGDATE TIMESTAMP NOT NULL DEFAULT NOW(), VIEWCNT INT DEFAULT 0); |
컬럼별 설명
- BNO 글번호
- TITLE 글제목
- CONTEXT 글내용
- WRITER 작성자
- REGDATE 글 작성 시간
- VIEWCNT 조회수
7.4 스프링의 UTF-8 처리 필터 등록
웹 애플리케이션을 제작하다 보면 한글 처리에서 고생하는 경우가 많은데 UTF-8이 사용되는 경우는 스프링에서 제공하는 필터를 등록해주는 것을 권장합니다.
필터는 작성된 프로젝트 내 web.xml 파일을 사용해서 처리합니다.
encodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 encodingFilter /*
7.5 CSS, Javascript 준비
모든 화면단은 Bootstrap을 이용해서 구성하는 방식을 사용합니다 부트스탭은 반응형 웹 페이지를 만들 때 사용하는 Twitter가 제공하는 오픈 소스입니다.
부트스트랩을 사용해서 반응형 웹 페이지를 제작할 때 신경 쓰이는 부분은 많이 줄지만, 화면 전체의 레이아웃이나 제한 CSS를 설정하는 데는 많은 시간을 소모하게 됩니다. 이글 이후의 예제에서는 이러한 문제를 해결 하기 위해서 부트스트랩으로 만들어진 템플릿 페이지를 이용합니다.
'Admin LTE' 템플릿은 https://adminlte.io/ 에서 제공하는 오픈 소스로 부트스트랩을 사용해서 작성된 무료 템플릿입니다.
Admin LTE는 기본적으로 반응형 웹 페이지의 레이아웃을 제공하고 화면 구성에 필요한 모든 CSS를 이용할 수 있습니다.
다운로드 버튼을 눌러 소스를 다운받고 폴더의 압축을 풉니다.
현재 프로젝트의 'src/main/webapp/resources' 폴더 내에 bootstrap , dish, plugins 폴더를 만듭니다.
AdminLTE에 불필요한 파일을 지우고 필요한 파일만 사용하면 되는데 ,시간 관계상 제가 정리한 폴더를 가지고 진행 하도록 하겠습니다.
완성된 resources와 views는 첨부파일의 압축을 푼 후 셋팅해줍니다.
첨부파일 :
모두 셋팅 후 프로젝트를 재 실행하면 다음과같은 화면이 나옵니다.
이번글에서는 프로젝트 기본 셋팅과 데이터베이스 연동, UI 셋팅을 완료하였습니다.
다음글에서는 전체 구조를 갖췄으니 본격적인 구현에 들어가도록 하겠습니다.
수고하였습니다.!
'Spring' 카테고리의 다른 글
[톰캣 오류] the server cannot be started because one or more of the ports are invalid. open the server editor and correct the invalid ports. (6) | 2020.01.29 |
---|---|
08. 스프링(Spring) 개발 - 프로젝트 계층 구조 설계 (13) | 2017.10.26 |
06. Spring + MyBatis 연동 (2) | 2017.10.18 |
05. Spring MVC 와 모델 2 방식 (4) | 2017.10.16 |
04. Spring + MyBatis + MySQL 설치 및 연동 (2) | 2017.10.07 |
- Total
- Today
- Yesterday