#1 Spring MVC
1) Front Controller는 모든 요청을 받아 들여 공통적인 작업을 처리해 줍니다.
이를 통해 얻을 수 있는 장점엔 어떤 것이 있을 수 있을 까요?
Front Controller Pattern
- 모든 Resource 요청을 처리해주는 하나의 컨트롤러를 두는 패턴이다.
- MVC 패턴과 함께 사용하는 패턴이다.
Front Controller Pattern의 장점
- 모든 Request를 하나의 컨트롤러를 통해 한 곳에서 작업을 수행할 수 있다.
- 추적(Tracking)이나 보안(Security)를 적용할 때 하나의 컨트롤러에서 하기 때문에 편하다.
- 파일 구조가 바뀌어도 URL을 유지할 수 있다.
즉 DispatcherServlet(Front Controller)이 Bean으로 등록되어
Controller Package를 Scan하여 @Controller를 등록하는 것은
Controller(Page Controller)라는 것을 확인할 수 있다.
참조 : https://nesoy.github.io/articles/2017-02/Front-Controller
2) SpringMVC를 이용해서 웹 애플리케이션을 개발하는 것과
서블릿을 이용해 개발하는 것과 비교해보면
어떤 장단점이 있다고 생각하세요?
SpringMVC를 이용해 웹 애플리케이션을 개발한다면
SpringMVC가 수 많은 기능들을 대신 구현해주어 서비스를 빠르고 안전하게 구현할 수 있다.
즉, 애플리케이션 개발 생산성이 향상된다. 이외에도 많은 장점이 있다.
하지만 개발자가 직접 Request와 Response의 흐름을 조절할 수 없어
간단한 요청에도 SpringMVC의 불필요한 로직들이 많이 수행되어
기본적인 Servlet 프로그래밍 보다 처리 속도가 느릴 수 있다.
#2 Layered Architecture
1-1) 레이어로 구성하지 않을 경우 어떤 문제가 발생할까요?
레이어를 구성하지 않아도 개발할 수 있다.
하지만 하나의 레이어에서 모든 작업을 전담하게 되면 같은 작업을 반복해서 구현해야하는 경우가 생긴다.
이로 인해 많은 중복코드가 발생한다.
중복 코드를 수정할 때 모든 소스코드를 변경해야 하기 때문에 번거로워 질 것이다.
그리고 시스템을 레이어로 나누면 그 중 하나를 다른 것으로 교체하는 것이 가능해진다.
이는 시스템 전체를 수정하지 않고, 특정한 레이어의 기능이나 성능을 개선하는 것이 가능함을 의미한다.
즉, 재사용과 유지보수에 유리하다.
1-2) 레이어를 구성하지 않고 중복코드를 제거할 수 있을까요?
중복코드를 제거하기 위해서는 레이어를 구성해야 할 것이다.
2) 레이어 별로 개발을 진행할 때, 각 레이어 별로 잘 동작하는지 확인하는 것은 매우 중요합니다.
어떤 특정 레이어가 올바르게 동작하지 않는다면 웹 애플리케이션은 제대로 동작하지 않을 것입니다.
어느 특정 레이어가 문제가 있는지 알려면, 각 레이어별로 테스트가 필요합니다.
자바에서 테스트코드를 좀 더 효과적으로 작성할 수 있는 방법에 대해 알아보세요.
특정 레이어에 속해 있는 Bean들만 ApplicationContext에 직접 로드하여 해당 레이어를 테스트하는 방법과
어노테이션을 기반으로 이러한 과정들을 대신 해주는 방법이 있다.
#3 WEB API
1) 기업들은 왜 REST API를 제공할까요?
기업들은 REST API를 제공함으로써 사용자들이 API를 더 쉽고 빠르게 사용할 수 있도록 한다.
또한 이러한 REST API를 기점으로 시스템을 개발할 때
변경이 유연하고 확장성이 높은 코드를 작성할 수 있게 해주기 때문에 기업들은 REST API를 제공한다.
#4 Controller
1) JSON메시지의 장점은 무엇일까요?
내용이 함축적으로 최소한의 정보만을 가지고 있다.
그렇기 때문에 xml에 비해 용량이 줄어들고 그만큼 빠른 속도를 갖게 된다.
언어에 독립적이고 사용하기 쉽다.
하지만 내용이 함축적이다 보니 의미 파악이 힘들 수 있고 경량의 데이터 교환 형식이기 때문에 xml보다 빠르지만,
대용량급의 데이터 송수신에는 부적합한 모습도 있다.
2-1) Web API에게 POST방식으로 값을 전달할 때 JSON메시지를 보냈고,
결과도 JSON메시지를 출력하도록 하였습니다.
JSON메시지를 자바객체로 변환하고,
자바객체를 반대로 JSON메시지로 변화하는 부분들이 모두 자동으로 이뤄지고 있는 것을 알 수 있었습니다.
만약 서블릿을 이용해 개발한다면, 이 부분들을 어떻게 구현해야 할까요?
2-2) 이를 통해 Spring MVC의 장점에 대해 생각해보세요.
@RestController를 붙여준다면 객체를 반환할 때 자동으로 JSON으로 자동변환하여 출력해주기 때문에 편리하다.
3) 컨트롤러에서 Exception을 강제로 발생시켰을 때는 테스트 결과가 어떻게 출력될까요? 컨
트롤러가 오류가 발생하도록 코드를 수정한 후 확인해보세요.
Exception이 발생했을 경우 테스트는 실패한다.
이를 방지하기 위해 컨트롤러 내부에서는 발생하는 Exception에 대해서 catch하는 코드를 작성해주어야 하며
이에맞게 HTTP Response Status Code를 리턴해 주어야 한다.
'Record > boostcourse' 카테고리의 다른 글
프로젝트D. Spring Security를 이용한 로그인 및 예약 관련 Web API 만들기 (1) | 2021.10.19 |
---|---|
프로젝트C. 예약 : 메인, 상세보기 관련 Web API 만들기 (0) | 2021.08.18 |
[boostcourse] 3. 웹 앱 개발 예약 서비스 생각해보기 #2 ~ #3 (0) | 2021.08.01 |
[boostcourse] 3. 웹 앱 개발 예약 서비스 생각해보기 #1 (0) | 2021.07.30 |
프로젝트B. 방명록 만들기 리뷰 (0) | 2021.07.28 |
댓글