ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 엔티티와 컨텍스트
    Apple🍎/CoreData 2024. 1. 2. 14:21

     

    Tstory 나 Naver Blog같은 블로그 어플리케이션을 만든다 해보자.

    블로그의 주요 기능은

    1. 블로그 운영자는 글을 작성해 ‘포스트’를 발행한다.
    2. 블로그 방문자는 ‘포스트’를 읽고 해당 ‘포스트’에 ‘코멘트’를 단다.

    제일 중요한점은 사용주체(운영자, 방문자)의 활동결과(포스트,코멘트)가 어딘가에 저장되어야한다는 것이다.
    이렇게 비즈니스(여기서는 블로그)에서 사용되는 객체들 중에서 ‘저장’ 할 필요가 있는 객체들을 엔티티라고 부른다.


    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와의 상호작용을 최적화 할 수 있다.

    댓글

Designed by Tistory.