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

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
      • 프로젝트
      • 생각정리
  • 태그

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

티스토리툴바