본문 바로가기
Spring/개념

[스프링입문] CH02. 스프링 웹 개발 기초

by MINNI_ 2021. 8. 3.

1. 정적 컨텐츠

  • 정의
    - 서버에서 하는 것 없이 파일을 그대로 웹브라우저에 내려주는 것
  • 정적 컨텐츠 동작
    - resource/static/fileName.html에 파일을 넣어두고, 포트번호/fileName.html을 검색하면 해당 html이 동작 
    [ 동작 순서 ]
        1) 웹 브라우저에서 localhost:포트번호/fileName.html 검색하면, 내장 톰켓 서버가 요청받음
        2) 내장 톰캣 서버가 해당 html를 스프링에 넘기면, 컨트롤러에서 fileName이 존재하는지 확인
        3) fileName에 해당하는 컨트롤러가 없다면, resource/static/fileName.html을 찾아 해당 html 반환

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

 


2. 동적 컨텐츠

2.1 MVC와 템플릿 엔진

  • 정의
    - 템플릿 엔진은 서버에서 파일을 프로그래밍해서 동적으로 변형하여 내려주는 것, 그것을 MVC패턴으로 표현
  • MVC
    - Model : 화면에 필요한 것을 담아 화면에 넘겨주는 일을 처리
    - View : 화면에 관련된 일을 처리
    - Controller : 비즈니스 로직, 서버와 관련된 일을 처리
  • thymeleaf 템플릿 엔진
    - 장점: 서버없이 파일을 열어도 파일 확인 가능
  • [ 템블릿 엔진 동작순서 ]
    1) 웹 브라우저에서 localhost:포트번호/hello-mvc 를 스프링에 넘기면,
       내장 톰켓 서버가 스프링 컨테이터에 해당 정보를 넘김
    2) 스프링은 helloController의 메소드에 매핑이 되어있는 것을 확인 후 호출
    3) return 값과 모델에 name이라는 키와 해당하는 값을 스프링에게 넘겨,
       뷰 리졸버(view resolver)가 return값에 해당하는 파일을 찾아 thymeleaf 템플릿 엔진에게 넘김
    4) 템플릿엔진의 랜더링을 통해 변환한 html를 웹브라우저에 넘김

 

# Controller
@GetMapping("hello-mvc")
    public String helloMvc(@RequestParam("name") String name, Model model){ 
    // 기본값으로 required가 true로 되어있어, 필수적으로 name값을 주지 않으면 오류발생
    
    	model.addAttribute("name", name);
    	return "hello-template";
}
# resources/templates/hello-template.html
<html xmlns:th="http://www.thymeleaf.org"><!--thymeleaf 템플릿 엔진-->
<body>
<p th:text="'hello ' + ${name}">hello! empty</p> <!--템플릿 엔진으로서 동작하면, text의 값으로 내용이 치환됨-->
                                                <!--모델의 키 값이 name인 것의 값을 꺼내 치환해줌 -->
</body>
</html>

 


2.2. API

  • 정의
    - JSON 등의 데이터 구조 포맷으로 클라이언트에게 데이터 전달하는 방법
    - 서버끼리 통신할 때 사용 → HTML를 보여줄 필요 없이 데이터 전달
    - 뷰, 리액트에 쓸 때 데이터 내려주는 방식으로 사용
  • @ResponseBody 동작 원리
    1) localhost:8080/hello-api을 넘기면, 톰캣 내장 서버에서 스프링 컨테이너에 정보 넘김
    2) controller에서 찾고 @ResponseBody가 있으면, http의 body부분에 데이터 직접 반환
    3) (viewResolver 대신에) HttpMessageConverter 동작
      3-1) return 문자 반환 => StringConverter 동작 → 문자 그대로 http 응답에 데이터 반환
      3-2) return 객체 반환 => JsonConverter 동작 → json 방식으로 데이터를 만들어서 htt의 응답에 데이터 반환
※ JSON
: "키-값 쌍"으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는
  개방형 표준 포맷

※ HttpMessageConverter
- 기본 문자처리 : StringConverter → StringHttpMessageConverter
- 기본 객체처리 : JsonConverter → MappingJackson2HttpMessageConverter
- byte 처리 등등 여러 converter가 기본으로 등록

※ Jackson : 객체를 json으로 바꾸는 라이브러리

 

# controller
/* @ResponseBody 문자 반환 */
 @GetMapping("hello-string")
    @ResponseBody   // http의 body부분에 데이터를 직접 넣어 주겠다. name이 요청한 템플릿에 그대로 내려감
    public String helloString(@RequestParam("name") String name){
        return "hello " + name;
    }

# controller
/* @ResponseBody 객체 반환 */
@GetMapping("hello-api")
    @ResponseBody // http의 body부분에 json 형태로 변환하여 데이터 반환
    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;
        }
    }

 


[ 출처 ]

 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard

 

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., 스프링 학습 첫 길잡이! 개발 공부의 길을 잃지 않도록 도와드립니다. 📣 확인해주세

www.inflearn.com

 

댓글