[Spring] 2_2. 스프링 웹 개발 기초

2025. 4. 19. 20:30·BE/SpringBoot
728x90

정적컨텐츠

https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/spring-boot-

웹 브라우저에서 localhost:8080/hello-static.html이라는 요청이 들어오면 스프링부트에서 우선
1. 스프링 컨테이너에 hello-static 관련한 컨트롤러가 있는지 확인한다.
2. 없을 경우 resource 폴더 안에 있는 static/hello-static.html라는 정적 컨텐츠를 웹 브라우저에 띄운다.

 


MVC와 템플릿 엔진

🏷️ MVC: Model, View, Controller

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

RequestParam은 쿼리 파라미터로 name을 받아오는 것을 의미한다.

localhost:8080/hello-mvc?name=spring 으로 받아오면

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

hello-template.html에 name이 넘어가서 hello empty가 hello spring으로 치환되어 화면에 출력된다.

웹 브라우저에서 localhost:8080/hello-mvc라는 요청이 들어오면 스프링부트에서 우선
1. 스프링 컨테이너에 hello-mvc 관련한 컨트롤러가 있는지 확인한다.
2. 컨트롤러 내부의 helloMvc를 통해 name:spring을 담은 model을 hello-template에 전달한다.
3. String name과 똑같은 html파일을 찾아서 타임리프 템플릿 엔진에 처리해달라고 넘기면
4. 타임리프 템플릿 엔진이 렌더링해서 변환을 한 HTML을 웹 브라우저에 반환한다.

API

@ResponseBody

스프링 프레임워크에서 비동기 통신, 즉 API 통신을 구현하기 위해 @RequestBody와 @ResponseBody 어노테이션을 사용한다.

  • 클라이언트 ➡️ 서버 요청 : @RequestBody
  • 서버 ➡️ 클라이언트 응답 : @ResponseBody

@ResponseBody 문자 반환

  • `@ResponseBody` 를 사용하면 뷰 리졸버(`viewResolver` )를 사용하지 않음
  • 대신에 HTTP의 BODY에 문자 내용을 직접 반환(HTML BODY TAG를 말하는 것이 아님)
@GetMapping("hello-string")
    @ResponseBody
    public String helloString(@RequestParam("name") String name){
        return "hello" + name;
    }

위와 같은 코드를 컨트롤러에 작성했을 때, http://localhost:8080/hello-string?name=메롱 을 연결하면,

return 해주는 문자가 그대로 화면에 나타난다.

근데 문자를 화면에 바로 보여주는 경우는 거~의 안씀

@ResponseBody 객체 반환

@Controller
public class HelloController {

@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;
        }
    }
}

@ResponseBody` 를 사용하고, 객체를 반환하면 객체가 JSON으로 변환된다! (요즘은 대부분 JSON으로 반환한다)

@ResponseBody 사용원리

  • @ResponseBody` 를 사용 HTTP의 BODY에 문자 내용을 직접 반환
  • `viewResolver` 대신에 `HttpMessageConverter` 가 동작
  • 기본 문자처리: `StringHttpMessageConverter`
  • 기본 객체처리: `MappingJackson2HttpMessageConverter`(JSON)
  • byte 처리 등등 기타 여러 HttpMessageConverter가 Spring에 기본으로 등록되어 있음

 

728x90

'BE > SpringBoot' 카테고리의 다른 글

[Spring] 4. 스프링 빈과 의존관계  (1) 2025.04.29
[Spring] 3_2. 회원 관리 예제 - 회원 레포지토리 테스트 케이스 작성 / 서비스 개발 / 서비스 테스트  (0) 2025.04.25
[Spring] 3_1. 회원 관리 예제 - 비즈니스 요구사항 정리 / 회원 도메인과 레포지토리 생성  (1) 2025.04.19
[Spring] 2_1. 프로젝트 환경설정  (0) 2025.04.18
[Spring] ResponseEntity란?  (0) 2022.11.30
'BE/SpringBoot' 카테고리의 다른 글
  • [Spring] 3_2. 회원 관리 예제 - 회원 레포지토리 테스트 케이스 작성 / 서비스 개발 / 서비스 테스트
  • [Spring] 3_1. 회원 관리 예제 - 비즈니스 요구사항 정리 / 회원 도메인과 레포지토리 생성
  • [Spring] 2_1. 프로젝트 환경설정
  • [Spring] ResponseEntity란?
DROPDEW
DROPDEW
💻 Developer | 기록하지 않으면 존재하지 않는다
  • DROPDEW
    제 2장 1막
    DROPDEW
  • 전체
    오늘
    어제
    • Dev (446) N
      • App·Android (1)
      • AI (12) N
      • BE (50)
        • HTTP 웹 기본 지식 (8)
        • SpringBoot (23)
        • 스프링부트와 JPA 활용 (0)
        • JAVA (1)
        • PHP (11)
      • FE·Client (23)
        • HTML (1)
        • React (19)
        • Unity (1)
      • Data (28)
        • Bigdata (6)
        • Database (1)
        • Python (0)
        • 빅데이터분석기사 (13)
      • Infra (1)
      • Activity (7)
        • Intern (0)
        • SK AI Dream Camp (0)
        • 구름톤 유니브 4기 (1)
        • 리모트 인턴십 6기 (3)
        • 봉사활동 (0)
        • 부스트캠프 AI Tech 8기 (3)
      • CS (8)
      • 취준 (12)
        • 자격증 (4)
        • 인적성·NCS (6)
        • 코테·필기·면접 후기 (2)
      • 코테 (270)
        • Algorithm (222)
        • SQL (35)
        • 정리 (13)
      • 인사이트 (27)
        • 금융경제뉴스 (7)
        • 금융용어·지식 (2)
        • 북마크 (7)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    티스토리챌린지
    투포인터
    자료구조
    그리디알고리즘
    백준
    문자열
    다이나믹프로그래밍
    오블완
    구현
    정렬
    시뮬레이션
    이분탐색
    매개변수탐색
    수학
    브루트포스 알고리즘
    그래프이론
    누적합
    최단경로
    너비우선탐색
    그래프탐색
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
DROPDEW
[Spring] 2_2. 스프링 웹 개발 기초
상단으로

티스토리툴바