SlideShare a Scribd company logo
1 of 15
데이터 저장과 사용
데이터 저장 유형
대용량 및 일반 데이터
설정 상태 데이터
빈번히 변경되는 데이터 파일
Preference
SQLite 데이터베이스
영속성 있는 데이터들
파일 위치에 따라서
리눅스 기반 파일
App 범위
SD 카드 속 파일
파일 시스템
접근에 대한 보안 레벨이 다릅니다.
시스템 파일 접근
• 안드로이드 파일 시스템은 Linux 시스템.
사용되는 라이브러리는 java 라이브러리.
• App 마다 접근 가능 공간 한정
– 위치: /data/data/패키지명/files 하단
– 해당 위치 하단 no – depth. 이름으로만 구분
• 접근자는 Context 수준에서 제공
– public abstract FileInputStream openFileInput (String name)
• Name에 “/”가 포함되면 에러 처리.
– public abstract FileOutputStream openFileOutput (String name,
int mode)
• Mode는 접근도에 따라서
MODE_APPEND, MODE_PRIVATE, MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE
일반적인 파일 처리 과정
App에서 사용되는 파일들로서
Package에 포함 배포되는
res 폴더 하단 raw 폴더 안에
있는 파일에 대한 처리
다른 App에서 접근
• 다른 앱에서 접근을 허용하게 하기 위해서는 권한 정의.
• 다른 앱에서 접근하기 위해서는 파일 소유 Context를 경
유해서 들어와야 합니다.
– Context otherContext = createPackageContext(“exam.andexam”,
Context.CONTEXT_IGNORE_SECURITY);
FileInputStream fis =otherContext.openFileInput(“test.txt”);
SD 카드 속 파일 접근
• SD 카드는 공용 저장소.
• 안드로이드는 SD 카드에 대해서
보안 관리 하지 않음.
• Java에서 일반 파일 다루듯.
• 주의할 점은 경로를 hard
coding이 아닌 아래 방법 통해
서 취할 것.
– Environment.getExternalStorageDirectory()
Preference 사용하기
• App이 설치되어서 삭제되기 전까지 꾸준히 관리되어야
할 데이터들을 위한 기능
• Preference를 통해 관리되는 정보는 xml 파일 형태로 저
장
– 입력/출력 형태는 Map (key/value) 형태.
– 파일이라 동시성 고려.
Transaction 처리 = commit, editor
기본값.
꼬옥 활용!
조직화된 데이터 = SQLite
• SQLite = 내장형 소규모 데이터베이스
– 안드로이드 내에 내장해서 제공.
• SQLiteOpenHelper = DB를 생성/오픈 담당
– abstract class
– SQLiteOpenHelper를 상속해서
onCreate, onUpgrade, onOpen을 구현.
– getReadableDatabase, getWritableDatabase 호출 될 때
적절히 DB 생성 / 초기화 / 갱신을 맡아서 수행
• 위 두 함수는 return에 시간이 소요된다. 그렇기 때문에, 가능한
Main Thread에서 호출은 피하도록 한다.
DBHelper : SQLite DB 초기화
참고: 관련 SQL들
onCreate: 처음 수행/초기화
onUpdate: 업데이트 발생 시 초기화
1. dbVersrion 값을 변경.
2. 수행 시에 onUpgrade 수행
DB와 Cursor
• Sqlite에 select query를 하는 경우에 Cursor를 반환. 그리고 사용하
고 난 뒤에는 cursor도 db도 close를 해야 합니다.
• 일반적인 경우에는 close에 문제가 되지 않습니다. 그러나 쿼리를 하
고 지속적으로 화면에서 쓰이는 Cursor는 정리 시점이 모호합니다.
• 예) 댓글 목록을 리스트로 보여주는 경우, 리스트를 아예 닫지 않는
이상 cursor는 지속 사용이 되고, db도 open되어 있어야 합니다.
• 이를 프로그램적으로 제어하기 힘들어서 제공되는 것이 바로
managedQuery입니다.
– 안드로이드 3.0 (허니컴) 부터는 CursorLoader를 권장.
– 액티비티가 해제될 때 Cursor 객체의 리소스도 자동 해제됩니다.

More Related Content

Viewers also liked

15 content provider
15 content provider15 content provider
15 content provider운용 최
 
한 번에 개발하는 안드로이드&iOS 앱 with 앱메소드
한 번에 개발하는 안드로이드&iOS 앱 with 앱메소드한 번에 개발하는 안드로이드&iOS 앱 with 앱메소드
한 번에 개발하는 안드로이드&iOS 앱 with 앱메소드Devgear
 
안드로이드에서 spinner와 DB 연결 간단 예제
안드로이드에서 spinner와 DB 연결 간단 예제안드로이드에서 spinner와 DB 연결 간단 예제
안드로이드에서 spinner와 DB 연결 간단 예제운용 최
 
안드로이드 어플 개발 전략 10가지 2부
안드로이드 어플 개발 전략 10가지 2부안드로이드 어플 개발 전략 10가지 2부
안드로이드 어플 개발 전략 10가지 2부mosaicnet
 
안드로이드 DB, 서버 연동하기
안드로이드 DB, 서버 연동하기안드로이드 DB, 서버 연동하기
안드로이드 DB, 서버 연동하기은아 정
 
졸업프로젝트 어플리케이션 발표자료
졸업프로젝트 어플리케이션 발표자료졸업프로젝트 어플리케이션 발표자료
졸업프로젝트 어플리케이션 발표자료Do Hyun Youn
 
QR Parking 전국캡스톤디자인 경진대회 발표자료 2014
QR Parking 전국캡스톤디자인 경진대회 발표자료 2014QR Parking 전국캡스톤디자인 경진대회 발표자료 2014
QR Parking 전국캡스톤디자인 경진대회 발표자료 2014Jong-Hyun Kim
 

Viewers also liked (7)

15 content provider
15 content provider15 content provider
15 content provider
 
한 번에 개발하는 안드로이드&iOS 앱 with 앱메소드
한 번에 개발하는 안드로이드&iOS 앱 with 앱메소드한 번에 개발하는 안드로이드&iOS 앱 with 앱메소드
한 번에 개발하는 안드로이드&iOS 앱 with 앱메소드
 
안드로이드에서 spinner와 DB 연결 간단 예제
안드로이드에서 spinner와 DB 연결 간단 예제안드로이드에서 spinner와 DB 연결 간단 예제
안드로이드에서 spinner와 DB 연결 간단 예제
 
안드로이드 어플 개발 전략 10가지 2부
안드로이드 어플 개발 전략 10가지 2부안드로이드 어플 개발 전략 10가지 2부
안드로이드 어플 개발 전략 10가지 2부
 
안드로이드 DB, 서버 연동하기
안드로이드 DB, 서버 연동하기안드로이드 DB, 서버 연동하기
안드로이드 DB, 서버 연동하기
 
졸업프로젝트 어플리케이션 발표자료
졸업프로젝트 어플리케이션 발표자료졸업프로젝트 어플리케이션 발표자료
졸업프로젝트 어플리케이션 발표자료
 
QR Parking 전국캡스톤디자인 경진대회 발표자료 2014
QR Parking 전국캡스톤디자인 경진대회 발표자료 2014QR Parking 전국캡스톤디자인 경진대회 발표자료 2014
QR Parking 전국캡스톤디자인 경진대회 발표자료 2014
 

Similar to 16 데이터 저장과 사용

3장 이클립스 기반구조 eclipser
3장 이클립스 기반구조 eclipser3장 이클립스 기반구조 eclipser
3장 이클립스 기반구조 eclipserbrodiebrodie
 
Docspin 에셋에 대해
Docspin 에셋에 대해Docspin 에셋에 대해
Docspin 에셋에 대해현욱 김
 
Chapter 17
Chapter 17Chapter 17
Chapter 17nacheon
 
I/O '19 Extended in Korea Android : What's New in Shared Storage
I/O '19 Extended in Korea Android : What's New in Shared StorageI/O '19 Extended in Korea Android : What's New in Shared Storage
I/O '19 Extended in Korea Android : What's New in Shared StorageMyungwook Ahn
 
LevelDB 간단한 소개
LevelDB 간단한 소개LevelDB 간단한 소개
LevelDB 간단한 소개종빈 오
 
Hadoop Introduction (1.0)
Hadoop Introduction (1.0)Hadoop Introduction (1.0)
Hadoop Introduction (1.0)Keeyong Han
 
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4Seok-joon Yun
 
141 deview 2013 발표자료(박준형) v1.1(track4-session1)
141 deview 2013 발표자료(박준형) v1.1(track4-session1)141 deview 2013 발표자료(박준형) v1.1(track4-session1)
141 deview 2013 발표자료(박준형) v1.1(track4-session1)NAVER D2
 
ibatis_khhan
ibatis_khhanibatis_khhan
ibatis_khhanohgamja3
 
about hadoop yes
about hadoop yesabout hadoop yes
about hadoop yesEunsil Yoon
 
서울대학교 IAB 강의 Pytorch(파이토치) CNN 실습 수업
서울대학교 IAB 강의 Pytorch(파이토치) CNN 실습 수업서울대학교 IAB 강의 Pytorch(파이토치) CNN 실습 수업
서울대학교 IAB 강의 Pytorch(파이토치) CNN 실습 수업Hyunwoo Kim
 
10 동기및비동기장치io
10 동기및비동기장치io10 동기및비동기장치io
10 동기및비동기장치iossuser3fb17c
 
Object storage의 이해와 활용
Object storage의 이해와 활용Object storage의 이해와 활용
Object storage의 이해와 활용Seoro Kim
 
Scalable web architecture and distributed systems
Scalable web architecture and distributed systemsScalable web architecture and distributed systems
Scalable web architecture and distributed systemseva
 
Scalable web architecture and distributed systems
Scalable web architecture and distributed systemsScalable web architecture and distributed systems
Scalable web architecture and distributed systems현종 김
 

Similar to 16 데이터 저장과 사용 (20)

3장 이클립스 기반구조 eclipser
3장 이클립스 기반구조 eclipser3장 이클립스 기반구조 eclipser
3장 이클립스 기반구조 eclipser
 
Portfolio
PortfolioPortfolio
Portfolio
 
Docspin 에셋에 대해
Docspin 에셋에 대해Docspin 에셋에 대해
Docspin 에셋에 대해
 
Chapter 17
Chapter 17Chapter 17
Chapter 17
 
I/O '19 Extended in Korea Android : What's New in Shared Storage
I/O '19 Extended in Korea Android : What's New in Shared StorageI/O '19 Extended in Korea Android : What's New in Shared Storage
I/O '19 Extended in Korea Android : What's New in Shared Storage
 
LevelDB 간단한 소개
LevelDB 간단한 소개LevelDB 간단한 소개
LevelDB 간단한 소개
 
Hadoop Introduction (1.0)
Hadoop Introduction (1.0)Hadoop Introduction (1.0)
Hadoop Introduction (1.0)
 
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4
[2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4
 
Html5
Html5 Html5
Html5
 
CouchDB - Introduction - Korean
CouchDB - Introduction - KoreanCouchDB - Introduction - Korean
CouchDB - Introduction - Korean
 
141 deview 2013 발표자료(박준형) v1.1(track4-session1)
141 deview 2013 발표자료(박준형) v1.1(track4-session1)141 deview 2013 발표자료(박준형) v1.1(track4-session1)
141 deview 2013 발표자료(박준형) v1.1(track4-session1)
 
Git
Git Git
Git
 
Ibatis
IbatisIbatis
Ibatis
 
ibatis_khhan
ibatis_khhanibatis_khhan
ibatis_khhan
 
about hadoop yes
about hadoop yesabout hadoop yes
about hadoop yes
 
서울대학교 IAB 강의 Pytorch(파이토치) CNN 실습 수업
서울대학교 IAB 강의 Pytorch(파이토치) CNN 실습 수업서울대학교 IAB 강의 Pytorch(파이토치) CNN 실습 수업
서울대학교 IAB 강의 Pytorch(파이토치) CNN 실습 수업
 
10 동기및비동기장치io
10 동기및비동기장치io10 동기및비동기장치io
10 동기및비동기장치io
 
Object storage의 이해와 활용
Object storage의 이해와 활용Object storage의 이해와 활용
Object storage의 이해와 활용
 
Scalable web architecture and distributed systems
Scalable web architecture and distributed systemsScalable web architecture and distributed systems
Scalable web architecture and distributed systems
 
Scalable web architecture and distributed systems
Scalable web architecture and distributed systemsScalable web architecture and distributed systems
Scalable web architecture and distributed systems
 

More from 운용 최

Wot(daliworks) 20131113
Wot(daliworks) 20131113Wot(daliworks) 20131113
Wot(daliworks) 20131113운용 최
 
NIPA SW Insight Report '13.08
NIPA SW Insight Report '13.08NIPA SW Insight Report '13.08
NIPA SW Insight Report '13.08운용 최
 
Agile Spirit Base On The Book "Agile Samuari"
Agile Spirit Base On The Book "Agile Samuari"Agile Spirit Base On The Book "Agile Samuari"
Agile Spirit Base On The Book "Agile Samuari"운용 최
 
21 application and_network_status
21 application and_network_status21 application and_network_status
21 application and_network_status운용 최
 
20 handler and_async_task
20 handler and_async_task20 handler and_async_task
20 handler and_async_task운용 최
 
18 안드로이드 리스트뷰_속도향상
18 안드로이드 리스트뷰_속도향상18 안드로이드 리스트뷰_속도향상
18 안드로이드 리스트뷰_속도향상운용 최
 
19 나만의 view 만들기
19 나만의 view 만들기19 나만의 view 만들기
19 나만의 view 만들기운용 최
 
17 adapter view & db
17 adapter view & db17 adapter view & db
17 adapter view & db운용 최
 
14 broad castreceiver
14 broad castreceiver14 broad castreceiver
14 broad castreceiver운용 최
 
13 service 좀더
13 service 좀더13 service 좀더
13 service 좀더운용 최
 
11 tablet 대응 가이드
11 tablet 대응 가이드11 tablet 대응 가이드
11 tablet 대응 가이드운용 최
 
10 view orientation_change
10 view orientation_change10 view orientation_change
10 view orientation_change운용 최
 
09 android keyboard & layout
09 android keyboard & layout09 android keyboard & layout
09 android keyboard & layout운용 최
 
08 fragment 태블릿 대응
08 fragment   태블릿 대응08 fragment   태블릿 대응
08 fragment 태블릿 대응운용 최
 
07 다양한 device_대응_방법
07 다양한 device_대응_방법07 다양한 device_대응_방법
07 다양한 device_대응_방법운용 최
 
06 activity stack and back, flag
06 activity stack and back, flag06 activity stack and back, flag
06 activity stack and back, flag운용 최
 

More from 운용 최 (20)

Wot(daliworks) 20131113
Wot(daliworks) 20131113Wot(daliworks) 20131113
Wot(daliworks) 20131113
 
NIPA SW Insight Report '13.08
NIPA SW Insight Report '13.08NIPA SW Insight Report '13.08
NIPA SW Insight Report '13.08
 
Agile Spirit Base On The Book "Agile Samuari"
Agile Spirit Base On The Book "Agile Samuari"Agile Spirit Base On The Book "Agile Samuari"
Agile Spirit Base On The Book "Agile Samuari"
 
Uml intro 1
Uml intro 1Uml intro 1
Uml intro 1
 
Uml intro 0
Uml intro 0Uml intro 0
Uml intro 0
 
21 application and_network_status
21 application and_network_status21 application and_network_status
21 application and_network_status
 
20 handler and_async_task
20 handler and_async_task20 handler and_async_task
20 handler and_async_task
 
18 안드로이드 리스트뷰_속도향상
18 안드로이드 리스트뷰_속도향상18 안드로이드 리스트뷰_속도향상
18 안드로이드 리스트뷰_속도향상
 
19 나만의 view 만들기
19 나만의 view 만들기19 나만의 view 만들기
19 나만의 view 만들기
 
17 adapter view & db
17 adapter view & db17 adapter view & db
17 adapter view & db
 
14 broad castreceiver
14 broad castreceiver14 broad castreceiver
14 broad castreceiver
 
13 service 좀더
13 service 좀더13 service 좀더
13 service 좀더
 
12 service
12 service12 service
12 service
 
11 tablet 대응 가이드
11 tablet 대응 가이드11 tablet 대응 가이드
11 tablet 대응 가이드
 
10 view orientation_change
10 view orientation_change10 view orientation_change
10 view orientation_change
 
09 android keyboard & layout
09 android keyboard & layout09 android keyboard & layout
09 android keyboard & layout
 
08 fragment 태블릿 대응
08 fragment   태블릿 대응08 fragment   태블릿 대응
08 fragment 태블릿 대응
 
08 font size
08 font size08 font size
08 font size
 
07 다양한 device_대응_방법
07 다양한 device_대응_방법07 다양한 device_대응_방법
07 다양한 device_대응_방법
 
06 activity stack and back, flag
06 activity stack and back, flag06 activity stack and back, flag
06 activity stack and back, flag
 

16 데이터 저장과 사용

  • 2. 데이터 저장 유형 대용량 및 일반 데이터 설정 상태 데이터 빈번히 변경되는 데이터 파일 Preference SQLite 데이터베이스 영속성 있는 데이터들
  • 3. 파일 위치에 따라서 리눅스 기반 파일 App 범위 SD 카드 속 파일 파일 시스템 접근에 대한 보안 레벨이 다릅니다.
  • 4. 시스템 파일 접근 • 안드로이드 파일 시스템은 Linux 시스템. 사용되는 라이브러리는 java 라이브러리. • App 마다 접근 가능 공간 한정 – 위치: /data/data/패키지명/files 하단 – 해당 위치 하단 no – depth. 이름으로만 구분 • 접근자는 Context 수준에서 제공 – public abstract FileInputStream openFileInput (String name) • Name에 “/”가 포함되면 에러 처리. – public abstract FileOutputStream openFileOutput (String name, int mode) • Mode는 접근도에 따라서 MODE_APPEND, MODE_PRIVATE, MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE
  • 5. 일반적인 파일 처리 과정 App에서 사용되는 파일들로서 Package에 포함 배포되는 res 폴더 하단 raw 폴더 안에 있는 파일에 대한 처리
  • 6. 다른 App에서 접근 • 다른 앱에서 접근을 허용하게 하기 위해서는 권한 정의. • 다른 앱에서 접근하기 위해서는 파일 소유 Context를 경 유해서 들어와야 합니다. – Context otherContext = createPackageContext(“exam.andexam”, Context.CONTEXT_IGNORE_SECURITY); FileInputStream fis =otherContext.openFileInput(“test.txt”);
  • 7. SD 카드 속 파일 접근 • SD 카드는 공용 저장소. • 안드로이드는 SD 카드에 대해서 보안 관리 하지 않음. • Java에서 일반 파일 다루듯. • 주의할 점은 경로를 hard coding이 아닌 아래 방법 통해 서 취할 것. – Environment.getExternalStorageDirectory()
  • 8. Preference 사용하기 • App이 설치되어서 삭제되기 전까지 꾸준히 관리되어야 할 데이터들을 위한 기능 • Preference를 통해 관리되는 정보는 xml 파일 형태로 저 장 – 입력/출력 형태는 Map (key/value) 형태. – 파일이라 동시성 고려. Transaction 처리 = commit, editor 기본값. 꼬옥 활용!
  • 9. 조직화된 데이터 = SQLite • SQLite = 내장형 소규모 데이터베이스 – 안드로이드 내에 내장해서 제공. • SQLiteOpenHelper = DB를 생성/오픈 담당 – abstract class – SQLiteOpenHelper를 상속해서 onCreate, onUpgrade, onOpen을 구현. – getReadableDatabase, getWritableDatabase 호출 될 때 적절히 DB 생성 / 초기화 / 갱신을 맡아서 수행 • 위 두 함수는 return에 시간이 소요된다. 그렇기 때문에, 가능한 Main Thread에서 호출은 피하도록 한다.
  • 10. DBHelper : SQLite DB 초기화
  • 13. onUpdate: 업데이트 발생 시 초기화 1. dbVersrion 값을 변경. 2. 수행 시에 onUpgrade 수행
  • 14.
  • 15. DB와 Cursor • Sqlite에 select query를 하는 경우에 Cursor를 반환. 그리고 사용하 고 난 뒤에는 cursor도 db도 close를 해야 합니다. • 일반적인 경우에는 close에 문제가 되지 않습니다. 그러나 쿼리를 하 고 지속적으로 화면에서 쓰이는 Cursor는 정리 시점이 모호합니다. • 예) 댓글 목록을 리스트로 보여주는 경우, 리스트를 아예 닫지 않는 이상 cursor는 지속 사용이 되고, db도 open되어 있어야 합니다. • 이를 프로그램적으로 제어하기 힘들어서 제공되는 것이 바로 managedQuery입니다. – 안드로이드 3.0 (허니컴) 부터는 CursorLoader를 권장. – 액티비티가 해제될 때 Cursor 객체의 리소스도 자동 해제됩니다.