스프링 부트에 대한 이해

Hello ho·2024년 4월 2일

웹 애플리케이션에서 스프링을 사용할 때는 Spring-Context에서 제공하는 DI외에도 spring-security, spring-jdbc, spring-mvc와 같은 다양한 모듈들의 설정을 적용 후 사용해야 한다. 따라서 시작하는 입장에서는 많은 설정들이 부담스럽고 실제로 구현해야하는 비즈니스 로직과는 관계없이 스프링 설정 오류 때문에 초반에 많은 시간을 허비하기도 한다.

이같은 문제를 해결하기 위해 스프링 부트를 만들었다.

스프링이 처음 등장했을 때는 의존성을 주입해주는 하나의 컨테이너를 제공하는 라이브러리였다. 최근의 스프링은 소셜부터 빅데이터까지 비즈니스 개발에 필요한 거의 모든 분야에 대해서 기능을 제공하는 하나의 플랫폼으로 자리 잡았지만 빠른 개발을 할 수 있는 무언가가 필요했다.

스프링부트는 커맨트 도구를 제공하고 톰캣이나 제티같은 웹 애플리케이션을 내장해서 실행을 간소화했다.

스프링 부트의 프로젝트 레이아웃
자바 기반에서 개발을 진행할 때 파일 포맷은 크게 두 가지로 구분할 수 있다. 로컬에서 실행되는 JAR와 웹 컨테이너에서 실행되는 WAR다. 각 파일들은 프로젝트 파일들을 압축한 압축파일이다. 파일 이름이 다른 것뿐만 아니라 각 압축 파일들이 JVM과 웹 어플리케이션 컨테이너가 인식하도록 하기 위해서 내부 폴더 구격이 다르다. 특히 WAR 경우 웹 페이지에서 보여줘야 하는 정적 자원들(JSP, HTML, CSS)과 자바 클래스 파일들이 함께 있으므로 WEB-INF 폴더를 기준으로 클래스 폴더들이 위치하고 있고, 기존에는 webcontents와 같은 폴더에 웹 자원들을 두기도 했고, maven 이후에는 src/main/webapp 폴더에 자원을 두기도 했다.

스프링부트에서 웹 자원들을 실행하기 위한 규약
스프링부트는 기본적으로 Runnable JAR로 실행되므로 WAR 규격에 맞춰서 WEB-INF 폴더를 만들거나 webapp 폴더를 만들지 않고 웹 자원들을 사용하기 위한 몇가지 규악을 제공한다.

RestController Annotation은 spring 4부터 추가된 어노테이션으로 기존에 ResponseBody Annotation 조합해서 만들던 부분을 좀 더 간결하게 사용하기 위해 합쳐 놓은 것이다. 여기에서 Hello 예제로 RestController Annotation을 사용한 이유는 RestController를 사용하면 컨트롤러 응답자체가 몸체가 되므로 별도의 뷰 페이지를 작성하지 않고 설정이 제대로 됐는지 확인할 수 있기 때문이다.

스프링부튼 기본적으로 WAR가 아니라 JAR 형태로 동작한다. 그래서 main메서드를 이용해서 실행한다. main 메서드가 실행되면 내장된 톰캣이 실행돼서 웹을 통해 접근할 수 있다. 스프링부트에서는 설정들에 소모되는 시간을 단축하기 위해서 EnableAutoConfiguration 어노테이션을 제공한다. EnableAutoConfiguration 어노테이션은 공통적으로 필요한 DispatcherServlet 같은 설정을 어노테이션을 이용해 대신할 수 있도록 해준다.

정적 자원
정적자원이란, html, css, image, javascript와 같이 컴파일이 필요없는 파일들을 맗나다. 스프링부트에서 제공하는 정적 자원 경로는 다음과 같다.

스프링과 스프링부트

profile
감자에 싹이나서 입이나서~

0개의 댓글