MVC 8

Validation

폼 입력으로 들어오는 데이터를 검증하고 만약 오류가 발생했을 때 오류 페이지를 보여주는 것이 아닌 입력한 데이터를 유지한 상태로 어떤 오류가 발생했는지 고객에게 알려주어야한다. 컨트롤러의 중요한 역할 중 하나는 HTTP 요청이 정상인지를 검증하는 것이다. 클라이언트 검증은 조작이 가능하다. ==> 보안에 취약 그렇다고 서버만으로 검증하면, 즉각적인 고객 사용성이 부족해진다. 둘을 적절히 섞어서 사용해야함. API 방식을 사용해서 검증 오류를 API 응답 결과에 남겨주는 것도 좋은 방법 1. 검증 직접 처리 서버에서 검증 실패가 발생하면 Form에 입력된 데이터와 검증 오류에 대한 결과를 Model에 담아 다시 상품 등록 Form으로 보내준다. 이런 오류 페이지가 띄워지는 것이 아닌 입력한 데이터는 그대로..

Spring/Spring MVC 2021.07.07

단순하고 실용적인 컨트롤러

앞서 만든 컨트롤러는 서블릿 종속성을 제거하고 뷰 경로의 중복을 제거하여 컨트롤러를 설계했다. 하지만 컨트롤러 인터페이스를 구현해야하는 입장에서 보면 항상 ModelView객체를 생성하여 반환해야하는 부분은 번거롭다. 이를 실용성을 가지도록 변경해보자 새로운 구조 컨트롤러가 ModelView를 반환하는 것이 아니라 ViewName만 반환한다. 컨트롤러 Interface 회원 Form 컨트롤러 viewName만 반환해준다. 회원 Save 컨트롤러 모델을 parameter로 제공받기 때문에 새로운 회원객체를 만들어 model에 put해주면 된다. 역시 마찬가지로 viewName만 반환 회원 List 컨트롤러 모델을 처리하는 과정은 FrontController에서, 각 구현 컨트롤러는 모델에 put만 해주고 ..

Spring/Spring MVC 2021.04.21

Model 추가

서블릿 종속성 제거 요청 파라미터 정보는 Map으로 넘기도록 하면 현재 구조에서는 Controller가 서블릿 기술을 몰라도 동작할 수 있다. request 객체를 Model로 사용하는 대신 별도의 Model 객체를 만들어서 반환하면 된다. 현재는 request객체 내부 저장소를 Model처럼 사용하고 있음. Controller가 서블릿 기능을 전혀 사용하지 않도록 변경해보자 뷰 이름 중복 제거 Controller 에서 지정하는 뷰 이름에 중복이 있음. Controller는 뷰의 논리 이름을 반환하고, Front Controller에서 이를 실제 위치로 처리하도록 단순화 Front Controller에서 처리하도록 만들면, 뷰의 폴더 위치가 변해도 Front Controller만 변경하면 되므로 훨씬 코..

Spring/Spring MVC 2021.04.18

View 분리

현재 컨트롤러에서 뷰로 이동하는 부분에 중복이 존재한다. 이 부분을 분리하여 별도로 뷰를 처리하는 객체를 만들 것이다. 렌더링을 통해 view를 호출하는 MyView 클래스 새로운 컨트롤러 인터페이스 반환을 MyView로 반환 위와 같이 각 컨트롤러들을 구현하는데 새로운 MyView객체에 viewPath을 넣어 반환해주면 MyView에서 이를 처리해주는 것이다. 다른 컨트롤러도 위와 마찬가지로 작성 중복을 제거할 수 있다. FrontController 내부 구조만 리팩토링한 것이기 때문에 기능은 전과 똑같이 동작함

Spring/Spring MVC 2021.04.14

프론트 컨트롤러 패턴

프론트 컨트롤러 패턴을 사용하지 않으면 공통 부분이 계속 중복되어 호출된다 프론트 컨트롤러를 도입하게 되면 공통부분을 컨트롤러 앞에서 처리하고 각 컨트롤러로 들어가게 되는 것이다 프론트 컨트롤러 서블릿 하나로 클라이언트의 요청을 받음 프론트 컨트롤러가 요청에 맞는 컨트롤러를 찾아서 호출 공통 처리 기능 프론트 컨트롤러를 제외한 나머지 컨트롤러는 서블릿을 사용하지 않아도 됨 스프링 웹 MVC의 핵심이 바로 FrontController 스프링 웹 MVC의 DispatcherServlet이 FrontController 패턴으로 구현되어 있음 FrontController 도입 컨트롤러 인터페이스를 만들고, 각 컨트롤러들이 이를 구현하도록 만들겠다. 컨트롤러 인터페이스 서블릿과 동일한 구조를 가지고 있음. 이를 ..

Spring/Spring MVC 2021.04.13

MVC Pattern

하나의 서블릿이나 JSP만으로 비즈니스 로직과 뷰 렌더링까지 모두 처리하게 되면, 너무 많은 역할을 하게되고, 결과적으로 유지보수가 어려워진다. 비즈니스 로직을 호출하는 부분에 변경이 발생해도 해당 코드를 수정해야하고, UI를 변경할 일이 있어도 비즈니스 로직이 함께 있는 파일을 수정해야한다. 코드의 양이 수백 수천줄이라면 이 작업은 매우 어려워지고 복잡해진다. 변경의 라이프 사이클 둘 사이의 변경 라이프 사이클이 다르다는 점이다. UI를 일부 수정하는 일과 비즈니스 로직을 수정하는 일은 각각 다르게 발생할 가능성이 매우 높고 대부분 서로에게 영향을 주지 않는다. 이렇게 변경의 Life Cycle이 다른 부분을 하나의 코드로 관리하는 것은 유지보수하기에 좋지 않다. 기능 특화 JSP 같은 뷰 템플릿은 화..

Spring/Spring MVC 2021.04.10

Hello!! Servlet

start.spring.io/ 먼저 프로젝트부터 생성하자. 서블릿을 사용할 것이지만 스프링을 사용하는 이유는 스프링 부트내부에 톰캣 서버도 내장하고있고 설정이 편리한 부분도 있기 때문에 스프링 프로젝트를 만들고 그 안에서 서블릿을 사용 Packaging은 War로 설정해야 JSP를 사용할 수 있음. 라이브러리 설정과 환경 설정부분은 생략하겠음. www.postman.com/downloads/ Download Postman | Try Postman for Free Try Postman for free! Join 13 million developers who rely on Postman, the collaboration platform for API development. Create better APIs—..

Spring/Spring MVC 2021.04.03

MVC와 템플릿 엔진

MVC? Model View Controller 과거에는 jsp를 통하여 View에서 모든 것을 다 처리했었음 ==> Model 1 방식 각 기능들을 쪼개어 그 기능에만 집중시키는 방향으로 발전한 것. View는 화면을 그리는데에 모든 기능과 역량을 집중시켜야하고, Controller나 Model은 비지니스 로직이나 내부적인 것들을 처리하는 것들에 집중해야함. MVC 패턴 사용하기 Controller / Model View 저번에 model과 view를 만들어 매핑을 통해 model을 전달했던 것과 같은 형태이다. 단 이번에는 @RequestParam을 통하여 매개변수name을 입력받도록 하였다. 이것의 옵션을 살펴보면 required가 기본은 true이다.(true면 값을 넘겨줘야함. false면 넘겨..

반응형