참치코더의 꿈 메모장

Spring / 정적 리소스, 뷰 템플릿 변환 반환, Rest API 형태 반환 방법 정리 본문

Spring

Spring / 정적 리소스, 뷰 템플릿 변환 반환, Rest API 형태 반환 방법 정리

참치깡 2025. 9. 16. 11:25
728x90

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
// HTTP 응답 - 정적 리소스, 뷰 템플릿

/*
    스프링에서 응답 데이터를 만드는 방법(3가지)
 
    1. 정적 리소스 : 웹 브라우저에 정적인 HTML, CSS, JS를 제공할 때는, 정적 리소스를 사용한다.
    
    2. 뷰 템플릿 사용 : 웹 브라우저에 동적인 HTML을 제공할 때는 뷰 템플릿을 사용한다. (JSP, Thymeleaf)
 
    3. HTTP 메시지 사용 : HTTP API를 제공하는 경우에는 HTML이 아니라 데이터를 전달해야 하므로, HTTP 메시지
                         바디에 JSON 같은 형식으로 데이터를 실어 보낸다
    
*/
 
 
 
// 뷰 템플릿 응답 방법
// 1. 뷰 템플릿 HTML 파일 설계 및 제작 후 해당 템플릿 반환
 
@Controller
public class ResponseViewController {
 
    // 방법 1.    
    @RequestMapping("/response-view")
    public ModelAndView responseViewV1(){
        ModelAndView mav = new ModelAndView("response/main")
                .addObject("data""까나리");
 
        return mav;
    }
 
    // 방법 2. (가장 많이 사용하는 방법!)
    @RequestMapping("/response-view")
    public String responseViewV2(Model model){
        model.addAttribute("data""까나리");
        
        return "response/main";
    }
}
 
 
// HTTP 응답 - HTTP API(REST API), 리엑트나 프론트 엔드에서 뷰 구현하고 서버에서 데이터 전달할때 사용법

// 뷰 템플릿 사용 X (이래서 jsp를 안쓰는 듯....)
 
@Slf4j
@Controller
public class ResponseBodyController {
 
    // 방법 1.
    @GetMapping("/response/body")
    public void responseBodyV1(HttpServletResponse response) throws IOException {
        response.getWriter().write("ok");
    }
 
    // 방법 2.
    @GetMapping("/response/body")
    public ResponseEntity<String> responseBodyV2() {
        return new ResponseEntity<>("ok", HttpStatus.OK);
    }
 
    // 방법 3.
    @ResponseBody
    @GetMapping("/response/body")
    public String responseBodyV3(){
        return "ok";
    }
 
    // 방법 4.
    @GetMapping("/response/body")
    public ResponseEntity<Member> responseBodyV3(){
        Member member = new Member();
        member.setUsername("userA");
        member.setAge(20);
 
        return new ResponseEntity<>(helloData, HttpStatus.OK);
    }
 
    // 방법 5.(가장 많이 사용하는 방식)
    @ResponseStatus(HttpStatus.OK)
    @ResponseBody
    @GetMapping("response/body")
    public Member responseBodyJson(){
        Member member = new Member();
        member.setUsername("userA");
        member.setAge(20);
 
        return member;
    }    
 
}
 
/*
    @RestController
    

   - 위에서 사용한 @Controller 대신에 @RestController 애노테이션을 사용하면, 해당 컨트롤러에 모두 @ResponseBody가
      적용되는 효과가 있다 (뷰 템플릿을 사용하는 것이 아니라, HTTP 메시지 바디에 직접 데이터를 입력한다.)
 
    - 이게 리액트나 뷰 같은 프론트 단으로 데이터만 보내는 방법이다.
 
*/
 
 
 
cs
728x90
Comments