스타터(starter) 란?
특정 목적을 위해서 커스텀이 단순화된 의존성 디스크립터.
예시) spring-boot-stater-web
Spring MVC 를 사용해 RESTful이 포함된 웹 어플리케이션을 작성하기 위한 스타터
디폴트 Embed 컨테이너로 tomcat 를 사용함.
즉, 웹 어플리케이션을 개발하고 싶다면, 해당 spring-boot-stater-web 의존성을 포함시켜야 함.
그리고, 자동으로 아래 주요 내용이 사전구성됨.
Spring MVC
호환 가능한 버전의 jackson-databind 및 hibernate-validator
jackson-databind
바인딩용
hibernate-validator
폼 벨리데이션 용
spring-boot-stater-tomcat
tomcat 을 위한 stater 프로젝트
아래는 예시 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example.thub</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
그럼, spring-boot-starter-web 에 구성된 의존성을 보려면?
정답
아래 커맨드를 사용하면됨.
커맨드
$ mvn dependency:tree
예시
PS E:\0.dev\0.vscode\0.project\1.springboot\5.thub_sample\demo> mvn dependency:tree
[INFO] Scanning for projects...
[INFO]
[INFO] -----------------------< com.example.thub:demo >------------------------
[INFO] Building demo 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:3.1.2:tree (default-cli) @ demo ---
[INFO] com.example.thub:demo:jar:0.0.1-SNAPSHOT
[INFO] +- org.springframework.boot:spring-boot-starter-web:jar:2.2.6.RELEASE:compile
[INFO] | +- org.springframework.boot:spring-boot-starter:jar:2.2.6.RELEASE:compile
[INFO] | | +- org.springframework.boot:spring-boot-starter-logging:jar:2.2.6.RELEASE:compile
[INFO] | | | +- ch.qos.logback:logback-classic:jar:1.2.3:compile
[INFO] | | | | \- ch.qos.logback:logback-core:jar:1.2.3:compile
[INFO] | | | +- org.apache.logging.log4j:log4j-to-slf4j:jar:2.12.1:compile
[INFO] | | | | \- org.apache.logging.log4j:log4j-api:jar:2.12.1:compile
[INFO] | | | \- org.slf4j:jul-to-slf4j:jar:1.7.30:compile
[INFO] | | +- jakarta.annotation:jakarta.annotation-api:jar:1.3.5:compile
[INFO] | | \- org.yaml:snakeyaml:jar:1.25:runtime
[INFO] | +- org.springframework.boot:spring-boot-starter-json:jar:2.2.6.RELEASE:compile
[INFO] | | +- com.fasterxml.jackson.core:jackson-databind:jar:2.10.3:compile
[INFO] | | | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.10.3:compile
[INFO] | | | \- com.fasterxml.jackson.core:jackson-core:jar:2.10.3:compile
[INFO] | | +- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.10.3:compile
[INFO] | | +- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.10.3:compile
[INFO] | | \- com.fasterxml.jackson.module:jackson-module-parameter-names:jar:2.10.3:compile
[INFO] | +- org.springframework.boot:spring-boot-starter-tomcat:jar:2.2.6.RELEASE:compile
[INFO] | | +- org.apache.tomcat.embed:tomcat-embed-core:jar:9.0.33:compile
[INFO] | | +- org.apache.tomcat.embed:tomcat-embed-el:jar:9.0.33:compile
[INFO] | | \- org.apache.tomcat.embed:tomcat-embed-websocket:jar:9.0.33:compile
[INFO] | +- org.springframework.boot:spring-boot-starter-validation:jar:2.2.6.RELEASE:compile
[INFO] | | +- jakarta.validation:jakarta.validation-api:jar:2.0.2:compile
[INFO] | | \- org.hibernate.validator:hibernate-validator:jar:6.0.18.Final:compile
[INFO] | | +- org.jboss.logging:jboss-logging:jar:3.4.1.Final:compile
[INFO] | | \- com.fasterxml:classmate:jar:1.5.1:compile
[INFO] | +- org.springframework:spring-web:jar:5.2.5.RELEASE:compile
[INFO] | | \- org.springframework:spring-beans:jar:5.2.5.RELEASE:compile
[INFO] | \- org.springframework:spring-webmvc:jar:5.2.5.RELEASE:compile
[INFO] | +- org.springframework:spring-aop:jar:5.2.5.RELEASE:compile
[INFO] | +- org.springframework:spring-context:jar:5.2.5.RELEASE:compile
[INFO] | \- org.springframework:spring-expression:jar:5.2.5.RELEASE:compile
[INFO] +- org.springframework.boot:spring-boot-devtools:jar:2.2.6.RELEASE:runtime (optional)
[INFO] | +- org.springframework.boot:spring-boot:jar:2.2.6.RELEASE:compile
[INFO] | \- org.springframework.boot:spring-boot-autoconfigure:jar:2.2.6.RELEASE:compile
[INFO] \- org.springframework.boot:spring-boot-starter-test:jar:2.2.6.RELEASE:test
[INFO] +- org.springframework.boot:spring-boot-test:jar:2.2.6.RELEASE:test
[INFO] +- org.springframework.boot:spring-boot-test-autoconfigure:jar:2.2.6.RELEASE:test
[INFO] +- com.jayway.jsonpath:json-path:jar:2.4.0:test
[INFO] | +- net.minidev:json-smart:jar:2.3:test
[INFO] | | \- net.minidev:accessors-smart:jar:1.2:test
[INFO] | | \- org.ow2.asm:asm:jar:5.0.4:test
[INFO] | \- org.slf4j:slf4j-api:jar:1.7.30:compile
[INFO] +- jakarta.xml.bind:jakarta.xml.bind-api:jar:2.3.3:test
[INFO] | \- jakarta.activation:jakarta.activation-api:jar:1.2.2:test
[INFO] +- org.junit.jupiter:junit-jupiter:jar:5.5.2:test
[INFO] | +- org.junit.jupiter:junit-jupiter-api:jar:5.5.2:test
[INFO] | | +- org.apiguardian:apiguardian-api:jar:1.1.0:test
[INFO] | | +- org.opentest4j:opentest4j:jar:1.2.0:test
[INFO] | | \- org.junit.platform:junit-platform-commons:jar:1.5.2:test
[INFO] | +- org.junit.jupiter:junit-jupiter-params:jar:5.5.2:test
[INFO] | \- org.junit.jupiter:junit-jupiter-engine:jar:5.5.2:test
[INFO] | \- org.junit.platform:junit-platform-engine:jar:1.5.2:test
[INFO] +- org.mockito:mockito-junit-jupiter:jar:3.1.0:test
[INFO] +- org.assertj:assertj-core:jar:3.13.2:test
[INFO] +- org.hamcrest:hamcrest:jar:2.1:test
[INFO] +- org.mockito:mockito-core:jar:3.1.0:test
[INFO] | +- net.bytebuddy:byte-buddy:jar:1.10.8:test
[INFO] | +- net.bytebuddy:byte-buddy-agent:jar:1.10.8:test
[INFO] | \- org.objenesis:objenesis:jar:2.6:test
[INFO] +- org.skyscreamer:jsonassert:jar:1.5.0:test
[INFO] | \- com.vaadin.external.google:android-json:jar:0.0.20131108.vaadin1:test
...(생략)...
설명
위에서 확인할 수 있는 것처럼,
spring-boot-starter-web 을 사용하면, 많은 프레임워크가 자동설정됨을 확인할 수 있음.
그럼, 아래와 같이 프로젝트를 구성하려고 한다면 어떻게 해야 할까?
조건
하나, 웹 어플리케이션
둘, 단위 테스트가 되어야함
셋, 배포는 tomcat 에 하고 싶음
아래는 위 조건을 만족하는 의존성 추가 예시이다.
설명
spring-boot-stater-web
Spring MVC로 웹 어플리케이션을 구현하는데 필요한 프레임워크를 제공함.
spring-boot-starter-test
단위 테스트에 필요한, 아래의 테스트 프레임워크를 제공함.
JUnit
기본 단위 테스트 프레임워크
Spring Test
Spring 콘텍스트 기반 어플리케이션을 위한 단위 테스트 프레임워크
Mockito
모킹을 제공
Hamcrest, AssertJ
검증을 제공
spring-boot-stater-tomcat
tomcat 을 Embed 서블릿 컨테이너로 사용하기 위한 스타터임.
웹 어플리케이션을 실행하기 위한 디폴트 값
결론
스타터(starter) 란, 특정 목적을 위해서 커스텀이 단순화된 의존성 디스크립터.
아래는 웹 어플리케이션을 개발하기 위해 추가하는 주요 스타터 임.
spring-boot-stater-web
Spring MVC로 웹 어플리케이션을 구현하는데 필요한 프레임워크를 제공함.
spring-boot-starter-test
단위 테스트에 필요한, 아래의 테스트 프레임워크를 제공함.
spring-boot-stater-tomcat
tomcat 을 Embed 서블릿 컨테이너로 사용하기 위한 스타터임.
오늘도 pom.xml 을 starter 로 구성하는 방법에 대한 지식마술(?) 한가지 획득완료! 감사합니다.^^
오늘의 명언 한마디
우리가 우연히 갖게 된 믿음, 즉 밈(meme)은 우리 마음이 특정한 방식으로 작용하도록 프로그래밍한다.
마치 컴퓨터에서 프로그램을 불러오면, 특정한 과제를 수행하는 것과 비슷하다.
우리 인생이 무의미하고 무작위적이라는 믿음으로 자신을 프로그래밍하면 실제로 무의미하고 무작위적인 인생을 살 가능성이 높다.
반면, 우리 인생에 목적이 있다는 믿음으로 자신을 프로그래밍하면, 그러한 목적을 달성하는 경향이 있다.
리처드 브로디지음, "마인드 바이러스" 중에서.
오늘의 영어 한마디
Do you know where the post office is?
당신은 알고 있어요 / 어디에 / 우체국이 있는지
설명
일반동사 의무문을 만들려면, 위와 같이 Do/Does를 앞에 붙여서 만듬.
"the post office" 는 우체국을 의미함
오늘의 민법 한마디(for real estate)
제1편총칙 / 제5장 법률행위 / 제3절대리
제133조(추인의 효력)
추인은 다른 의사표시가 없는 때에는 계약서에 소급하여, 그 효력이 생긴다.
그러나 제삼자의 권리를 해하지 못한다.
나의 목표 및 다짐을 항상 내곁에 두기.
목표
나의 강점을 바탕으로 나의 일을 잘해냄으로써 타인과 사회를 아릅답게 만든다.
현재 내가 가진 능력으로 누군가에 도움이 될 수 있을까? 에 대해서 항상 생각하기
목표를 이루기 위한 실천방안
꾸준한 블로깅/기록법/독서법으로 넘버원이 아닌 온리원이 되보자.
천사불여일행(千思不如一行)을 항상생각하며 체화 및 각인시키자.
"천번 생각하는것보다 한번 행동하는 것이 더 중요하다."
기기일약 불능십보(騏驥一躍 不能十步) / 노마십가 공재불사(駑馬十駕 功在不舍)
천리마도 한번에 열걸음을 뛸 수 없고, 느리고 둔한말이라도 열흘이면 하룻길을 간다.
'좋아하는 것_매직IT > 1.spring' 카테고리의 다른 글
24.Spring, Spring Boot App 시작하기 (Spring Boot 구동 클래스 생성, 4/4) (0) | 2021.02.06 |
---|---|
23.Spring, Spring Boot App 시작하기 (pom.xml 파일에 spring-boot-maven-plugin 구성, 3/4) (0) | 2021.02.06 |
21.Spring, Spring Boot App 시작하기 (spring-boot-starter-parent 구성, 1/4) (0) | 2021.01.27 |
20.Spring, 스프링 부트(Spring Boot)에 대해서 알아보자. (0) | 2021.01.27 |
19.Spring, 12팩터앱(The Twelve-Factor App)에 대해서 알아보자. (0) | 2021.01.27 |