본문 바로가기

Flex

SharedObject 를 사용해서 로컬에 데이터 저장하기

SharedObject를 간단하게 이야기 하면 웹브라우저의 쿠키와 비슷하게 개발자가 원하는 데이터를 로컬에 저장하는 객체이다.

개별 유저에 커스터마이징된 화면이라던지, 이전에 방문했었는지의 여부 라던지.. 개발자가 필요에 의해서 데이터를 저장해야 하는 경우에 사용할 수 있다.

쿠키는 String 데이터만을 가지는데 반해 SharedObject 는 Array, Object 등 복합데이터를 저장할 수 있기 때문에 활용가능성이 무궁무진하다.
(단 메서드는 저장할 수 없다 -ㅅ-)

기본 용량은 100K 이고 저장할 공간의 크기를 늘이거나 줄일 수 있다. 저장하는 데이터의 크기가 정해져 있다면 굳이 크게 할 필요는 없는거니 상황에 맞춰서 적용하면 되겠다.

100K를 넘는 용량을 지정하게 되면 사용자에게 저장하는 것을 허용할 것인지 여부를 묻는 대화상자가 나오게 되는데 아니오 해버리면 사용하지 못하는 상황이 와버리니 주의해서 사용하면 된다.

기본적으로 도메인 기준으로 공유할수 있다. 쿠키처럼 다른 도메인에서 만들어진 SO는 읽을수 없고 같은 도메인에서 만들어진 SO파일만 읽을 수 있다.

만들어지는 파일은 *.sol 확장자를 가지게 되고.. 저장되는 경로는 운영체제 시스템에 따라 다르고 윈도우의 경우는
C:/Document and Setting/계정이름/Application Data/Macromedia/FlashPlayer 하위에 저장이 된다.

var so:SharedObject = SharedObject.getLocal("mySo")
형식으로 불러와서 쓸수 있다
기본적으로 Object 처럼 key value 형식으로 저장을 하게 되고 data 속성을 통해서 내부의 값들을 가져올 수 있다.

공유객체를 읽어오도록 하면 SharedObject객체가 존재 할때는 data 를 읽어오고 데이터가 없으면 새로운 객체를 생성하게 된다.

간단하게 예제를 보면서 확인 해보자.




SharedObject 데이터가 있다면 userName 과 description 에 값이 나온다.
없는경우 왼쪽에서 값을 입력하고 createSo 버튼을 누르면 생성된다.

오른쪽에서 key 텍스트 필드에 "userName" 이나 "description", "rinn" 이라고 입력하고 getSO 버튼을 누르면 아래의 필드에 값이 표시된다.

리프레시 해보면 왼쪽 필드가 채워져서 swf가 로딩될것이다.

스크립트 부분의 소스이다.

import mx.controls.Alert;
private var so:SharedObject;

private function init():void
{
	so = SharedObject.getLocal("mySo");
	if(so.data.userName == undefined)
		Alert.show("ShareObject가 정의되어있지 않습니다");
	else
	{
		txtUserName.text = so.data.userName;
		txtDescription.text = so.data.description;
	}
}

private function createSo():void
{
	setSo("userName",txtUserName.text);
	setSo("description", txtDescription.text);
	
	var ar:Array = [];
	ar.push("http://rinn.kr");
	ar.push("rinn@naver.com");
	setSo("rinn", ar);
}

private function clearSo():void
{
	so.clear();
	txtUserName.text = txtDescription.text = "";
}

private function setSo(key:String, data:*):void
{
	so.data[key] = data;
}

private function getSo(key:String):*
{
	if(so.data[key] == undefined)
	{
		Alert.show(key+" 는 정의되어있지 않습니다");
	}
	return so.data[key];
}

createSo 함수에서 보면 저장할 수 있는 데이터가 여러가지 형식이 가능하기 때문에 활용범위가 넓다.

기본적으로 페이지의 이동이나 브라우저가 닫힐때 저장을 하게 되는데 필요할때 즉시 저장하기 위해서는 so.flush() 를 사용하면 된다.
삭제하기 위해서는 so.clear()를 사용한다.

더 자세한 메서드는 레퍼런스 (http://livedocs.adobe.com/flex/3/langref/flash/net/SharedObject.html)를 참조하면 된다.