1. MVC 패턴이란?
Spring MVC (Model-View-Controller)는 웹 애플리케이션을 개발할 때 사용하는 구조적인 패턴 중 하나로, 애플리케이션의 각 부분을 구분하여 효율적으로 관리할 수 있게 해줍니다. 이를 쉽게 설명하자면:
- Model (모델): 애플리케이션의 데이터와 그 데이터를 처리하는 로직을 담고 있습니다. 데이터베이스에서 정보를 가져오거나 사용자가 입력한 데이터를 처리하는 역할을 합니다. 예를 들어, 사용자의 정보나 상품 목록 같은 것들이 모델에 해당합니다.
- View (뷰): 사용자가 볼 수 있는 화면을 담당합니다. 즉, HTML, CSS, JavaScript 등을 사용하여 데이터를 시각적으로 표현합니다. View는 Model에서 가져온 데이터를 사용자에게 보여주는 역할을 합니다.
- Controller (컨트롤러): 사용자의 요청을 받아서 Model과 View 사이를 연결하는 역할을 합니다. 사용자가 어떤 요청(예: 버튼 클릭이나 URL 요청)을 하면, 그 요청을 받아서 적절한 Model을 호출하고, 그 결과를 View로 전달하여 화면에 보여줍니다.
1) 예시
- 사용자가 웹사이트에서 로그인을 시도한다고 가정해봅시다.
- Controller: 사용자의 로그인 요청을 받습니다.
- Model: 사용자가 입력한 아이디와 비밀번호를 데이터베이스와 비교하는 로직을 수행합니다.
- View: 로그인 성공 여부에 따라 "로그인 성공" 혹은 "로그인 실패" 메시지를 화면에 보여줍니다.
만약 @RestController
가 없을 때는?
Spring은 기본적으로 HTML 파일을 찾습니다. Spring에서는 컨트롤러를 정의할 때, 두 가지 주요 어노테이션이 있습니다: @Controller
와 @RestController
. 이 두 어노테이션의 차이점에 따라 Spring이 어떤 응답을 반환할지 결정됩니다.
2. Controller
의 동작
@Controller
는 주로 웹 페이지(HTML)를 반환하기 위해 사용됩니다. 만약 HTML 파일을 반환해야 한다면@Controller
를 사용해야 합니다.- 이 경우, ViewResolver가 동작하여 템플릿 엔진(예: Thymeleaf, JSP)을 사용해 지정된 HTML 파일을 찾아서 클라이언트에게 렌더링된 HTML 페이지를 제공합니다.
1) 예시
@Controller
public class WebController {
@GetMapping("/welcome")
public String welcomePage() {
return "welcome"; // templates/welcome.html을 반환
}
}
위의 코드에서는 /welcome
경로로 요청이 들어오면, templates/welcome.html
파일을 찾아서 반환합니다. 여기서 "welcome"은 템플릿 파일 이름을 나타내며, 주로 src/main/resources/templates/
폴더에 HTML 파일이 위치하게 됩니다.
3. RestController
의 동작
@RestController
는 JSON, XML 등 데이터를 반환하기 위해 사용됩니다. HTML 페이지를 반환하지 않고, REST API 형태로 데이터만 클라이언트에게 응답하는 경우에 주로 사용됩니다.@RestController
=@Controller
+@ResponseBody
의 조합입니다.@ResponseBody
는 메서드의 반환 값을 HTTP 응답 본문으로 직렬화하여 데이터를 직접 반환하는 역할을 합니다.
1) 예시
@RestController
public class ApiController {
@GetMapping("/api/data")
public String getData() {
return "{\"message\": \"Hello, World!\"}";
}
}
위 코드에서는 /api/data
경로로 요청이 들어오면, JSON 형태의 데이터를 반환하게 됩니다. 이때 HTML을 찾지 않고 데이터만 응답합니다.
2) 정리
@Controller
: Spring은 HTML 파일을 찾고, 이를 클라이언트에게 반환하기 위해 사용됩니다. 주로 템플릿 엔진을 사용하여 동적인 웹 페이지를 렌더링하는 데 사용됩니다.@RestController
: Spring은 데이터(JSON, XML 등)를 반환하며, HTML 파일을 찾지 않습니다. REST API를 구현할 때 사용됩니다.
따라서, @RestController
가 없을 때 즉, @Controller
를 사용할 때는 Spring이 요청에 대한 응답으로 HTML 페이지를 렌더링하려고 시도합니다.
Spring에서의 RESTful은 REST (Representational State Transfer) 아키텍처 스타일을 따르는 웹 서비스를 만드는 방법을 의미합니다. REST는 클라이언트와 서버 간의 상호작용을 규정하는 규칙 또는 설계 원칙을 의미하며, 웹 애플리케이션에서 데이터를 전송하고 처리하는 방식으로 많이 사용됩니다.
Spring에서는 Spring MVC를 기반으로 RESTful 웹 서비스를 쉽게 구현할 수 있습니다. RESTful 서비스의 주요 특징은 URL을 통해 자원을 명시적으로 표현하고, HTTP 메서드를 사용하여 해당 자원에 대한 동작을 정의한다는 점입니다.
4. RESTful의 주요 개념
- 자원(Resource): 웹 애플리케이션에서 관리하는 데이터나 기능을 자원이라고 합니다. 예를 들어, 사용자의 정보, 상품 목록 등이 자원입니다. 자원은 고유한 URL을 통해 식별됩니다.
- 예:
http://example.com/users
(사용자 자원) - 예:
http://example.com/products
(상품 자원)
- 예:
- HTTP 메서드: 각 자원에 대해 어떤 작업을 할 것인지 HTTP 메서드를 사용해 나타냅니다.
- GET: 자원 조회 (데이터 가져오기)
- POST: 자원 생성 (새 데이터 추가)
- PUT: 자원 전체 수정 (데이터 갱신)
- PATCH: 자원의 일부 수정
- DELETE: 자원 삭제
- 상태가 없는 서버(Stateless): 클라이언트와 서버의 요청과 응답 사이에 상태를 저장하지 않습니다. 클라이언트가 요청할 때마다 필요한 모든 정보를 서버에 제공해야 합니다. 즉, 서버는 클라이언트의 이전 요청 정보를 기억하지 않습니다.
1) 예시
- GET 요청:
GET /users
→ 서버에서 모든 사용자 목록을 조회. - POST 요청:
POST /users
→ 새로운 사용자를 생성. - PUT 요청:
PUT /users/1
→ 사용자 ID 1에 대한 정보 전체 수정. - DELETE 요청:
DELETE /users/1
→ 사용자 ID 1 삭제.
2) Spring에서 RESTful 서비스 구현
Spring에서는 이러한 RESTful API를 쉽게 구현할 수 있도록 다양한 기능을 제공합니다. 가장 많이 사용하는 어노테이션은 @RestController와 @RequestMapping입니다.
@RestController
@RequestMapping("/users")
public class UserController {
@GetMapping
public List<User> getAllUsers() {
// 모든 사용자 목록을 반환
}
@PostMapping
public User createUser(@RequestBody User user) {
// 새로운 사용자 생성
}
@PutMapping("/{id}")
public User updateUser(@PathVariable Long id, @RequestBody User user) {
// 사용자 정보 수정
}
@DeleteMapping("/{id}")
public void deleteUser(@PathVariable Long id) {
// 사용자 삭제
}
}
'TIL > 스파르타 TIL' 카테고리의 다른 글
[내일배움캠프] 본캠프 TIL Spring 입문(3) (0) | 2024.09.28 |
---|---|
[내일배움캠프] 본캠프 TIL Spring 입문(2) (0) | 2024.09.28 |
[TIL] 스파르타코딩 2차 팀편성, 7일차 (0) | 2024.09.11 |
[TIL] 스파르타코딩 2차 팀편성, 6일차 (0) | 2024.09.09 |
[TIL] 스파르타코딩 2차 팀편성, 주말공부(1) (0) | 2024.09.08 |