Spring boot 프로젝트 (생성, 실행)

Back-End/Spring 2019. 7. 6. 22:05
728x90
반응형

-Spring boot-

 

- 2014년부터 개발되었으며 spring legacy project에 비해서 설정이 매우 간소화됨

  WAS(tomcat) 가 포함되어 있으므로 서버 설정이 간소화됨

  아직 실무에서 많이 사용되고 있지 않지만 향후 spring legacy project를 대체하리라 예상됨

 

1) Spring Starter Project 생성

 

Name : 프로젝트 이름 (spring03_boot)

 

Artifact : spring03_boot

 

Package : spring03

 

 



  -프로젝트 생성-


  마우스 우클릭 => Spring Starter Project 생성 => 이름과 패키지 설정 => SQL : MySQL, JDBC, Mybatis 체크


  => Template Engines : Thymeleaf 체크 => Web : Web 체크 => next => finish

 

 

 

 

 

 

 

 

Boot Version : 최신 버전 2.1.6 으로 체크

 

SQL : MySQL, JDBC, Mybatis 체크

 

Template Engines : Thymeleaf 체크

 

Web : Web 체크

 

 

 

 

 

 

 

 

 

- spring legacy project와 다른점 -

 

1. pom.xml에서 스프링 프레임워크 버전이 빠져있다. (자동으로 셋팅이 되어있기 때문, 설정이 숨겨져 있다.)

 

2. src/main/java에 있는 Spring03BootApplication.java (클래스) 에 가보면 메인 메소드 (public static void main(String[] args) 가 있는것을 확인할 수 있다.

   (즉, 이 클래스를 실행시키면 프로젝트를 실행할 수 있다. 레거시프로젝트에서는 메인메소드가 따로 없었고, 프로젝트 자체를 실행해야만 실행이 되었다.)

 

3. 또, 이 클래스를 run을 하려고 하면 Java Application과 Spring Boot App 중에 하나를 선택하라고 하는데, Spring Boot App로 실행을 하여야 한다.

 

4. 클래스를 실행하게 되면 스프링 부트 버전과 톰캣 버전 등 정보가 인포로 출력이 되고, 현재는 데이터베이스 드라이버 설정이 안되어있어서 에러가 발생한다.

 

 

 

 

2) Spring boot 프로젝트의 실행 방법

 

시작 클래스 : 프로젝트이름+Application.java

 

tomcat가 내장되어 있음

 

Run as => Spring Boot App 를 선택하면 됨

 

기존에 실행중인 톰캣은 중지시키고 실행시켜야 한다.

 

 

3) 템플릿 엔진

 

spring boot application에서는 jsp 대신 template을 사용하는 것을 권장하고 있다.

 

(기본적으로 jsp도 사용할 수는 있지만 설정을 따로 해야만 사용할 수가 있어 왠만하면 template를 사용한다.)

 

spring boot에서 사용가능한 template에는 여러 종류가 있는데 그 중에서 타임리프 (Thyme leaf) 를 활용하여 실습

 

thyme - 백리향

 

 



  - 웹 템플릿 엔진 -


스프링 MVC와의 통합 모듈을 제공하며, 애플리케이션에서 JSP로 만든 기능들을 완전히 대체할 수 있음


타임리프의 목표는 세련되고 잘다듬어진 템플릿을 제공하는 것


(하지만 문법을 새로 배워야 한다는 단점이 있음)

 

 

4) jsp를 view로 사용하는 방법

 

jsp를 사용하기 위해서는 추가 작업이 필요하다.

 

 

- 기타 다른점들 -

 



     src/main/resources 하위에 static 폴더에는 리소스 파일들 (js,css 등)이 들어가고,


src/main/resources 하위에 templates 폴더에는 템플릿 (jsp 파일아님)이 들어간다.


src/main/resources 하위에 application.properties는 설정파일이다. 


그리고 스프링부트 프로젝트에서는 context.xml등 설정파일이 없고, web.xml도 존재하지 않는다. (기본설정이 숨어있기때문)



1. src/main 하위에 디렉토리 추가

 

   
  src/main/webapp


src/main/webapp/WEB-INF


src/main/webapp/WEB-INF/views

 

2. application.properties 설정

 

3. pom.xml에서 thymeleaf 라이브러리를 주석처리해야함 

(jsp페이지에서 출력할지, thymeleaf를 사용해서 출력할지 둘중에 하나를 선택해야 하기 때문)

 

 

- 실습예제 -

 

pom.xml에 코드를 추가

 

<dependencies> 위에 <repositories> 추가 (오라클 라이브러리 저장소)

1
2
3
4
5
6
7
<!-- 추가된 부분 (ojdbc6 다운로드를 위한 저장소 -->
    <repositories>
        <repository>
            <id>codelds</id>
            <url>https://code.lds.org/nexus/content/groups/main-repo</url>
        </repository>
    </repositories>
cs

 

 

<dependencies> 교체

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
.<dependencies>
        <!-- @Inject -->
        <dependency>
            <groupId>javax.inject</groupId>
            <artifactId>javax.inject</artifactId>
            <version>1</version>
        </dependency>
        
        <!-- 타임리프 템플릿 관련 라이브러리 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency
        
        <!-- spring boot auto restart(설정, 클래스가 바뀌면 auto restart) -->
        <!-- 스프링레거시프로젝트에서는 자바코드가 바뀌면 자동으로 서버가 다시시작되는데 부트에서는
        그런것이 없기 때문에 서버가 재시작할 수 있도록 설정을 해주어야 한다. -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
        
        <!-- jsp 라이브러리 , jsp에서 톰캣을 사용할 수 있는 라이브러리-->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
        
        <!-- jstl 라이브러리 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
        
        <!-- 오라클 라이브러리 -->
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.3</version>
        </dependency>
        
        <!-- 스프링 부트용 jdbc 라이브러리 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        
        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        
        <!-- mybatis와 spring를 연결해서 쓸 수 있는 라이브러리 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.1</version>
        </dependency>
        
        
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.1</version>
        </dependency>
        
        <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        
    </dependencies>
cs

 

 

src/main/resources/application.properties 수정

 

application.properties파일에 속성을 들어가보면 인코딩 언어가 ISO-8859-1로 되어있어서 한글이 나오지 않는다.

 

그렇기 때문에 설정을 바꿔주어야 한다.

 

속성 => other => utf8로 바꿔주면 된다.

 

 

application.properties 기본 코드 유형

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#/src/main/resources/application.properties
 
#이 페이지에서는 #이 주석처리이다.
 
# db connection(oracle) 오라클 사용시 추가하는 코드
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:xe
spring.datasource.username=spring
spring.datasource.password=1234
 
# db connection(mysql) mysql 사용시 추가하는 코드
#spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#spring.datasource.url=jdbc:mysql://localhost:3306/web
#spring.datasource.username=spring
#spring.datasource.password=1234
 
#http port
server.port=80
 
#view resolver (템플릿 대신 jsp 페이지를 사용할 경우)
#spring.mvc.view.prefix=/WEB-INF/views/
#spring.mvc.view.suffix=.jsp
#server.servlet.jsp.init-parameters.development=true
 
#custom error page 내가 편집한 에러페이지를 사용하고 싶을때 사용하는 코드
server.error.whiteabel.enabled=false
 
#thymeleaf auto refresh #뷰가 시작되면 자동으로 재시작되게 하는 옵션
spring.thymeleaf.cache=false
cs

 

 

이 예제에서 사용할 코드 (오라클 사용)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
.spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:1521/xe
spring.datasource.username=spring
spring.datasource.password=1234
 
#http port (스프링 부트에는 톰캣이 내장되어 있다, 기본번호는 8080이고, 번호를 바꾸고 싶으면 여기다 지정하면 된다.)
# change port number (default 8080)
server.port=80
 
#view resolver (템플릿 대신 jsp 페이지를 사용할 경우)
spring.mvc.view.prefix=/WEB-INF/views/ #prefix와 suffix는 계층을 이동시킬때 쓰이는 코드
spring.mvc.view.suffix=.jsp
server.jsp-servlet.init-parameters.development=true #jsp에서 수정이되면 서버가 자동으로 재시작되는 옵션
 
# custom error page 내가 편집한 에러페이지를 사용하고 싶을때 사용하는 코드
server.error.whitelabel.enabled=false
spring.thymeleaf.cache=false
 
 
cs

 

 

-스프링 부트와 데이터베이스 연동-

 

1. application.properties에서 db연동 설정 해주기

1
2
3
4
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:xe
spring.datasource.username=spring
spring.datasource.password=1234
cs

 

 

 주로 mybatis를 사용하게 되는데 mybatis에서 sql명령어를 실행하는 방식 

 

1. xml파일에다 sql명령어를 작성해서 mapper을 불러다 쓰는 방식 (가장 많이 사용하는 방식)

 

2. 자바코드에다 sql명령어를 포함시켜 사용한 방식이 있었다.

 

 

@SpringBootApplication은 스프링 부트 애플리케이션 bean으로 만들어주는 어노테이션 (시작 클래스)

 

 

1. mapper을 사용하는 방법 

 

1. xml을 사용할때는 @Bean 어노테이션을 붙여서 sqlSessionFactory를 리턴하는 메소드를 만들어

 

  거기다가 데이터 소스 설정을 하고 아래의 코드를 추가하면 mapper xml을 사용할 수 있는 방식이다.

 



  Resource[ ] res = new PathMatchingResourcePatternResolver( )


  .getResources("classpath:mappers/*Mapper.xml");


  bean.setMapperLocations(res);

 

 

spring03 => src/main/resources => mappers폴더 생성 => xml파일을 만들어준후에 위처럼 코드를 작성하면 mapper xml을 사용할 수 있다.

 

 

 

2. 자바코드에다 sql명령어를 포함시켜 사용하는 방식

 

Spring03BootApplication.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
.package com.example.spring03_boot;
 
import javax.sql.DataSource;
 
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
 
//현재 클래스를 스프링 부트 애플리케이션의 시작 클래스로 등록함
//main 메소드가 있기 때문에 시작 클래스로 등록하여야 한다.
@SpringBootApplication
 
//sql mapper의 위치를 지정 (model 하위에 mapper이 들어간다는 뜻)
@MapperScan("com.example.spring03_boot.model")
public class Spring03BootApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(Spring03BootApplication.class, args);
    }
    
//javax.sql.DataSource     
// DataSource =>    SqlSessionFactory 
//   => SqlSessionTemplate => SqlSession
    //<bean>태그에 대응되는 코드 설정
    //스프링 레거시프로젝트에서는 xml에 작성했던 코드를 스프링부트에서는 이쪽에 코드로 작성한 것이다.
    //sqlSessionFactory가 sqlsessionTemplate를 만들고, sqlsessionTemplate가 sqlsession을 만든다.
    @Bean //자바코드로 bean을 등록
    public SqlSessionFactory sqlSessionFactory(
            DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean=new SqlSessionFactoryBean();
        bean.setDataSource(dataSource); //데이터소스 설정
        return bean.getObject();
    }
    @Bean
    public SqlSessionTemplate sqlSession(
            SqlSessionFactory factory) {
        return new SqlSessionTemplate(factory);
    }
}
cs

 

 

컨트롤러, 서비스, 뷰는 스프링 레거시 방식과 동일하게 사용한다.

 

HelloController.java 컨트롤러 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
.package com.example.spring03_boot.controller;
 
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
 
//컨트롤러는 스프링 레거시 방식과 동일하게 사용하면 된다.
 
@Controller //컨트롤러 빈으로 등록함
public class HelloController {
 
    @RequestMapping("/")  //시작 페이지, 자료를 저장해서 페이지를 넘길때는 ModelAndView가 주로 사용된다.
    public ModelAndView hello(ModelAndView mav) {
        mav.setViewName("hello"); //뷰의 이름, 풀네임으로 적어도 되지만 길기 때문에 application.properties에 prefix와 suffix에 나눠서 적어주었다.
 
아래 코드와 합치면 뷰의 경로는 /WEB-INF/views/hello.jsp 가 된다.
 
spring.mvc.view.prefix=/WEB-INF/views/ #prefix와 suffix는 계층을 이동시킬때 쓰이는 코드
spring.mvc.view.suffix=.jsp
        mav.addObject("message","스프링 부트 애플리케이션"); //데이터를 저장
        return mav; //화면에 출력, hello페이지로 넘어가 출력이 되게 된다.
    }
}
cs

 

 

src/main/webapp/WEB-INF/views/hello.jsp 파일을 생성

1
2
3
4
5
6
7
8
9
10
11
12
.<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
${message} //컨트롤러에서 넘어온 메시지 값이 출력된다.
</body>
</html>
cs

 

 

프로젝트를 실행할때는 프로젝트 우클릭 run as를 클릭하고, Spring Boot App를 클릭하면 서버가 실행이 되고, 관련정보가 로그로 출력된다.

 

스프링 부트 프로젝트에서는 프로젝트를 실행해도 웹 브라우저가 바로 출력되지 않고, 웹 브라우저를 수동으로 켜서 주소를 입력해주어야 한다.

 

 

-웹 브라우저에서 실행-

 

주소창에 컨텍스트 패스를 입력하지 않는다.

 

크롬브라우저를 열고 주소창에 http://localhost/hello.do 를 치면, "스프링 부트 애플리케이션" 메시지가 출력이 된다.

아래 책은 제가 공부할때 활용했던 책으로 추천드리는 책이니 한번씩 읽어보시는것을 추천드립니다!! ㅎㅎ

토비의 스프링 3.1 세트:스프링의 이해와 원리 + 스프링의 기술과, 에이콘출판

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

728x90
반응형
: