본문 바로가기
내일배움캠프(Sparta)/Spring

[Spring] Controller / 정적 페이지 / 동적 페이지

by mmm- 2023. 11. 2.

Controller

장점

  • SpringMVC가 효율적인 API처리를 위해 만들어낸 Front Controller 패턴은 개별 Controller의 작업을 단순화 하는 데 도움이 됨.

 

@Controller

: @Controller annotation이 명시되어 있는 클래스가 Controller의 역할을 수행할 수 있도록 등록해줌

  • 해당 annotation을 달았을 때 문자열로 반환을 하게 되면 resourses/templates 쪽에서 html 파일을 찾아 리턴하는 이름을 가진 html 파일이 있는지 없는지 확인해 해당 html을 반환함.

 

@ResponseBody

  • html 파일의 이름이 아닌 순수하게 문자열을 반환하는 경우 @ResponseBody annotation 사용

 

API 경로가 중복은 될 수 있지만 메서드는 달라야 함!

 

@Controller
public class HelloController {
    @GetMapping("/api/hello")
    @ResponseBody
    public String hello() {
        return "Hello World!!";
    }
    
    
    @GetMapping("/api/get")
    @ResponseBody
    public String get() {
        return "GET Method 요청";
    }

    @PostMapping("/api/post")
    @ResponseBody
    public String post() {
        return "POST Method 요청";
    }

    @PutMapping("/api/put")
    @ResponseBody
    public String put() {
        return "PUT Method 요청";
    }

    @DeleteMapping("/api/delete")
    @ResponseBody
    public String delete() {
        return "DELETE Method 요청";
    }
}

 

 

@RequestMapping

: 위의 코드의 /api 처럼 중복되는 URI를 단축시키기 위해 사용하는 annotation


정적페이지

  • 정적페이지는 이미 완성되어 변화가 일어나지 않기 때문에 굳이 Controller를 거칠 필요 없이 직접 접근

 

static 폴더에서 반환

  • 그럴 필요없지만 만약 Controller를 거쳐 정적페이지에 접근하고 싶다면 build.gradle에서 Thymeleaf 부분을 주석처리하면 됨 (이게 있으면 default경로가 static이 아닌, resource/templates 기 때문)

 

Redirect 로 반환

  • 템플릿 엔진을 적용한 상태에서 static 폴더의 html 파일을 Controller를 통해 처리하고 싶다면 "redirect:/hello.html" 처럼 redirect요청을 문자열로 반환하면 됨.
@GetMapping("/html/redirect")
    public String htmlStatic() {
        return "redirect:/hello.html";
    }

 

 

정적인 html을 템플릿에 넣어서 반환

Thymeleaf 엔진을 적용해 templates에 있는 html을 반환할 때 규칙이 정해져있음

  • 뒤에 html 빼고 파일 이름만 문자열로 반환
@GetMapping("/html/templates")
    public String htmlTemplates() {
        return "hello";
    }

 

➡️ Controller 라는 annotation이 달린 클래스에서 html 이름 문자열을 반환해주면 됨.


동적페이지

private static long visitCount = 0;

...

@GetMapping("/html/dynamic")
public String htmlDynamic(Model model) {
    visitCount++;
    model.addAttribute("visits", visitCount);
    return "hello-visit";
}
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>Hello Spring</title></head>
<body>
<div>
  Hello, Spring 동적 웹 페이지!!
</div>
<div>
  (방문자 수: <span th:text="${visits}"></span>)
</div>
</body>
</html>

 

동적 페이지 처리 과정

  1. 클라이언트의 요청을 Controller에서 Model로 처리
    • DB 조회가 필요하다면 DB 작업 후 처리한 데이터 Model에 저장
  2. Thymeleaf에게 View, Model 전달
  3. View에 Model을 적용해 동적인 웹페이지 생성
  4. 클라이언트에게 View 전달

용어정리

    • log
      : 기록. 어떠한 정보를 저장하고 표현하는 것
    • Thymeleaf
      : 템플릿 엔진. 동적 HTML 파일을 만들기 위한 라이브러리
      • 템플릿 엔진 종류 : Thymeleaf, Groovy, FreeMarker, Jade 등