2018년 12월 19일 수요일

스프링학원)(스프링부트강좌)스프링부트, Spring Boot 소개동영상


(스프링부트강좌)스프링부트, Spring Boot 소개동영상 



스프링 부트(Spring Boot)
  


1. 스프링 부트(Spring Boot)

n  스프링 응용프로그램을 독립적으로 작성빌드실행할 수 있으며 Embedded Tomcat, Jetty 사용이 가능하므로 WAR 파일로 묶어서 배포할 필요가 없다.
n  Tomcat이나 Jetty가 내장되어 웹 프로젝트 띄우는 시간이 독립적인 Tomcat을 이용하는 경우에 비해 훨씬 줄어든다이렇게 서블릿 컨테이너가 내장되어 있으므로 프로젝트를 .jar 파일 형태로 간단히 만들어 배포할 수 있다.
n  스프링 부트를 사용하면 메이븐의 pom.xml에서 의존하는 라이브러리의 버전을 일일이 지정하지 않아도 된다즉 스프링 부트가 라이브러리 및 버전을 알아서 관리한다.
n  스프링에서는 XML 파일 또는 JavaConfig 등을 이용하여 설정을 하는데 스프링 부트에서는 XML 설정이 필요없고 모든 설정을 다 자동화 하지는 않지만 스프링 프레임워크를 시작할 수 있을 정도는 가능하다.(Application.java)
n  Spring Tool Suit(STS)를 사용하지 않고도 간단히 스프링 프로젝트를 만들 수 있다.
n  파이썬(python) flask, 장고(django)  ruby on rails 처럼 빠르게 웹 프로젝트를 만들 수  있는 도구이다.
n  2016년 12월말 현재 버전은 1.4.3 이다.


n  메이븐 설정을 위해 “starter” POMS를 제공한다.
(Spring  Boot에서 미리 정의된 MAVEN Dependency)
n  메이븐에서 사용하려면 <parent>태그로 spring-boot-starter-parent를 상속받아야 하며 기본자바 컴파일러는 스프링 부트 1.4인 경우 java version은 1.7이며 아래처럼 별도로 설정 할 수 있다.

<properties>
<java.version>1.8</java.version>
</properties>

n  spring-boot-starter-web을 추가하면 Tomcat  Spring MVC 가 자동 추가된다.
<!-- Inherit defaults from Spring Boot -->
<!—UTF-8지원, spring-boot-dependencies POM으로 상속되는 공통디펜던시에 대한 version 태그 생략가능, application.properties  application.yml을 위한 리소스 필터링등을 제공 à
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.3.RELEASE</version>
    </parent>

    <!-- Add typical dependencies for a web application -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

   <!—실행가능한 JAR 파일 패키징, WAR아카이브 지원하며 그안에서 응용프로그램을 실행한다. -->
    <build>
        <plugins>
            <plugin>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

n  메이븐 Starter POM은 응용프로그램에 포함시킬 수 있는 편리한 Depency 설정을 지원하는데 WEB을 이용한 개발을 하려면 spring-boot-starter-web, JPA를 사용하려면 spring-boot-starter-data-jpa 만 디펜던시에 추가하면 되는데 spring-boot-starter-? 형태의 패턴이다.


n  Gradle에서 사용하려면 “stater POMs”를  직접 import하면 된다.
n  spring-boot-gradle-plugin은 실행 가능한 jar파일을 만들고 프로젝트를 실행할 수 있도록 task를 제공한다.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.4.2.RELEASE")
    }
}
apply plugin: 'java'
apply plugin: 'spring-boot'
repositories {
    jcenter()
}
dependencies {
    compile("org.springframework.boot:spring-boot-starter-web")
    testCompile("org.springframework.boot:spring-boot-starter-test")
}


n  아래와 같이 main 함수를 만들면 된다.

//스프링부트 1.2 이상에서 @SringBootApplication 어노테이션은 아래 모든 어노테이션을 포함한다.

//클래스 패스를 기반으로 기본적인 동작을 지시하는데 tomcat-embed-core.jar이 클래스패스에 있다면 톰캣서버가 적당한 기본값으로 설정 및 구성되고 spring-webmvc.jar 파일이 클래스패스에 존재하면 Spring MVC의 DispatcherServlet이 자동으로 구성되고 등록된다. web.xml 역시 필요없다.
@EnableAutoConfiguration
@ComponentScan  //현재 패키지를 기준으로 컴포넌트를 스캐닝서비스모델, DAO, 컨트롤러
@Configuration    //현재 파일이 컨텍스트의 설정 파일임을 의미
public class DemoApplication{
    public static void main(String[] args) throws Exception {
        // Spring Boot SpringApplication.run() 메소드를 실행시작점
        // 웹응용프로그램이면 자동 설정된 Tomcat 웹 서버를 기동하면서 응용프로그램을 시작한다
        SpringApplication.run(DemoApplication.class, args);
}
}

[실행 방법]
1. (DOS에서)프로젝트 루트에서 spring-boot-starter-parent run을 이용하여 Maven으로 실행한다.
D:\..>mvn spring-boot:run

2. 이클립스(STS) 프로젝트 루트 -> Run as -> Maven Build 또는 Java Application(main이 있는 Application클래스 지정)

3. 이클립스(STS) main이 있는 Application클래스에서 Run as -> Spring Boot Application 또는 Java Application으로 실행가능 하다.


n  스프링 부트를 시작할 때 Command Line arguments를 주거나어떤 코드를 실행하려면 CommandLineRunner 인터페이스의 run(Stringargs)를 구현하면 된다만약 CommandLineRunner 인터페이스 구현이 여러 개 있는 경우 순서를 부여하기 위해서는 @Order 어노테이션을 사용하면 된다.


@SpringBootApplication
public class CommandLineRunnerExam {
//Spring Boot 메인
   public static void main(String... args) {
      SpringApplication.run(CommandLineRunner.class, args);
      /////////////////////////////////////////
   }
}

class DefaultRunner implements CommandLineRunner {
 //CommandLineRunner run 메소드 구현
 //args는 메인 메소드의 아규먼트를 받아들인다.
 public void run(String... args) throws Exception {
  // joining(delimiter, prefix, suffix)
  System.out.println(Arrays.asList(args).stream().collect(Collectors.joining(",",getClass().getSimpleName() + "[", "]"))); }
}

/*
java.util.stream패키지는 스트림에 대한 함수형 조작을 제공하고
Spring4에서 새로 소개된 @Order 어노테이션은 같은 타입의 빈이 컬렉션(List) Autowired 될 때 그 순서를 지정한다.(낮은 숫자가 우선순위가 높다).
*/

@Named
@Order(2)
class Runner1 extends DefaultRunner { }

@Named
@Order(1)
class Runner2 extends DefaultRunner { }

@Named
@Order(3)
class Runner3 extends DefaultRunner { }

[실행]
$ java -jar build/libs/commandlinerunner-exam-1.0.0.jar  이순신 안중근 유관순

Runner2[이순신 안중근 유관순]
Runner1[이순신 안중근 유관순]
Runner3[이순신 안중근 유관순]


1-6. Spring Boot에서 property 파일 읽기

[src/main/resources/ojc.properties]
url=ojc.asia

[Application.java]
@SpringBootApplication
@PropertySource("ojc.properties")
public class Application {
           public static main(String[] args) {
                     SpringApplication.run(Application.class, args);
           }
}

[OjcController.java]
@Controller
public class OjcController {
           @Value("${url}")  //ojc.properties 파일의 url을 값을 주입
           String url;

          @RequestMapping("/ojc")
           public void home() {
                     System.out.println(url);  //ojc.asia 출력
           }
}




댓글 없음:

댓글 쓰기