MVC(Model-View-Controller) 패턴에서 컨트롤러는 애플리케이션 구조를 구성하는 데 도움이 되는 세 가지 핵심 구성 요소 중 하나입니다.
컨트롤러의 주요 책임은 사용자의 입력을 처리하고 처리하며 그에 따라 모델 또는 보기를 업데이트하는 것입니다.
컨트롤러는 모델과 뷰 사이의 중개자 역할을 합니다.
뷰에서 사용자 작업 또는 입력을 수신하고 모델이 이해할 수 있는 작업으로 변환합니다. 모델이 업데이트되면 컨트롤러는 뷰에 변경 사항을 업데이트하고 사용자에게 표시하도록 알립니다. - Chat GPT
클라이언트(모바일, 웹 브라우저 등)가 웹 서버에 데이터나 .html파일과 같은 파일을 요청할 때, 웹 서버의 컨트롤러는 DB에 SELECT, INSERT, UPDATE, DELETE로 요청하고, DB로부터 응답을 받아 클라이언트에게 응답해준다
컨트롤러는 다음과 같은 4가지의 요청방식을 가진다
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)
// 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 요청됨";
}
@GetMapping
, @PutMapping
과 같이 각 메소드명에 Mapping을 붙이고 맨 앞에 애노테이션(@)을 붙여주면 된다.@Controller
일 때는 return에 적은 값은 resources 폴더 내부의 파일명이 된다.@RestController
일 때는 return에 적은 값은 Data가 된다.http://localhost:8080/get
http://localhost:8080/post
http://localhost:8080/put
http://localhost:8080/delete
@PostMapping("/post")
@PutMapping("/put")
@DeleteMapping("/delete")
과 같은 요청은 아래와 같은 오류가 뜬다.PostMan을 이용한 POST, PUT, DELETE 요청은 다음에 다뤄보도록 하겠다