본문 바로가기

Java/SpringBoot

[SpringBoot] SpringBoot의 구조와 실행

구조

 

Spring Starter Project를 누르고
Starter에서 Spriing-Web을 고르고 Finish를 눌러서 프로젝트를 생성하면
기본적으로 제공되는 디렉터리와 파일이 생성된다.

src/main/java : 일반적인 자바소스를 등록한다.

src/main/resources : 자바 소스가 아닌 XML이나 Property File을 등록한다.

src/test/java : JUnit 기반의 Test 케이스를 작성한다.

 

 

src/main/resources 폴더

static : HTML 같은 정적인 웹 리소스가 저장된다.

templates :  템플릿 기반의 웹 리소스가 저장된다.

application.properties : 프로젝트 전체에서 사용할 properties 정보들을 저장한다.

 

 

pom.xml

- 프로젝트의 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을 비롯한 테스트 관련 라이브러리

 

 

[Maven Dependencies]

- pom.xml에 dependency 설정이 위 표의 2가지 설정 밖에 없지만 많은 라이브러리들이 등록되어 있는데, 그 이유를 pom.xml에서 살펴보면

 

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 비동기처리와 논블로킹 입출력을 지원하는 웹플럭스를 적용할 떄 사용

 

* 외부 프로퍼티를 사용하여 실행하기

application.properties

- 애플리케이션을 실행할 때 마다 매번 소스를 수정하여  WebApplicationType을 변경해야 한다면 번거로울 수 밖에 없기 때문에 외부 프로퍼티를 이용해 간단하게 설정할 수도 있다.