스프링 부트 프로젝트 생성
https://start.spring.io/를 이용하여 스프링부트 프로젝트를 손쉽게 셋팅할 수 있다.
- Project : Gradle
- Language : Java
- Version : 2.3.7버전
- Project Metadata :
- Dependency :
- Spring Web
- Thymeleaf
Generation Folder를 눌러 다운받은 파일의 압축을 풀어주고, IntelliJ로 Import해보자.
Maven / Gradle 의 차이 ?
버전설정하고, 필요한 라이브러리를 땡겨서 오고 빌드시 라이프 사이클을 관리해주는 빌드 툴, 이전에는 Maven을 위주로 사용되는 경우가 많았으나, 최근에는 Gradle로 많이 사용한다.
스프링부트 개발 버전 설명
Snapshot : 현재 개발 중 M1 : Milestone 1, 프리 알파 단계로 기능이 완성되자마자 공개 RC : Release Candidate, 마지막 베타 버전으로 상용화 직전의 베타버전이다. GA : General Availability 상용화 버전
프로젝트 파일 설명
build.gradle
자바는 어떤 버전을 쓰고 있는지, 해당 프로젝트에서 어떤 라이브러리를 임포트하는 것인지를 관리하는 파일
.gitignore
git에서는 필요한 소스코드만 올리고, 빌드된 파일은 올라가면 안되기 때문에 원격저장소에 올리지 않아야 할 파일들을 기재하는 공간. 이것 또한 start.spring.io에서 자동으로 만들어준다.
프로젝트 코드 설명
@SpringBootApplication
public class HelloSpringApplication {
public static void main(String[] args) {
SpringApplication.run(HelloSpringApplication.class, args);
}
}
메인 메소드를 실행하면, @SpringBootApplication을 찾아 스프링부트애플리케이션이 실행된다. 스프링부트는 톰캣 웹서버가 내장되어 있어, 해당 웹서버를 자체적으로 띄우며 같이 실행하게 된다.
Tip : IntelliJ를 쓰면, 자바를 직접 실행하는게 아니라 Gradle로 실행될 때가 있는데, Preferenct > Build, Execution, Deployment > Build Tools > Gradle 메뉴에서 Build and run using / run tests using을 모두 IntelliJ로 바꿔주자 ! 그럼 소스 구동 속도가 훨씬 빨라진다.
라이브러리
Gradle은 의존관계가 있는 라이브러리를 함께 다운로드 한다.
주요 라이브러리는 아래와 같다 :
- spring-boot-start-web
- spring-boot-starter-thymeleaf: 타임리프 템플릿 엔진(View용)
- spring-boot-starter(공통): 스프링부트 + 스프링 코어 및 로깅까지 다 가져온다
- spring-boot
- spring-core
- spring-boot-starter-logging
- logback(요즘 더 많이 쓰이는 추세)
- slf4j
- spring-boot
테스트 라이브러리
- spring-boot-starter-test
- junit : 테스트 프레임워크(4에서 5로 많이 넘어오는 추세)
- mockito : 목 라이브러리
- assertj : 테스트코드를 좀 더 편하게 작성할 수 있도록 도와주는 라이브러리
- spring-test: 스프링 통합 테스트 지원
View 환경설정
기존에 import한 프로젝트에서 실행만 하면 오류페이지만 뜬다. 이 화면을 바꿔서 내가 원하는(?) 화면을 띄워보자.
Welcome Page 만들기
static/index.html을 만들어주면, 도메인을 만들고 보여지는 첫 화면으로 자동 셋팅해준다. 스프링 부트에서 이 Welcome page 기능을 제공한다.
7.1.6. Welcome Page
Spring Boot supports both static and templated welcome pages. It first looks for an index.html file in the configured static content locations. If one is not found, it then looks for an index template. If either is found, it is automatically used as the welcome page of the application.
출처 : https://docs.spring.io/spring-boot/docs/2.3.7.RELEASE/reference/html/spring-boot-features.html#boot-features
그럼 만일, 정적 페이지가 아니라 동적으로 웹사이트에 데이터를 보여주고 싶다면 어떻게 해야할까? 이럴때는 템플릿 엔진을 사용하는데, 여기서는 Thymeleaf를 사용하도록 한다.
- tip : 웹 애플리케이션에서 첫번째 진입점은 controller이다!
웹브라우저가 localhost:8080/hello를 요청하는 과정은 아래와 같다
- 웹브라우저에서 localhost:8080/hello를 입력받는다.
- 웹브라우저는 웹서버에게 요청을 보낸다.
- 내장 톰캣서버는 스프링 컨테이너에 hello와 맵핑된 컨트롤러가 있는지 물어본다.
- 스프링 컨테이너는 helloController안의 hello메소드를 찾아 실행하도록 위임한다.
- helloController는 data가 key이며, value가 “hello!”인 attribute를 model 속성에 추가한다.
- 뷰 리졸버가 리턴 값으로 반환한 문자와 맵핑된 화면이 있는지 찾아 톰갯서버에 넘긴다.
- 톰캣 서버는 렌더링 된 화면을 최종 클라이언트에게 보여준다.
여기서 주의해야 할 점은, 컨트롤러에서 리턴 값으로 문자를 반환하면 뷰 리졸버(viewResolver)가 화면을 찾아 처리한다는 것이다. 스프링 부트 템플릿엔진은 기본 viewName을 맵핑하며, __‘resources/templates/’ + {viewName} + ‘.html’__파일을 자동으로 탐색하여 넘긴다. *** ### 빌드
cd study/hello-spring
./gradlew build
cd build/libs
java -jar hello-spring-0.0.1-SNAPSHOT.jar
실행 확인
완전히 지우고 재빌드 하는 명령어
./gradlew clean build
서버에 배포할때는 해당 jar 파일만 복사해서 서버에 넣고, 이 jar파일만 실행해주면 된다. 그럼 서버에서도 스프링이 동작할 수 있다.
해당 내용은 인프런 강의(스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술)를 학습하며 작성되었습니다.