코드스테이츠 수강 10주차 4일차에는 Spring MVC, Controller 에 대해 배웟다.
1. Spring MVC
스프링에는 웹 계층을 담당하는 여러가지 모듈이 있다.
그중, 서블릿(Servlet)API기반으로 클라이언트 요청을 처리하는 spring-webmvc가 바로 Spring MVC 이다.
뭔소리냐고? 그냥 Spring MCV라는애가 있는데 API쓸때 편하게 쓸 수 있게 해준다 이거다.
** 서블릿이 뭐냐 할 수 있다. 서블릿은 Java로 작성하는 클래스 파일인데, 클라이언트 요청을 처리하는 규약이 있다.
스프링에서는 톰캣을 쓰는데, 톰캣이 서블릿을 쓴다
-> 스프링 내부에 톰캣이 동작하는데, 톰캣이 서블릿을 사용한다 이말이다.
Model
Spring MVC 의 M이 모델이다.
웹 어플리캐이션이 동작하면서 요청사항을 처리하면 결과물이 생기는데, 이 결과물을 모델 이라고 한다.
->Spring MVC에서 동작할 때 어디 로직이나 뭘 통해서 나온거를 모델이라고 보면 된다.
View
Spring MVC 의 V이 View이다.
View는 앞의 모델 데이터를 이용해서 웹브라우저 등의 클라이언트 애플리케이션 화면에 보여지는 리소스 역할을 한다
훈히, 웹페이지에서 볼 수 있는것을이라고 생각하면 쉽다.
HTML페이지 출력, PDF, 엑셀, XML, JSON형식의 포맷 등이 있다.
Controller
Controoler는 클라이언트 측의 요청을 직접적으로 전달받는 엔드포인트 (그냥 처리하는 쪽, 접수하는곳이라고 생각하자)로, 모델과 뷰의 중간에서 상호작용을 한다.
-> 모델로 들어온 데이터를 처리해서 뷰로 전달해서 우리 화면에 보여준다.
작동예시
위의 그림을 보면 얼기설기 뭔가 많아서 헷갈릴 수 있는데, 그냥 화살표를 순서대로 한번 따라가면서 읽어보자.
핵심은 "데이터를 전달하고, 처리하고, 내ㅔ놓는 것의 반복" 이라는 것이다.
정 어려워 보이면 자판기를 생각하면 쉽다.
우리가 자판기슬 사용할 때, 유리 너머로 상품을 보고(모델을 보고), 오른쪽 스크린에해당 번호가 쓰여 있는 곳으로 번호를 입력하면 자판기 내부 로직(컨트롤러)에 의해서 해당되는 상품(뷰)이 나온다.
컨트롤러 구성요소
위에서 뷰, 모델은 객체에 가까우니까, 결과물이니까 그냥 그런가보다 할 수 있는데 핵심은 컨트롤러다.
들어온 데이터를 처리해줘야 하는 역할이기 때문에 실질적인 로직을 짜는 부분이 된다.
이 때문에 컨트롤러에 엔트리 클래스, 핸들러 메서드, 응답데이터를 만들어 줘야 한다.
코드 예시
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Entrypoint_CLASS {
public static void main(String[] args) {
SpringApplication.run(Section3Week1Application.class, args);
}
}
//스프링 프로젝트 만들면 자동으로 생기는 애, MAIN에 있는 애가 바로 얘다
엔트리 클래스의 예시 , 스프링 프로젝트를 만들면 테스트 부분과 MAIN 부분에 자동으로 이런 클래스가 하나씩 생기는데, MAIN 부분에 있는 클래스가 엔트리 클래스다.(작업에 진입하는 부분이라고 생각하자.)
(처음 시작할때부터 만들어져 있음)
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping(value = "/v1/members", produces = {MediaType.APPLICATION_JSON_VALUE})
public class MemberController {
// ---------------회원 정보 등록하는 핸들러 메서드 -----------
@PostMapping
public String postMember(@RequestParam("email") String email,
@RequestParam("name") String name,
@RequestParam("phone") String phone) {
System.out.println("# email: " + email);
System.out.println("# name: " + name);
System.out.println("# phone: " + phone);
//제이슨 형식으로 반환하는 세팅 (응답 데이터)
String response =
"{\"" +
"email\":\""+email+"\"," +
"\"name\":\""+name+"\",\"" +
"phone\":\"" + phone+
"\"}";
return response;
}
// -------------------회원 정보를 조회하는 핸들러 메서드 -------
@GetMapping("/{member-id}")
public String getMember(@PathVariable("member-id") long memberId) {
System.out.println("# memberId: " + memberId);
// not implementation
return null;
}
// ------------------모든 회원 정보를 조회하는 핸들러 메서드 ------
@GetMapping
public String getMembers() {
System.out.println("# get Members");
// not implementation
return null;
}
}
위의 코드는 회원 정보를 등록하고, 조회가 가능한 컨트롤러 코드 예시이다.
(get으로 시작하는 메서드는 사실 기능이 없지만, 조회하는 기능이라고 생각하자)
컨트롤러는 에너테이션을 활용하여 사용하고자 하는 설정을 지정한다.
- @RequestMapping : 컨트롤러 핸들러 메서드를 매핑하는데 사용됨, 뒤의 부분에 정의된 URI에 매치되는 요청을 처리할 수 있게 해줌
- @GetMapping : HTTP Get Method에 해당하는 단축표현으로 서버의 리소스 조회 시 사용
- @PostMapping : 서버에 리소스 등록 시 사용
- @PutMapping : 서버의 리소스 수정시 사용, 리소스를 통채로 수정할때 사용한다.
- @PatchMapping : 서버의 리소스 수정시 사용, 리소스를 일부 수정할때 사용한다.
- @DeleteMapping : 서버 리소스를 삭제할때 사용
쉽게 말하면, 위의 에너테이션에 따라 그 뒤에 따라오는 메서드의 사용 용도를 지정 할 수 있다는 것이다.
POSTMAN에서 PUT으로 리소스를 수정하게 하고 싶으면 @PutMapping 에너테이션을 붙여놓은 메서드를 만들어야 한다는 것이다. ->핸들러 메서드를 만드는 것이다.
또한, Spring MVC는 API에서 작동하는것을 목표로 하기 때문에 제이슨 형식으로 데이터를 응답으로 내놓아야 한다.
회원 정보를 등록하는 메서드를 보면, 제이슨 형식에 맞추어 일일히 데이터를 써준 것을 볼 수 있다.
(원래 이렇게 안한다, 그냥 map을 사용하든지 하거나 라이브러리를 쓰면 되는데 이해를 돕기위해 그대로 둿다.)
이렇게 보면 좀 복잡하고, 이해가 안 갈수 있다.
원래 더 줄줄줄 쓰려고 했는데, 쉽게 핵심만 전달하면
Spring MVC는 API를 다루는데, 모델, 뷰, 컨트롤러로 구성된다.
모델은 사용되는 데이터(입력, 원래 있던 데이터 등), 뷰는 우리가 눈으로 볼 수 있게 해주는 데이터(HTNL, PDF 등), 컨트롤러는 모델 데이터를 받아서 이캐캐 해서 다른곳에 다시 모델 형태로 전달해주거나, 뷰 데이터로 응답하는 것이다.
그렇기 때문에, 컨트롤러에 기능이 들어가는데, 스프링에서는 에너테이션으로 이 기능이 있는 메서드를 "알려준다."
핼당 기능을 수행하는 메서드에 에너테이션으로 "이 메서드는 ~~ 하는 기능이야." 라고 말해줌으로, 실제 작동할 때 우리가 지정한 에너테이션에 따라 작동 시킬 수 있다.
(EX: 모두 삭제, 혹은 null로 바꾸는 메서드를 만들고, @DeleteMapping에너테이션을 붙여놓으면, 삭제기능이 있는 "핸들러 메서드"가 된다! )
이에따라 http요청에 맞는 동작을 하는 핸들러 메서드로 이루어진 컨트롤러를 만들 수 있다!!
원래 코드실습이 주를 이루는 수업이었는데,,, 일일히 설명하고, 코드를 리뷰하는 것보다는 먼저 이렇게 핵심내용만 전달하는게 나아보인다..
처음에는 뭣도 모르고 그냥 코드를 읽으면서 따라했는데, 다시 보고 해보니 핵심은 알겠다.
Spring MVC를 구현하기 위해, 에너테이션을 이용해서 핸들러 메서드를 만들어 컨트롤러를 구현하자!
'백엔드 > 코드스테이츠 수강' 카테고리의 다른 글
코드스테이츠 수강_11주차_1~2일차_Spring MVC 서비스 계층, 예외처리 (1) | 2022.10.25 |
---|---|
코드스테이츠 수강_10주차_5일차_Spring MVC(API계층_DTO) (0) | 2022.10.24 |
[회고]코드스테이츠 수강_10주차_3일차 부스트캠프 2달 경과 (2) | 2022.10.19 |
코드스테이츠 수강_9주차_3일차_Spring Framework의 핵심개념 (빈, 스프링 컨테이너, 싱글톤) (1) | 2022.10.13 |
코드스테이츠 수강_9주차_1~2일차_Spring FrameWork 기본 (0) | 2022.10.11 |