μŠ€ν”„λ§ Spring/πŸ§ΆμŠ€ν”„λ§ λΆ€νŠΈ Boot

μŠ€ν”„λ§λΆ€νŠΈ μ„Έμ…˜ μŠ€ν† λ¦¬μ§€ sessionStorage

Meteora_ 2021. 6. 25. 19:37
728x90

login.html

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

<style type="text/css">
#app{
	margin: auto;
	margin-top: 60px;
	width: 60%;
	border: 3px solid #8ac007;
	padding: 10px;
}
</style>

</head>
<body>

<h1>Login</h1>

<div id="app">	
	<table border="1">
	<tr>
		<td>아이디</td>
		<td>
			<input type="text" id="id" placeholder="μ•„μ΄λ””μž…λ ₯" size="20">
		</td>
	</tr>
	<tr>
		<td>νŒ¨μŠ€μ›Œλ“œ</td>
		<td>
			<input type="text" id="pwd" placeholder="νŒ¨μŠ€μ›Œλ“œμž…λ ₯" size="20">
		</td>
	</tr>
	
	<tr>
		<td colspan="2">
			<button type="button" id="login">login</button>		
			<button type="button" id="account">νšŒμ›κ°€μž…</button>
		</td>
	</tr>
	</table>	
</div>

<script type="text/javascript">

$(document).ready(function() {
	
	$('#login').click(function() {				
		$.ajax({
			url:"http://localhost:3000/login",
			type:'post',
			data:{ id:$('#id').val(), pwd:$('#pwd').val() },
			success:function(data){				
			//	alert('success');				
				if(data == ''){
					alert('login fail');
				}else{
					alert('login success');
					
					sessionStorage.setItem("login", JSON.stringify(data));
					
					location.href = "bbslist.html";
				}
			},
			error:function(){
				alert('error');
			}
		});
	});
	
	$('#account').click(function() {
		location.href = "account.html";
	});
});	

</script>


</body>
</html>

sessionStorage.setItem( );

 

 

μ›Ήμ—μ„œ 데이터λ₯Ό μ €μž₯ν•˜λŠ” 방법 쀑 μ„œλ²„κ°€ μ•„λ‹Œ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ κ°€λŠ₯ν•œ 방법을 μ•Œμ•„λ³΄λ €κ³  ν•©λ‹ˆλ‹€.

μ›Ήμ‚¬μ΄νŠΈμ˜ 정보λ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•΄μ„œ λ°˜λ“œμ‹œ μ„œλ²„κ°€ ν•„μš”ν•œ 것은 μ•„λ‹™λ‹ˆλ‹€. μ‚¬μš© λͺ©μ μ— 따라 ν΄λΌμ΄μ–ΈνŠΈ μ €μž₯μ†Œ μ—­μ‹œ 쒋은 역할을 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 일반적으둜 ν΄λΌμ΄μ–ΈνŠΈ μ €μž₯μ†Œλ₯Ό μƒκ°ν•˜λ©΄ κ°€μž₯ λ¨Όμ € μΏ κΈ° μ €μž₯μ†Œλ₯Ό λ– μ˜¬λ¦¬κ² μ§€λ§Œ html5μ—λŠ” μ’€ 더 효과적인 ν΄λΌμ΄μ–ΈνŠΈ μ €μž₯ 곡간을 μ œκ³΅ν•˜λŠ”λ° μ–΄λ–€ 것이 μžˆλŠ”μ§€ μ•Œμ•„λ³΄λ©΄ λ‹€μŒκ³Ό κ°™μ£ .


! localStorage, sessionStorage API μ•Œμ•„λ³΄κΈ°
html5μ—μ„œλŠ” μ’€ 더 쉽고 κ°„λ‹¨ν•œ μ €μž₯μ†Œ μ œκ³΅μ„ μœ„ν•΄ μƒˆλ‘œμš΄ localStorage와 sessionStorage APIλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. λ‘˜ λ‹€ μ €μž₯ κ³΅κ°„μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλŠ”λ° 이 λ‘˜μ˜ κ°€μž₯ 큰 차이점이라면 μ €μž₯μ†Œλ‘œμ„œμ˜ κΈ°λŠ₯은 λŒ€λΆ€λΆ„ λ™μΌν•˜λ©° 단지  sessionStorage의 경우 μ„Έμ…˜μ΄ μ’…λ£Œλ˜λ©΄ μ €μž₯된 데이터도 ν•¨κ»˜ 사라진 λ‹€λŠ” 점이 λ‹€λ₯Έ μ μž…λ‹ˆλ‹€. κ·Έλ ‡λ‹€λ©΄ 이 λ©”μ†Œλ“œλŠ” μ–΄λ–€ κ²½μš°μ— μ‚¬μš©ν•  수 μžˆμ„κΉŒμš”? μΏ ν‚€λ₯Ό 포함해 μ„œλ‘œμ˜ μž₯단점에 λŒ€ν•˜μ—¬ λΉ„κ΅ν•˜λ©° μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

 # μΏ ν‚€, μ„œλ²„ μ €μž₯μ†Œ, localStorage, sessionStorage 차이점 및 μž₯단점

 


μΏ ν‚€μ˜ 경우 μ €μž₯ κ°€λŠ₯ν•œ κ³΅κ°„μ˜ 크기가 κ°€μž₯ μž‘κ³  ν•˜λ‚˜μ˜ ν…μŠ€νŠΈ ν˜•νƒœλ‘œ μ €μž₯λœλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 비ꡐ적 κ°„λ‹¨ν•œ ν…μŠ€νŠΈ νƒ€μž…μ˜ 데이터λ₯Ό μ €μž₯ν•˜λŠ”λ° μš©μ΄ν•˜λ‹€. 이런 κ°’μœΌλ‘œλŠ” νŒμ—…μ˜ 이름을 예둜 λ“€ 수 μžˆλ‹€. νŒμ—…μ˜ 경우 24μ‹œκ°„ λ™μ•ˆ λ™μž‘ν•˜μ§€ μ•Šλ„λ‘... 즉 μ—΄μ§€ μ•Šλ„λ‘ μ„€μ •ν•˜λŠ” κ²½μš°κ°€ λ§Žμ€λ° μ΄λ•Œ μΏ ν‚€μ˜ λ³€μˆ˜λ₯Ό μ €μž₯ν•˜κ³  24μ‹œκ°„μ˜ λ§Œλ£Œμ‹œκ°„μ„ μ„€μ •ν•˜λŠ” 것이 μ’‹λ‹€.
μ„œλ²„μ €μž₯μ†ŒλŠ” λ°μ΄ν„°μ˜ 동기화가 ν•„μš”ν•˜κΈ° λ•Œλ¬Έμ— κΌ­ ν•„μš”ν•œ κ²½μš°κ°€ μ•„λ‹ˆλΌλ©΄ 전솑을 μ΅œμ†Œν•˜ ν•˜λŠ” 것이 쒋을 것이닀. 이런 이유둜 μ„œλ²„ μ €μž₯μ†ŒλŠ” λ°μ΄ν„°μ˜ 크기가 맀우 ν¬κ±°λ‚˜ λ°˜λ“œμ‹œ μ €μž₯ν•΄μ•Ό ν•˜λŠ” κ²½μš°μ—λ§Œ μ‚¬μš©λœλ‹€.

데이터가 ν¬κΈ°λ‚˜ λ§Œλ£Œμ‹œκ°„μ„ κ³ λ €ν–ˆμ„λ•Œ μœ„ μ €μž₯μ†Œμ˜ 쀑간 μ •λ„μ˜ μ• λ§€ν•œ κ²½μš°κ°€ μžˆμ„ 수 μžˆλ‹€. μ €μž₯μ†Œκ°€ ν•„μš”ν•˜μ§€λ§Œ λ‹€μˆ˜μ˜ 컬럼이 ν•„μš”ν•œ κ²½μš°κ°€ μ•„λ‹ˆλ§Œ λ‹¨μˆœν•œ ν˜•νƒœλΌλ©΄ localStorage, sessionStorageλ₯Ό μ‚¬μš©ν•˜λŠ”κ²Œ 효과적인 방법이닀.

 

! localStorage, sessionStorageλ₯Ό μ–΄λ–€ κ²½μš°μ— μ‚¬μš©ν• κΉŒ


λŒ€λΆ€λΆ„μ˜ λ°μ΄ν„°μ˜ 경우 λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯ν•˜λ―€λ‘œ 둜컬 및 μ„Έμ…˜ μŠ€ν† λ¦¬μ§€κ°€ μ‚¬μš©λ˜λŠ” 곳은 그리 λ§Žμ§€ μ•Šλ‹€. λŒ€λΆ€λΆ„ μž„μ‹œμ μΈ μš©λ„ λ˜λŠ” μΊμ‹œ, history κΈ°λŠ₯을 μœ„ν•˜μ—¬ μ‚¬μš©λœλ‹€. μ•„λž˜μ˜ κ²½μš°κ°€ κ·Έ μ˜ˆμ΄λ‹€.

  • κΈ€ μž‘μ„± 쀑간 쀑간에 μžƒμ–΄λ²„λ¦¬μ§€ μ•ŠκΈ° μœ„ν•œ μž„μ‹œ μ €μž₯μš©λ„
  • μž₯λ°”κ΅¬λ‹ˆλ‚˜ μ’‹μ•„ν•˜λŠ” μ½˜ν…μΈ  λ“± μˆ˜μ‹œλ‘œ λ³€κ²½λ˜λŠ” 경우
  • 방문자의 이동 경둜λ₯Ό μ €μž₯ν•˜μ˜€λ‹€κ°€ 이동할 경우
  • κ·Έ μ™Έ μ„œλ²„μ— λ°˜λ“œμ‹œ μ €μž₯ν•  ν•„μš”κ°€ μ—†λŠ” 경우


그럼 μ•„λž˜μ—μ„œλŠ” 예제λ₯Ό ν†΅ν•˜μ—¬ λ”μš± μžμ„Έν•˜κ²Œ μ•Œμ•„λ³΄μž.

# sessionStorage 예제보기

μ„Έμ…˜μ„ κΈ°μ€€μœΌλ‘œ 데이터가 μ €μž₯ 및 μœ μ§€λ˜κΈ° λ•Œλ¬Έμ— 이 객체에 μ €μž₯된 값은 μΌμ‹œμ μΈ 수λͺ…을 κ°€μ§€κ²Œλœλ‹€. λ§Œμ•½ μ„Έμ…˜μ΄ μ’…λ£Œλ˜λŠ” 경우... λΈŒλΌμš°μ €λ₯Ό λ‹«κ±°λ‚˜ μΌμ •μ‹œκ°„ μ•„λ¬΄λŸ° λ™μž‘λ„ ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ λ‹Ήμ—°νžˆ μ €μž₯된 값은 μ‚­μ œλ  것이닀.

λ§Œμ•½ 데이터가 μ‚­μ œλ˜μ§€ μ•ŠκΈΈ λ°”λž€λ‹€λ©΄ μœ„μ— λ‚˜μ™€μžˆλŠ” localStorageλ₯Ό μ‚¬μš©ν•˜κΈ° λ°”λž€λ‹€. μ•„λž˜μ˜ μ‚¬μš©λ°©λ²•μ€ localStorage와 거의 λ™μΌν•œ λ©”μ†Œλ“œμ™€ ν”„λ‘œνΌν‹°λ₯Ό κ°–λŠ”λ‹€. 즉, λ™μΌν•œ λ°©λ²•μœΌλ‘œ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€ ν•˜κ² λ‹€. 그럼 μ•„λž˜ 예제λ₯Ό μ°Έκ³ ν•˜μž.
(참고둜 μ„Έμ…˜μ„ μ‚¬μš©ν•œ μ €μž₯방법은 λ³΄μ•ˆ 및 μ€‘μš”ν•œ λ°μ΄ν„°μ˜ 경우 λ¬΄λ°©λΉ„λ‘œ λ…ΈμΆœλ˜λŠ” 경우λ₯Ό ν”Όν•˜κΈ° μœ„ν•΄μ„œ μ‚¬μš©λ˜λŠ” κ²½μš°κ°€ λ§Žλ‹€.)

 

 

sessionStorage.setItem("domain", "webisfree.com");
//&nbsp; domainμ΄λž€ ν‚€(key) 값을 μ‚¬μš©ν•˜μ—¬ ν•΄λ‹Ή ν…μŠ€νŠΈλ₯Ό μ €μž₯함

sessionStorage.getItem("domain");
// 킀에 μ €μž₯된 값을 λ°˜ν™˜. μ—¬κΈ°μ„œλŠ” webisfree.com 좜λ ₯됨

sessionStorage.removeItem("domain");
// domain 킀와 데이터 λͺ¨λ‘ μ‚­μ œ

sessionStorage.clear();
// μ €μž₯된 λͺ¨λ“  κ°’ μ‚­μ œ

# localStorage 예제 및 μ½”λ“œλ³΄κΈ°

 

μ•žμ—λ„ μ–ΈκΈ‰ν–ˆμ§€λ§Œ μœ„ 두가지 객체의 차이점은 μ„Έμ…˜μ— λ”°λΌμ„œ 데이터가 μœ μ§€λ˜λŠ”κ°€ μ•ˆλ˜λŠ”κ°€λ‘œ ꡬ뢄할 수 μžˆλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— μ‚¬μš©ν•˜λŠ” 방법도 거의 λ™μΌν•˜λ‹€ ν•˜κ² λ‹€. μ•„λž˜λŠ” localStorage객체의 μ‚¬μš©λ‘œ 자주 μ‚¬μš©λ˜λŠ” λ©”μ†Œλ“œ, ν”„λ‘œνΌν‹°λ₯Ό ν•¨κ»˜ μ•Œμ•„λ³΄μž.



# λ°μ΄ν„°μ˜ μ €μž₯ setItem()νŠΉμ •κ°’μ˜ 데이터λ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•œ λ°©λ²•μœΌλ‘œ μ•„λž˜μ™€ 같이 λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜κ±°λ‚˜ λ¦¬ν„°λŸ΄ν•˜κ²Œ μ‚¬μš©ν•˜λŠ” 두 κ°€μ§€ 방법이 κ°€λŠ₯ν•˜λ‹€. μ•„λž˜ μ˜ˆμ œλŠ” testλž€ μ΄λ¦„μ˜ key값을 μ •ν•˜κ³  이에 123μ΄λž€ 값을 μ €μž₯ν•˜λŠ” μ˜ˆμ œμ΄λ‹€.

localStorage.test = '123';
localStorage.setItem('test', '123');


μ—¬κΈ°μ„œ μ‚¬μš©λœ setItem() λ©”μ†Œλ“œλŠ” 값을 μ €μž₯ν•˜λŠ” κ°„λ‹¨ν•œ λ°©μ‹μœΌλ‘œ key값에 맀칭된 valueλ₯Ό 인자둜 λ„˜κ²¨μ£Όλ©΄ λœλ‹€. 맀우 κ°„λ‹¨ν•˜κ²Œ μ €μž₯ν•  수 μžˆλ‹€. μ•„λž˜λŠ” λ“±λ‘λœ keyκ°’μ˜ valueλ₯Ό μ–»κΈ° μœ„ν•œ 방법이닀.



# 데이터 뢈러였기, getItem()

localStorage.test;
localStorage.getItem('test');


μ—­μ‹œ 직접 킀값을 μž…λ ₯ν•˜κ±°λ‚˜ getItem() λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” 방법 두 κ°€μ§€κ°€ μžˆλ‹€. μ•„λž˜λŠ” νŠΉμ • key 값을 μ§€μš°λŠ” 방법에 λŒ€ν•˜μ—¬ μ•Œμ•„λ³΄μž.

참고둜 전체 localStorage에 λ‹΄κ²¨μžˆλŠ” λͺ¨λ“  값을 ν™•μΈν•˜λ €λ©΄ getItem()에 μ•„λ¬΄λŸ° 값도 λ„˜κΈ°μ§€ μ•ŠμœΌλ©΄ λͺ¨λ“  정보λ₯Ό λ°›μ•„μ˜¬ 수 μžˆλ‹€.

localStorage.getItem();  //&nbsp; 전체 κ°’ λ°›μ•„μ˜€κΈ°


그럼 μ•„λž˜λŠ” 데이터λ₯Ό μ‚­μ œν•˜λŠ” 방법이닀.


# 데이터 μ‚­μ œ, removeItem()μ•„λž˜λŠ” testλΌλŠ” 킀값에 μ €μž₯된 값을 μ‚­μ œν•˜λŠ” μ˜ˆμ œμ΄λ‹€.

localStorage.removeItem('test');
// localStorage κ°μ²΄μ—μ„œ μ›ν•˜λŠ” 값을 μ§€μš°λŠ” 방법

localStorage.clear();
// ν•œλ²ˆμ— μ €μž₯된 λͺ¨λ“  값을 μ‚­μ œν•˜λŠ” 방법


데이터λ₯Ό μ‚­μ œν•  경우 removeItem()을 μ‚¬μš©ν•˜μ—¬ ν•˜λ‚˜λ§Œ μ œκ±°ν•  수 있고 μ•„λ‹ˆλ©΄ λͺ¨λ“  값을 μ§€μšΈ 수 있눈 clear() λ©”μ†Œλ“œλ„ μ‘΄μž¬ν•œλ‹€.