Spring 152

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

앞서 만든 컨트롤러는 서블릿 종속성을 제거하고 뷰 경로의 중복을 제거하여 컨트롤러를 설계했다. 하지만 컨트롤러 인터페이스를 구현해야하는 입장에서 보면 항상 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

JSP로 회원 관리 웹 애플리케이션 만들기

먼저 JSP 라이브러리 추가 build.gradle에 아래 코드 추가하고 refresh jsp는 .java파일이 아니라 .jsp파일이므로 java폴더 밖에 만들어야함 jsp 파일에는 저 코드가 꼭 있어야한다. jsp파일이라는 의미 save.jsp에 회원 저장 로직이 들어갈 것이다. 전송을 눌러보면 아직 save.jsp를 만들지 않았기 때문에 Not Found가 뜬 것이지, URL은 제대로 전송된 것을 확인할 수 있음 save.jsp jsp도 결국 서블릿으로 변환되어 사용되는 것이기 때문에 request, response를 사용할 수 있음 위에 로직을 먼저 넣고 그 밑에 html을 배치하는 것이 일반적 다시 전송시켜보면 정상적으로 회원이 저장된 것을 확인할 수 있다. members.jsp (회원 목록 조회..

Spring/Spring MVC 2021.04.09

서블릿으로 회원 관리 웹 애플리케이션 만들기

회원 가입 Form 회원 저장 현재 Form이 전송되는 페이지가 servlet/member/save로 저장되어 있기에 이 페이지를 만들고 회원을 저장하는 로직을 만들어야함. 회원가입 성공 member.getUsername()과 같은 동적인 코드를 넣을 수 있음 회원 목록 조회 처음에 접속해보면 현재 저장된 회원이 없으므로 아무것도 출력되지 않음 servlet/members/new-form에 가서 회원 두명을 저장한 후에 다시 열어보자. 템플릿 엔진으로 지금까지 서블릿과 자바 코드만으로 HTML을 만들었다. 서블릿 덕분에 동적으로 원하는 HTML을 만들 수 있었다. 하지만 코드에서 보듯이 매우 복잡하고 비효율적이다. 자바 코드로 HTML을 만들어 내는 것보다 차라리 HTML문서에 동적으로 변경해야하는 부분..

Spring/Spring MVC 2021.04.06

HTTP 응답 데이터

HTTP 응답 메시지는 주로 다음 내용을 담아서 전달 단순 텍스트 응답 ==> writer.println("ok") HTML 응답 HTTP API - MessageBody JSON 응답 HTML 응답 utf-8지정안해주면 한글깨짐 HTTP응답으로 HTML을 반환할 때는 content-type을 text/html로 지정해줘야함 페이지 소스보기를 해보면 html태그들이 삽입되있는 것을 확인할 수 있음. API JSON 마찬가지로 jackson라이브러리의 ObjectMapper를 사용한다. jackson 라이브러리가 제공하는 objectMapper.writeValueAsString()을 사용하면 객체를 JSON 문자로 변경할 수 있다. application/json은 스펙은 utf-8 형식을 사용하도록 정의되..

Spring/Spring MVC 2021.04.06

HttpServletResponse

HttpServletResponse 역할 HTTP 응답 메시지 생성 HTTP 응답코드 지정 헤더 생성 바디 생성 편의 기능 제공 Content-Type, 쿠키, Redirect HTTP 응답코드 해당 인터페이스로 들어가보면 응답코드들이 이미 만들어져있으므로 이것을 가져다 사용하기만 하면된다. response-header setHeader를 통해 헤더를 생성할 수 있다. 더보기 먼저 아무것도 캐싱하지 않으려면 Cache-Control: no-store 를 하면됩니다. 또는 no-cache, no-store, must-revalidate로 no 시리즈를 다 붙여줍니다. Cache-Control: no-cache 는 가장 많이 헷갈려하는 헤더 설정인데요. no-cache이지만 cache하지 말라는 뜻이 아닙니..

Spring/Spring MVC 2021.04.06

HTTP 요청 데이터 - API 메시지 바디

단순 텍스트 HTTP 메시지 바디에 단순한 텍스트를 담아서 전송해보겠다. HTTP 메시지 바디의 데이터를 InputStream을 사용해서 직접 읽을 수 있다. getInputStream은 바이트 코드로 변환하여 반환해준다. 이를 java에서 제공하는 StreamUtils를 사용하여 문자열로 변환 후 출력하여보겠다. 변환할 문자의 기준을 정해주어야함. StandardCharsets 단순 텍스트 읽어오기 성공! JSON HTTP API에서 주로 사용하는 JSON형식으로 데이터를 전달해보자. content-type: application/json JSON 형식으로 파싱할 수 있게 객체 생성 Lombok을 사용해서 게터, 세터 JSON도 문자이기 때문에 InputStream을 사용하여 문자열로 변환한 후에 출력..

Spring/Spring MVC 2021.04.04
반응형