Spring Boot 입문

1. Spring Boot란?



Spring Boot를 사용하면 프로덕션 지원이 가능한 독립형 Spring 기반 응용 프로그램을 쉽게 만들고 "그대로 실행"할 수 있습니다. 우리는 Spring 플랫폼과 써드 파티를 우리 자신의 주장에 근거한 견해로 파악함으로써 최소한의 수고로 애플리케이션을 작성하기 위해 노력하고 있습니다. - Spring Boot의 기초

2. 특징


  • 독립형 Spring 애플리케이션을 만듭니다.
  • Tomcat, Jetty 또는 Undertow 디렉토리를 포함합니다. (war의 deploy 불필요)
  • Maven의 구성을 단순화하기 위한 자율적 스타터를 제공한다.
  • 가능한 한 Spring을 자동으로 설정한다.
  • 메트릭스, 헬스 체크, 외부화된 컨피규레이션과 같은 실용적인 기능을 제공한다.
  • 코드 자동 생성과 XML 설정은 절대 불필요하다. - Spring Boot

  • 3. 구성



    3.1. 서버리스 아키텍처


  • 서버리스란 물리적 서버가 불필요한 것(~가상화)이 아니라, 「웹 서버」가 불필요하다는 의미.
  • 서버리스는, 자신의 어플리케이션에 웹 컨테이너(tomcat나 jetty)를 내포한 jar를 생성하는 것으로 실현한다.
  • Web 컨테이너를 내포한 jar는, 특수한 클래스 로더를 이용해 복수의 jar를 좋은 느낌으로 정리해 주는 「über jar」로 실현하고 있다.

  • 4. 개발 환경



    4.1. Eclipse


  • Gradle, Maven용으로 제공되고 있는 플러그인을 활용하는 것으로, Eclipse로 간단하게 개발할 수 있다.
  • Spring Boot의 웹사이트에 Building a RESTful Web Service 라는 Eclipse로 개발하는 예가 제공되고 있다. 이것은 github에도 공개되고 있다.
  • git clone https://github.com/spring-guides/gs-rest-service.git
    
  • 이 예는 http://localhost:8080/greeting에 액세스하면 JSON에서 {"id":1,"content":"Hello, World!"}를 반환하는 RESTful 웹 서비스입니다.
  • POM은 이런 느낌. 복수 준비되어 있는 Spring Boot의 스타터를 선택하는 것만으로 간단.

  • pom.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>org.springframework</groupId>
        <artifactId>rest-service</artifactId>
        <version>0.1.0</version>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.9.RELEASE</version>
        </parent>
    
        <dependencies>
            <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>
            <dependency>
                <groupId>com.jayway.jsonpath</groupId>
                <artifactId>json-path</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <properties>
            <java.version>1.8</java.version>
        </properties>
    
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
        <repositories>
            <repository>
                <id>spring-releases</id>
                <url>https://repo.spring.io/libs-release</url>
            </repository>
        </repositories>
        <pluginRepositories>
            <pluginRepository>
                <id>spring-releases</id>
                <url>https://repo.spring.io/libs-release</url>
            </pluginRepository>
        </pluginRepositories>
    </project>
    
  • 엔트리 포인트의 Main 메소드는 이런 느낌. @SpringBootApplication 어노테이션이 번거로운 설정 작업을 어깨 대신 해 주는 것 같아서, 깔끔하다.

  • Application.java
    package hello;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }
    
  • Spring에서 HTTP 요청은 Controller 클래스에 의해 handle된다. Controller 클래스는 이런 느낌. @RestController 어노테이션은 Controller 클래스를 인식하고 @RequestMapping 어노테이션은 /greeting의 GET 요청을 설정합니다.

  • GreetingController.java
    package hello;
    
    import java.util.concurrent.atomic.AtomicLong;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class GreetingController {
    
        private static final String template = "Hello, %s!";
        private final AtomicLong counter = new AtomicLong();
    
        @RequestMapping("/greeting")
        public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
            return new Greeting(counter.incrementAndGet(),
                                String.format(template, name));
        }
    }
    
  • Controller 클래스의 반환값의 형태 Greeting 는 POJO인 클래스로 좋다.

  • Greeting.java
    package hello;
    
    public class Greeting {
    
        private final long id;
        private final String content;
    
        public Greeting(long id, String content) {
            this.id = id;
            this.content = content;
        }
    
        public long getId() {
            return id;
        }
    
        public String getContent() {
            return content;
        }
    }
    

    4.2. Spring Tool Suite


  • 새 프로젝트 만들기



  • 5. Framework



    5.1. Spring AOP



    Spring에서 AOP 에 상세하게 써 있다.

    참고문헌


  • Spring Boot
  • Spring Boot의 기초
  • 좋은 웹페이지 즐겨찾기