[Spring][인프런 스프링 MVC] 스프링 MVC HTTP 요청, 응답 여러가지 방법

2023. 3. 5. 12:00·공부/Spring
728x90

본 포스팅은 김영한 강사님의 인프런 강의 "스프링 MVC 1편"을 정리한 포스팅으로 강의 자료에서 사용한 자료를 사용했음을 밝힙니다.

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard

 

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의

웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., -

www.inflearn.com

스프링 MVC를 사용하면 HTTP 요청, 응답에 관한 처리를 쉽게 할 수 있는데 이에 관한 여러가지 방법에 대해 정리해보려 한다.

 

이전에 서블릿의 요청, 응답 처리 방법에 대해 정리한 적이 있는데 이를 보면 도움임 되지 않을까 싶다.

https://growth-coder.tistory.com/105

 

[Spring][스프링 MVC 1편] 서블릿 기초 사용법

본 포스팅은 김영한 강사님의 인프런 강의 "스프링 MVC 1편"을 정리한 포스팅입니다. https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 |

growth-coder.tistory.com

 

요청 매핑

우선 클라이언트가 보내는 요청의 url 경로에 따라서 다른 로직을 실행하기 위해 요청을 매핑해야 한다.

 

요청을 매핑할 때는 @RequestMapping 어노테이션을 사용한다.

 

@Controller
@RequestMapping("/api/users")
public class ControllerPractice {
    @RequestMapping(method = RequestMethod.POST) //Post 요청 받음
    public String save() {
        ...
    }

    @RequestMapping(method = RequestMethod.GET) //Get 요청 받음
    public String get() {
        ...
    }
    
    @RequestMapping(method = RequestMethod.GET, consumes = MediaType.APPLICATION_JSON_VALUE)
    //메소드가 Get이고 HTTP 요청의 Content-Type 헤더가 application/json인 요청 받음
    public String get() {
        ...
    }
    @RequestMapping(method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE)
    //메소드가 GET이고 HTTP 요청의 HTTP 요청의 Accept 헤더가 "text/plain"인 요청 받음
    public String get() {
        ...
    }
    
    //consume은 들어오는 타입, produce는 나가는 타입


}

@RequestMapping 어노테이션을 클래스에 사용하면 해당 url로 들어오는 모든 요청은 해당 클래스에서 처리한다는 의미이다.

 

위 코드에서는 "api/users"로 시작하는 요청은 모두 ControllerPractice에서 처리한다.

 

@RequestMapping 어노테이션을 메소드에 사용하면 해당 url로 들어오는 요청은 해당 메소드에서 처리한다는 의미이다.

 

그리고 method 속성을 사용하여 메소드를 제한할 수 있다. 사용하지 않으면 GET, POST 등등 모든 메소드를 처리한다.

 

혹은 간단하게 이러한 속성 제한이 걸려있는 어노테이션인 @GetMapping, @PostMapping, @PutMapping 등등의 어노테이션을 사용할 수도 있다.

 

공통 url은 클래스 단위에서 설정하고
구체적 url 및 메소드는 클래스 내부의 메소드에 설정하는 것이 일반적이다.

요청 헤더

@RequestHeader : 요청 헤더

 

가져오고 싶은 헤더를 인자로 넣어주면 된다.

@RequestMapping("/header")
public String getHeader(@RequestHeader("host") String host) {
    ...
}

 

요청 파라미터

@PathVariable : url 파라미터

 

"/api/users/1", "/api/users/2" 이렇게 url 경로를 통해 값을 전달할 경우 다음과 같이 @PathVariable을 사용한다.

 

@Controller
@RequestMapping("/api/users")
public class ControllerPractice {
    @RequestMapping("/{id}")
    public String get(@PathVariable(name = "id") Long id) {
    //이처럼 파라미터 이름과 name이 동일하면 name 속성을 생략해도 된다.
        ...
    }

}

@RequestParam : 쿼리 스트링 조회

쿼리 파라미터나 Html form으로 들어온 파라미터를 조회할 수 있다.

 

@RequestMapping("/param")
public String getHeader(
        @RequestParam("name") String name,
        @RequestParam("age") Integer age
        // //이처럼 파라미터 이름과 name이 동일하면 name 속성을 생략해도 된다.
) {
    ...
}

 

"/param?name={name}&age={age}"

쿼리 스트링 형식을 조회할 수 있다.

 

required, defaultValue등의 속성을 사용할 수도 있고 모든 파라미터를 Map 형식으로 받을 수도 있다.

 

@ModelAttribute : 파라미터를  객체 형식으로

name과 age를 파라미터로 받을 때 아래와 객체를 같이 만들고

@Getter @Setter
public class Person {
 private String name;
 private int age;
}

@ModelAttribute를 사용하면 "/param?name={name}&age={age}" 이러한 형식의 파라미터를 사용할 수 있다.

@RequestMapping
public String model(
        @ModelAttribute Person person
){
    ...
}

 

@RequestParam과 @ModelAttribute는 어노테이션 자체를 생략할 수도 있다.

 

요청 메시지 바디

@RequestBody : 메시지 바디로 들어오는 요청 정보 조회

 

일반 String 및 객체를 가져올 수 있다.

 

@RequestMapping
public String body(
        @RequestBody Person person
){
	...
}
@RequestMapping
public String body(
        @RequestBody String string
){
	...
}
이는 메시지 바디와 관련된 어노테이션으로 생략하면 파라미터와 관련된 @RequestParam 및 @ModelAttribute로 받아들이기 때문에 생략하지 않는다.

 

HTTP 응답

 

@ResponseBody : 메시지 바디에 응답 데이터

 

메시지 바디에 응답 데이터를 넣기 위해선 @ResponseBody 어노테이션이 필요하다.

 

일반 String 및 객체 또한 응답 가능하다.

@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public String save() {
    ...
    return "ok";
}
@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public Member save() {
	Member member = new Member();
    ...
    return member;
}

 

@ResponseEntity : 메시지 바디 이외에도 상태 코드 설정 가능

@RequestMapping(method = RequestMethod.POST)
public ResponseEntity<Person> responseEntity() {
    Person person = new Person();
    ...
    return new ResponseEntity<>(person, HttpStatus.OK);
}
728x90

'공부 > Spring' 카테고리의 다른 글

[Spring][인프런 스프링 MVC] @ModelAttribute와 검증 (Validation)  (0) 2023.03.07
[Spring][인프런 MVC 1편] 로그(logger) 사용법  (0) 2023.03.06
[Spring][스프링 MVC 1편] 스프링 MVC 어댑터 패턴 (controller v5)  (0) 2023.03.04
[Spring][인프런 스프링 MVC] MVC 구를 직접 개선해가며 스프링 MVC 구조를 이해하기 (controller v1~v4)  (0) 2023.03.01
[Spring] 스프링 mysql 데이터베이스와 jpa 연동  (2) 2023.02.17
'공부/Spring' 카테고리의 다른 글
  • [Spring][인프런 스프링 MVC] @ModelAttribute와 검증 (Validation)
  • [Spring][인프런 MVC 1편] 로그(logger) 사용법
  • [Spring][스프링 MVC 1편] 스프링 MVC 어댑터 패턴 (controller v5)
  • [Spring][인프런 스프링 MVC] MVC 구를 직접 개선해가며 스프링 MVC 구조를 이해하기 (controller v1~v4)
웅대
웅대
알고리즘과 백엔드를 중심으로 열심히 공부 중입니다! 같이 소통하며 공부해요!
    250x250
  • 웅대
    웅대 개발 블로그
    웅대
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 백준 알고리즘
        • dp
        • 문자열
        • 정렬
        • 스택
        • 브루트 포스
        • 이진 탐색
        • 정리
        • 우선순위 큐
        • 자료구조
        • 그래프
        • 기타
        • 그리디
      • 컴퓨터 언어
        • Kotlin
        • Python
        • C#
      • 공부
        • Database
        • Android Studio
        • Algorithm
        • 컴퓨터 구조론
        • Spring
        • lombok
        • AWS
        • Network
        • OS
        • Git & GitHub
        • AI
        • Computer Vision
        • 보안
        • Nginx
        • 프론트
        • express
        • GCP
        • grokking concurrency
        • DevOps
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    code tree
    스택
    ChatPromptTemplate
    파이썬
    RNN
    codetree
    openvidu 배포
    nn.RNN
    bfs
    AWS Lambda
    embedding
    푸쉬 알람
    스프링 OAuth2
    ci/cd
    Vector Store
    Merge
    influxDB CLI
    parametric search
    다익스트라
    binary search
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
웅대
[Spring][인프런 스프링 MVC] 스프링 MVC HTTP 요청, 응답 여러가지 방법
상단으로

티스토리툴바