책 소개
이 책에서 다루는 내용
■ SQLite 데이터베이스와 다른 관계형 데이터베이스의 차이점
■ SQL DDL를 통한 데이터베이스 구조화 및 DML를 이용한 데이터 조작
■ SQLite 데이터 타입 정의
■ 빠르고 효율적인 접근을 위한 데이터의 구조적 저장
■ 데이터베이스 생성, 조회, 수정, 삭제(CRUD) 연산 및 질의
■ 콘텐트 프로바이더를 이용한 앱 간 데이터 공유
■ 스레드 문제 처리 및 데이터의 효과적 표시
■ 새로운 액티비티나 서비스 시작 시 안드로이드 인텐트 API를 이용한 액티비티 간 데이터 전달
■ 앱과 원격 웹 API 간 통신 방법
■ 앱-서버 통신 관리 및 일반적인 문제 회피
■ 안드로이드 데이터 바인딩 API를 사용한 코드 축소 및 성능 향상
이 책의 대상 독자
안드로이드 앱을 조금이나마 만들어본 개발자를 위한 책이다. 특히 기본적인 안드로이드 컴포넌트(액티비티(Activity), 프래그먼트(Fragment), 인텐트(Intent), 애플리케이션 매니페스트(Manifest))를 이해하고 있고, 안드로이드 스레드(Thread) 모델에 익숙하다면 더욱 도움이 될 것이다. 관계형 데이터 시스템에 대한 지식이 있다면 더욱 도움이 되겠지만, 이 책에서 다룰 내용을 이해하는 데 반드시 필요한 것은 아니다.
이 책의 구성
이 책은 관계형 데이터베이스 이론과 관계형 모델의 역사, 이 모델이 어떻게 탄생했는지에 대한 논의로 시작한다. 그리고 구조화 질의어(SQL)를 거친 후 SQL을 사용해 어떻게 데이터베이스를 구축하고 다루며 조회하는지 알아볼 것이다. SQL을 논의할 때 안드로이드에 특화된 설명도 있지만 안드로이드에 특화되지 않은 일반적인 SQL을 주로 다룰 것이다.
SQLite에 관한 정보와 안드로이드와 어떤 관련이 있는지도 알아볼 것이다. 또한 이 책은 데이터베이스와 상호작용할 수 있는 안드로이드 API와 데이터베이스 모범 사례를 다뤘다.
데이터베이스, SQL, SQLite 기초와 함께 안드로이드 앱 개발자가 흔히 데이터베이스를 사용하면서 직면하는 문제에 대한 해결책도 다루었다. 스레드, 원격 데이터 접근, 데이터 표시와 같은 주제도 포함했다. 그리고 콘텐트 프로바이더(Content Provider)를 기반으로 하는 데이터베이스 접근 층에 대한 예제도 다루었다.
다음은 각 장의 내용을 간략히 설명한 것이다.
1장, ‘관계형 데이터베이스’에서는 관계형 데이터베이스를 소개하고 관계형 모델이 왜 과거의 데이터베이스 모델보다 인기가 많은지 알아본다.
2장, ‘SQL 들어가기’에서는 일반적인 데이터베이스와 관련하여 SQL을 설명한다. 이 장은 데이터베이스 구조를 만드는 SQL 언어에 대해 배우고, 데이터베이스 내부의 데이터를 다루는 기능을 논의한다.
3장, ‘SQLite 들어가기’에서는 SQLite 데이터베이스 시스템의 세부사항을 설명하고, 다른 데이터베이스 시스템과 어떻게 다른지 비교한다.
4장, ‘안드로이드 SQLite’에서는 안드로이드 앱을 위해 상주하는 데이터베이스 같은 안드로이드에 특화된 SQLite를 다룬다. 또한 이 장에서 앱의 외부로부터 데이터베이스에 접근하는 방법을 다룬다. 이 부분은 디버깅 시 중요할 수 있다.
5장, ‘안드로이드 데이터베이스와 작업하기’에서는 데이터베이스를 다루는 안드로이드 API를 알아보고 어떻게 앱에서 데이터를 받고 데이터베이스에 저장하는지를 알아본다.
6장, ‘콘텐트 프로바이더에서는 안드로이드에서 데이터 접근 메커니즘인 콘텐트 프로바이더 사용법을 알아보고, 언제 사용하는지 알아본다.
7장, ‘데이터베이스와 UI’에서는 로컬 데이터베이스로부터 데이터를 가져와 어떻게 사용자에게 보여주는지 소개한다. 안드로이드에 존재하는 스레드 문제를 다룬다.
8장, ‘인텐트로 데이터 공유하기’에서는 콘텐트 프로바이더 외의 방법으로 인텐트를 이용하여 앱 간에 데이터를 공유할 수 있는 방법을 알아본다.
9장, ‘웹 API와 커뮤니케이션’에서는 앱과 원격 웹 API간 양방향 커뮤니케이션을 위한 메서드와 도구들을 알아본다.
10장, ‘데이터 바인딩’에서는 데이터 바인딩 API로 어떻게 UI를 표현할 수 있는지 알아본다. 또한 관련 API도 살펴본다. 이 장에서 데이터베이스로부터 데이터를 보여주는 방법을 예제를 통해 알아본다.
목차
목차
- 1장. 관계형 데이터베이스
- 데이터베이스의 역사
- 계층형 모델
- 네트워크 모델
- 관계형 모델의 소개
- 관계형 모델
- 릴레이션
- 릴레이션의 성질
- 관계
- 관계형 언어
- 관계 해석
- 데이터베이스 언어
- 알파
- 큐얼
- 씨큐얼
- 요약
- 데이터베이스의 역사
- 2장. SQL 들어가기
- 데이터 정의 언어
- 테이블
- 트리거
- 데이터 조작 언어
- INSERT
- 질의
- 요약
- 데이터 정의 언어
- 3장. SQLite 들어가기
- SQLite의 특징
- SQLite 성질
- 외래 키 지원
- 전문 검색
- 원자성 트랜잭션
- SQLite가 지원하지 않는 것
- 제한된 JOIN
- 읽기 전용 뷰
- 제한된 ALTER TABLE
- SQLite 데이터 타입
- 스토리지 클래스
- 타입 친화성
- 요약
- 4장. 안드로이드 SQLite
- 디바이스에서 데이터 저장
- 안드로이드 데이터베이스 API
- SQLiteOpenHelper
- SQLiteOpenHelper 생성자
- SQLiteOpenHelper.onUpgrade()
- SQLiteDatabase
- 데이터베이스 업그레이드 전략
- 데이터베이스 다시 생성하기
- 데이터베이스 조작하기
- 테이블 복사한 후 삭제하기
- 데이터베이스 접근과 메인 스레드
- 안드로이드 데이터베이스 분석
- adb로 데이터베이스 접근하기
- 서드파티 툴로 안드로이드 데이터베이스에 접속하기
- 요약
- 5장. 안드로이드 데이터베이스와 작업하기
- 안드로이드에서 데이터 다루기
- 테이블에 로우 삽입하기
- 테이블에서 로우 수정하기
- 테이블 로우 치환하기
- 테이블에서 로우 삭제하기
- 트랜잭션
- 트랜잭션 이용하기
- 트랜잭션과 성능
- 질의하기
- 편리한 질의 함수
- 문자열 질의 함수
- 커서
- 커서 데이터 읽기
- 커서 관리하기
- CursorLoader
- CursorLoader 생성하기
- CursorLoader 시작하기
- CursorLoader 재시작하기
- 요약
- 안드로이드에서 데이터 다루기
- 6장. 콘텐트 프로바이더
- REST를 닮은 콘텐트 프로바이더 API
- 콘텐트 URI
- 콘텐트 프로바이더로 데이터 공개하기
- 콘텐트 프로바이더 구현하기
- 콘텐트 리졸버
- 원격 콘텐트 프로바이더를 외부 앱에 공개하기
- 프로바이더 수준 권한
- 개별적인 읽기/쓰기 권한
- URI 위치 권한
- 콘텐트 프로바이더 권한
- 콘텐트 프로바이더 계약
- 외부 앱에서 접근 허용하기
- 콘텐트 프로바이더 구현하기
- android.content.ContentProvider 상속하기
- update()
- getType()
- 콘텐트 프로바이더를 언제 사용해야 하는가?
- 콘텐트 프로바이더 단점
- 콘텐트 프로바이더의 장점
- 요약
- 7장. 데이터베이스와 UI
- 데이터베이스의 데이터를 UI로 보여주기
- 커서 로더로 스레드 다루기
- 커서 데이터를 UI에 바인딩하기
- RecyclerView
- 관찰자 역할의 커서
- 액티비티에서 콘텐트 프로바이더 접근하기
- 반환된 데이터 처리
- 데이터 변경에 반응하기
- 요약
- 데이터베이스의 데이터를 UI로 보여주기
- 8장. 인텐트로 데이터 공유하기
- 인텐트 전송
- 명시적 인텐트
- 암시적 인텐트
- 인텐트로 액티비티 시작하기
- 암시적 인텐트 받기
- 인텐트 생성하기
- 액션
- 엑스트라
- 엑스트라 데이터 형식
- 인텐트에 추가하면 안 되는 것
- ShareActionProvider
- 공유 액션 메뉴
- 요약
- 인텐트 전송
- 9장. 웹 API와 통신하기
- REST와 웹 서비스
- REST 개요
- REST와 유사한 웹 API 구조
- 원격 웹 API 접근하기
- 표준 안드로이드 API로 웹 서비스 접근하기
- Retrofit으로 웹 서비스 연결하기
- Volley로 웹 서비스 연결하기
- 사용자 경험 향상을 위한 데이터 저장
- 데이터 전송과 배터리 소모
- 데이터 전송과 사용자 경험
- 웹 서비스의 응답 데이터 저장하기
- 안드로이드 SyncAdapter 프레임워크
- AccountAuthenticator
- SyncAdapter
- 수동으로 원격 데이터 동기화
- RxJava 간단히 훑어보기
- Retrofit에 RxJava 추가하기
- RxJava로 동기화하기
- 요약
- REST와 웹 서비스
- 10장. 데이터 바인딩
- 안드로이드 프로젝트에 데이터 바인딩 추가하기
- 데이터 바인딩 레이아웃
- 데이터 바인딩으로 보일러플레이트 코드 대체하기
- 데이터 바인딩 표현 언어
- 안드로이드 프로젝트에 데이터 바인딩 추가하기
도서 오류 신고
정오표
정오표
[p.23]
부모와 자식 노드의 일대다수 관계에 있어 제약사항이 없는 그래프 구조
->
부모와 자식 노드가 일대다수 관계이기 때문에 제약사항이 없는 그래프 구조
[p.28]
후보 키 어트리뷰트의 일부분으로 튜플을 식별해서는 안 된다.
->
후보 키의 일부 속성으로 튜플을 식별하지 말아야 한다.
외래 키는 2개의 릴레이션을 또한 다른 하나와 관련시켜준다.
->
외래 키는 2개의 릴레이션을 서로 관련시켜준다.
[p. 34]
가능한 한 모든 정렬된 쌍으로 가지는
->
가능한 모두 정렬된 쌍으로 가지는