BackEnd 3일차

진창호·2023년 3월 22일
0

BackEnd

목록 보기
3/4

여러 구조로 웹을 설계할 수 있다.

JSP를 이용해 구성할 수 있는 웹 구조는 크게 두 가지로 나뉜다.

  1. JSP가 Client의 요청에 대한 Logic 처리와 View 처리를 모두 하는 구조
  2. JSP가 View에 대한 처리만 하는 구조 (MVC 패턴)

1번 모델은 아래와 같다. 하나의 JSP가 View와 Logic을 모두 처리한다.
1번 모델
Java Bean은 특정한 기능을 가진 컴포넌트를 의미한다. Java Bean의 규칙은 아래와 같다.

  1. 기본 패키지 외에 특정 패키지에 속해야 한다.
  2. 기본 생성자가 존재해야 한다.
  3. 멤버 변수의 접근 제어자는 private 이다.
  4. 접근 제어자가 public인 멤버 변수의 setter와 getter가 존재해야 한다.

1번 모델의 장단점은 아래와 같다.
1번 모델 장단점

2번 모델은 아래와 같다.
2번 모델

각 모델이 어떤 MVC 패턴에 해당하고 무슨 역할을 하는지는 아래와 같다.
2번 모델의 종류와 역할

각 패턴의 대표적인 라이브러리는 아래와 같다.

  1. Model : Mybatis, JSP
  2. View : Vue, React (둘 다 CSR 방식)
  3. Controller : Spring

2번 모델의 장단점은 아래와 같다.
2번 모델의 장단점

※ 대부분의 DB 예외는 Business Layer에서 처리한다.


Cookie로 상태 정보를 유지할 수 있다.

Http 프로토콜의 특징은 서버가 클라이언트에 응답하면 연결이 해제된다는 것이다.
따라서 클라이언트 단위로 상태 정보를 유지하기 위해 Cookie와 Session을 사용한다.

Cookie의 특징은 아래와 같다.

  1. javax.servlet.http.Cookie에 존재하는 클래스이다.
  2. 사용자의 컴퓨터에 파일 형태로 저장된다.
  3. key와 value로 구성되고, String 형태로 이루어져 있다.
  4. Browser마다 저장되는 쿠키는 다르다.

Cookie의 주요 메서드는 아래와 같다.
쿠키

Cookie의 생성 예시는 아래와 같다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%
    	Cookie cookie = new Cookie("name", "samsung"); // 반드시 둘 다 String
    	cookie.setMaxAge(60); // 숫자의 단위는 sec
    	response.addCookie(cookie);
    	
    	Cookie cookie2 = new Cookie("age", "22");
    	cookie2.setMaxAge(60);
    	response.addCookie(cookie2);
    %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
쿠키 생성 => 클라이언트로 보내기
</body>
</html>

새로고침을 한 후 실행 결과는 아래와 같다.
응답 헤더요청 헤더

요청 헤더에 쿠키 정보가 있는 이유는 새로 고침을 하기 전에 쿠키가 저장됐기 때문이다.
설정한 시간이 지나면 사용자의 컴퓨터에서 쿠키가 사라진다.

Cookie를 조회하는 예시는 아래와 같다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
쿠키 읽기<br>
<%
	Cookie[] cookies = request.getCookies(); // getCookies()의 반환값은 null일 수 있다.
	
	if (cookies == null) {
%>
		저장된 쿠키가 없습니다.
<% 
	} else {
		for (Cookie c : cookies) {
%>
			<%= c.getName() %> : <%= c.getValue() %> <br>
<%
		}
	}
%>
</body>
</html>

조회 결과는 아래와 같다.
실행 결과

Cookie를 수정하는 예시는 아래와 같다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
	Cookie cookie = new Cookie("name", "java");
	cookie.setMaxAge(60*60*2);
	
	response.addCookie(cookie);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	쿠키 수정
</body>
</html>

수정 후 Cookie를 조회하면 아래와 같다.
실행 결과

Cookie를 삭제하는 예시는 아래와 같다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	Cookie cookie = new Cookie("age", "");
	cookie.setMaxAge(0);
	
	response.addCookie(cookie);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
쿠키 삭제
</body>
</html>

삭제 후 Cookie를 조회하면 아래와 같다.
실행 결과


Session으로 상태 정보를 유지할 수 있다.

Session의 특징은 아래와 같다.

  1. javax.servlet.http.HttpSession에 존재하는 인터페이스이다.
  2. 방문자가 웹 서버에 접속해 있는 상태를 의미한다.
  3. WAS의 Memory에 Object의 형태로 저장한다.
    따라서 Memory가 허용하는 용량까지 저장 가능하다.
  4. Browser당 하나의 JSESSIONID를 부여받는다. JSESSIONID는 쿠키로 저장된다.

HttpSession의 주요 메서드는 아래와 같다.
주요 메서드

HttpSession의 생성 예시는 아래와 같다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" session = "false" %> <%-- 자동으로 Session을 안 만들기 위함 --%>
    
	<%
		HttpSession session = null;
		session = request.getSession(); // Session이 존재하면 현재 Session을 반환하고 존재하지 않으면 Session을 새로이 생성
		// session = request.getSession(false); // Session이 존재하면 현재 Session을 반환하고 존재하지 않으면 새로이 생성하지 않고 그냥 null을 반환
		
		session.setAttribute("name", "samsung"); // 두 번째 인자는 Object이므로 String, Integer 등 가능
		session.setAttribute("age", 1);
		
    %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
세션 만들기
</body>
</html>

HttpSession의 생성 후 조회 예시는 아래와 같다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
세션 읽기 <br>
<%= session.getAttribute("name") %> : <%= session.getAttribute("age") %>
</body>
</html>

조회 결과는 아래와 같다.
실행 결과

HttpSession의 삭제 예시는 아래와 같다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	session.invalidate();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
세션 삭제
</body>
</html>

삭제 후 조회 결과는 아래와 같다.
실행 결과

profile
백엔드 개발자

0개의 댓글