<청춘> 격정적으로 사는 것

밤을 새고 공부한 다음 날 새벽에 느꼈던 생생한 환희와 야생적인 즐거움을 잊을 수 없다

BOOK REVIEW/실전 스프링 부트 워크북

[실전 스프링 부트 워크북] CH2 스프링 부트 앱 첫 개발

수학도 2021. 8. 10. 17:34

스프링 부트 앱은 CLI, 메이븐, 그레이들, 앤트 등으로 생성한다.

 

 

2.1 스프링 부트 CLI 설치

  • 자바 1.6+ 설치
  • 환경 변수 JAVA_HOME을 자바 SDK 설치 경로로 설정
  • SPRING_HOME 변수는 스프링 부트의 바이너리 배포 파일을 압축 해제한 경로로 설정
  • PATH 변수에 %SPRING_HOME%\bin 추가

 

 

Spring init

스프링 부트 프로젝트의 뼈대를 생성하는 명령어

 

$ Spring init myapp

https://start.spring.io의 의 웹 서비스를 호출해서 myapp이라는 이름의 폴더를 만들고 maven 프로젝트(디폴트)를 생성한다.

 

$ Spring init  --build gradle myapp

https://start.spring.io의 의 웹 서비스를 호출해서 myapp이라는 이름의 폴더를 만들고 gradle 프로젝트를 생성한다.

 

 

 

$ Spring init -dweb, data-jpa, h2, thymeleaf  --build maven myapp  --force

스프링 부트 메이븐 프로젝트를 만든 다음 폼 파일(pom.xml)에 정의한 웹 애플리케이션에 필요한 의존체를 알아서 추가한다. 웹 요청을 처리할 라이브러리(내장 톰캣 서버), 퍼시스턴스(data-jpa), H2 DB 엔진(h2), 뷰어 엔진(thymelear)을 자동으로 엮어준다.

--force : myapp 폴더를 덮어쓰거나 이름을 변경할 수 있다.

 


2.2 메이븐과 그레이들로 빌드하기

 

메이븐과 그레이들은 컴파일, 테스트, 빌드 작업에 쓰는 도구이다.

메이븐 (https://maven.apache.org/)

그레이들 (http://gradle.org/)

 

2.2.1 메이븐 (Maven)

메이븐으로 스프링 부트 앱을 개발할 때는 폼 파일이 필수이다.

 

pom.xml

<!-- 스프링 부트 상위 의존체 -->
<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.3.RELEASE</version>
</parent>

반드시 필요한 상위 폼

spring-boot-starter-parent : 스프링 부트 시동에 꼭 필요한 스프링 프레임워크(spring-core), 스프링 테스트 등 앱 실행에 필요한 라이브러리가 모두 담겨있다.

 

<!-- 의존체 추가: 스타터 폼 -->
<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
</dependency>

스프링 부트 기능에 해당하는 의존체

spring-boot-starter : 기본 스타터 폼으로 앱에 필요한 의존체를 전부 알아서 가져온다.

 

<!-- 의존체 추가: 스타터 폼 -->
 <dependencies>
        <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>  
        </dependency>
        . . .
</dependencies>

스프링 부트 기능에 해당하는 의존체

spring-boot-starter-web : 웹 애플리케이션 프로젝트의 기본 스타터 폼으로 spring-core, spring-web, spring-webmvc, 내장 톰캣 서버, 그 밖의 웹 관련 라이브러리를 전부 알아서 가져온다.

 

<!-- JAR/WAR 파일로 묶기 위한 스프링 부트 플러그인>
<build>
        <plugins>
                 <plugin>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-maven-plugin</artifactId>
                 </plugin>
        </plugins>
</build>

spring-boot-maven-plugin : mvn package 명령어로 전체 앱을 JAR 또는 WAR 파일로 묶을 수 있게 한다.

 

 

 

2.2.2 그레이들(Gradle)

 

build.gradle

buildscript{
    repositories{
          jcenter( )
          maven { url "http://repo.spring.io/snapshot" }       
          maven { url "http://repo.spring.io/milestone" }
    }
    dependencies {
          classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.3.RELEASE")
    }
}

spring-boot-gradle-plugin

 

dependencies{
    // 스타터 폼 의존체
    compile('org.springframework.boot:spring-boot-starter')
}

spring-boot-starter

 


2.3 외부 도구 사용하기

 

2.3.1 스프링 이니셜라이저 (Spring Initializr)

https://start.spring.io/

 

 

2.3.3 스프링 도구 모음(STS, Spring Tool Suite)

https://spring.io/tools/

 

Spring Tools 4 is the next generation of Spring tooling

Largely rebuilt from scratch, Spring Tools 4 provides world-class support for developing Spring-based enterprise applications, whether you prefer Eclipse, Visual Studio Code, or Theia IDE.

spring.io

이클립스 IDE를 사용한다면, STS 플러그인을 설치하거나 위에서 다운받아 사용하면 된다.

STS는 스프링 부트를 기본 지원한다.

 

File > New > Spring Starter Project

 

 

 


2.4 처음 만드는 스프링 부트 앱

 

2.4.1 스프링 부트 일기 (Spring Boot Journal)

개발자가 매일 자신이 한 일을 짤막하게 기록하는 간단한 일기 응용 프로그램

 

2021.08.10 - [BOOK REVIEW/실전 스프링 부트 워크북] - [실전 스프링 부트 워크북] 스프링 부트 일기 / 스프링 부트 프로젝트 따라하기

 

[실전 스프링 부트 워크북] 스프링 부트 일기 / 스프링 부트 프로젝트 따라하기

스프링 부트 일기 (Spring Boot Journal) 개발자가 매일 자신이 한 일을 짤막하게 기록하는 간단한 일기 응용 프로그램 [프로젝트] STS에서 스프링 부트 일기 앱을 만들어보자. 1. Spring Starter Project File >.

devmath.tistory.com

 

 

2.4.2 스프링 부트 작동 원리

 

메인 클래스에 붙였던 애너테이션 @SpringBootApplication 을 살펴보자.

@SpringBootApplication의 정체는 @Configuration, @EnableAutoConfiguration, @ComponentScan 애너테이션이 뭉쳐진 애너테이션이다.

 

스프링 부트는 @SpringBootApplication과 그 내부의 자동 구성(@EnableAutoConfiguration) 기능 덕분에 전체 애플리케이션 컴포넌트를 식별한다. 

 

스프링 부트는 클래스패스, 애너테이션, 구성 파일을 보고 가장 적절한 앱에 가장 알맞은 기술을 넣어 구성을 마친다.

우선, 클래스패스를 조사해서 spring-boot-starter-web 스타터가 선언된 것을 인지한 스프링 부트는 웹 애플리케이션을 구성한다. 따라서 @RequestMapping이 달린 메서드가 있고 @Controller 애너테이션이 달린 클래스는 웹 컨트롤러로 보고, 톰캣 서버는 spring-boot-starter-web의 의존체 중 하나이므로 톰캣으로 앱을 띄운다.

 

스프링 부트로 웹 애플리케이션을 생성할 때마다 톰캣 서버는 반드시 내장된다. 물론, 톰캣 대신 다른 서버를 대신 사용할 수 있다.