본문 바로가기
WebProgramming/SPRING

[Spring Boot]2. 환경설정

by Dogf 2020. 5. 19.
반응형

OpenJDK 설치 > 환경변수 설정 > 이클립스 설치 > STS 플러그인 설치

 

스프링 컨테이너를 위한 XML 환경설정 파일 역시 작성하지 않는데, 이는 스프링 부트가 기본적으로 모든 빈(Bean) 설정을 XML이 아닌 어노테이션(Annotation)으로 처리하기 때문이다.

 

<스프링 부트 프로젝트 구조>

 

기본적으로 제공하는 디렉터리나 파일들은 정해진 컨벤션을 따르고 있기 때문에 마음대로 변경 할 수 없다.

 

스프링 부트로 만든 프로젝트는 기본적으로 메이븐이 제공하는 프로젝트 구조를 따른다. 

 

src/main/java에는 일반적인 자바 소스를 등록하고,

src/main/resources에는 자바 소스가 아닌 XML이나 프로퍼티 파일들을 등록한다. 그리고 JUnit 기반의 테스트 케이스는 

src/test/java에 작성한다.

 

이 중에서 src/main/resources가 기존 메이븐 기반 프로젝트와 조금 다르다.

src/main/resources를 펼쳐보면 XML 파일들은 없고 웹 애플리케이션과 관련된 static과 templates폴더가 있다.

 

static 폴더는 이름 그대로 HTML 같은 정적인 웹 리소스가 저장된다.

 

templates 폴더에는 타임리프 같은 템플릿 기반의 웹리소스가 저장된다.

 

application.properties 파일이 있는데 이 파일에는 프로젝트 전체에서 사용할 프로퍼티 정보들을 저장한다.

 

메이븐을 이용해서 만든 스프링 부트 프로젝트에는 프로젝트 전반의 환경을 설정하는 pom.xml 파일이 기본적으로 제공된다.

 

pom.xml 파일에서 가장 중요한 설정은 의존관계에 해당하는 <dependencies> 설정이다.

 

spring-boot-starter-web 웹 애플리케이션 개발에 필요한 스프링 MVC관련 라이브러리

spring-boot-starter-test JUnit을 비롯한 테스트 관련 라이브러리

 

pom.xml 파일에서는 <parent>를 이용하여 또 다른 POM 설정을 상속할 수 있다.

 

따라서 눈에 보이지는 않지만 부모 설정 파일로부터 수많은 <dependency> 설정을 상속 받아 가지게 되는 것이다.

 

스프링 부트로 만든 애플리케이션은 일반 자바 애플리케이션으로 실행할 수도 있고 웹 애플리케이션으로 실행할 수도 있다.

 

만약 기본적으로 제공되는 메인 클래스를 현재 상태로 실행하면 웹 애플리케이션으로 실행된다.

따라서 내장 톰캣이 구동되고 브라우저에서 전송한 요청을 처리할 수 있다.

하지만 코드를 약간 수정하여 일반 자바 애플리케이션으로 실행 하면 내장 톰캣은 구동되지 않는다.

 

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;



@SpringBootApplication

public class Chapter01Application {

    public static void main(String [] args) {

        SpringApplication.run(Chapter01Application.class, args);

    }

}

소스를 간단하게 살펴보면 우선 클래스 위에 @SpringBootApplication이 설정되어 있다.

 

이는 이 클래스가 스프링 부트로 만든 애플리케이션의 시작 클래스 임을 의미한다.

 

그리고 유일하게 구현된 main() 메소드는 Spring Application 객체의 run()메소드를 정적(static) 메소드 호출 방식으로 호출한다.

 

Spring Boot의 버전이 올라가면 내장 톰켓의 버전도 자동으로 올라간다.

 

우리는 프로젝트를 생성할 때 톰캣 서버와 관련해서 아무런 설정을 하지 않았지만. 스프링 부트 프로젝트를 만들 때, Web 스타터를 추가했다. 그러면 스프링 부트가 웹 프로젝트 환경에 최적화된 라이브러리들을 등록해준다. 이때 톰캣 라이브러리도 같이 다운로드 되었으며, 애플리케이션 실행 시 이 내장 톰캣이 구동된 것이다.

 

자바 애플리케이션으로 실행하기

 

만약 현재 프로그램을 웹 애플이케이션이 아닌 일반 자바 애플리케이션으로 실행하고자 한다면 클래스를 수정하고, 애플케이션을 다시 실행한다.

 

먼저 Spring Application 객체의 run()메소드를 정적 메소드 호출 방식이 아닌 정상적인 객체 생성 방식을 사용했다.

 

그리고 run() 메소드를 호출하기 전에 Spring Application의 Web ApplicationType을 NONE으로 설정했다.

 

이렇게 하면 현재 애플리케이션이 웹 애플리케이션이 아닌 일반 자바 애플리케이션으로 실행되며, 톰캣 서버도 구동되지 않는다.

 

WebApplicationType으로 설정할 수 있는 애플리케이션 타입은 세 가지다. 

NONE은 웹으로 동작하지 않도록 설정한 것이다.

SERVLET은 기존 스프링 MVC를 기반으로 웹 애플리케이션을 구동하겠다는 설정이다.

REACTIVE는 스프링 5.0에서 추가된 비동기(Asynchronous) 처리와 논블로킹 입출력(non-blocking I/O)을 지원하는 웹플럭스(Web Flux)를 적용할 때 사용한다.

 

만약 위와 같이 WebApplicationType을 다시 SERVLET으로 변경하고 Chapter01Application 애플리케이션을 실행하면 이전에 구동한 톰캣 서버와 포트 충돌이 발생한다. 

 

<외부프로퍼티 사용하기>

 

src/main/resources 소스 폴더에 application.properties라는 프로퍼티 파일이 있다.

 

이 프로퍼티 파일은 전체 프로젝트의 프로퍼티 정보를 관리하는 설정 파일이다. 따라서 이 파일에 필요한 프로퍼티들을 등록하면 복잡한 자바 코드를 수정하지 않고도 애플리케이션의 동작을 변경할 수 있다.

 

application.properties 파일을 열어서 web-application-type 프로퍼티를 다음과 같이 설정한다.

 

src/main/resources/application.properties

spring.main.web-application-type=none

 

프로퍼티 파일을 수정할 때 IDE에서는 자동완성 기능을 제공한다.

 

 

 

 

 

 

반응형

댓글