코딩 아이폰 xcode 서버 데이터 sqlite에 복사 후 접근하기
코딩 아이폰 xcode 서버 데이터 sqlite에 복사
(코딩 초보가 공부하면서 생각 안날 때 참고하기 위해서 정리하는 노트 같은 글이니 혹시 이 글을 보는 분들이 계신다면 참고만 하셨으면 좋겠네요.^^;)
앱에서 필요한 데이터를 서버에 저장해 놓고 필요한 경우에만 접근해서 가져오는 방법도 있겠지만 만약 스마트폰이 'LTE'나 'WIFI'가 OFF 되어 있을 때는 접근을 못하게 될 것이다. 그럴 때를 대비해서 아이폰 자체의 SQLite에 데이터를 저장해놓고 사용하면 어떨까 싶어서 서버에 있는 데이터를 복사해서 아이폰 안에 넣은 후 접근하는 과정을 공부하면서 정리해보려고 한다.
그 과정을 모두 정리하기에는 양이 너무 방대하기 때문에 하나의 글에 모든 내용을 정리하기에는 무리가 있을거 같아서 나중에 생각 안날때 참고할만한 내용을 중심으로 정리를 해볼 생각이다.
* Swift4 , Xcode 9.2, MySQL, DB Browser for SQLite
먼저 MySQL에 있는 데이터를 '내보내기' 해보자.
요즘 아이폰과 비콘의 통신 쪽에 관심이 많아서 관련 공부를 하고 있는데 현재 갖고 있는 비콘이 하나밖에 없어서...ㅎㅎ 그 녀석의 MacAddress와 임의의 주소 그리고 그 주소의 위도와 경도, 신호 세기, major, minor 값을 서버에 무작위로 저장을 해놨는데 이 데이터를 가져와서 xcode 프로젝트에 복사한 후 접근을 해보자.
이 데이터 모두는 필요 없을 거 같으니 beacon의 고유 번호인 major과 minor 값 그리고 이 비콘이 설치되어 있다고 가정한 address 세 가지만 가져와서 사용해보자.
그림과 같이 SQL문을 실행해서 address, major, minor 값만 선택한다.
그렇게 선택된 데이터를 [내보내기] 메뉴를 이용해서 CSV 파일로 만들어보자.
내보내기 방법에서 CSV를 선택하고 실행을 한다.
파일의 이름은 test로 작성하고 저장을 한다.
그렇게 만들어진 test.csv 파일인데 이걸 xcode 프로젝트에 넣는 게 아니라 db 파일의 형식으로 만들어야 한다. 그리고 이 작업을 위해서는 DB Browser for SQLite라는 프로그램이 필요한데 이 녀석을 설치하는 과정은 간단하기 때문에 생략하기로 한다.^^
이 DB Browser for SQLite를 실행한 후 test.csv 파일을 열어보자.
프로그램을 실행한 모습인데 앞에서 만들어 놓은 test.csv 파일을 불러오기 위해서는 그 녀석을 저장할 데이터베이스가 하나 있어야 하는 거 같다. 먼저 새 데이터베이스를 하나 만들자.
데이터베이스의 이름 역시 test로 했으며 파일의 형식이 SQLite 데이터베이스 파일이라는 걸 알 수 있다.
새로운 데이터베이스를 만드는 과정에서 의무적으로 table도 하나 생성해야 하는데 이건 어차피 사용하지 않을 녀석이니까 대충 만들어도 된다. 앞에서 만들어놓은 test.csv 파일을 가져오면 하나의 새로운 테이블이 만들어지기 때문이다.
이제 앞에서 만들어놓은 CSV 파일을 가져오자. 메뉴에서도 알 수 있듯이 해당 파일에서 테이블을 가져오는 것이기 때문에 불러오면 자동으로 테이블이 하나 더 만들어진다.
test.csv파일을 불러오니 테이블이 하나 더 생성된 걸 알 수 있다. 이제 조금 전에 만들어놓은 테이블은 필요 없으니 삭제하고 새로 가져온 내용을 살펴보자.
MySQL에서 내보내기 했던 데이터가 그대로 옮겨져 온 걸 확인할 수 있다. 이제 이 데이터를 저장하자.
현재까지의 진행 상황을 다시 한 번 정리하자면...
1. MySQL의 데이터 중 필요한 것들만 골라서 CSV 파일로 내보내기를 한 후
2. DB Browser for SQLite 프로그램에서 데이터베이스를 생성한 후 CSV 파일을 불러와서 새로운 테이블을 만들고 저장.
그렇게 해서 생성된 파일이 이 녀석이다.
이제 이 파일을 Xcode의 프로젝트로 옮기자.
옮기는 방법은 그냥 드래그 앤 드롭하면 된다. 그렇게 프로젝트로 옮겨진 DB 파일을 xcode에서 바로 접근할 수 있는 건 아니고 해당 파일의 내용을 아이폰의 SQLite에 복사를 한 후 접근을 해야 한다. 또 그러기 위해서는 xcode에서 아이폰의 SQLite에 데이터 베이스를 먼저 만들어야 한다.
즉, SQLite에 데이터베이스를 먼저 만든 후 test.db 파일의 내용을 그대로 복사해서 넣는 것이다. 그리고 나는 SQLite 공부를 하면서 보다 간편하게 사용할 수 있다는 GitHub에 올라온 프로젝트를 사용했는데 아직 초보라서 어떤 장점이 있는지는 잘 모르겠더라.^^;;
https://github.com/stephencelis/SQLite.swift
대충 사용해보니 복잡한 쿼리문을 일일이 입력하지 않아도 데이터 저장과 접근이 가능한 거 같던데 나중에 좀 더 살펴보기로 하고 여하튼 이 프로젝트를 이용해서 SQLite 데이터베이스를 만들었다.
프로젝트를 받아서 압축을 풀고 xcodeproject 파일을 프로젝트에 추가를 했다.
그리고 Build Phases에서 Link Binary With Libraries와 Target Dependencies에 각각 SQLite.framework와 SQLite iOS를 추가 한 후 ViewController 스위프트 파일에서 DB를 생성해본다.
FileManager를 이용해서 폴더를 만들고 그 안에 sqlite3 확장자를 갖은 데이터베이스를 생성했다.
그리고 앞에서 만들어 놓은 test.db 파일을 새로 만든 sqlite3 db에 복사를 했다. 이제 그 내용이 제대로 복사가 됐는지 확인하기 위해서 출력해보자.
데이터를 불러오기 위해서 DB에 접근을 한 후 내용들을 출력했는데 결과는 다음과 같다.
맨 앞에 3개는 major와 minor 값이 없는 걸로 확인할 수도 있고... 그 주소들로도 앞에서 만들어놓은 데이터 파일과 정확히 일치하는 걸 알 수 있다.
이렇게 해서 MySQL에 있는 데이터를 가져와서 아이폰의 SQLite에 복사한 후 접근을 해봤는데 공부한 걸 정리하는 노트라서 핵심 내용만 정리를 했지만 전체적인 흐름은 파악할 수 있고 나 스스로는 나중에 기억이 안 날때 참고하기에 괜찮을 거 같다.