구조
src/main/java : 일반적인 자바소스를 등록한다.
src/main/resources : 자바 소스가 아닌 XML이나 Property File을 등록한다.
src/test/java : JUnit 기반의 Test 케이스를 작성한다.
static : HTML 같은 정적인 웹 리소스가 저장된다.
templates : 템플릿 기반의 웹 리소스가 저장된다.
application.properties : 프로젝트 전체에서 사용할 properties 정보들을 저장한다.
- 프로젝트의 pom.xml을 살펴보면 'spring-boot-starter-XXX' 형태의 의존관계 2개가 추가 되어있다.
- starter-web은 초기 생성시 starter에서 선택을 하였기 때문에 추가되었고, starter-test는 Starter프로젝트 생성시 default값으로 pom.xml에 추가된다.
Module(Starter) | 설명 |
spring-boot-starter-web | 웹 애플리케이션 개발에 필요한 스프링 MVC 관련 라이브러리 |
spring-boot-starter-test | JUnit을 비롯한 테스트 관련 라이브러리 |
- pom.xml에 dependency 설정이 위 표의 2가지 설정 밖에 없지만 많은 라이브러리들이 등록되어 있는데, 그 이유를 pom.xml에서 살펴보면
- <parent>를 이용하여 또 다른 POM설정을 상속이 가능하기 때문에 눈에 보이지않지만 부모 설정 파일로부터 수많은 <dependency> 설정을 상속받아 가지게 되는 것이다.
실행
- 기본적으로 생성되는 '프로젝트이름' + 'Application.java' 의 클래스는 default로 main()메소드를 가지고 있기 때문에 별도로 메인 클래스를 작성하지 않는다.
- 스프링 부트로 만든 애플리케이션은 일반 자바 애플리케이션으로 실행할 수도 있고, 웹 애플리케이션으로도 실행 가능하다.
- 기본적으로 제공되는 메인 클래스를 현재 상태로 실행하면 웹 애플리케이션으로 실행된다.
- 프로젝트에 내장되어있는 Tomcat이 구동되고 브라우저에서 전송한 요청을 처리할 수 있지만, 코드를 수정하여 자바 애플리케이션으로 실행한다면 내장되어있는 Tomcat은 구동되지 않는다.
1) 웹 애플리케이션으로 실행하기
- @SpringBootApplication이 기본적으로 설정이 되어있는데 이 어노테이션은 스프링 부트로 만든 애플리케이션의 시작 클래스임을 의미한다.
- main() 메소드는 SpringApplication 객체의 run() 메소드를 정적(static) 메소드 호출 방식으로 호출한다.
- 실행시키고 콘솔을 확인해보면 아무런 서버 관련 설정을 하지 않았지만, 초기 생성시 'starter-web'을 추가했기 때문에 Tomcat이 등록되고 실행되었다.
+ 기본적으로 제공되는 main 클래스의 실행 default 설정값은 web이다.
2) 자바 애플리케이션으로 실행하기
- 정적 메소드 호출 방식이 아닌 객체 생성 방식을 사용하여 SpringApplication 객체를 생성하고 WebApplicationType을 NONE으로 설정하면 자바 애플리케이션으로 실행된다. 물론 Tomcat 서버도 구동되지 않는다.
- WebApplication의 3가지 Type
NONE | 웹으로 동작하지 않도록 설정 |
SERVLET | 기존 스프링 MVC를 기반으로 웹 애플리케이션으로 구동하도록 설정 |
REACTIVE | 비동기처리와 논블로킹 입출력을 지원하는 웹플럭스를 적용할 떄 사용 |
* 외부 프로퍼티를 사용하여 실행하기
- 애플리케이션을 실행할 때 마다 매번 소스를 수정하여 WebApplicationType을 변경해야 한다면 번거로울 수 밖에 없기 때문에 외부 프로퍼티를 이용해 간단하게 설정할 수도 있다.
'Java > SpringBoot' 카테고리의 다른 글
[SpringBoot] Test(1) 스프링 부트에서 테스트하기(@SpringBootTest) (0) | 2020.03.21 |
---|---|
[SpringBoot] Starter로 의존성 관리하기 (0) | 2020.03.04 |
[SpringBoot] JPA(Java Persistence) 개념 정리 (0) | 2020.02.25 |
[SpringBoot] Springboot의 자동설정 (0) | 2020.02.21 |
[SpringBoot] Spring Framework와 Spring Boot 장점 정리 (0) | 2020.02.19 |