Android 주니어 데이터베이스 기술면접
새 면접Q. Android에서 Room Database를 사용할 때 필수적으로 구성해야 하는 3가지 주요 컴포넌트는 무엇이며, 각각의 역할을 설명해주세요.
데이터베이스 클래스, 데이터 접근 객체, 그리고 데이터를 표현하는 클래스를 생각해보세요.
Room Database의 3가지 주요 컴포넌트는 Entity, DAO, Database입니다. Entity는 @Entity 어노테이션으로 표시하며 데이터베이스 테이블을 나타내는 데이터 클래스입니다. DAO(Data Access Object)는 @Dao 어노테이션으로 표시하며 데이터베이스 접근 메서드를 정의하는 인터페이스 또는 추상 클래스입니다. Database는 @Database 어노테이션으로 표시하며 RoomDatabase를 상속받는 추상 클래스로, 데이터베이스 홀더 역할을 하고 DAO 인스턴스를 제공합니다. 이 세 컴포넌트가 유기적으로 연결되어 SQLite 데이터베이스를 안전하고 편리하게 사용할 수 있게 해줍니다.
- • Entity는 테이블 구조를 정의
- • DAO는 CRUD 작업 메서드를 제공
- • Database는 전체 데이터베이스를 관리하고 DAO 인스턴스를 반환
사용자 설정, 채팅 메시지, 오프라인 캐시 등 로컬 데이터를 저장할 때 Room의 3가지 컴포넌트를 구성합니다.
Room Database를 싱글톤 패턴으로 구현해야 하는 이유는 무엇인가요?
Q. 사용자 목록을 표시하는 앱에서 10만 건의 User 데이터 중 특정 이름으로 검색하는 기능이 매우 느립니다. Room Database에서 이 검색 성능을 개선하기 위해 어떤 방법을 사용할 수 있나요?
데이터베이스에서 특정 컬럼으로 자주 검색할 때 성능을 향상시키는 구조를 생각해보세요.
검색 성능을 개선하기 위해 인덱스(Index)를 생성해야 합니다. Entity 클래스의 @Entity 어노테이션에 indices 파라미터를 추가하여 자주 검색하는 컬럼에 인덱스를 설정할 수 있습니다. 예를 들어 name 컬럼에 인덱스를 추가하면 검색 시 전체 테이블 스캔 대신 인덱스를 통한 빠른 조회가 가능합니다. 다만 인덱스는 조회 성능은 향상시키지만 삽입, 수정, 삭제 시 인덱스 업데이트로 인한 오버헤드가 발생하므로 자주 조회되는 컬럼에만 선택적으로 적용해야 합니다. 또한 LIKE 검색의 경우 와일드카드 위치에 따라 인덱스 효과가 달라질 수 있으므로 검색 패턴도 고려해야 합니다.
- • 인덱스를 통해 검색 성능을 크게 향상
- • @Entity의 indices 파라미터로 인덱스 설정
- • 인덱스는 조회는 빠르지만 쓰기 성능에 오버헤드 발생
검색 기능이 있는 연락처 앱, 메모 앱, 상품 목록 등에서 사용자 경험 개선을 위해 인덱스를 적용합니다.
복합 인덱스(Composite Index)는 언제 사용하면 좋을까요?
Q. 은행 앱에서 사용자의 계좌 잔액을 차감하고 거래 내역을 저장하는 기능을 구현 중입니다. 잔액 차감은 성공했는데 거래 내역 저장이 실패하면 데이터 불일치가 발생합니다. Room Database에서 이런 문제를 어떻게 해결할 수 있나요?
여러 데이터베이스 작업을 하나의 단위로 묶어서 모두 성공하거나 모두 실패하도록 만드는 개념을 생각해보세요.
트랜잭션(Transaction)을 사용하여 여러 데이터베이스 작업을 원자적으로 처리해야 합니다. Room에서는 @Transaction 어노테이션을 DAO 메서드에 추가하거나, database.runInTransaction 메서드를 사용할 수 있습니다. 트랜잭션 내에서 모든 작업이 성공하면 커밋(commit)되어 변경사항이 반영되고, 하나라도 실패하면 롤백(rollback)되어 모든 변경사항이 취소됩니다. 이를 통해 데이터의 일관성(Consistency)을 보장할 수 있습니다. 실제 구현 시 잔액 차감과 거래 내역 저장을 하나의 @Transaction 메서드 안에 작성하면, 둘 중 하나라도 실패할 경우 자동으로 롤백되어 데이터 불일치를 방지할 수 있습니다.
- • 트랜잭션으로 여러 작업을 원자적 단위로 처리
- • @Transaction 어노테이션 또는 runInTransaction 사용
- • 전체 성공 시 커밋, 하나라도 실패 시 롤백으로 데이터 일관성 보장
결제, 포인트 적립, 장바구니 처리 등 여러 테이블을 동시에 수정해야 하는 금융 및 커머스 앱에서 필수적으로 사용됩니다.
트랜잭션 처리 중 앱이 강제 종료되면 어떻게 되나요?
아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!