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

2024. 8. 23. 22:03·Back-End/Spring

[작성일: 2023. 05. 10]

 

정적 컨텐츠

  • 스프링 부트 정적 컨텐츠 기능
  • 서버에서 하는 거 없이 파일을 그대로 웹 브라우저에 내려주는 것

출처: 김영한님

  • 웹브라우저에서 hello-static.html을 검색하면 제일 처음 내장 톰캣 서버가 요청을 받는다.
  • 스프링은 컨트롤러에서 hello-static 컨트롤러가 있는지 찾는다.
  • 없다면 내부(resource/static)에 있는 hello-static.html을 찾는다.
  • html이 있다면 그대로 반환해 준다.

 

 

출처: spring.io

 

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

 

 

 

 

 

 

MVC와 템플릿 엔진

  • JSP, PHP 같은 템플릿 엔진이 서버에서 동적인 처리를 하고 웹 브라우저를 내려줌

출처: 김영한님

 

  • 웹브라우저에서 hello-mvc를 넘기면 내장 톰캣 서버를 먼저 거친다.
  • 스프링에게 넘겨주면 helloController를 찾는다.
  • 컨트롤러가 있다면 메서드를 호출한다.
  • retrun 시 hello-template으로 return
  • viewResolver가 hello-template을 찾아서 타임리프에게 넘기고, 변환을 한 HTML을 웹 브라우저에 반환해 준다. 

 

Controller

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

 

hello-template

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

 

  • getMapping("hello-mvc")은 주소로 입력할 값
  • RequestParam("name")은 외부에서 받을 값 (hello-mvc?name="spring!" 이런 식으로)
  • model.addAttribute("name", name);  에서 첫 번째 "name"은 html의 ${name}과 이름이 같아야 한다. 두 번째 name의 값이 html의 ${name}으로 치환된다.
  • return "hello-template";

 

 

 

 

 

API

  • HTML이 아니라 JSON 데이터 포맷으로 클라이언트에게 전달
  • @ResponseBody를 사용하면 뷰 리졸버(viewResolver)를 사용하지 않음.
  • 대신 HTTP의 BODY에 문자 내용을 직접 반환(HTML BODY TAG를 말하는 것이 아님)

 

@ResponseBody

  • 웹 페이지에서 페이지 원본보기(소스) 하면 html 코드 없이 "hello spring"만 보이게 된다.
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
    return "hello" + name;
    // 웹 페이지에서페이지 원본보기(소스) 하면 html 소스 없이 "hello spring"만 달랑 보임.
}

 

 

Controller

  • @ResponseBody를 사용하고 객체를 반환하게 되면 객체가 JSON 형태로 변환해 준다.
// api 방식 -> {"name" : "spring!!"} 형식으로 출력됨.
// JSON 방식 -> 키, 밸류로 이루어진 구조 (심플)
@GetMapping("hello-api")
@ResponseBody  // JSON으로 반환하는 게 디폴트로 되어있음.
public Hello helloApi(@RequestParam("name") String name){
    Hello hello = new Hello();
    hello.setName(name);
    return hello;
}

// 객체 생성 해보기 위해 Hello 클래스 생성
static class Hello {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

 

실행화면

 

출처: 김영한님

  • HTTP의 BODY에 문자 내용을 직접 반환
  • viewResolver 대신에 HttpMessageConverter가 동작
  • 기본 문자 처리: StringHttpMessageConverter
  • 기본 객체 처리: MappingJackson2HttpMessageConverter
  • byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음.
  • 참고: 클라이언트의 HTTP Accept 헤더와 서버의 컨트롤러 반환 타입 정보를 조합해서 HttpMessageConverter가 선택됨.

 

 

 

 

 

 

 

 

 

 


🐣 출처: 인프런 김영한님 강의


이 글은 인프런의 김영한님 스프링 강의를 보고 작성한 글입니다.

강의를 들으면서 정리한 글이므로 틀린 내용이나 오타가 있을 수 있습니다.

 

저작자표시 비영리 변경금지 (새창열림)
'Back-End/Spring' 카테고리의 다른 글
  • [스프링 입문] 스프링 빈과 의존관계(1)
  • [스프링 입문] 회원 관리(2)
  • [스프링 입문] 회원 관리(1)
  • [스프링 입문] 스프링 로드맵
뚜비
뚜비
1년차 백엔드&iOS 개발자의 감자 탈출 블로그 🥔🥔
  • 뚜비
    뚜비의 개발로그
    뚜비
  • 전체
    오늘
    어제
  • 글쓰기     관리
    • Devlog
      • Back-End
        • Java
        • Spring
        • JPA
        • HTTP
        • Security
        • Back-End
        • Front-End
      • 알고리즘
      • iOS
        • Swift
      • Database
      • Tips
        • Git & GitHub
        • A to Z
      • 프로젝트
      • 생각정리
  • 태그

    백준
    프로그래머스
    Spring Security
    spring
    알고리즘
    Database
    생성자
    Java
    객체
    자바스크립트
    Swift
    성능최적화
    MVC
    javascript
    html
    JPA
    다형성
    자바
    sql
    HTTP
    최주호
    Security
    변수
    게시판만들기
    김영한
    스프링
    DB
    데이터베이스
    의존성주입
    jsp
  • hELLO· Designed By정상우.v4.10.0
뚜비
[스프링 입문] 스프링 웹 개발 기초
상단으로

티스토리툴바