코딩을 업무로 하며 살고 있지만, 집에서는 코딩하고 글 쓰고 하는 일이 근래에 거의 없었는데, 

 

최근에 오랜만에 뭔가 정리를 해야 될것 같은 구현들이 있어 정리도 할겸 구조도 잡을겸 정리하다보니, 

 

생각보다 Database를 사용하는 부분에 있어 데이터 와 코드를 구분해서 구현하는 경우가 많이 없는 것같아서 정리도 할겸 해서 글을 남겨둔다.

 

Android에서 database를 사용하는 방법은 여러 도구들이 있고, 예제들도 많이 있는데, 코딩을 할때 데이터로서 관리해야 될 부분과, 코드로서 작성해서 관리해야 될 부분을 좀 많이 나누고 정리하는 편이다 보니 데이터베이스를 구성하는 테이블의 스키마, 즉 "컬럼 이름", "컬럼 데이터 타입", "컬럼 제약"등은 구현이 아닌 데이터 그자체로서 관리하여 이후 실제 구현은 그 것들을 사용할때만 코드로 작성하여 분리해두면 이후 구현은 자주 바뀌고 때에 따라 여러 처리를 할수도 있지만, 데이터 베이스를 구성하는 스키마는 코드보다는 많이 바뀔일이 발생하지 않는다.

table 생성에 필요한 정보는 asset으로 table_main.json이라는 파일에 정리해두고, SQLiteOpenHelper의 구현에서 AssetManager를 이용하여 json파일을 읽어들인 다음 그

규칙에 맞는 테이블을 생성하는 단순하고 간단한 접근 방법이다.

 

테이블의 정의는 아래와 같이 하였다.

각각의 필드는 아래와 같은 의미를 가진다.

 name : 테이블의 이름

 schemas : 테이블의 스키마 정보(컬러명, 데이터 타입, 제약,...)

 version : 테이블의 버전, 이 부분은 이후 데이터 베이스 업그레이드시 이용하기 위해 테이블 버전 관리

 

table_main.json을 읽어온 다음 실제 데이터 베이스에 테이블을 생성하는 구현은 아래와 같다.

SQLiteOpenHelper의 onCreate 에서 db에 json에서 읽어드린 정보를 이용하여 table 의 이름과 생성 스키마를 조합하여 테이블을 생성하도록 할수 있다.

 

이후 버전 관리등이 필요한 경우 SQLiteOpenHelper의 onUgrade, onDowngrade가 호출되는데 이때는 Database 의 버전과 table의 버전을 비교하여 관리하는 방법으로 구현을 하거나, db 자체에 table들의 버전정보를 기록해두었다가, json이 변경되면 자동으로 업그레이드를 하도록 하는 방법으로 구현을 할수도 있다.

 

이 부분은 다음에 또 정리할때 이어서 작성하도록 하겠다.

블로그 이미지

커뉴

이 세상에서 꿈 이상으로 확실한 것을, 인간은 가지고 있는 것일까?

댓글을 달아 주세요