본문 바로가기

Programming/[Spring]

[Spring] Springboot

 Spring Boot

  • 의의
    - 스프링 부트는 실행하기만 하면 되는 상용화 가능한 수준의 스프링 기반 애플리케이션을 쉽게 만들어 냄(기본 설정 되어 있는 설정을 기반으로 빠르게 개발할 수 있도록 해주는 개발플랫)
    - 최소한의 설정으로 스프링 플랫폼과 써드파티 라이브러리들을 사용할 수 있도록 함

  • 기능
    - 단독 실행 가능한 스프링 애플리케이션을 생성
    - 톰캣, 제티, 혹은 언더토우를 내장
    - 기본 설정 되어 있는 'starter' 컴포넌트들을 쉽게 추가
    - 가능한한 자동설정 됨
    - 사용화에 필요한 통계, 상태 점검 및 외부설정 제공
    - 설정을 위한 XML 코드를 생성하거나 요구하지 않음

  • 가이드
    → 네트워크 연결, Maven or Gradle 플러그인이 IDE에 설치

    Ο http://start.spring.io/에서
      1. 프로젝트 메타데이터 등록
        - Maven 예제가 많음(Maven으로만은 프로젝트의 필요한 기능을 모두 지원하지 못할 수 있음)
        - Gradle Groovy DSL로 구성, 지원되는 기능을 익히면 훨씬 강력
        - 배포형태에 따라서 war 또는 jar
      2. [Generate Project] 클릭
        - artifact 이름으로 된 zi[ 파일 다운로드
      3. IDE에서 Import Project

    Ο STS에서 생성
      1. [File] - [New]  - [Spring Starter project] 선택
      2. 사용하려는 스프링 starter 선택
      3. 스프링부트 프로젝트 실행
        - [Run as] - [Spring Boot App] 선택
        - [gradle] - [Tasks quick launcher] 를 이용하여 실행
        - 프로젝트 생성 위치에서 $ gradle bootRun 명령 실행

  • 구성
    1. jar 프로젝트
      - build.gradle//코드 생략 apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'idea' apply plugin: 'spring-boot' apply plugin: 'io.spring.dependency-management' jar { baseName = 'demo' version = '0.0.1-SNAPSHOT' } //코드생략 dependencies { compile("org.springframework.boot:spring-boot-starter-web") testCompile("org.springframework.boot:spring-boot-starter-test") }  - {artifact-name}Application.java
      - IDE에서 Java Application project로 인식
      - build task 실행시 demo.jar 생성
      - 실행
      - $ java -jar demo.jar
    2. war 프로젝트
      - build.gradle//코드생략 apply plugin: 'java' apply plugin: 'eclipse-wtp' apply plugin: 'idea' apply plugin: 'spring-boot' apply plugin: 'io.spring.dependency-management' apply plugin: 'war' war { baseName = 'demowar' version = '0.0.1-SNAPSHOT' } //코드생략 configurations { providedRuntime } dependencies { compile("org.springframework.boot:spring-boot-starter-web") providedRuntime("org.springframework.boot:spring-boot-starter-tomcat") testCompile("org.springframework.boot:spring-boot-starter-test") }  - puclic class ServletInitializer extends SpringBootServletInitializer 클래스
      - IDE에서 웹프로젝트로 인식
      - build task 실행시 demowar.war 생성
      - 실행
      - $ java -jar demowar.war
    3. @SpringBootApplication
  •   - @SpringBootApplication 어노테이션이 선언된 애플리케이션 클래스는 피키지 루트에 위치하는것이 좋음(Locating the main application class의 기본적인 구조 권장)
  • 스프링부트 설정
    - 스프링부트 자동설정 AutoConfig
      1. autoconfig 패키지 확인
      2. @Conditional, @ConditionalOnBean, @ConditionalOnMissingBean, @ConditionalOnClass 조건에 따라 스프링 Bean으로 등록

  • 외부 설정
    - 스프링부트의 properties 확인  순서에 따라 외부요인들을 읽어오게 됨
    - Environment
    - application.properties
    - application.yml

  • 프로파일즈 활용
    - 로컬, 개발, 테스트, 운영 설정을 각각 관리 및 적용
    - Profiles - springframework
    - 환경별 설정요소를 한곳에서 집중하여 관리 가능
    - 기존 방식
      → 설정 디렉토리 분리(config/local, config/development, config/test, /config/production)
      → 빌드 시 프로파일을 지정하여 지정한 설정디렉토리의 설정파일을 적용하는 형식을 취함
    - application.properties
      → application-{profiles}.properties(application-local.properties, application-development.properties)
    - application.yml

  • 스프링부트 확장
    - starter POMs 추가
      → spring.provides에 연관된 스프링 라이브러리들이 정의
      → 관련 의존성 라이브러리에 대해서는 starter 프로젝트 내부에 있는 pom.xml에 정의
    - 의존성 라이브러리 추가

Reference

  • Framework
    - Design Pattern
      → 절차형 언어에서 객체지향 언어로 넘어오면 설계의 중요성 확대, 기존 개발 건 중에 설계가 잘 된 케이스들을 뽑아 이름을 붙이고 목적과 용도, 구현 방법을 잘 정리해놓은 것
    - Library
      → 어떠한 기능을 다른 사람들도 사용할 수 있도록 만들어 놓은 것
    - Framework = Design Pattern + Library
      → 애플리케이션을 개발할 때 사용하는 일종의 틀, 디자인 패터과 라이브러리들을 모아서 프로그램 형태로 만들어 놓은 것
      → 개발 생산성 향상과 일정 수준 이상의 품질을 보장 가능

  • Spring Framework
    자바 기반의 애플리케이션 프레임워크
    - 핵심 기능
      → 의존 주입(Dependency Injection)
      → 관점 지향 프로그래밍 (AOP : Aspect-Oriented Programming)
      → Spring MVC Web Application과 RESTful 웹 서비스 프레임워크
      → JDBC, JPA, JMS 지원

  • Spring Modulenamecontents
    Core IoC container, Events, Resources, i18n, Validation, Data Binding, Type Conversion, SpEL, AOP
    Testing Mock objects, TestContext framework, Spring MVC Test, WebTestClient
    Data Access Transactions, DAO support, JDBC, ORM, Marshalling XML
    Web Servlet Spring MVC. WebSocket, SockJS, STOMP messaging
    Web Reactive Spring WebFlux, WebClient, WebSocket
    Integration Remoting, JMS, JCA, JMX, Email, Tasks, Scheduling, Cache
    Languages Kotlinm Groovy, Dynamic languages