develop custom_top_html:no
default debug random = 0 / type = READ / detected = READ

안녕하세요.

쌩광부입니다.

 

이번 시간에는 RN에서 데이터를 파일로 저장하는 방법을 배워 보겠습니다.

간단하게 파일 입출력 함수를 이용해서 데이터를 저장할 수도 있겠지만 모바일에서는 보안 관련 문제가 많기 때문에 파일 입출력시 제한사항이 좀 있을 수 있습니다.

그래서 저희가 만드는 모바일 지갑에서는 AsycStorage 패키지를 이용해 PrivateKey와 지갑 주소들을 저장합니다.

오늘은 바로 그 AsycStorage에 대해서 설명하도록 하겠습니다.

 

#5. React Native AsyncStorage

 

1. AsyncStorage란?

 

비동기식으로 데이터를 저장하는 RN의 기본 패키지인데요. 별도로 설치해야될 패키지는 없습니다.

Async라는 말이 들어가는것을 보면 이것이 비동기식임을 의미하는데요.

즉, 저장 명령을 내리면 저장이 완료될때까지 기다리는것이 아니고 저장 되던지 말던지 그냥 다음 작업을 진행한다는 것이죠.

그런데 왜 비동기식으로 해야되는거지?

만약 동기식으로 많은 데이터를 한꺼번에 저장하게 되면 화면이 멈춰진 상태가 됩니다.

사용자가 봤을때는 뭐하는건지 답답하겠죠?

그렇게 때문에 비동기식으로 뒤에서 뭔가 어려운 작업을 진행하고 화면은 그냥 자연스럽게 욺직이게 되는거죠.

그럼 앱이 훤씬 더 그럴사하게 보이겠죠. ^^

 

물론 JS가 기본적으로 대부분 비동기식으로 동작되기 때문에 그리 새로운 것도 아닙니다.

이러한 비동기식 작업에서는 결과값을 Callback 함수로 받게되는데요.

아래 예제를 보시면 모두 명령을 내리고 거기에 Callback 함수 기술한 것을 볼 수 있습니다.

JS나 RN을 처음 보시는 분들은 조금 생소하시겠지만 그냥 그렇게 해야되는구나 하시면 됩니다.

 

음...개발자들 간에는 JS를 Callback 지옥이라 부르는데요.

그 만큼 많은 Callback을 코딩해야 되기 때문에 전체적으로 매우 복잡한 구조를 가지게 됩니다.

어쨌든 RN이 JS기반이기 때문에 어쩔 수 없습니다. Callback 지옥에 들어가야 합니다. ㅠㅠ

 

AsyncStorage는 Key, Value 형태로 데이터를 저장합니다.

즉,

Name=쌩광부

Address=서울시

이런식으로 말이죠.

앞쪽에 있는것이 Key, 뒤에 값이 Value

이런 형식으로 지정된 곳에 저장되는 방식입니다.

AsycStorage를 이용하면 모바일 기기에서 알아서 지정된 위치에 저장되기 때문에 어디에 저장되는지는 알 필요는 없습니다.

 

2. AsyncStorage 사용하기

 

당연히 import를 해줘야 하고요.

import { AsyncStorage } from 'react-native';

 

데이터를 저장할때는 setItem 함수를 이용합니다.

AsyncStorage.setItem('Name', '쌩광부', (error) => {

  if(error) {

    console.log(error);

  }

});

만약 저장하기에 실패했다면 error 변수에 에러값이 들어가 있습니다.

 

데이터를 불러올때는 getItem 함수를 이용합니다.

AsyncStorage.getItem('Name', (error, result) => {

  if(error) {

    console.log(error);

  }

  else {

    console.log(result);

  }

});

 

위와 같이 하면 result 변수에 '쌩광부'가 들어가 있겠고요.

만약 불러오기에 실패했다면 error 변수에 에러값이 들어가 있습니다.

 

데이터를 삭제할때는 removeItem 함수를 이용합니다.

removeItem('Name', (error) => {

  if(error) {

    console.log(error);

  }

});

 

이제 좀 더 복잡한 방식으로 여러가지 값을 동시에 저장하는 방법이 있는데요.

 

let keyValues = ["Name": "쌩광부", "Address": "서울시"];

AsyncStorage.multiSet(keyValues, (error) => {

  if(error) {

    console.log(error);

  }

});

 

위와 같이 multiSet 함수를 이용하면 동시에 여러 데이터를 저장할 수 있습니다.

 

예상하셨겠지만 multiGet 함수를 이용하면 여러 데이터를 불러올 수 있겠죠?

 

let keys = ["Name", "Address"];

AsyncStorage.multiGet(keys, (error, stores) => {

  for(let n in stores) {

    let key = store[i][0];

    let value = store[i][1];

  });

});

 

위와 같이 하면 key, value를 반복적으로 얻어올 수 있습니다.

 

만약 우리가 현재 저장된 모든 값을 얻어오고 싶을때는 getAllKeys 함수를 이용합니다.

 

AsyncStorage.getAllKeys((error, keys) => {

  if(!error) {

    AsyncStorage.multiGet(keys, (error, stores) => {

      for(let n in stores) {

        let key = store[i][0];

        let value = store[i][1];

      });

    });

  }

});

 

위와 같이 getAllKeys 함수로 저장된 모든 Key값을 불러오고 multiGet 함수를 이용해 모든 Key에 대한 Value를 얻어올 수 있습니다.

 

AsyncStorage에 대한 자세한 내용은 아래 링크를 참고하세요.

https://facebook.github.io/react-native/docs/asyncstorage#docsNav

 

그럼 오는 강좌는 마치도록 하겠습니다.

다음 강좌에서는 이전 시간에 배운 내용과 함께 본격적으로 RN에서 지갑을 만들어 보도록 하겠습니다.

많은 기대 부탁드립니다.

 

행복한 주말 보내세요.

 

저의 모든 강좌를 보시려면 블로그를 방문해주세요.

https://www.ddengle.com/@TopMining


[알림: 이 게시글은 관리자에 의해 ''에서 '개발'로 이동되었습니다]
15,206

쌩광부님의 서명

댓글 5
default debug random = 0 / type = READ / detected = READ

List of Articles
번호 분류 제목 추천 수 조회 수 글쓴이 날짜
1740 개발 [비트맥스(BITMEX)] 이더리움 눌림목 자동매매 봇 무료 배포 안녕하세요. 암호화폐/FX외환/해외선물 자동 매매를 개발하고있는 코인도리 팀입니다.   작년에 7월 땡글에서 처음 비트맥스 역추세 물타기 봇을 공개 했었습니다. 다들 아시다시피 역추세 매매... file 0 20537
coindori
2020.08.18
1739 개발 혹시 코인원이나 빗썸 API로 Liquidity 나 마켓메이킹 봇 개발 가능하신분 있나요?           혹시 코인원이나 빗썸 API로 Liquidity 나 마켓메이킹 봇 개발 가능하신분 있나요?   도움 좀 받고 싶습니다             1 0 18774
토끼눈깔
2020.08.14
1738 개발 비트멕스 HTS를 만들어 봤습니다.     본격적인 서비스전에 몇몇 지인들과 클로즈 베타테스트를 하고 유튜브를 통해 매일 점검하고 있습니다.   멘땅에 헤딩하는 차원으로 제작된지라 고생 많이 했네요.   조만간 자신만의 봇도 ... 7 file 5 20389
억소리
2020.08.05
1737 개발 ETH 풀노드 구축해드릴게요.   ETH 노드 구축은 트랜잭션을 발생시키기 위해서 필요로하죠 fast, full 등 여러가지 가 있으나, 트랜잭션 검증을 위해서는 풀노드가 필요로 합니다.   구축이란건 특별한 건 아니며 geth 데몬... 1 0 17234
김대박
2020.07.29
1736 개발 geth 에서 외부로 토큰 발송이 아주 오랫동안 펜딩되는 이유?       geth 에서 외부로 토큰 발송이 아주 오랫동안 펜딩되는 이유가 무엇이 있을까요? 벌써 5일째입니다.                 5 0 15145
김대박
2020.07.25
1735 개발 [전략공개]비트맥스, 바이빗, 업비트 추세매매프로그램(봇) 무료로 배포합니다 안녕하세요.   백테스트랑 일치하는 비트코인 추세매매프로그램(봇)을 무료로 배포합니다.   봇들을 몇가지 사용해봤는데 대부분 역추세매매봇이라서 큰수익을 기대하기는 어렵고   수익을 내다... 7 file 2 15746
Destroy
2020.07.24
1734 개발 빗썸 api 를 이용한 유틸 프로그램을 만들어보고있는데 조언해주시면 감사드립니다.   어떤 기능들이 들어가면 좋을까요?~? 취미삼아 + 학습용으로 개발 중이라 아직은 추후 업데이트 될때마다 자동으로 업데이트 되는 기능, 실시간 코인 상황 보여주는 기능 이 두가지밖에 안들어... 1 file 0 14945
끼야아아아알
2020.06.11
1733 개발 거래소 api로 프로그램 개발했습니다. 빗썸 api로 프로그램 개발했습니다. 친구의 제안으로 공부 할 겸 만들어 본게 여기까지 왔네요. 코인하는 친구의 아이디어와 저의 개발로 탄생했습니다.  기존 메이저앱에서 아쉬웠던점을 보강한... file 1 16586
스누피111
2020.06.02
1732 질문 직접 개발한 코인의 GPU 채굴은 어떻게 하나요? 라이트코인 포크로 코인을 만들었구요, 데몬에 setgenreate true n 명령으로 채굴 할 수도 있지만.. 제가 윈하는건 gpu 채굴입니다.   gpu 채굴 프로그램 몇개 받아봤는데, 다들 기존 유명 코인... 2 2 13040
비폭력무저항
2020.05.28
1731 개발 안녕하세요. 봇 개발 문의 드리려고 합니다.      여기 개시판에 이런 문의 드려도 되는지 모르겠습니다.      트레이딩 봇 개발 가능하신 분은 쪽지 부탁드립니다.      상세한건 쪽지나 텔레그렘으로 상담 드리겠습니다.                 0 10747
쏴니
2020.05.19
1730 개발 봇개발       트레이딩봇, 거래소등 요구하시는대로 완벽개발해드립니다. 쪽지주세요                 13 0 10366
송하늬다
2020.04.22
1729 개발 빗썸 프로(글로벌) API 에서 fee 를 구하는 방법 문의      안녕하세요. 선배님들  코로나로 부터  항상 건강지키시길 기원합니다.    다름이 아니라..  빗썸 프로 api 로 개발을 진행하고 있는데요.    fee 를 구하는 법에 대해 문의 드립니다.    2... 1 0 8402
부자아들
2020.04.18
1728 개발 트레이딩봇 한달 수익률 공개합니다.   어떤 봇인지는 지난번 게시물에 올렸습니다. https://www.ddengle.com/index.php?mid=develop&category=6201952&document_srl=11829923   봇으로 소액으로만 매매하다가 지난번 대폭... 11 file 1 15510
제타마인드
2020.04.15
1727 개발 빗썸 호가창 API 콜 하는중에 빗썸 자체 서버 오류가 나는 경우도 있네요 Traceback (most recent call last):   File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python36_64\lib\threading.py", line 916, in _bootstrap_inner     self.run()   File "... 4 0 7142
월하소년
2020.03.30
1726 질문 업비트 웹소켓 데이터 활용중인데요. 클래스 내부에서 소켓 함수 정의가 안되네요.     업비트 웹소켓 데이터 활용중인데요. 클래스 내부에서 소켓 함수 정의가 안되네요.   클래스 내부에 정의하면 아래와 같이 에러가 뜨네요.     ws = websocket.WebSocketApp("wss://api.upbi... 2 0 6720
슬픈낙여
2020.03.29
1725 개발 업비트 데이터를 웹소켓으로 가져오는데요. 메인함수가 실행이 안됩니다. 아시는분좀 봐주세여 # 업비트 웹소켓 호가 조회 def on_message(ws, message): global testText get_message = json.loads(message.decode('utf-8')) # json 형태로 변경하는 방법인건 같음 print('message : ' + s... 14 0 7777
슬픈낙여
2020.03.28
1724 질문 캣봇 정식 오픈했나요?           오픈했나요? 한번써보고싶은데 바쁘다보니 기회를놓쳤네요..             1 0 5327
SIC
2020.03.20
1723 질문 캐셔레스트..API 파이썬으로 구현하신분 코드좀 구매할수 있을까요??   이거 아래꺼 코드구현 하신분..   토큰발행 시세조회 구매 잔고조회 주문조회 주문취소   20만원에 코드좀 구매할 수 있을까요?   뭔가    캐셔는 친절하지가 않네여 개발 문서들이.. 제가 실... 13 0 4478
슬픈낙여
2020.03.17
1722 개발 주식 트레이딩 시스템을 만들때   안녕하세요.  땡글 선배님들 코로나에 항상 몸 건강하십시요.   코인 트레이딩 시스템을 만들다가 주식 트레이딩 시스템을 만들어 보려고 합니다.     (질문) 1.  HTS 시스템이 어느 증권사가 ... 1 0 4206
부자아들
2020.03.10
1721 개발 통합 전자 웹지갑 제작해보았습니다. 통합 전자 웹지갑 제작해보았습니다. https://www.samplewallet.org/   이더리움, ERC-20 토큰은 자체 풀노드 노드서버 구축해서 RCP 통신함. 거래소와 같이 DB 쓰는 버전와 안쓰는 버전 2개로 ... 5 4 4207
김대박
2020.02.29
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 92 Next
/ 92
default debug random = 0 / type = READ / detected = READ