용꿀
꼬마개발자허니
용꿀
전체 방문자
오늘
어제
  • 분류 전체보기 (249) N
    • 개발 (76) N
      • 스프링 입문 (7)
      • 스프링 기본 (9)
      • ToDo List using JPA (2)
      • 스프링 개념 (9)
      • 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 (8)
      • 스프링 MVC (3)
      • CS (20) N
      • 개발 팁 (8)
      • 스프링 MSA (5)
      • 곰터뷰🐻 (5)
    • 알고리즘 (169)
      • 알고리즘 문제 풀이 (165)
    • 잡동사니 (1)
      • 노래 가사 (1)
hELLO · Designed By 정상우.
용꿀

꼬마개발자허니

(스프링 입문) 2. 스프링 웹 개발 기초
개발/스프링 입문

(스프링 입문) 2. 스프링 웹 개발 기초

2022. 9. 24. 02:01

이 글은 김영한 님의 스프링 입문 강좌 수강 후에 정리한 글입니다.

(https://www.inflearn.com/course/스프링-입문-스프링부트/dashboard)

1. 정적 컨텐츠

<!DOCTYPE HTML>
<html>
<head>
    <title>static content</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
정적 컨텐츠 입니다.
</body>
</html>

 

브라우저에서 보여지는 정적 컨텐츠(hello-static.html)

 

웹 브라우저에서 특정 html을 요청하면 (ex. hello.html) 서버는 스프링 컨테이너에 등록된 hello 관련 컨트롤러를 찾는다.

만약 컨트롤러가 존재하지 않는다면 이때 서버는 resource:static 이하에 위치한 hello-static.html을 찾는다.

그 후 브라우저는 서버가 찾아준 resource:static/hello-static.html을 보여준다.

이렇게 html 파일을 그대로 보여주는 것을 정적 컨텐츠라고 한다.

 

2. MVC와 템플릿 엔진

● MVC 

MVC (모델-뷰-컨트롤러) 는 사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴입니다. 소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 두고 있습니다.

이러한 "관심사 분리" 는 더 나은 업무의 분리와 향상된 관리를 제공합니다. 

 Model - 데이터와 비즈니스 로직을 관리

 View - 화면과 레이아웃을 처리 

 Controller - 명령을 모델과 뷰 부분으로 라우팅

(출처 : MDN Web Docs)

 

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

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

 

1. @RequestParam

http 요청 파라미터의 값을 메서드의 파라미터로 전달받을 때 사용한다.

이 어노테이션이 적용된 파라미터는 기본적으로 필수이며, 요청 파라미터가 없을 경우에는 status=400의 에러가 발생한다.

required 속성 값을 false로 지정함으로써 필수 파라미터로 지정하지 않을 수도 있으며,  defaultValue 속성값을 이용하여 기본값 지정을 할 수도 있다. 

 

<!-- hello-template.html -->
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>

 

 

웹 애플리케이션이 /hello-mvc를 요청하여 @GetMapping("hello-mvc") 하단의 메소드가 호출되었다.

또한 http에서 요청 파라미터인 name=Spring!!을 확인할 수 있다.

이로 인해 View에 name으로 요청 파라미터인 "Spring!!"이 전달되었고, Controller에서 "hello-mvc" 문자열이 리턴된다.

다음으로 viewResolver가 hello-mvc.html를 찾아 처리한다.

View로 넘어온 name인 "Spring!!"은 hello-mvc.html에서 ${name}를 대체하여 최종적으로 브라우저에서 "hello Spring!!"으로 표시된다.

 

3. API

package hello.hellospring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloController {

    @GetMapping("hello-string")
    @ResponseBody
    public String helloString(@RequestParam("name") String name){
        return "hello " + name;
    }
    
    @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;
        }
    }
}

 

1. @ResponseBody

View 페이지 없이 리턴 값을 그대로 http의 body에 리턴하고 싶을 때 사용한다.

위 예시의 hello-string처럼 문자열을 반환할 수도 있으며, hello-api처럼 객체를 반환할 수도 있다.

 

/hello-string의 실행 결과

웹 애플리케이션이 /hello-stirng을 요청하여 @GetMapping("hello-string") 하단의 메소드가 호출되었다.

또한 http에서 요청 파라미터인 name=Spring!!을 확인할 수 있다.

@ResponseBody에 의해 viewReslover가 아닌 HttpMessageConverter가 동작하고 메소드에서 문자열이 반환되었으므로 StringHttpMessageConverter가 처리를 하여 최종적으로 "hello Spring!!"가 출력된다.

 

/hello-api의 실행 결과

웹 애플리케이션이 /hello-api를 요청하여 @GetMapping("hello-api") 하단의 메소드가 호출되었다.

또한 http에서 요청 파라미터인 name=Spring!!을 확인할 수 있다.

hello 객체가 만들어지고, http 요청 파라미터인 "Spring!!"이 hello 객체의 name으로 set된다.

@ResponseBody에 의해 viewReslover가 아닌 HttpMessageConverter가 동작하고 메소드에서 hello라는 객체가 반환되었으므로 MappingJackson2HttpMessageConverter가 처리를 하여 최종적으로 {"name" : "Spring!!"}가 출력된다.

'개발 > 스프링 입문' 카테고리의 다른 글

(스프링 입문) 6. 스프링 DB 접근 기술  (0) 2022.09.24
(스프링 입문) 5. 회원 관리 예제 (웹 MVC 개발)  (0) 2022.09.24
(스프링 입문) 4. 스프링 빈과 의존관계  (0) 2022.09.24
(스프링 입문) 3. 회원 관리 예제  (0) 2022.09.24
(스프링 입문) 1. 프로젝트 환경 설정  (0) 2022.09.06
    '개발/스프링 입문' 카테고리의 다른 글
    • (스프링 입문) 5. 회원 관리 예제 (웹 MVC 개발)
    • (스프링 입문) 4. 스프링 빈과 의존관계
    • (스프링 입문) 3. 회원 관리 예제
    • (스프링 입문) 1. 프로젝트 환경 설정
    용꿀
    용꿀

    티스토리툴바