1. 스프링 부트에 대한 이해
- 스프링의 복잡한 설정
- 웹 개발을 목적으로 하는 프레임워크로 사용하기 위해 설정을 간소화한 스프링 부트 등장
- 스프링 부트가 내부적으로 디스패티 서블릿, 뷰 리졸버와 같은 빈을 로드해주어 컨트롤러와 메인 메소드 실행만으로 웹에서 접근 가능
1.1 스프링 부트 프로젝트 레이아웃
- 자바 프로젝트 결과 파일 포맷
- JAR : 로컬에서 실행되는 파일
- WAR : 웹 애플리케이션 컨테이너에서 실행되는 파일
- 웹 자원 위치 규약
- 정적 html 파일
- src/main/resources/static
- src/main/public
- favicon
- src/main/resources/favicon.ico
- template (tymeleaf html)
- src/main/reources/templates
- 정적 html 파일
- spring-boot-cli 설치
- spring --verision
-
Spring CLI v2.4.5
1.2 프로젝트 시작
- gradle 또는 maven 을 이용해서 스프링 부트 설정 → Spring Initializr
- gradle이 깔끔하고 더 쉬운 것 같다.
- 패키지 파일에 기능별로 디렉터리 분리해서 만들기
- 각 기능 디렉터리에 해당 기능의 컨트롤러 만들기
- @RestController 사용하면 응답 차제가 바디가 되어 별도의 뷰 페이지 없이도 설정 확인 가능 그냥 문자열만 보여줌
package ...;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@RestController
public class ExampleController{
@RequestMapping("/")
public String example() {
// return view name
return "example";
}
}
- 컨트롤러를 사용하는 메인 클래스 만들기
- 패키지 하위, 최상위에 메인 메소드를 담고 있는 클래스 하나 반드시 필요
- 메인 메소드 실행되면 내장된 톰캣이 실행되어 웹에서 접근 가능
- @SpringBootApplication : ComponentScan + Configuration + EnableAutoConfiguration
package com.kpmg.kr.lighthouse.tp.web.tpwebservice;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ExampleApplication {
public class void main(String args[]) {
SpringApplication.run(ExampleApplication.class, args);
}
}
2. 정적 자원 관리
- 정적 자원 : html, css, image, javascript / 컴파일이 필요 없는 파일들
2.1 웹 리소스 폴더
/META-INF or WEB-INF 내부
- 스프링부트에서 웹 MVC 설정을 답당하는 WebMvcAutoConfiguration 클래스 : 기본 설정으로 웹 리소스 폴더에서 정적 자원을 찾고, 템플릿 엔진 의존성을 클래스 패스에 추가 → 스프링 부트에서 자동으로 src/main/resources/templates 경로를 기본 경로로 인식
- 스프링부트 기본 패키징 설정 = JAR
- /resources
- /static (initializer가 자동 생성 X)
- /images : 이미지 url 접근
- /public
2.2 웹 리소스 폴더 설정
스프링 부트 기본 설정에 추가할 수 있는 방법
- javaConfig 클래스 파일을 만들어서 WebMvcConfigureAdapter 클래스의 addResourceHandlers 메소드 오버라이드해서 설정
- addResourceHandler("/assets/**") : localhost:8080/assets 호출 경로로 사용될 uri 입력
- addResourceLocations("classPath:/assets/", "/assets/") : 실제 호출할 파일이 위치할 폴더 경로
- setCache(606024*365) : 1년으로 캐시 만료 기간 설정
- resourceChain(true) : 원래는 PathResourceResolver가 자동으로 동작하는데 이 코드를 넣으면 추가 설정 적용 가능
package info.thecodinglive.config;
import ...
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/assets/**").addResourceLocations("classPath:/assets/", "/assets/").setCache(60*60*24*365).resourceChain(true).addResolver(new VersionResourceResolver().addContentVersionStrategy("/**"));
}
}
2.3 템플릿 엔진
템플릿과 데이터를 결합한 결과물을 만들어주는 도구 html + data
- 타임리프 의존성 추가 (maven)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
- html 파일에 타임리프 명시해서 사용
<html lang="ko" xmlns:th="http://www.thymeleaf.org"> ... </html>
- 컨트롤러에서 데이터를 반환하는 문자열을 이름으로 가지는 뷰에서 사용 가능 → 키 값으로 접근
${key_name}
${object_key_name.attribute}
or
상위에 th:object="${object_key_name}" 이렇게 설정하고
하위에 th:..="*{attribute_name}" 으로 접근 가능
- if, unless로 조건문 사용
<div th:if="${조건문}" th:text="조건문이 참일 경우 나타내는 문자열" />
<div th:unless="${조건문}" th:text="조건문이 거짓일 경우 나타내는 문자열" />
- each로 반복문 사용
model.addAttribute("key", 값/인스턴스생성하는클래스메소드/..);
<div th:each="temp_var" : ${array_key}">
<div th:text="${temp_var.attribute}"> ...
2.4. WebJars 사용해서 프론트 라이브러리 관리
WbeJars: 클라이언트에서 사용하는 라이브러리(js, css) 등을 JAR 형태로 패키징 한 것
- 여기서 사용한 라이브러리들을 찾아서 의존성 추가
References
- 스프링 부트로 배우는 자바 웹 개발 (윤석진) 기술서를 참고하여 정리한 내용입니다.
'웹 개발 > Spring Boot' 카테고리의 다른 글
Spring Boot) 현재 페이지의 URL주소 가져오기 (0) | 2021.06.02 |
---|---|
Spring Boot) 5. REST API 서버 만들기 + REST 관련 요소 (0) | 2021.04.28 |
Spring boot) 3. 스프링 프레임워크 (0) | 2021.04.28 |
Spring Boot) 2. 서블릿 Servlet (0) | 2021.04.28 |
Spring Boot) 1. 개발 환경의 변화와 자바 (0) | 2021.04.28 |