상세 컨텐츠

본문 제목

[스프링 1팀] 스프링 입문 섹션 0~3

24-25/Spring 1

by oze 2024. 9. 27. 10:00

본문

728x90

 
 
 

정적 컨텐츠

  • 파일을 그대로 프론트엔드에 전달한다. 
  • resources/static/에 위치한다. 

 

  • 컨트롤러가 우선권을 갖는다.
  • 컨트롤러가 없을 시, static 폴더에서 파일을 찾는다. 
  • 파일을 찾으면 반환한다. 

 
 

정적 컨텐츠 vs 동적 콘텐츠

  • 동적 콘텐츠는 서버에서 변형 후 전달한다. (템플릿 엔진) 
  • 변형을 위해서는 mvc가 필요하다. 

 
 
 

MVC 

MVC는 Model, View, Controller 이다. 

  • View는 화면과 관련된 일만 한다. 
  • Controller는 서버와 관련된 일을 한다. 
  • Model은 화면에 필요한 데이터를 담아 화면에 넘겨준다. 

  • viewResolver가 뷰를 찾아주고 템플릿을 연결한다.
  • 변환 후 웹 브라우저에 넘겨준다. (동적) 

 

 


[ MVC의 Controller ]

 @Controller
 public class HelloController {
    @GetMapping("hello-mvc")
 public String helloMvc(@RequestParam("name") String name, Model model) {
        model.addAttribute("name", name);
 return "hello-template";
    }
 }
  • return값 hello-template을 찾는다. 
     

[ MVC의 View ]

resources/templates/hello-template.html

<html xmlns:th="http://www.thymeleaf.org">
 <body>
  <p th:text="'hello ' + ${name}">hello! empty</p>
 </body>
</html>
  • 템플릿 엔진으로 동작하면 hello! empty가 th:text="'hello ' + ${name}으로 치환된다. 



 
 

API

  • HTTP의 BODY에 문자 내용을 직접 반환한다.
  • viewResolver 대신 @ResponseBody를 사용한다.

  • 기본 문자처리: StringHttpMessageConverter
  • 기본 객체처리: MappingJackson2HttpMessageConverter




[ Case1 – @ResponseBody 문자 반환 ]

Controller
 public class HelloController {
    @GetMapping("hello-string")
    @ResponseBody
         public String helloString(@RequestParam("name") String name) {
         return "hello " + name;
    }
 }

 
 
[ Case 2 – @ResponseBody 객체 반환 ]

@Controller
 public class HelloController {
    @GetMapping("hello-api")
    @ResponseBody
     public Hello helloApi(@RequestParam("name") String name) {
     Hello hello = new Hello();
            hello.setName(name);
     return hello;
        }
     static class Hello {
     private String name;
     public String getName() {
     return name;
            }
        }
     }
     ```
     public void setName(String name) {
     this.name = name;
     }
   }
 }
  • 객체는 JSON 형태로 반환된다.

 
 
 
 
 


QUIZ

1. 파일을 그대로 프론트엔드에 전달하는 것을 ( 정적 콘텐츠 ) 라고 한다.

2. MVC는 ( Model, View, Controll )의 약자이다.

3. ( View )는 화면과 관련된 일만 한다. 

4. ( Controller )는 서버와 관련된 일을 한다. 

5. ( Model )에는 화면에 필요한 데이터를 담는다.

6. API에서는 viewResolver 대신 ( @ResponseBody )을 사용하여 HTTP BODY에 내용을 직접 반환한다.

7. API에서 기본적으로 객체 데이터는 ( JSON ) 형태로 반환된다.

 
 


PROGRAMMING QUIZ

1. 사용자의 이름을 입력받아 인사 메시지를 보여주는 간단한 웹 애플리케이션을 구현한다. 

hello-template.html는 이미 존재한다고 가정한다. 

@Controller
public class HelloController {
    
    @GetMapping("hello-mvc")
    public String helloMvc(@RequestParam("name") String name, Model model) {
        // 여기에 코드 작성 ...
    }
}

 

 

 

2. GET `/message`로 요청하면 `Message` 객체를 반환하도록 한다. `Message` 객체는 "안녕하세요!"라는 내용을 포함한다.

 @RestController
public class MessageController {

    @GetMapping("/message")
    @ResponseBody
    public Message getMessage() {
        // 여기에 코드 작성 ... 
    }
}

class Message {
    private String content;

    public Message(String content) {
        this.content = content;
    }

    // Getter와 Setter는 존재한다고 가정 
}

 

 




 
1번 답
 

 @Controller
public class HelloController {
    
    @GetMapping("hello-mvc")
    public String helloMvc(@RequestParam("name") String name, Model model) {
        model.addAttribute("name", name);
        return "hello-template"; // hello-template.html 뷰 반환
    }
 }

 
2번 답
 

 @RestController
public class MessageController {

    @GetMapping("/message")
    @ResponseBody
    public Message getMessage() {
        return new Message("안녕하세요!");
    }
}

class Message {
    private String content;

    public Message(String content) {
        this.content = content;
    }

    // Getter와 Setter는 존재한다고 가정 
}

 

 

 

 

 


 
 

출처: 스프링 입문, 코드로 배우는 스프링 부트, 웹MVC, DB접근기술 강의
Corner Spring 1
Editor:  lyonglyong

 
er
ㄴㅇ2ㄹ
 

728x90

관련글 더보기