본문 바로가기

웹 개발/Spring Boot

Spring Boot) 4. 스프링 부트 웹 개발

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
  • 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 형태로 패키징 한 것

 

WebJars - Web Libraries in Jars

 

www.webjars.org

  • 여기서 사용한 라이브러리들을 찾아서 의존성 추가

References

  • 스프링 부트로 배우는 자바 웹 개발 (윤석진) 기술서를 참고하여 정리한 내용입니다.