-
엔티티와 컨텍스트Apple🍎/CoreData 2024. 1. 2. 14:21
Tstory 나 Naver Blog같은 블로그 어플리케이션을 만든다 해보자.
블로그의 주요 기능은
- 블로그 운영자는 글을 작성해 ‘포스트’를 발행한다.
- 블로그 방문자는 ‘포스트’를 읽고 해당 ‘포스트’에 ‘코멘트’를 단다.
제일 중요한점은 사용주체(운영자, 방문자)의 활동결과(포스트,코멘트)가 어딘가에 저장되어야한다는 것이다.
이렇게 비즈니스(여기서는 블로그)에서 사용되는 객체들 중에서 ‘저장’ 할 필요가 있는 객체들을 엔티티라고 부른다.
Entity 란?- 데이터베이스는 데이터를 체계화해서 저장할 수 있는 시스템으로 이곳에 저장될 때 제일 중요한점은 저장되는 데이터 간에 ‘구분’이 되어야한다는 것이다. 예를 들어 2번째 포스트를 불러와줘하고 요청을 받았는데 정작 데이터베이스가 저장되어 있는 포스트 중에 2번째 포스트가 뭔지 모르면 안되기 때문이다.
- 따라서 저장할 필요가 있는 객체들을 데이터베이스에 저장하기 위해서는 이 객체들을 구분할 수 있어야한다.
- 즉 객체들이 데이터베이스에 저장될때는 반드시 서로를 구분할 수 있는 ‘식별자(Identifier)’를 가지고 있어야한다.
- 식별자를 가지고 있는 객체들을 엔티티라고 한다.
- 객체가 식별자를 받은 순간 데이터베이스 상에서 식별이 가능한 상태(엔티티)가 되며 이를 영속화(persistence)라고도 한다.
- 객체가 영속화된 순간 저장할 수도 있는 상태가 되어 어플리케이션과 데이터베이스간의 소통을 담당하는 녀석의 관심대상이 된다.
- 예를 들어 두개의 포스트를 발행하였고 첫번째 포스트에는 댓글 두개가 두번째 포스트에는 댓글 하나가 달린 상황을 저장해야한다고 해보자.
- 일단은 포스트와 코멘트는 무슨 속성이 있는지 각각의 모델 정의에 대해서 알아야할 것이다. 예를 들어 포스트라는 객체는 제목,글,작성자,작성일을 포함하고 코멘트라는 객체는 작성자, 내용을 포함하고 있다.
- 그리고 포스트와 코멘트간의 관계가 어떻게 되는지에 대해서 알아야한다. 예를 들어 첫번째 포스트는 두개의 댓글을 가지고 잇다.
- 이렇게 각 객체 자체와 객체간의 관계에 대해서 관리하는 것을 객체 그래프 관리(Object Graph Management)라고 한다.
어플리케이션과 DB의 패러다임 불일치
- Application을 데이터계층은 저장할 속성들을 가진 모델들을 인스턴스화한 객체들로 이루어져 있다.
- 여기서 문제는 DB에 무언가를 요청하기 위해서는 SQL 과 같이 DB가 이해할 수 있는 언어를 이용해 요청해야한다.
- 따라서 객체에 담겨 있는 정보들을 DB에 저장하기 위해서는 객체에 담긴 정보를 일일이 꺼내다가 SQL문에 실어 DB에 날려줘야한다.
- 객체와 관계형 데이터베이스간의 패러다임 불일치가 발생한다.
- 그냥 어플리케이션에서 객체를 Save 요청만 하면 누군가 이에 알맞는 쿼리를 작성하여 대신 날려주면 얼마나 편할까???
Context 란?
- 앞에서 객체가 식별자를 받은 순간 영속화(Persistence)가 되며 이는 데이터베이스에 저장이 될수도 있는 상태를 지칭한다고 하였다. 이때 데이터베이스에 저장이 될 수도 있는 상태의 녀석들(엔티티)를 관리하는 객체가 있는데 이를 Context라고 한다.
- Context는 어플리케이션과 데이터베이스 사이에서 중개인 역할을 한다.
- 객체가 Id를 받아 엔티티가 된 순간부터 Context는 해당 엔티티를 ‘관리’하기 시작한다.
- Context는 관리하는 엔티티를 뜯어보고 어떤 속성이 있으며, 어떤 값이 있는지 알고 있다.
- Application에서 DB에 저장하고 싶은 엔티티를 Collection에 저장하듯이 그냥 save만 해주면 Context는 엔티티의 속성과 값을 이용해 알아서 SQL 쿼리를 만들어 DB에 날려준다.
- 저장뿐만아니라 조회,수정,삭제 또한 Context가 요청에 맞게 SQL를 만들 DB에 날려준다.
- DB에 데이터를 저장하는 행위는 무거운 동작이다. -> 시간이 많이 걸린다.
- 각 요청마다 DB에 쿼리를 요청한다면 시간이 너무 오래 걸릴 수 있다.
- Context를 이용하면 트랜잭션 단위로 작업을 나누어 관련된 요청들을 한꺼번에 묶어 처리할수도 있다.
- 어플리케이션과 DB 사이에 Context는 완충제 역할을 할 수 있다. 이를 이용해 DB와의 상호작용을 최적화 할 수 있다.
'Apple🍎 > CoreData' 카테고리의 다른 글
Core Data Context 이해와 활용 - 심화 (0) 2024.01.15 Core Data Context 이해와 활용 - 기본 (0) 2024.01.11 데이터 모델 개념을 기초로 엔티티와 클래스 관계 알아보기 (0) 2024.01.09 Core Data 뜯어 보기 (0) 2024.01.04