[Spring] 스프링 입문 (2) - 스프링 웹개발 기초

2022. 2. 26. 19:33·Spring

스프링으로 웹 개발을 하는 방법은 크게 세가지가 있다.

  1. 정적 컨텐츠 : welcome page처럼 파일을 그대로 웹 브라우저에 전달해주는 방법
  2. MVC와 템플릿 엔진 : 서버에서 파일을 동적으로 바꿔서 전달해주는 방법 (가장 많이 사용)
  3. API : json이라는 데이터 포맷으로 클라이언트에 전달할 때, 서버끼리 통신할 때

 

정적 컨텐츠

src>resources>static에 html 파일을 작성해서 넣어주면 그대로 반환해줌 (프로그래밍은 불가)

 

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>

 

웹 페이지 출력

 

정적 컨텐츠 출력 과정

인프런 김영한님 스프링 입문 강의 자료

localhost:8080/hello-static.html 요청을 내장 톰캣 서버에서 받고, Spring은 먼저 Controller에 hello-static.html이 있는지 찾아본다. (Controller가 우선순위를 가짐) 파일이 존재하지 않으면 다음으로 resources에서 파일을 찾는다.

 

MVC와 템플릿 엔진

  • MVC : Model, View, Controller
  • 뷰에서는 화면과 관련된 일만 처리하고, 컨트롤러에서는 비즈니스 로직과 서버와 관련된 일만 처리하도록 나누어져 있다.

thymeleaf

  • thymeleaf 장점 : 서버없이 파일을 열어서도 볼수있다.
  • ex) C:\Users\suea7\hello-spring\hello-spring\src\main\resources\templates\hello-template.html
  • 파일을 열어서 보면 <p>태그 사이의 내용이 출력된다.
  • 서버를 돌면 내용은 치환된다.

 

HelloController에 매개변수를 받아 모델에게 넘겨주는 메서드 추가
@GetMapping("hello-mvc")
    public String helloMvc(@RequestParam("name") String name, Model model ) {
        model.addAttribute("name",name);
        return "hello-template";
    }

 

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

 

 

처음 실행하게 되면 에러가 난다. 로그를 보면 name의 parameter가 없다는 메세지가 뜬다. @RequestParam에서 required는 default로 true이다. 즉 무조건 parameter(name)를 넣어줘야 한다는 것이다. name의 값으로 "spring"를 넘겨주면 제대로 작동한다.

 

인프런 김영한님 스프링 입문 강의 자료

웹 브라우저가 localhost:8080/hello-mvc를 요청하면 내장 톰캣 서버를 거쳐 Spring은 컨트롤러에서 hello-mvc를 찾고, "hello-template"을 반환하는데 이때 생성된 모델의 key값(name)에 대한 value가 spring으로 들어가면서 viewResolver에서 hello-template파일을 찾아 name의 값을 spring으로 변환하여 출력한다.

 

API

HelloController에 @ResponseBody를 사용하여 문자열을 반환하는 메서드 추가
@GetMapping("hello-string")
@ResponseBody   // http의 body에 직접 넣어주겠다
public String helloString(@RequestParam("name") String name) {
    return "hello " + name;
}

@ResponseBody를 사용하면 viewResolver를 사용하지 않고 HTTP의 body에 문자 내용을 직접 반환한다. 웹 페이지의 소스 코드를 보면 출력된 결과가 그대로 출력된다.

 

HelloController에서 @ResponseBody를 사용하여 객체를 반환하는 메서드 추가
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
    Hello hello = new Hello();
    hello.setName(name);
    return hello;   // json 형식으로 반환
}

static class Hello {
    private String name;

    public String getName() {
        return name;
    }

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

@ResponseBody를 사용하고 객체를 반환하면 객체가 JSON으로 변환된다. (최근 프로젝트는 XML보다 JSON을 많이 사용)

 

@ResponseBody 사용 원리

인프런 김영한님 스프링 입문 강의 자료

클라이언트로부터 요청이 들어오면 내장 톰캣 서버를 거쳐 컨트롤러의 메서드가 실행되고 이때 @ResponseBody가 사용된 메서드가 실행되면 HTTP의 body에 문자 내용을 직접 반환한다. 클라이언트에게 응답을 할 때 viewResolver가 아닌 HttpMessageConverter가 동작한다. 넘어온 반환값이 단순 문자일 경우 SpringConverter가 동작하고 객체일 경우 JsonConverter를 거쳐 json 형식의 데이터를 생성해서 클라이언트에게 넘겨준다.

 


강의 링크

 

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

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com

 

저작자표시 비영리 변경금지 (새창열림)

'Spring' 카테고리의 다른 글

[Spring] 스프링 입문 (4) - 스프링 빈과 의존 관계  (0) 2022.02.27
[Spring] 스프링 입문 (3) - 회원 관리 예제 (백엔드 개발)  (0) 2022.02.27
[Spring] 스프링 입문 (1) - 프로젝트 환경설정  (0) 2022.02.26
'Spring' 카테고리의 다른 글
  • [Spring] 스프링 입문 (5) - 회원 관리 예제 (웹 MVC 개발)
  • [Spring] 스프링 입문 (4) - 스프링 빈과 의존 관계
  • [Spring] 스프링 입문 (3) - 회원 관리 예제 (백엔드 개발)
  • [Spring] 스프링 입문 (1) - 프로젝트 환경설정
Sue
Sue
개발 공부 로그
  • Sue
    Sue's devlog
    Sue
  • 전체
    오늘
    어제
    • 분류 전체보기 (122)
      • Algorithm (2)
      • WEB (8)
      • Java & Kotlin (83)
      • Spring (26)
      • Database (1)
      • Infra (0)
      • Git (1)
      • devlog (1)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Sue
[Spring] 스프링 입문 (2) - 스프링 웹개발 기초
상단으로

티스토리툴바