[Spring Boot] Controller와 4가지의 Http 요청방법

strongmhk·2023년 7월 8일
0

Spring Boot

목록 보기
2/3
post-thumbnail

📌스프링부트의 특징

  • 프레임워크이다
  • 프레임워크는 사용자가 불필요한 작업을 하지 않도록 일련의 형식을 만들어 둔 틀이다
  • 스프링부트는 servlet이라는 기술로 만들어졌다
  • servlet은 java로 web을 할 수 있는 기술이다



📌Controller란?

MVC(Model-View-Controller) 패턴에서 컨트롤러는 애플리케이션 구조를 구성하는 데 도움이 되는 세 가지 핵심 구성 요소 중 하나입니다.
컨트롤러의 주요 책임은 사용자의 입력을 처리하고 처리하며 그에 따라 모델 또는 보기를 업데이트하는 것입니다.
컨트롤러는 모델과 뷰 사이의 중개자 역할을 합니다.
뷰에서 사용자 작업 또는 입력을 수신하고 모델이 이해할 수 있는 작업으로 변환합니다. 모델이 업데이트되면 컨트롤러는 뷰에 변경 사항을 업데이트하고 사용자에게 표시하도록 알립니다. - Chat GPT

  • 한마디로 Controller는 클라이언트의 요청을 처리한 후 지정된 뷰에 모델 객체를 넘겨주는 역할을 한다.
  • 쉽게 설명하자면, 컨트롤러는 클라이언트의 http 요청을 처리하는데 이 요청의 분배를 하나의 컨트롤러에 몰빵하면 그 컨트롤러는 과부하에 걸릴 것이며 로직이 매우 복잡해질 것이다.
  • 따라서 회원가입과 관련된 요청은 회원가입 컨트롤러에, 프로필과 관련된 요청은 프로필 컨트롤러에 분배해주어야한다.
  • 이 분배는 Dispatcher가 해주고, 클라이언트의 요청이 들어오면 Dispatcher가 요청을 먼저받고 각 역할에 따라 컨트롤러에게 분배한다.
  • 스프링부트에는 Controller와 Dispatcher가 이미 만들어져 있기 때문에 사용자는 틀에 맞춰 사용하면 된다



📌http 4가지 요청방식

클라이언트(모바일, 웹 브라우저 등)가 웹 서버에 데이터나 .html파일과 같은 파일을 요청할 때, 웹 서버의 컨트롤러는 DB에 SELECT, INSERT, UPDATE, DELETE로 요청하고, DB로부터 응답을 받아 클라이언트에게 응답해준다


컨트롤러는 다음과 같은 4가지의 요청방식을 가진다

  • GET(SELECT)
  • POST(INSERT)
  • PUT(UPDATE)
  • DELETE(DELETE)

GET요청은 http header에 데이터가 담겨서 전송되고 DELETE는 삭제이기 때문에 두 방식의 요청은 Body data가 필요없지만, POST와 PUT은 내용 삽입, 수정이기 때문에 내용이 http body에 담길 필요가 있고, body data가 필요하다




💻실습

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
			<optional>true</optional>
		</dependency>

pom.xml에 spring-boot-web과 spring-boot-devtools 의존성을 추가해준다
spring-boot-web은 스프링부트로 웹 서비스를 하기위해 필요하고, spring-boot-devtools은 프로젝트를 실행시키고, 코드를 수정하면 재실행하지 않아도 즉각적으로 반영될 수 있도록 하는 라이브러리이다.(참고로 이클립스는 적용이 되나, 인텔리제이는 적용이 되지 않는다)




controllerdemo 패키지 안에 web 패키지를 생성해주고 그 안에 HttpController.java 파일을 생성한다




package com.cos.controllerdemo.web;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

//@Controller // file을 응답하는 컨트롤러 (클라이언트가 브라우저면 .html 파일을)
@RestController // data를 응답하는 컨트롤러 (클라이언트가 휴대폰이면 data)
public class HttpController {

    // http://localhost:8080/get
    @GetMapping("/get")
    public String get(){
        return "<h1>get 요청됨</h1>";
    }

    // http://localhost:8080/post
    @PostMapping("/post")
    public String post(){
        return "post 요청됨";
    }

    // http://localhost:8080/put
    @PutMapping("/put")
    public String put(){
        return "put 요청됨";
    }


    // http://localhost:8080/delete
    @DeleteMapping("/delete")
    public String delete(){
        return "delete 요청됨";
    }


}

HttpController.java




✅컨트롤러의 두 가지 종류

@Controller // file을 응답하는 컨트롤러 (클라이언트가 브라우저면 .html 파일을)
@RestController // data를 응답하는 컨트롤러 (클라이언트가 휴대폰이면 data)
  • 두 가지 종류의 컨트롤러가 있는데 Controller는 .html과 같은 파일을 응답해주는 컨트롤러이며 클라이언트가 웹 브라우저일 때 사용한다.
  • RestController는 데이터를 응답해주는 컨트롤러이며 클라이언트가 모바일일 때 사용한다.
  • 두 가지 컨트롤러 어노테이션은 중복되지 않기 때문에 하나만 설정해주어야 한다.



✅http 요청 응답하기

// http://localhost:8080/get
    @GetMapping("/get")
    public String get(){
        return "<h1>get 요청됨</h1>";
    }

    // http://localhost:8080/post
    @PostMapping("/post")
    public String post(){
        return "post 요청됨";
    }

    // http://localhost:8080/put
    @PutMapping("/put")
    public String put(){
        return "put 요청됨";
    }


    // http://localhost:8080/delete
    @DeleteMapping("/delete")
    public String delete(){
        return "delete 요청됨";
    }
  • GET, POST, PUT, DELETE 요청은 @GetMapping, @PutMapping과 같이 각 메소드명에 Mapping을 붙이고 맨 앞에 애노테이션(@)을 붙여주면 된다.
  • 그리고 해당 요청이 실행되게 할 경로(endpoint)를 지정해준다.
  • @Controller일 때는 return에 적은 값은 resources 폴더 내부의 파일명이 된다.
  • @RestController일 때는 return에 적은 값은 Data가 된다.
  • 각 요청들은 실질적으로 각각 다음과 같은 주소를 가지게 된다.
http://localhost:8080/get
http://localhost:8080/post
http://localhost:8080/put
http://localhost:8080/delete



  • GET 요청이 잘 실행된다.
  • 하지만 @PostMapping("/post") @PutMapping("/put") @DeleteMapping("/delete")과 같은 요청은 아래와 같은 오류가 뜬다.
  • 그 이유는 브라우저에서는 GET요청밖에 못하기 때문이다.
  • 그래서 PostMan이라는 프로그램을 설치해 API요청을 보내야한다.(PostMan 설치 링크)




📌마무리하며

PostMan을 이용한 POST, PUT, DELETE 요청은 다음에 다뤄보도록 하겠다

profile
저 커서 개발자가 될래요!

0개의 댓글