Spring 개발환경 설정하기(1) - 프로젝트 생성하기~톰캣 설정
Spring 개발환경 설정하기(2) - 라이브러리 다운로드~DB연동
Spring 개발환경 설정하기(3) - Spring+MyBatis 연동하기
Spring 개발환경 설정하기(4) - Spring + MyBatis 설계(Mapper, DAO)
오늘은 Spring 개발환경 설정이 완료된 프로젝트에 Bootstrap 테마를 적용해보려 합니다.
한동안 서버개발만 하다보니 화면 작업은 오랫만이네요.
1. 원하는 부트스트랩 테마를 찾아서 다운받습니다.
저는 Start Bootstrap에서 제공하는
Agency 테마를 선택했습니다.
구글에 free bootstrap을 검색하면 많이 나와요~
참고)
https://startbootstrap.com/template-categories/all/
2. 다운받은 테마의 압축을 풉니다.
내용은 아래와 같습니다.
3. 리소스 파일들이 들어갈 자리를 만들어줍니다.
src/main/webapp 디렉토리 아래에 resources 폴더를 추가
4. 다운받은 테마의
폴더들만 resources 폴더에 복사-붙여넣기 합니다.
※추후 bootstrap 테마의 css, js만 따로 관리하고 싶다면 resources/boostrap 안에 넣어주세요.
5. src/main/webapp/WEB-INF/views에 index.jsp 파일을 만듭니다.
다운받은 테마의 index.html파일을 편집기로 열고 내용을 index.jsp 파일로 복사한 후,
제일 위에 아래의 코드를 추가해주세요.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page session="false"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
| cs |
6. 기존 컨트롤러에 아래의 코드를 추가합니다.
4장에서 사용했던 home 메소드는 주석처리 하거나, Mapping url을 바꿔주세요.
혹은 아래 코드의 Mapping url을 다른걸로 변경할 수도 있습니다.
@GetMapping("/")
public String index(HttpServletRequest request) {
logger.debug("###INDEX PAGE###");
String rtnPage = "index";
String ipAddress = request.getHeader("X-FORWARDED-FOR");
if (ipAddress == null) {
ipAddress = request.getRemoteAddr();
}
logger.info(ipAddress + " : " + rtnPage);
return rtnPage;
}
| cs |
7. 서버를 실행하고 http://localhost:8080/web에 접속하면, 완전히 무너져있는 것을 볼 수 있습니다.
8. index.jsp 파일에서 불러오는 리소스 파일의 경로들을 아래의 코드처럼 상대경로로 변경합니다.
- before
<link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
| cs |
- after
<link href="../resources/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
| cs |
모두 변경했다면, 새로고침 혹은 Ctrl+Shift+R 후에 테마가 적용된 것을 확인할 수 있습니다.
본업은 자바이지만, 간단한 것들은 Node.js를 이용해서 만들곤 합니다. (취미)
SSD 교체로 Node.js를 새로 설치하고 세팅해야해서 포스팅으로 남겨둡니다.
1. Node.js를 다운받아 설치해주세요. (
https://nodejs.org/ko/)
저는 8.11.3 LTS 버전을 설치했습니다.
Node.js를 설치하면 npm도 함께 설치됩니다.
2. 설치확인은 cmd에서 node -v 명령어를 입력했을 때 버전이 나오면 됩니다.
npm은 npm -v를 입력
3. IDEA에 NodeJS 플러그인을 설치해주세요
IDEA 상단 File - Settings(Ctrl+Alt+S) - Plugins - Install JetBrains plugin.. - NodeJS 검색 후 Install
4. 노드 프로젝트를 생성해주세요.
File - New - Project - Node.js and NPM - Node.js Express App
프로젝트 생성 중 Node interpreter는 nodejs 설치경로의 node.exe 파일을 잡아주면 됩니다.
(C:\Program Files\nodejs\node.exe)
저는 EJS 템플릿만 사용해봤어서, EJS를 선택했습니다. 뭐가 다른지는 잘 모릅니다.😅
5. JavaScript 버전을 변경해주세요.
File - Settings - Languages & Frameworks - JavaScript에서 JavaScript language version을 ECMAScript6로 변경
6. 예의상 잘 실행되는지 확인해봅니다.
우측 상단의 Run 버튼을 누르고,
http://localhost:3000으로 접속했을 때, 아래와 같은 화면이 뜨면 성공입니다.
bin/www에서 port 확인/변경이 가능하고
routes/index.js에서 Express를 다른 문자열로 바꾼 후
서버를 재시작해서 바뀐 내용을 확인해 볼수도 있습니다.
컴퓨터 SSD를 교체하면서 앞으로는 개인 개발용 DB를 로컬에 설치하지 않기로 했습니다.
기존에 사용하고있던 헤놀로지 NAS에 도커를 이용하여 MySQL을 올렸는데 윈도우와 다르게 root 계정만 덩그러니... 😰
데이터베이스와 계정을 생성해주기로 했습니다.
1. root 계정으로 로그인을 합니다.
> mysql -p
2. 존재하는 Database를 확인해봅니다.
> show databases;
3. Database를 생성합니다.
리눅스 MySQL은 기본 character set이 latin1입니다. 저는 utf8로 지정하여 생성할 계획입니다.
> create database {데이터베이스명} default character set utf8;
4. 작업 Database를 선택합니다.
Database와 user(계정) 정보는 mysql에 들어있습니다.
> use mysql
5. 존재하는 계정들을 확인합니다.
> select host, user from user;
6. 계정을 생성합니다.
> create user '{id}'@'localhost' identified by '{password}' password expire never; --로컬에서만 접속 허용
> create user '{id}'@'%' identified by '{password}' password expire never; -- 외부 접속 허용
잘 생성 되었습니다 :)
7. 계정에 권한을 부여합니다.
> grant all privileges on {데이터베이스명}.* to '{id}'@'%';
8. 이제 사용하면 됩니다.
Spring 개발환경 설정하기(1) - 프로젝트 생성하기~톰캣 설정
Spring 개발환경 설정하기(2) - 라이브러리 다운로드~DB연동
Spring 개발환경 설정하기(3) - Spring+MyBatis 연동하기
오늘은 Spring 개발환경 설정하기 포스팅을 마무리 지으려고 합니다.
XML을 이용하여 간단한 SQL문을 작성하고, DAO에서 이를 호출하는 방식을 사용합니다.
1. src/main/resources에 mappers 폴더를 생성하고, timeMapper.xml 파일을 만듭니다.
2. timeMapper.xml에 DTD를 추가하고 SQL문을 작성합니다.
테스트 목적으로 만드는 Mapper이기 때문에 간단하게 현재 날짜와 시간을 출력하는 SQL문을 사용합니다.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | cs |
<mapper namespace="com.lsy0318.mapper.TimeMapper"> <select id="getTime" resultType="java.lang.String"> select sysdate() </select> </mapper> | cs |
XML Mapper에서
namespace는 mapper들을 구분하는 식별자로 매우 중요합니다.
클래스에서는 패키지와 같은 역할로
MyBatis 내에서 원하는 SQL문을 찾아서 실행할 때 동작합니다.
위의 코드는
com.lsy0318.mapper.TimeMapper 네임스페이스에서
getTime 매핑 구문을 정의하고 있습니다.
이는 DAO에서
com.lsy0318.mapper.TimeMapper.getTime 형태로 실제 명시하게 됩니다.
3. root-context.xml의 sqlSessionFactory bean에 아래의 코드를 추가합니다.
<property name="mapperLocations" value="classpath:mappers/**/*Mapper.xml"></property> | cs |
mappers 폴더 내부에 있는, 파일의 이름이 Mapper.xml로 끝나는 파일을 자동으로 인식하도록 설정해주는 코드입니다.
4. src/main/java 폴더에 persistence 패키지를 생성하고 TimeDAO 인터페이스를 만듭니다.
public interface TimeDAO { public String getTime(); } | cs |
5. TimeDAO의 구현 클래스로 TimeDAOImpl 클래스를 만듭니다.
@Repository public class TimeDAOImpl implements TimeDAO { @Inject private SqlSession sqlSession; private static final String NAMESPACE = "com.lsy0318.mapper.TimeMapper."; @Override public String getTime() { return sqlSession.selectOne(NAMESPACE + "getTime"); } } | cs |
@Repository는 특정 클래스를 DAO로 표시하여 해당 역할을 명확히 해주는 주석입니다.
6. persistence 패키지를 Spring에 bean으로 등록합니다.
root-context.xml에 아래의 코드를 추가하면 Spring에서 persistence 패키지를 스캔하게 됩니다 :)
<context:component-scan base-package="com.lsy0318.persistence" /> | cs |
7. src/test/java 폴더에 있는 패키지에 TimeDAOTester 클래스를 만듭니다.
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "file:src/main/webapp/WEB-INF/spring/root-context.xml" }) public class TimeDAOTester { @Inject private TimeDAO dao; @Test public void testTime() throws Exception{ System.out.println(dao.getTime()); } } | cs |
JUnit Test를 실행하면 콘솔에 현재 날짜와 시간이 출력됩니다.
8. 기존의 컨트롤러를 이용하여 웹 화면에서 호출해봅니다.
@Controller public class HomeController { private static final Logger logger = LoggerFactory.getLogger(HomeController.class); @Inject private TimeDAO dao; @GetMapping("/") public String home(Model model) { logger.info("Welcome home!"); model.addAttribute("serverTime", dao.getTime()); return "home"; } } | cs |
서버를 켜고 http://localhost:8080/web에 접속하면 현재 날짜와 시간이 출력됩니다.
Spring 개발환경 설정하기(1) - 프로젝트 생성하기~톰캣 설정
Spring 개발환경 설정하기(2) - 라이브러리 다운로드~DB연동
오늘은 Spring에 MyBatis를 연결하는 방법에 대해 포스팅 할 계획입니다.
Spring + MyBatis + MySQL의 설정에 대한 내용을 담고 있습니다.
참조한 공식 문서는 아래 링크와 같습니다 :)
http://www.mybatis.org/spring/ko/getting-started.html
1. 팩토리 빈을 생성하기 위해 root-context.xml에 아래 코드를 추가합니다.
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> </bean> | cs |
2. src/main/resources에 mybatis-config.xml 파일을 생성해주세요.
3. mybatis-config.xml 파일의 내용을 아래 코드로 수정해주세요.
http://www.mybatis.org/mybatis-3/ko/getting-started.html
<?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> | cs |
4. 1번의 코드를 아래와 같이 수정해주세요.
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:/mybatis-config.xml"></property> </bean> | cs |
이제 Spring이 동작할 때 mybatis-config.xml이 함께 동작하게 됩니다 :)
5. src/test/java폴더에 MyBatisTester 클래스를 만들어주세요.
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "file:src/main/webapp/WEB-INF/spring/root-context.xml" }) public class MyBatisTester { @Inject private SqlSessionFactory sqlSessionFactory;
@Test public void myBatisTest() throws Exception { System.out.println(sqlSessionFactory); }
@Test public void sessionTest() throws Exception { try (SqlSession session = sqlSessionFactory.openSession()) { System.out.println(session); } catch (Exception e) { e.printStackTrace(); } } } | cs |
org.apache.ibatis.session.defaults.DefaultSqlSession... 메시지가 보여지면 성공입니다.
이제 Spring + MyBatis + MySQL의 연결까지 끝났습니다.
6. SqlSessionTemplate을 설정해주세요. root-context.xml에 아래의 코드를 추가하면 됩니다.
http://www.mybatis.org/spring/ko/sqlsession.html
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" /> </bean> | cs |
SqlSessionTemplate를 설정하면 간단하게는 자동으로 session을 자동으로 열고 닫아주고,
쓰레드 처리의 안정성, 트랜잭션의 관리를 보장해주고, 여러 DAO와 매퍼에서 공유할 수 있습니다.
DB로 오라클을 사용하는 경우에는 pom.xml에 추가해야 하는 코드가 있습니다.
1. ojdbc6 라이브러리를 추가해주세요.
<dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>11.2.0.3</version> </dependency> | cs |
2. </build> 와 </project> 사이에 아래의 코드를 추가해주세요.
<repositories> <repository> <id>codelds</id> <url>https://code.lds.org/nexus/content/groups/main-repo</url> </repository> </repositories> | cs |
3. root-context.xml에 아래의 코드를 추가하면 DB와 연결이 됩니다.
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property> <property name="url" value="jdbc:oracle:thin:@localhost:1521:XE"> </property> <property name="username" value="{아이디}"></property> <property name="password" value="{비밀번호}"></property> </bean> | cs |
Spring 개발환경 설정하기 (1) - 프로젝트 생성하기
오늘은 앞으로 사용할 라이브러리들을 추가하고, DB연동까지 포스팅 하겠습니다.
1. Spring 프레임워크의 버전을 변경합니다.
Spring 프로젝트를 생성하면 자동으로 라이브러리가 받아지는데요.
기본 Spring 프레임워크 버전이 너무 낮기 때문에 따로 설정이 필요합니다.
※2017년 1월 공식 버전은 4.3.6 버전입니다. (http://projects.spring.io/spring-framework/)
pom.xml에서 3.1.1.을
4.3.6.으로 수정합니다.
<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> | cs |
수정하면 자동으로 Spring 4.3.6 버전의 라이브러리가 다운로드 됩니다.
다운로드가 완료된 후에는 반드시 다시 한번 서버가 정상적으로 실행되는지 확인해주세요.
2. 프로젝트의 Java 버전을 1.8로 변경합니다.
프로젝트 우클릭 -
Properties -
ProjectFacets에서
Java 버전을 1.6 -> 1.8로 바꾼 후에
Apply 하고
Java Compiler도 1.8버전인지 확인해주세요.
3. JDBC, Test 라이브러리를 추가합니다.
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${org.springframework-version}</version> </dependency> | cs |
pom.xml에 위의 코드를 찾아 복붙한 후에 webmvc 부분을 각각 jdbc, test로 수정하면 됩니다 :)
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${org.springframework-version}</version> </dependency> | cs |
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${org.springframework-version}</version> </dependency> | cs |
4. Mybatis, Mybatis-Spring 라이브러리를 추가합니다.
https://mvnrepository.com/artifact/org.mybatis/mybatis
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.2</version> </dependency> | cs |
https://mvnrepository.com/artifact/org.mybatis/mybatis-spring
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.1</version> </dependency> | cs |
5. MySQL 라이브러리를 추가합니다.
https://mvnrepository.com/artifact/mysql/mysql-connector-java
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>6.0.5</version> </dependency> | cs |
6. 기존의 JUnit 4.7버전을 4.12버전으로 수정합니다.
기존에 있는 JUnit dependency는 지우고
추가하시면 됩니다.
https://mvnrepository.com/artifact/junit/junit
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> | cs |
라이브러리를 추가한 후에는 꼭 서버가 실행되는지 확인해주세요!
7. root-context.xml에 네임스페이스를 추가해주세요.
src/main/webapp/WEB-INF/spring 폴더의 root-context.xml 파일입니다.
하단의 NameSpaces 탭에 들어가서
aop, context, jdbc, mybatis-spring을 체크해주세요.
8. src/test/java 폴더 안의 패키지에 DBTester 클래스를 만듭니다.
클래스 위에 아래의 코드를 넣어주세요.
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "file:src/main/webapp/WEB-INF/spring/root-context.xml"}) | cs |
테스트 코드를 넣고 JUnit Test를 실행했을 때 성공하면 됩니다.
@Test public void testDBConnection() throws Exception { Class.forName("com.mysql.cj.jdbc.Driver"); Connection con = DriverManager.getConnection( "jdbc:mysql://localhost/{스키마명}?useSSL=false&serverTimezone=Asia/Seoul",
"{아이디}", "{비밀번호}"); System.out.println(con); con.close(); } | cs |
9. Spring에 DB를 연결합니다.
root-context.xml에 아래의 코드를 추가합니다.
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property> <property name="url" value="jdbc:mysql://localhost/{스키마명}?useSSL=false&serverTimezone=Asia/Seoul">
</property> <property name="username" value="{아이디}"></property> <property name="password" value="{비밀번호}"></property> </bean> | cs |
※위 코드에서 false&와 server 사이에 amp;를 꼭 추가해주세요!!!
10. DBTester 클래스에서 DB와의 연결이 되었는지 확인합니다.
DataSource와 Connection를 import할 때 경로가 javax.sql인걸 유의해주세요 :)
@Inject private DataSource ds; @Test public void testDS() throws Exception{ Connection con = ds.getConnection(); System.out.println(con); con.close(); } | cs |