영어 공부 && 취미로 공식 문서 번역합니다.
의역, 오역 주의!!!!!!!!영어 못함
원문 : https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using
이번 장에서는 Spring Boot를 사용하는 방법을 더욱 자세하게 다룰 것입니다. 빌드 시스템과 자동 설정, 어플리케이션 실행과 같은 주제들 말이죠. 우리는 최고의 Spring Boot 예제를 제공할 것입니다. 개발을 쉽게 만들어줄 라이브러리를 사용하는 것만 빼면 Spring Boot와 별 다른 차이점은 없습니다.
Spring Boot를 처음 접한다면 이번 장을 시작하기 앞서 꼭 Getting Started 가이드를 읽어주시기 바랍니다.
6.1. Build Systems
의존성 관리를 위해, "Maven 중심의" 프로젝트를 다루기 위해 Maven과 Gradle 두 가지 빌드 시스템을 강력하게 추천합니다. 심지어 Ant 같은 빌드 시스템으로 구현된 프로젝트를 구동시킬 순 있지만 잘 호환되지는 않습니다.
6.1.1. Dependency Management
Spring Boot 각 버전은 체계화된 의존성 리스트를 제공합니다. 의존성을 사용하기 위해 빌드 설정에 어떠한 버전을 입력하지 않아도 됩니다. Spring Boot가 자동으로 관리하기 때문입니다. Spring Boot가 스스로 업그레이드 한다면, 이런 의존성 또한 같이 업그레이드 될 것입니다.
물론 필요하다면 버전을 명시해 Spring Boot가 추천하는 버전을 오버라이드 할 수 있습니다. |
의존성 리스트는 모든 검증된 서드파티와 Spring Boot를 쓸 수 있는 Spring 모듈을 포함하고 있습니다. Maven과 Gradle을 사용하면 이 리스트는 자원의 기본적인 영수증(?)처럼 사용 가능합니다.
Spring Boot 각 버전은 Spring 프레임워크의 기본 버전과 연결돼 있습니다. 우리는 Spring Boot 버전을 명시하지 않는 것을 강력히 추천합니다. |
6.1.2. Maven
Maven으로 Spring Boot를 이용하는 법을 알고 싶다면 Spring Boot's Maven 플러그인 문서를 확인하세요:
6.1.3. Gradle
Gradle로 Spring Boot를 이용하는 법을 알고 싶다면 Spring Boot's Gradle 플러그인 문서를 확인하세요:
6.1.4. Ant
Apache Ant+Ivy를 사용하면 Spring Boot를 빌드할 수 있습니다. Spring-boot-antlib "AntLib" 모듈 또한 Ant가 실행가능한 jar 파일을 만드는 것을 돕습니다.
의존성을 선언하려면 일반적인 ivy.xml 파일은 다음과 같습니다.:
<ivy-module version="2.0">
<info organisation="org.springframework.boot" module="spring-boot-sample-ant" />
<configurations>
<conf name="compile" description="everything needed to compile this module" />
<conf name="runtime" extends="compile" description="everything needed to run this module" />
</configurations>
<dependencies>
<dependency org="org.springframework.boot" name="spring-boot-starter"
rev="${spring-boot.version}" conf="compile" />
</dependencies>
</ivy-module>
build.xml은 다음 예제와 같습니다:
<project
xmlns:ivy="antlib:org.apache.ivy.ant"
xmlns:spring-boot="antlib:org.springframework.boot.ant"
name="myapp" default="build">
<property name="spring-boot.version" value="3.0.4" />
<target name="resolve" description="--> retrieve dependencies with ivy">
<ivy:retrieve pattern="lib/[conf]/[artifact]-[type]-[revision].[ext]" />
</target>
<target name="classpaths" depends="resolve">
<path id="compile.classpath">
<fileset dir="lib/compile" includes="*.jar" />
</path>
</target>
<target name="init" depends="classpaths">
<mkdir dir="build/classes" />
</target>
<target name="compile" depends="init" description="compile">
<javac srcdir="src/main/java" destdir="build/classes" classpathref="compile.classpath" />
</target>
<target name="build" depends="compile">
<spring-boot:exejar destfile="build/myapp.jar" classes="build/classes">
<spring-boot:lib>
<fileset dir="lib/runtime" />
</spring-boot:lib>
</spring-boot:exejar>
</target>
</project>
만약 spring-boot-antlib 모듈을 사용하고 싶지 않다면 Build an Executable Archive From Ant without Using spring-boot-antlib의 “How-to” 부분을 확인하세요. |
6.1.5. Starters
Starters는 애플리케이션에 포함할 수 있는 편리한 의존성 descriptor 입니다. 모든 Spring 을 위한 one-stop shop에 가서 샘플코드를 작성할 필요 없이 복사-붙여넣기를 통해 기술을 사용할 수 있습니다. 예를 들어 당신이 Spring과 데이터베이스 접근을 위해 JPA를 사용하고 싶으면, spring-boot-starter-data-jpa 의존성을 프로젝트에 추가하세요
Starters는 많은 의존성을 포함하고 있습니다. 동시에 그리고 빠르게 프로젝트에서 실행할 수 있게 돕습니다.
Starter의 종류를 알아봅시다.
모든 공식적인 starter는 네이밍 패턴이 다음과 같습니다; spring-boot-starter-*, 이때 *은 애플리케이션의 특정한 타입입니다. 이런 네임 구조는 개발자들이 starter에서 찾으려고 할 때 돕기 위해 의도된 것입니다. 다양한 IDE에서 Maven 통합은 개발자들이 의존성 이름을 검색하게 만듭니다. 예를 들어, 이클립스 또는 Spring 툴 플러그인이 설치되어 있다면, POM 에디터에서 ctrl+space 만으로 "spring-boot-starter" 타입을 완성시킬 수 있습니다.
“Creating Your Own Starter”에서 설명한대로 서드 파티 starter는 spring-boot 로 시작하면 안 됩니다. Spring Boot 공식 artifact로 취급받기 때문입니다. 아무튼, 서드 파티 starter는 일반적으로 프로젝트 이름으로 시작합니다. 예를 들어, 'thridpartyproject' 로 불리는 서드 파티 starter 프로젝트는 'thridpartyproject-spring-boot-starter'로 이름짓습니다.
다음의 애플리케이션 starter은 Spring Boot org.springframework.boot.group 하에서 공식적으로 지원하는 것들입니다.
spring-boot-starter | 로깅과 YAML, 자동 설정을 지원하는 Core starter |
spring-boot-starter-amqp | AMQP와 Rabbit MQ를 위한 starter |
spring-boot-starter-aop | AOP를 위한 Spring AOP와 AspectJ starter |
spring-boot-starter-artemis | Apache Artemis을 사용하는 JMS 메시징을 위한 starter |
spring-boot-starter-batch | Spring Batch를 위한 starter |
spring-boot-starter-cache | Spring Framework의 캐싱을 돕는 starter |
spring-boot-starter-data-cassandra | Cassandra 분산 데이터 베이스와 Spring Data Cassandra를 위한 starter |
spring-boot-starter-data-cassandra-reactive | Cassandra 분산 데이터베이스와 Spring Data Cassandra Reactive를 위한 starter |
spring-boot-starter-data-couchbase | Couchbase 문서-지향 데이터 베이스와 Spring Data Couchbase를 위한 starter |
spring-boot-starter-data-couchbase-reactive | Couchbase 문서-지향 데이터베이스와 Spring Data Couchbase Reactive를 위한 스타터 |
spring-boot-starter-data-elasticsearch | Elasticsearch 와 분석 엔진과 Spring Data Elasticsearch 를 위한 스타터 |
spring-boot-starter-data-jdbc | Spring Data JDBC를 위한 스타터 |
spring-boot-starter-data-jpa | 하이버네이트와 Spring Data JPA를 위한 스타터 |
spring-boot-starter-data-ldap | Spring Data LDAP를 위한 스타터 |
spring-boot-starter-data-mongodb | 하...식빵... for 문서-지향 데이터베이스 몽고디비 |
spring-boot-starter-data-mongodb-reactive | MongoDB document-oriented database, Spring Data MongoDB Reactive |
spring-boot-starter-data-neo4j | Neo4j graph database, Spring Data Neo4j |
spring-boot-starter-data-r2dbc | Spring Data R2DBC |
spring-boot-starter-data-redis | Redis key-value data store with Spring Data Redis and the Lettuce client |
spring-boot-starter-data-redis-reactive | Redis key-value data store with Spring Data Redis reactive and the Lettuce client |
spring-boot-starter-data-rest | REST 기반 Spring Data repository, Spring Data REST |
spring-boot-starter-freemarker | MVC 웹 애플리케이션 빌딩을 위해 사용하는 FreeMarker 뷰 |
spring-boot-starter-graphql | Spring GraphQL |
spring-boot-starter-groovy-templates | MVC web, Groovy Templates views GG... 못해먹겠다. |
spring-boot-starter-hateoas | Starter for building hypermedia-based RESTful web application with Spring MVC and Spring HATEOAS |
spring-boot-starter-integration | Starter for using Spring Integration |
spring-boot-starter-jdbc | Starter for using JDBC with the HikariCP connection pool |
spring-boot-starter-jersey | Starter for building RESTful web applications using JAX-RS and Jersey. An alternative to spring-boot-starter-web |
spring-boot-starter-jooq | Starter for using jOOQ to access SQL databases with JDBC. An alternative to spring-boot-starter-data-jpa or spring-boot-starter-jdbc |
spring-boot-starter-json | Starter for reading and writing json |
spring-boot-starter-mail | Starter for using Java Mail and Spring Framework’s email sending support |
spring-boot-starter-mustache | Starter for building web applications using Mustache views |
spring-boot-starter-oauth2-client | Starter for using Spring Security’s OAuth2/OpenID Connect client features |
spring-boot-starter-oauth2-resource-server | Starter for using Spring Security’s OAuth2 resource server features |
spring-boot-starter-quartz | Starter for using the Quartz scheduler |
spring-boot-starter-rsocket | Starter for building RSocket clients and servers |
spring-boot-starter-security | Starter for using Spring Security |
spring-boot-starter-test | Starter for testing Spring Boot applications with libraries including JUnit Jupiter, Hamcrest and Mockito |
spring-boot-starter-thymeleaf | Starter for building MVC web applications using Thymeleaf views |
spring-boot-starter-validation | Starter for using Java Bean Validation with Hibernate Validator |
spring-boot-starter-web | Starter for building web, including RESTful, applications using Spring MVC. Uses Tomcat as the default embedded container |
spring-boot-starter-web-services | Starter for using Spring Web Services |
spring-boot-starter-webflux | Starter for building WebFlux applications using Spring Framework’s Reactive Web support |
spring-boot-starter-websocket | Starter for building WebSocket applications using Spring Framework’s MVC WebSocket support |
추가적으로 starter는 생산(Production)용 기능을 추가할 수 있습니다 production ready:
Table 2. Spring Boot production startersNameDescription
spring-boot-starter-actuator | 모니터링과 관리를 돕는 프로덕션 준비기능인 Spring Boot Actuator를 위한 스타터 |
마지막으로 Spring Boot는 다음 제외하거나 특정한 기능으로 변경할 수 있는 스타터를 포함합니다.
spring-boot-starter-jetty | spring-boot-starter-tomcat을 대체하는 내장 서블릿 컨테이너 Jetty 스타터 |
spring-boot-starter-log4j2 | spring-boot-starter-logging를 대체하는 로깅 스타터 |
spring-boot-starter-logging | 기본 로깅을 지원하는 Logback 스타터 |
spring-boot-starter-reactor-netty | 내장 리액티브 HTTP 서버인 Reactor Netty 스타터 |
spring-boot-starter-tomcat | 내장 서블릿 컨테이너 Tomcat을 사용하기 위한 스타터. spring-boot-starter-web의 기본 내장 컨테이너로 사용된다. |
spring-boot-starter-undertow | spring-boot-starter-tomcat를 대체하기 위한 Undertow 내장 서블릿 컨테이너 스타터 |
6.2. Structuring Your Code
Spring Boot는 어떠한 특정 코드 짜임을 필요로 하지 않습니다. 하지만 가장 좋은 방법을 알려드리겠습니다.
6.2.1. “default” 패키지의 사용
클래스에 패키지 선언이 없으면 그 클래스를 "default" 패키지로 인식합니다. "default" 패키지 사용은 일반적으로 지양하고 피해야 합니다. 스프링 부트 사용함에 있어 @ComponentScan, @ConfigurationPropertiesScan, @EntityScan, or @SpringBootApplication 관련해 특정한 문제를 일으키기 때문입니다.
When a class does not include a package declaration, it is considered to be in the “default package”. The use of the “default package” is generally discouraged and should be avoided. It can cause particular problems for Spring Boot applications that use the annotations, since every class from every jar is read.
Java 패키지 네이밍 컨벤션과 com.example.project 같은 제공되는 도메인을 사용하는 것을 추천합니다. |
6.2.2. 메인 Application 클래스의 위치에 관해
일반적으로 메인 application 클래스를 Root 패키지 위에 위치하기를 추천합니다. @SpringBootApplication annotation는 대체적으로 메인 클래스에 위치합니다. 그리고 그 클래스를 절대적으로 기본 "search package"로 설정합니다. 예를 들어 JPA application을 사용한다고 가정해보죠. @SpringBootApplication의 패키지 클래스는 @Entity 어노테이션을 탐색합니다. 루트 패키지를 사용하면 오직 당신의 프로젝트에서 컴포넌트 스캔을 적용할 수 있습니다.
@SpringBootApplicaton 어노테이션을 사용하지 않기를 원하시면, @EnableAutoConfiguration과 @ComponentScan 어노테이션을 따로 정의하여 사용하십시오. |
다음 리스트는 일반적인 레이아웃을 보여줍니다:
com
+- example
+- myapplication
+- MyApplication.java
|
+- customer
| +- Customer.java
| +- CustomerController.java
| +- CustomerService.java
| +- CustomerRepository.java
|
+- order
+- Order.java
+- OrderController.java
+- OrderService.java
+- OrderRepository.java
MyApplication.java 파일은 다음과 같이 @SpringBootApplication를 포함해 메인 메서드를 선언하고 있습니다.
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
6.3. 클래스 설정하기
Spring Boot는 Java 기반의 설정을 선호합니다. 비록 SpringApplication은 XML로 사용하지만 우리는 주요 소스는 단일의 @Configuration 클래스를 사용할 것을 추천합니다. 대게 메인 메서드가 정의된 클래스는 @Configuration 클래스로써 좋은 후보자입니다.
인터넷에 발행된 많은 Spring 예제들이 XML 설정을 사용해왔습니다. 가능하다면 Java 기반의 설정을 균형적으로 사용해볼 것을 추천합니다. Enable* 어노테이션을 검색하는 것이 도움이 될 것입니다. |
6.3.1. 추가적인 Configuration 클래스 가져오기
모든 @Configuration 설정들을 하나의 클래스에 작성할 필요 없습니다. @Import 어노테이션을 사용해 추가적인 설정 클래스를 만들 수 있습니다. 대안으로 @ComponentScan 어노테이션을 이용해, 자동으로 모든 Spring @Configuration 컴포넌트를 찾아낼 수 있습니다.
6.3.2. XML Configuration 가져오기
XML 기반 설정을 사용해야만 한다면, 마찬가지로 @Configuration 클래스와 시작하는 것을 추천합니다. 그리고 @ImportResource 어노테이션과 함께 사용해 XML 설정 파일을 불러 올 수 있습니다.
'번역 > Spring Boot 공식문서' 카테고리의 다른 글
[Spring Boot] 5. Upgrading Spring Boot | 공식 문서 번역 (0) | 2023.04.01 |
---|---|
[JPA] Cascade Type 비교 | 공식 문서 번역 (0) | 2023.03.30 |
[Spring Boot] 4. Getting Started | 공식 문서 번역 (0) | 2023.03.28 |
[Spring Boot] 3. Documentation | 공식 문서 번역 (0) | 2023.03.17 |
[Spring Boot] 2. Getting Help | 공식 문서 번역 (0) | 2023.03.14 |