[Back-End] MVC

unzinzanda·2023년 3월 30일
0

Back-end

목록 보기
3/4
post-thumbnail

Model1

Web Application Architecture - MVC

  • JSP를 이용하여 구성할 수 있는 Web Application Architecture
    • model1 : logic 처리와 view를 모두 처리.
    • model2 : view만 처리.
  • Model2 구조는 MVC 패턴을 web 개발에 도입한 구조를 말함.

Model1 구조

  • view와 logic을 JSP 페이지 하나에서 처리하는 구조.
  • Client로부터 요청이 들어오게 되면 JSP 페이지는 java beans나 별도의 service class를 이용하여 작업을 처리하고 결과를 client에 출력.

Model1 구조의 장단점

장점단점
구조가 단순하며 직관적이기 때문에 배우기 쉬움.출력을 위한 view html 코드와 로직 처리를 위한 java 코드가 섞여 있기 때문에 JSP 코드 자체가 복잡
개발 시간이 비교적 짧기 때문에 개발 비용이 감소.JSP 코드에 Back-End와 Front-End가 혼재되기 때문에 분업이 힘듬.
project의 규모가 커지게 되면 코드가 복잡해지므로 유지보수하기 어려워짐.
확장성(신기술 도입, framework 등의 적용)이 나쁨.



Model2(MVC Pattern)

Model2 구조

  • 모든 처리를 JSP 페이지에서 하는 것이 아니라 client 요청에 대한 처리는 servlet, logic 처리는 java class(Service, Dao, …), client에게 출력하는 response page를 JSP가 담당.
Model2MVC Pattern설명
Service, Dao or Java BeansModel(data 관리)Logic(Business & DB Logic)을 처리하는 모든 것.
controller로부터 넘어온 data를 이용하여 이를 수행하고 그에 대한 결과를 다시 controller에 return.
JSPView모든 화면 처리를 담당.
Client의 요청에 대한 결과 뿐 아니라 controller에 요청을 보내는 화면단도 jsp에서 처리.
Logic 처리를 위한 java code는 사라지고 결과 출력을 하는 code만 존재.
ServletControllerClient의 요청을 분석하여 Logic 처리를 위한 Model단을 호출.
return 받은 결과 data를 필요에 따라 request, session 등에 저장하고 redirect 또는 forward 방식으로 jsp page로 이동하여 출력.

Model2구조의 장단점

  • Model2는 Model1의 단점을 보완하기 위해 만들어 졌으나 다루기 어렵다는 단점이 존재.
장점단점
출력을 위한 view(html) 코드와 로직 처리를 위한 java 코드가 분리 되었기 때문에 JSP는 Model1에 비해 코드가 복잡하지 않음.구조가 복잡하여 초기 진입이 어려움.
화면단과 Logic단이 분리 되었기에 분업이 용이.개발 시간의 증가로 개발 비용 증가.
기능에 따라 code가 분리 되었기 때문에 유지 보수가 쉬워짐.
확장성이 뛰어남.(servlet 대신 spring을 쓴다는 등 다른 framework나 신기술 도입이 잘 됨.)

실습

<input type="hidden" name="action" value="값">
: 하나의 controller를 사용할 때, 들어온 요청이 어떤 요청인지 구분하고 각각 처리해주기 위해서 추가해놓은 값.

protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String action = request.getParameter("action");

		String path = "";
		if ("list".equals(action)) {
			path = list(request, response);
			forward(request, response, path);
		} else if ("view".equals(action)) {
			path = view(request, response);
			forward(request, response, path);
		} else if ("mvwrite".equals(action)) {
			path = "/board/write.jsp";
			redirect(request, response, path);
		} else if ("write".equals(action)) {
			path = write(request, response);
			redirect(request, response, path);
		} else if ("mvmodify".equals(action)) {
			path = mvModify(request, response);
			forward(request, response, path);
		} else if ("modify".equals(action)) {
			path = modify(request, response);
			forward(request, response, path);
		} else if ("delete".equals(action)) {
			path = delete(request, response);
			redirect(request, response, path);
		} else {
			redirect(request, response, path);
		}
	}
  • Servlet에서 action 값에 따라 각가 다른 동작을 하도록 switch나 if-else문으로 조건을 걸어줌.


  • HTTP protocol의 특징
    • client가 server에 요청.
    • server는 요청에 대한 처리를 한 후 client에 응답.
    • 응답 후 연결을 해제. → stateless
      • 지속적인 연결로 인한 자원 낭비를 줄이기 위해 연결을 해제.
      • 그러나 client와 server가 연결 상태를 유지해야 하는 경우 문제 발생.
      • 따라서 client 단위로 상태 정보를 유지해야 하는 경우 Cookie와 Session이 사용됨.
  • HTTP protocol의 약점을 보완하기 위해 사용.

  • 서버에서 사용자의 컴퓨터에 저장하는 정보 파일.
  • 사용자가 별도의 요청을 하지 않아도 브라우저는 request 시 Request Header를 넣어 자동으로 서버에 전송.
  • key와 value로 구성, String 형태(문자열만 저장 가능)
  • 브라우저마다 저장되는 쿠키는 다름.

Cookie의 사용 목적

  • 세션 관리 : 사용자 아이디, 접속 시간, 장바구니 등의 서버가 알아야 할 정보 저장.
  • 개인화 : 사용자마다 다르게 그 사람에 적절한 페이지를 보여줌.(광고 등)
  • 트래킹 : 사용자의 행동과 패턴을 분석하고 기록.

Cookie의 사용 예

  • ID 저장(자동로그인)
  • 일주일간 다시 보지 않기.
  • 최근 검색한 상품들을 광고로 추천.
  • 쇼핑몰 장바구니 기능.

Cookie의 구성요소

  • 이름 : 여러 개의 쿠키가 client의 컴퓨터에 저장되므로 각 쿠키를 구별하는 데 사용되는 이름.
  • 값 : 쿠키의 이름과 매핑되는 값.
  • 유효기간 : 쿠키의 유효기간.
  • 도메인 : 쿠키를 전송할 도메인.(setDomain()으로 설정)
  • 경로(path) : 쿠키를 전송할 요청 경로.

Cookie의 동작 순서

  1. Client가 페이지를 요청.
  2. WAS는 Cookie를 생성.
  3. HTTP Header에 Cookie를 넣어 응답.
  4. Browser는 넘겨 받은 Cookie를 PC에 저장하고 다시 WAS가 요청할 때 요청과 함께 Cookie를 전송.
  5. Browser가 종료되어도 Cookie의 만료 기간이 남아 있다면 Client는 계속 보관.
  6. 동일 사이트 재방문 시 Client의 PC에 해당 Cookie가 있는 경우, 요청 페이지와 함께 Cookie를 전송.

Cookie의 특징

  • 이름, 값, 만료일, 경로 정보로 구성.
  • 클라이언트에 총 300개의 쿠키를 저장할 수 있음.
  • 하나의 도메인 당 20개의 쿠키를 가질 수 있음.
  • 하나의 쿠키는 4KB까지 저장 가능.

Cookie의 주요 기능

기능method
생성Cookie cookie = new Cookie(String name, String value);
값 변경 / 얻기cookie.setValue(String value); / String value = cookie.getValue();
사용 도메인 지정 / 얻기cookie.setDomain(String domain); / String domain = cookie.getDomain();
값 범위 지정 / 얻기cookie.setPath(String path); / String path = cookie.getPath();
cookie의 유효기간 지정 / 얻기cookie.setMaxAge(int expiry); / int expiry = cookie.getMaxAge();
cookie 삭제 : cookie.setMaxAge(0);
생성된 cookie를 client에 전송response.addCookie(cookie);
client에 저장된 cookie 얻기Cookie cookies[ ] = request.getCookies();

HttpSession

session : javax.servlet.http.HttpSession

  • 방문자가 웹 서버에 접속해 있는 상태의 단위.
  • WAS의 memory에 Object의 형태로 저장.
  • memory가 허용하는 용량까지 제한 없이 저장 가능.

session의 사용 예

  • 사이트 내에 화면을 이동해도 로그인이 풀리지 않고 유지.
  • 장바구니.

session의 동작 순서

  1. 클라이언트가 페이지를 요청.
  2. 서버는 접근한 클라이언트의 Request-Header 필드인 Cookie를 확인하여 클라이언트가 해당 session-id를 보냈는지 확인.
  3. session-id가 존재하지 않는다면, 서버는 session-id를 생성해 클라이언트에게 돌려줌.
  4. 서버에서 클라이언트로 돌려준 session-id를 쿠키를 사용해 서버에 저장. 쿠키 이름 : JSESSIONID
  5. 클라이언트는 재 접속 시, 이 쿠키를 이용하여 session-id값을 서버에 전달.

session의 특징

  • 웹 서버에 웹 컨테이너의 상태를 유지하기 위한 정보를 저장.
  • 웹 서버에 저장되는 쿠키(= 세션 쿠키)
  • 브라우저를 닫거나 서버에서 세션을 삭제했을 때만 삭제가 되므로 쿠키보다 비교적 보안이 좋음.
  • 저장 데이터에 제한이 없음.
  • 각 클라이언트 고유 Session ID를 부여.
  • Session ID로 클라이언트를 구분하여 각 클라이언트 요구에 맞는 서비스 제공.

session의 설정

HttpSession의 주요 기능

기능method
생성HttpSession session = request.getSession();
HttpSession session = request.getSession(false);
값 저장session.setAttribute(String name, Object value);
값 얻기Object obj = session.getAttribute(String name);
특정 이름의 속성 값 제거session.removeAttribute(String name);
binding되어 있는 모든 속성 제거session.invalidate();
생성 시간long ct = session.getCreationTime();
마지막 접근 시간long lat = session.getLastAccessedTime();
SessionCookie
Typejavax.servlet.http.HttpSession (interface)javax.servlet.http.Cookie (Class)
저장 위치Server의 memory에 Object로 저장.Client 컴퓨터에 file로 저장.
저장 형식Object는 모두 가능. (일반적으로 Dto, List 등 저장.)file에 저장되기 때문에 String 형태.
사용 예로그인 시 사용자 정보, 장바구니 등최근 본 상품 목록, 아이디 저장(자동 로그인), 팝업 메뉴에서 ‘오늘은 그만 열기’ 등
용량 제한제한 없음.도메인 당 20개. 1 쿠키 당 4KB.
만료 시점알 수 없음 (Client가 로그아웃하거나, 일정 시간동안 session에 접근하지 않는 경우 [만료 시간은 web.xml에 설정.])쿠키 저장 시 설정 (설정이 없을 경우 Browser 종료 시 만료)
  • 공통
    1. 전역에 저장하기 때문에 project 내의 모든 JSP에서 사용 가능.
    2. Map형식으로 관리하기 때문에 key 값의 중복을 허용하지 않음.
profile
안녕하세요 :)

0개의 댓글