jhhan의 블로그

Spring - static 본문

Spring

Spring - static

jhhan000 2020. 9. 6. 17:37

오랜만에 글을 씁니다.

 

이번에는 스프링에 대해서 글을 써볼 건데요

다시 초심으로 돌아가자 라는 마음가짐으로 조금 기초적인 내용을 적어보겠습니다.

 

일단 스프링 프로젝트를 하나 제작합니다.
(프로젝트 생성은 간단하니 건너뛰겠습니다.)

아 생성할 때 Spring Web과 thymeleaf를 포함해서 생성해주셔야 합니다.

아마 다음과 같은 프로젝트 형태가 구성되었을 것입니다.
(maven 인지 gradle 인지 중요하지 않습니다.)

먼저 /resources/static 아래에 index.html 파일을 생성합니다.

그리고 다음과 같이 작성합니다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Spring</title>
</head>
<body>
Hello
<a href="/hello">hello</a>
</body>
</html>

그리고 실행을 하면 다음과 같은 화면을 얻을 수 있습니다.

 

localhost:8080을 주소창에 입력하면 다음과 같은 화면을 바로 얻을 수 있는데요

근데 여기서 중요한 점은 저는(물론 여러분..?)도 기본설정을 index.html로 하지 않았는데 자동으로 저 화면이 나왔다는 것입니다.

 

그에 대해서는 스프링 reference doc에 나와 있습니다.

https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features

여기서 Welcome Page 부분을 보시면 Spring은

  1. 먼저 static 폴더 안에 index.html 파일을 찾고,
  2. 없으면 index 템플릿을 찾습니다.

처음에 static 폴더 안에 index.html 파일을 만들어 놨기 때문에 특별한 설정을 하지 않아도

index 파일을 바로 보여주는 것을 알 수 있습니다.

 

그 다음으로 넘어가서

아까 나타난 화면에서 hello 링크를 클릭하면 오류 페이지가 나옵니다.

저희가 아무런 지정을 하지 않아서이기 때문입니다.(라는 건 모두 다 알것으로 생각합니다.)

그래서 hello 링크가 정상적으로 작동하게 해보겠습니다.

 

먼저 HelloController를 만듭니다.

package hello.hellospring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HelloController {

    @GetMapping("/hello")
    public String hello(Model model) {
        model.addAttribute("data", "hello!");
        return "hello";
    }
}

 

그리고 hello.html을 만듭니다.

<!DOCTYPE html>
<html lang="en"
        xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Hello</title>
</head>
<body>
<p th:text="'안녕하세요. ' + ${data}">안녕하세요. 손님</p>
</body>
</html>

 

그리고 실행을 하면 다음과 같은 화면이 뜹니다.

아 참고로 hello.html에서 쓰인 형식은 thymeleaf 템플릿 형식입니다.

이전에 제가 thymeleaf 글을 써놓은 것이 있으니 참고하시면 이해하시기 편할거에요.

 

이런 식으로 MVC 형식을 이용해서 화면을 추가하는 것은

스프링을 한,두번만 써보셨어도 익숙하실 겁니다.

그래도 한번 대략의 작동 방식에 대해 알아보겠습니다.

  1. localhost:8080/hello라는 url이 Spring의 내장 톰캣서버로 들어옴
  2. HelloController로 진입, /hello를 찾는다.
  3. 해당 메소드 진행 -> model(data: hello!)를 담고
  4. return "hello" 진행 -> hello 리턴문을 받아들여서
  5. templates/hello.html 을 찾기
  6. hello.html을 웹 브라우저에서 보여주기

대충 이런 형식으로 진행됩니다.(MVC 방식은 이렇게 진행이 됩니다.)

 

이제 정적 컨텐츠에 대해 알아보겠습니다.
(사실 이 부분이 제가 이번 포스트에서 메인으로 다루고 싶었던 부분인데.... 앞에 뭔가 내용이 많았네요..)

아까 제가 가려놓은 부분입니다.

이제 static 폴더 아래에 hello-static.html 파일을 만듭니다.

그리고 다음과 같이 작성합니다.

<!-- hello-static.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
정적 컨텐츠 입니다.
</body>
</html>

그리고 스프링을 실행시켜서 다음과 같은 주소로 입력해서 들어가 봅니다.

localhost:8080/hello-static.html

위의 화면을 얻을 수 있습니다.

이에 대해서도 과정에 대해 간략히 알아보겠습니다.

  1. localhost:8080/hello-static.html을 주소로 받습니다.
  2. 컨트롤러에서 hello-static 을 찾습니댜. (-> 이번 경우에는 없습니다.)
  3. 그러면 resources/static/hello-static.html 파일이 있는지 찾습니다. -> 이번 경우에는 있습니다.
  4. 찾은 녀석을 웹브라우저에서 보여줍니다.

이런 식으로 진행됩니다.

 

정적 컨텐츠는 자신이 쓴 html코드가 그대로 보여집니다.

  1. 변경할 일이 거의 없는 화면을 만들 때 편리할 수 있습니다.
  2. thymeleaf같은 템플릿 엔진은 돌아가지 않습니다.
  3. 오로지 작성된 코드를 그대로 보여줍니다.

 

이상으로 마치겠습니다.

스프링에 대해 기초부터 다시 공부해보니 재밌네요 ㅎㅎ

'Spring' 카테고리의 다른 글

Spring - Test Code 작성(2)  (0) 2020.09.13
Spring - Test Code 작성  (0) 2020.09.12
Spring - textarea 관련  (0) 2020.06.23
Spring-JPA 활용(2)  (0) 2020.06.09
Spring - JPA 활용  (0) 2020.03.25