2. 스프링부트로 개발하기

Tasker_Jang·2024년 7월 23일
0

의존성 관리

스프링 부트의 각 릴리즈 들은 지원하는 의존성 리스트를 선별해서 제공한다. 이런 의존성들은 전부 스프링 부트가 관리하기 때문에 실제로 빌드 설정에 직접 버전을 지정하지 않아도 된다. 스프링 부트의 자체 버전을 올리면 이 의존성들도 그에 따라 버전이 올라간다.

스타터

스타터는 애플리케이션에 포함시킬 수 있는 간편한 의존성 디스크립터셋이다. 샘플 코드를 일일이 물색하고 의존성 디스크립터를 잔뜩 복붙할 필요없이 필요한 스프링과 관련 기술을 모두 한 번에 가져올 수 있다. 예를 들어서 데이터베이스 접근을 위해 스프링과 JPA를 사용하고 싶다면 프로젝트에 spring-boot-starter-data-jpa 의존성을 넣으면 된다.

스타터는 프로젝트를 재빠르게 시작, 실행하는 데 필요한 여러 가지 의존성을 가지고 있다.

스프링 부트가 제공하는 스타터들 목록과 기능은 다음과 같다.

  • spring-boot-starter: 기본 스타터로 스프링 애플리케이션에 필요한 기본적인 설정과 의존성을 제공한다.
  • spring-boot-starter-web: 웹 애플리케이션 개발을 위한 스타터로, 내장 톰캣, 스프링 MVC, RESTful 서비스 등을 포함한다.
  • spring-boot-starter-data-jpa: JPA(Java Persistence API)를 사용한 데이터베이스 접근을 위한 스타터로, Hibernate와 스프링 데이터 JPA를 포함한다.
  • spring-boot-starter-security: 스프링 시큐리티를 사용한 애플리케이션 보안을 위한 스타터.
  • spring-boot-starter-thymeleaf: Thymeleaf 템플릿 엔진을 사용한 웹 애플리케이션 개발을 위한 스타터.
  • spring-boot-starter-test: 스프링 부트 애플리케이션 테스트를 위한 스타터로, JUnit, Hamcrest, Mockito 등의 테스트 라이브러리를 포함한다.
  • spring-boot-starter-actuator: 애플리케이션 모니터링 및 관리 도구를 제공하는 스타터로, 다양한 엔드포인트를 통해 애플리케이션 상태를 확인할 수 있다.
  • spring-boot-starter-logging: 로깅을 위한 스타터로, 기본적으로 Logback을 사용하며, SLF4J를 통한 통합 로깅을 지원한다.
  • spring-boot-starter-batch: 스프링 배치 기능을 사용한 대용량 배치 처리를 위한 스타터.
  • spring-boot-starter-cache: 스프링의 캐시 추상화를 사용한 캐시 기능을 제공하는 스타터.
  • spring-boot-starter-mail: 자바 메일 송신을 위한 스타터로, Spring Framework의 JavaMailSender를 포함한다.
  • spring-boot-starter-validation: Bean Validation을 사용한 입력 값 검증을 위한 스타터.
  • spring-boot-starter-aop: 스프링 AOP(Aspect-Oriented Programming)를 사용한 관점 지향 프로그래밍을 위한 스타터.
  • spring-boot-starter-integration: 스프링 통합 기능을 사용한 메시징 기반 통합 패턴을 구현하기 위한 스타터.
  • spring-boot-starter-amqp: AMQP를 사용한 메시징 애플리케이션 개발을 위한 스타터.
  • spring-boot-starter-data-redis: Redis를 사용한 데이터 저장소 접근을 위한 스타터.
  • spring-boot-starter-data-mongodb: MongoDB를 사용한 데이터 저장소 접근을 위한 스타터.
  • spring-boot-starter-data-cassandra: Cassandra를 사용한 데이터 저장소 접근을 위한 스타터.
  • spring-boot-starter-data-elasticsearch: Elasticsearch를 사용한 데이터 저장소 접근을 위한 스타터.
  • spring-boot-starter-data-solr: Solr를 사용한 데이터 저장소 접근을 위한 스타터.
  • spring-boot-starter-data-ldap: LDAP을 사용한 데이터 저장소 접근을 위한 스타터.
  • spring-boot-starter-data-r2dbc: R2DBC를 사용한 데이터 저장소 접근을 위한 스타터.
  • spring-boot-starter-data-jdbc: JDBC를 사용한 데이터 저장소 접근을 위한 스타터.
  • spring-boot-starter-data-jest: Jest 클라이언트를 사용한 Elasticsearch 접근을 위한 스타터.
  • spring-boot-starter-groovy-templates: Groovy 템플릿 엔진을 사용한 웹 애플리케이션 개발을 위한 스타터.
  • spring-boot-starter-freemarker: Freemarker 템플릿 엔진을 사용한 웹 애플리케이션 개발을 위한 스타터.
  • spring-boot-starter-mustache: Mustache 템플릿 엔진을 사용한 웹 애플리케이션 개발을 위한 스타터.
  • spring-boot-starter-jdbc: JDBC를 사용한 데이터베이스 접근을 위한 스타터.
  • spring-boot-starter-jersey: Jersey를 사용한 RESTful 웹 서비스 개발을 위한 스타터.
  • spring-boot-starter-quartz: Quartz 스케줄링을 위한 스타터.
  • spring-boot-starter-undertow: Undertow 서블릿 컨테이너를 사용한 웹 애플리케이션 개발을 위한 스타터.
  • spring-boot-starter-webflux: 리액티브 웹 애플리케이션 개발을 위한 스타터.
  • spring-boot-starter-websocket: 웹소켓을 사용한 실시간 애플리케이션 개발을 위한 스타터.
  • spring-boot-starter-jetty: Jetty 서블릿 컨테이너를 사용한 웹 애플리케이션 개발을 위한 스타터.

메인 애플리케이션 클래스

일반적으로 메인 애플리케이션 클래스는 다른 클래스들을 아우르는 루트 패키지에 배치하는 것을 권장한다. @SpringBootApplication 어노테이션은 보통 메인 클래스에 두며 특정 항목들을 찾기 위한 기본 “검색 패키지”를 암시하게 된다.

다음은 전형적인 레이아웃 예시다.

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과 함께 main 메소드를 선언한다.

@SpringBootApplication
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

}

jar

스프링 부트 메이븐 플러그인이나 그래들 플러그인을 사용해서 실행 가능한 jar를 만든다면 다음 예제와 같이 java –jar를 사용해 애플리케이션을 실행할 수 있다.

$ java -jar target/myapplication-0.0.1-SNAPSHOT.jar

프로퍼티 기본값

스프링 부트에서 지원하는 라이브러리 중에는 성능을 위해 캐시를 사용하는 라이브러리가 몇 개 있다. 예를 들어 템플릿 엔진은 템플릿 파일을 반복해서 파싱하지 않도록 컴파일한 템플릿을 캐시에 저장한다.

캐시는 프로덕션 환경에선 매우 유용하지만 개발중에는 방금 변경한 내용을 확인할 수 없어서 오히려 역효과를 가져온다. 이러한 이유로 spring-boot-devtools는 디폴트로 캐시 옵션을 비활성화한다. 프로퍼티 기본값을 적용하고 싶지 않다면 application.properties에서 spring.devtools.add-propertiesfalse로 설정하면 된다.

자동 재시작

spring-boot-devtools를 사용하는 애플리케이션은 클래스패스에 있는 파일이 변경될 때마다 자동으로 재시작된다. 코드 변경에 대한 피드백 루프를 매우 빠르게 제공하기 때문에 IDE에서 작업할 때 매우 유용할 것이다. intelliJ 에선 프로젝트 빌드가 동일한 효과를 가진다.

profile
터널을 지나고 있을 뿐, 길은 여전히 열려 있다.

0개의 댓글