일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- spring
- 백엔드
- 게임개발
- MongoDB
- OAuth2.0
- jwt
- 유니티
- 스프링부트
- Python
- bcrypt
- AWS
- express
- node.js
- react
- springboot
- 게임
- 백준
- oAuth
- 스프링
- c#
- IntelliJ
- 깃
- netlify
- 코딩
- frontend
- JSON
- 프로그래밍
- RiotAPI
- 파이썬
- unity
- Today
- Total
Unwound Developer
Spring - mvc패턴과 Controller, Mapping 본문
스프링을 처음 연습해보면서 클라이언트와 통신부터 하게되었습니다.
처음 통신을 하면서 생긴 궁금증과 알게된 점 등을 기술하려고 합니다.
우선, 클라이언트에선 저번과 마찬가지로 Axios를 통해서 Get 요청을 보냅니다.
/api 라는 api를 통해 서버에게 Get 요청을 보냈습니다.
서버에서도 /api라는 get요청을 수신하도록 했어요.
벌써 궁금한점도 많고 할 말도 많은데,
우선 서버 구조에 대해서 얘기해 보겠습니다.
메인함수가 있고, 컨트롤러가 있는 점을 미루어보아
Node.js에서 서버를 구축할 때와 흡사한 부분이 있어보여요.
아마도 이번 스프링에서 사용해야할 패턴을 MVC패턴이라고 합니다.
MDN 공식문서에 따르면, MVC는 Model, View, Controller로 이루어진
소프트웨어 디자인 패턴이라고 한다고해요.
- Model : Data와 Business Logic을 관리합니다.
- View : Layout과 화면을 처리합니다.
- Controller : 클라이언트에서 온 명령을 모델, 뷰 부분으로 Routing합니다.
정확하진 않지만, 사실 저번 프로젝트의 서버 구조도
일종의 MVC패턴이었던 것 같아요.
그런데, 전 View가 뭘 의미하는건지 찾아봐도 잘 모르겠습니다.
서버는 클라이언트에게 오직 데이터만을 반환하고, 사용자 인터페이스 등은 클라이언트 측에서 관리하는것이 가장 좋은게 아니었는지..?
저번 프로젝트에서 어떤 부분이 Model이고, Controller인지는 대충 알겠는데, 어떤 부분이 View인지, 아예 없는 것인지는 모르겠습니다.
View에 대해선 더 공부해봐야겠습니다.
어쨌든, 데이터베이스의 데이터와 상호작용하는 역할이 Model인 것 같습니다.
Controller는 클라이언트의 요청을 처리하고 어떤 요청인지 판단해 Model 혹은 View로 보내주는 등의 역할을 하는 것 같습니다.
@RestController
public class HelloWorldController {
@GetMapping("/api")
public String hello(){
System.out.println("서버 응답.");
return "hello,world";
}
}
그리고, 아까 올렸던 Controlller 부분입니다.
스프링에서 Controller는 Controller임을 따로 명시해야 하는 것 같아요.
클래스 선언 위에 @Controller 혹은 @RestController를 적으면, 해당 클래스는 Controller로써 기능하게 됩니다.
여기서, @Controller와 @RestController의 차이점에 대해서 찾아봤습니다.
기존의 @Controller는 클라이언트로 JSON을 return 해주기 위해서
@ResponseBody라는 어노테이션을 붙였어야 합니다.
(어노테이션은 자바 소스 코드에 추가하여 사용할 수 있는 메타데이터의 일종이라고 합니다. 클래스와 메서드에 추가하여 다양한 기능을 부여하는 역할을 합니다)
@Controller
public class HelloWorldController {
@ResponseBody
@GetMapping("/api")
public String hello(){
System.out.println("서버 응답.");
return "hello,world";
}
}
@Controller를 사용한다면, 위와 같이 @ResponseBody를 붙여야
"hello,world!"라는 값을 Body에 담은 JSON 데이터를 클라이언트에 전달합니다.
그런데 @RequestController라는 어노테이션이 등장해버린거에요.
@Controller역할을 하면서, @ResponseBody를 리턴값에 자동으로 붙여,
따로 명시할 필요가 없어진거죠.
Mapping은 Node.js에서 app.use의 역할을 합니다.
뒤에 주어진 url을 Listening 하고있는것 같아요.
@GetMapping("/api")
이라고 하면, /api라는 get요청을 기다리고 있는거죠.
그런데, Mapping도 마찬가지로 옛날보다 더 간단해진거였습니다.
@RequestMapping(value = "/mainBanner", method = {RequestMethod.POST} )
기존에는 @RequestMapping이라는 어노테이션을 사용해, 위와 같이 사용했습니다.
어떤 CRUD 요청인지는 파라메터로 'method =' 뒤에 명시했습니다.
그런데 이제는 @PostMapping, @GetMapping과 같이
어떤 요청을 기다리고있는지 어노테이션 자체가 분리가 되었습니다.
이렇게 매핑과 컨트롤러에 대해 가볍게 공부해 나온 컨트롤러의 모습이
@RestController
public class HelloWorldController {
@GetMapping("/api")
public String hello(){
System.out.println("서버 응답.");
return "hello,world";
}
}
위처럼 되었습니다.
기본적인 틀은 Node.js와 크게 다른 것은 없어보입니다.
'Web > Spring' 카테고리의 다른 글
스프링 "empty": false 오류 (0) | 2022.12.24 |
---|---|
스프링 mysql 연결과 @RequestBody로 JSON 받기/넘겨주기 (0) | 2022.12.20 |
별글 프로젝트 - WBS, ERD 설계와 Restful API (0) | 2022.12.12 |
스프링 부트를 사용하는 프로젝트 - 별글 시작 (0) | 2022.12.08 |
자바 스프링, IntelliJ vs Eclipse (0) | 2022.11.27 |