목록전체 글 (167)
Hyunebee
Servlet 종속성 제거 이제는 요청 파라미터 정보는 자바의 Map을 사용해서 넘긴다. 이전에는 setAttribute를 모델처럼 사용했다 별도의 Model객체를 만들어서 사용한다. 뷰이름도 중복을 제거한다. /WEB-INF/views/new-form.jsp -> new-form 이렇게 사용할 것이다. ModelView 지금까지 컨트롤러에서 서블릿에 종속적인 HttpServletRequest를 사용했다. 그리고 Model도 request.setAttribute() 를 통해 데이터를 저장하고 뷰에 전달했다. 서블릿의 종속성을 제거하기 위해 Model을 직접 만들고, 추가로 View 이름까지 전달하는 객체를 만들어보자 ModelView는 viewName을 flied로 가지고있고 HashMap을 통해 mod..
View 분리 모든 컨트롤러는 뷰로 이동하는 부분을 가지고 있다 이것을 분리하기 위해 View를 별도로 처리해보자 MyView viewPath를 인자로 받는다. 받은 viewPath로 RequestDispatcher후 forwording 해준다. ControllerV2(interface) : MyView 이제는 View가 생겼음으로 MyView형식을 반환해준다. MemberFormControllerV2(implements) : ControllerV2의 구현체 이제는 MyView가 화면으로 forward해주기 때문에 MyView객체만 반환하면 된다. MemberViewControllerV2(implements) : ControllerV2의 구현체 기능은 이전과 같다. 이제는 MyView가 화면으로 forw..
프론트 컨트롤러를 제외한 나머지 컨트롤러는 서블릿을 사용하지 않아도 됨 프론트 컨트롤러 V1 ControllerV1(Interface) : void반환 MemberFormControllerV1(implements) : ControllerV1의 구현체 viewPath와 RequestDispatcher를 통해 해당url로 foward 해준다. MemberSaveControllerV1(implements) : ControllerV1의 구현체 Singleton으로 만든 memberRepository를 얻어와 Member객체에로 삽입 여기서 모델은 setAttribute를 사용한다. 마찬가지로 viewPath와 RequestDispatcher를 통해 해당url로 foward 해준다. MemberListContro..
서블릿과 JSP의 한계 서블릿으로 개발할 시 뷰화면을 위한 HTML을 만드는 작업이 자바 코드에 섞어 지저분하고 복잡해졌다. JSP를 사용한 덕분에 뷰를 생성하는 HTML 작업을 깔끔하게 가져가고 중간에 자바코드를 넣어 동적으로 변환가능하게 하였다. but 아직도 데이터조회 자바코드 등이 view에 많이 보여진다. -> MVC패턴이 출현하게된 이유 MVC패턴 비즈니스 로직은 서블릿 처럼 다른곳에서 처리하고, jsp는 목적에 맞게 view만 집중 MVC : Model View Controller Controllor : HTTP 요청을 받아서 파라미터를 검증하고, 비즈니스 로직을 실행한다. 그리고 뷰에 전달할 결과 데이터를 조회해서 모델에 담는다. Model : View에서 출력할 데이터를 담아둔다 뷰가 필..
HTTP 요청을 통해 매핑된 URL이 호출되면 서블릿 컨테이너는 다음 메서드를 실행한다. protected void service(HttpServletRequest request, HttpServletResponse response) HttpServletRequest사용 HTTP 요청 메세지를 직접 파싱해서 사용해도 되지만 불편 HttpServletRequest는 이를 대신 파싱해주고 그 결과를 객체에 담아서 제공한다. START LINE HTTP 메소드 : request.getMethod() URL : request.getRequestURL(),request.getRequestURI() 쿼리 : request.getQueryString() 스트링 스키마,프로토콜 : request.getScheme() ..
웹서버 HTTP 기반으로 동작 정적 리소스 제공 ex)NGINX, APACHE 웹 애플리케이션 서버(WAS) 웹 서버 기능을 포함 + (정적 리소스) 프로그램 코드를 실행해서 애플리케이션 로직 수행 동적 HTML, HTTP API servlet jsp spring MVC ex)tomcat, jetty 웹서버 vs 웹 애플리케이션 서버 1. 둘의 경계가 모호함 둘다 서로의 기능을 조금식 제공함 2. 자바는 서블릿 컨테이너 기능을 제공하면 WAS 웹 시스템의 구성 -> 간단하게 WAS , DB로 구현할 수 있다. 하지만 WAS가 너무 많은 역할을 담당 서버 과부하 우려가 있다. WAS 장애시 오류 화면도 노출 불가능 웹 시스템의 구성 -> WEB WAS DB 정적 리소스는 웹서버가 처리 웹 서버는 애플리케이..
캐시 유효 시간이 초과해서 서버에 다시 요청하면 다음 두 가지 상황이 나타난다. 1. 서버에서 기존 데이터를 변경함 - 캐시를 갱신하고 다시 네트워크에서 받아야함 2. 서버에서 기존 데이터를 변경하지 않음 변하지 않았다면 데이터를 전송하는 대신에 저장해뒀던 로컬 캐시를 다시 사용할 수있다. but 서버에 있는 데이터가 변하지 않았다는것 을 확인 할 수 있어야 한다. -> 검증헤더 사용 검증 헤더 1 + 조건부 요청 헤더 검증 헤더 2 + 조건부 요청 헤더(ETag) Etag - 캐시용 데이터에 임의의 고유한 버전 이름을 달아둠 -> 데이터가 변경되면 이 이름을 바꾸어 변경함 캐시 제어 로직을 서버에서 완전히 관리 클라이언트는 단순히 이 값을 서버에 제공 - 블랙박스
header-field = field-name : (OWS) field-value (OWS) HTTP 헤더 HTTP 전송에 필요한 모든 부가정보를 담고있음 HTTP 헤더 분류(과거 RFC2616) • General 헤더: 메시지 전체에 적용되는 정보, 예) Connection: close • Request 헤더: 요청 정보, 예) User-Agent: Mozilla/5.0 (Macintosh; ..) • Response 헤더: 응답 정보, 예) Server: Apache • Entity 헤더: 엔티티 바디 정보, 예) Content-Type: text/html, Content-Length: 3423 HTTP BODY(과거 RFC2616) 메시지 본문은 엔티티 본문을 전달하는데 사용한다. 엔티티 헤더는 엔..