일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
- 린크드 리스트
- nat(network address translation)의 역할과 사용 이유
- rdbms와 nosql의 차이점
- 트리 그래프 차이점
- nat의 장단점
- orm(object-relational mapping)의 장단점
- 샤딩(sharding)과 파티셔닝(partitioning)의 개념
- spring rest api 설정
- REST API
- Spring REST API
- 파티셔닝의 종류
- nat의 작동 방식
- 로드 밸런서의 종류
- 트랜잭션의 acid 특성
- acid 특성
- join의 종류
- 인덱스의 장단점
- 데이터 바인딩
- 데이터베이스 락(lock)의 종류와 동작 방식
- 트리와 그래프
- 트리 그래프 차이
- nat의 유형
- 인덱스의 역할
- 정규화와 비정규화의 개념 및 장단점
- rest와 soap의 차이점
- 함수형 객체지향형 차이점
- 인덱스의 역할과 사용 이유
- Spring Boot
- 객체지향 프로그래밍
- Spring
- Today
- Total
♠개발자의 작은 서재♠
Spring MVC의 구조와 동작 원리 본문
1. Spring MVC의 기본 개념
Spring MVC는 Model-View-Controller (MVC) 패턴을 따르는 웹 프레임워크입니다. 클라이언트 요청을 중앙에서 받아 컨트롤러로 전달하는 DispatcherServlet이 핵심 역할을 합니다.
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
FAQ
- Q: DispatcherServlet의 역할은 무엇인가요?
- A: 클라이언트로부터 들어오는 모든 HTTP 요청을 중앙에서 처리하고, 적절한 컨트롤러에 전달하는 역할을 합니다. 컨트롤러가 요청을 처리한 후 다시 응답을 작성하는 과정도 담당합니다.
- Q: DispatcherServlet은 언제 초기화되나요?
- A: 애플리케이션이 구동될 때, DispatcherServlet은 서블릿 컨테이너에 의해 초기화되며 모든 요청을 처리할 준비를 갖춥니다. 기본적으로
web.xml
또는 Spring Boot의 자동 구성에 의해 설정됩니다.
- A: 애플리케이션이 구동될 때, DispatcherServlet은 서블릿 컨테이너에 의해 초기화되며 모든 요청을 처리할 준비를 갖춥니다. 기본적으로
- Q: Spring MVC에서 MVC 패턴은 무엇인가요?
- A: MVC 패턴은 Model(데이터), View(사용자 인터페이스), Controller(비즈니스 로직)를 분리하여 개발하는 아키텍처입니다. Model은 데이터를 처리하고, View는 데이터를 표시하며, Controller는 사용자 입력을 처리하여 적절한 Model과 View를 선택합니다.
2. Model (모델)
Model은 데이터 처리 및 비즈니스 로직을 담당하며, 컨트롤러와 뷰 사이에서 데이터를 전달합니다. DTO(Data Transfer Object)는 데이터 전송을 위해 사용하는 객체입니다. 또한, Service Layer는 비즈니스 로직을 처리하고, DAO는 데이터베이스 상호작용을 담당합니다.
public class UserDTO {
private String name;
private String email;
// getter와 setter 메서드
}
FAQ
- Q: Service Layer와 DAO의 차이점은 무엇인가요?
- A: Service Layer는 비즈니스 로직을 처리하는 계층입니다. 데이터를 처리하고, 여러 DAO 호출을 관리하며 비즈니스 규칙을 적용합니다. DAO(Data Access Object)는 데이터베이스와의 상호작용을 관리하는 계층으로, CRUD(Create, Read, Update, Delete) 작업을 처리합니다. DAO는 데이터베이스와 직접적으로 연결되며, Service Layer는 DAO와 협력하여 데이터를 처리합니다.
- Q: DTO는 언제 사용하나요?
- A: DTO는 데이터 전송을 목적으로 사용되는 객체입니다. 클라이언트와 서버 간에 데이터를 주고받을 때, 또는 컨트롤러와 뷰 사이에서 데이터를 주고받을 때 사용됩니다. 비즈니스 로직을 포함하지 않고, 순수하게 데이터를 담고 전달하는 역할을 합니다.
3. View (뷰)
View는 사용자에게 데이터를 표시하는 역할을 합니다. Spring MVC에서는 JSP, Thymeleaf, FreeMarker 등의 템플릿 엔진을 사용하여 뷰를 생성합니다. ModelAndView 객체를 사용해 컨트롤러에서 뷰와 데이터를 함께 반환할 수 있습니다.
@Controller
public class UserController {
@GetMapping("/user")
public ModelAndView getUser() {
ModelAndView mav = new ModelAndView("userView");
mav.addObject("name", "John Doe");
return mav;
}
}
FAQ
- Q: Model과 ModelAndView의 차이점은 무엇인가요?
- A:
Model
은 데이터를 전달하는 데 사용되며, 뷰 이름은 반환되지 않습니다. 반면에ModelAndView
는 뷰 이름과 데이터를 함께 반환하여 컨트롤러에서 뷰와 데이터를 한 번에 처리할 수 있게 합니다.
- A:
- Q: Spring MVC에서 어떤 템플릿 엔진을 사용할 수 있나요?
- A: Spring MVC에서는 JSP, Thymeleaf, FreeMarker와 같은 다양한 템플릿 엔진을 사용할 수 있습니다. 각 템플릿 엔진은 HTML을 동적으로 생성하여 데이터를 표시하는 역할을 합니다.
- Q: 뷰로 데이터를 전달하는 가장 좋은 방법은 무엇인가요?
- A:
Model
을 사용해 데이터를 전달하는 것이 가장 간단하고 많이 사용되는 방법입니다. 복잡한 응답에서는ModelAndView
를 사용해 데이터와 뷰 이름을 함께 반환할 수 있습니다.
- A:
4. Controller (컨트롤러)
컨트롤러는 사용자 요청을 처리하고, 적절한 모델과 뷰를 반환하는 역할을 합니다. @Controller
와 @RequestMapping
어노테이션을 사용하여 요청을 매핑하고 처리합니다.
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HomeController {
@GetMapping("/home")
public String home(Model model) {
model.addAttribute("message", "Welcome to Spring MVC!");
return "home";
}
}
FAQ
- Q: @Controller와 @RestController의 차이점은 무엇인가요?
- A:
@Controller
는 주로 뷰를 반환하고, JSP나 Thymeleaf와 같은 템플릿 엔진을 사용하여 HTML 페이지를 렌더링합니다. 반면,@RestController
는 JSON 또는 XML과 같은 데이터를 반환하며, 주로 RESTful API를 구현할 때 사용됩니다.
- A:
- Q: @RequestMapping과 @GetMapping, @PostMapping의 차이점은 무엇인가요?
- A:
@RequestMapping
은 HTTP 메서드에 관계없이 사용할 수 있는 반면,@GetMapping
은 GET 요청,@PostMapping
은 POST 요청을 처리하는 데 사용됩니다.5. Form Handling (폼 처리)
- A:
Spring MVC에서는 사용자 입력 폼 데이터를 쉽게 처리할 수 있습니다. @ModelAttribute
를 사용하여 폼 데이터를 자동으로 객체에 바인딩할 수 있으며, 데이터 검증을 위한 유효성 검사가 가능합니다.
@Controller
public class UserController {
@PostMapping("/register")
public String register(@ModelAttribute UserDTO user) {
// 폼 데이터를 user 객체로 자동 바인딩
return "registrationSuccess";
}
}
FAQ
- Q: @ModelAttribute는 어떻게 작동하나요?
- A: 클라이언트가 폼 데이터를 제출하면 Spring MVC는 해당 데이터를 자동으로 객체에 바인딩합니다.
@ModelAttribute
를 사용하면 폼 데이터를 객체로 변환하여 컨트롤러 메서드에서 사용할 수 있게 됩니다.
- A: 클라이언트가 폼 데이터를 제출하면 Spring MVC는 해당 데이터를 자동으로 객체에 바인딩합니다.
- Q: 유효성 검사는 어떻게 처리하나요?
- A:
@Valid
또는@Validated
어노테이션을 사용하여 폼 데이터를 검증할 수 있습니다. 폼 데이터가 주어진 조건을 충족하지 않으면 오류 메시지를 처리할 수 있습니다.
- A:
6. Exception Handling (예외 처리)
Spring MVC에서는 예외를 처리하기 위한 다양한 방법을 제공합니다. @ExceptionHandler
를 사용하면 특정 컨트롤러의 예외를 처리할 수 있고, @ControllerAdvice
를 사용하면 전역적으로 모든 컨트롤러의 예외를 처리할 수 있습니다.
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public String handleException(Exception ex, Model model) {
model.addAttribute("error", ex.getMessage());
return "errorPage";
}
}
FAQ
- Q: 특정 예외만 처리하려면 어떻게 하나요?
- A:
@ExceptionHandler
메서드에 특정 예외 클래스를 인자로 전달하면, 그 예외가 발생했을 때만 해당 메서드가 호출됩니다. 예를 들어,@ExceptionHandler(IOException.class)
를 사용하면IOException
이 발생할 때만 예외를 처리할 수 있습니다.
- A:
7. Spring Security
Spring Security는 웹 애플리케이션의 보안 처리를 위한 프레임워크입니다. 사용자 인증, 권한 관리, 세션 관리 등을 처리하며, CSRF 보호 등의 보안 기능도 제공합니다.
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser("admin").password("{noop}password").roles("ADMIN");
}
}
FAQ
- Q: Spring Security에서 기본 비밀번호 인코딩은 어떻게 설정하나요?
- A:
{noop}
를 사용하여 비밀번호를 평문으로 처리할 수 있지만, 실제 애플리케이션에서는 보안상BCrypt
와 같은 인코딩 알고리즘을 사용하는 것이 좋습니다.
- A:
- Q: Spring Security에서 CSRF 보호를 비활성화하려면 어떻게 하나요?
- A:
http.csrf().disable();
을 사용하여 CSRF 보호를 비활성화할 수 있지만, 보안을 위해 기본적으로 CSRF 보호를 사용하는 것이 권장됩니다.
- A:
8. Database 연결
Spring MVC에서는 데이터베이스와 상호작용하기 위해 JDBC Template, Hibernate 등의 ORM(Object Relational Mapping) 프레임워크를 사용할 수 있습니다. JDBC Template은 직접 SQL을 실행하고, Hibernate는 ORM 방식으로 데이터를 다룹니다.
@Repository
public class UserDao {
@Autowired
private JdbcTemplate jdbcTemplate;
public List<User> getAllUsers() {
String sql = "SELECT * FROM users";
return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));
}
}
FAQ
- Q: JDBC Template과 Hibernate의 차이점은 무엇인가요?
- A: JDBC Template은 SQL 쿼리를 직접 작성하고 실행하는 반면, Hibernate는 객체와 데이터베이스 간의 매핑을 관리하는 ORM(Object Relational Mapping) 프레임워크입니다. JDBC Template은 SQL에 대한 세밀한 제어가 가능하지만 코드가 길어질 수 있으며, Hibernate는 객체 지향적 방식으로 데이터를 처리하여 개발을 간소화할 수 있습니다.
- Q: Spring Data JPA는 무엇인가요?
- A: Spring Data JPA는 JPA(Java Persistence API)를 쉽게 사용할 수 있도록 도와주는 모듈입니다. Spring Data JPA는 기본적인 CRUD 기능을 자동으로 제공하며, 복잡한 쿼리도 메서드 이름만으로 생성할 수 있어 코드의 간결성을 높여줍니다.
9. RESTful Web Services
Spring MVC에서는 REST API를 쉽게 구현할 수 있습니다. @RestController
어노테이션을 사용하여 데이터를 JSON이나 XML 형식으로 반환하며, RESTful 아키텍처 원칙을 따르는 API 설계를 지원합니다.
@RestController
public class UserController {
@GetMapping("/api/users")
public List<User> getUsers() {
return userService.getAllUsers();
}
}
FAQ
- Q: @RestController와 @Controller의 차이점은 무엇인가요?
- A:
@RestController
는 기본적으로 JSON 또는 XML 데이터를 반환하며, 주로 REST API를 만들 때 사용됩니다.@Controller
는 뷰를 반환하는 데 사용되며, JSP나 Thymeleaf 같은 템플릿 엔진과 함께 사용하여 웹 페이지를 렌더링합니다.
- A:
- Q: RESTful API를 설계할 때 중요한 원칙은 무엇인가요?
- A: 자원의 명확한 표현, HTTP 메서드(GET, POST, PUT, DELETE) 사용, 상태 없는 서버 설계 등이 주요 원칙입니다. 자원(Resource)은 URL로 표현되고, HTTP 메서드는 해당 자원에 대한 작업을 나타냅니다.
10. Interceptors와 Filters
Interceptors와 Filters는 요청과 응답 전후에 처리해야 하는 공통 로직을 삽입할 때 사용됩니다. Interceptors는 Spring의 Handler 전후에 동작하며, Filters는 서블릿 레벨에서 동작합니다.
public class LoggingInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("Request URL: " + request.getRequestURL());
return true; // 요청을 계속 처리할지 여부 결정
}
}
FAQ
- Q: Interceptor와 Filter의 차이점은 무엇인가요?
- A: Interceptor는 Spring MVC에서 컨트롤러 전후에 작동하고, Filter는 서블릿 레벨에서 요청과 응답을 가로챕니다. Interceptor는 주로 비즈니스 로직과 관련된 전처리/후처리를 담당하며, Filter는 보안, 로깅, 인코딩 등의 작업을 처리하는 데 사용됩니다.
- Q: Interceptor는 언제 사용하나요?
- A: Interceptor는 주로 인증, 권한 부여, 로깅, 감사(auditing) 등 요청 처리 전후에 특정 작업을 수행해야 할 때 사용됩니다.
- Q: Filter는 언제 사용하나요?
- A: Filter는 서블릿 컨테이너 수준에서 요청과 응답을 가로채는 데 사용됩니다. 보안 필터나 캐시 필터, 압축 필터와 같은 기능을 처리할 때 주로 사용됩니다.
'Spring MVC > 웹 애플리케이션 개발' 카테고리의 다른 글
RESTful API의 기본 개념과 Spring에서 REST API 만드는 방법 ( 4 ) (1) | 2024.10.21 |
---|---|
RESTful API의 기본 개념과 Spring에서 REST API 만드는 방법 ( 3 ) (0) | 2024.10.21 |
RESTful API의 기본 개념과 Spring에서 REST API 만드는 방법 ( 2 ) (1) | 2024.10.21 |
RESTful API의 기본 개념과 Spring에서 REST API 만드는 방법 ( 1 ) (0) | 2024.10.21 |
Spring MVC 웹 애플리케이션 개발 - RESTful API 구현 (1) | 2024.10.19 |