객체는 '데이터'와 '행동'을 운반한다. 대부분의 데이터는 영구적이며 데이터베이스에 저장해야 한다.
Active Record 패턴과 Data Mapper 패턴은 Martin Fowler: Patterns of Enterprise Application Architecture(2003)에서 지어진 이름이다.
Active Record
An object that wraps a row in a database table or view, encapsulates the database access, and adds domain logic on that data. - Patterns of Enterprise Application Architecture(2003)
Active Record 패턴은 도메인 객체에 데이터 액세스 로직을 직접 관리함으로써 가장 확실한 접근 방식을 사용한다.
Data Mapper
A layer of Mappers that moves data between objects and a database while keeping them independent of each other and the mapper itself. - Patterns of Enterprise Application Architecture(2003)
Data Mapper 패턴은 데이터 액세스 로직을 도메인 객체가 아닌 repository 라고 부르는 객체에서 관리한다. repository에서 객체를 CRUD 할 수 있다. 해당 패턴을 사용하면 도메인 객체는 그냥 바보가 된다. 속성을 정의하고 일부 로직을 정의하는 데에만 사용이 된다.
Active Record vs Data Mapper
소프트웨어 개발에서 항상 염두에 두어야 할 한 가지는 앱을 유지 보수하는 방법이다.
- Data Mapper 패턴은 대규모 앱에서 효과적인 유지 보수를 하는 데에 도움이 된다.
- Active Record 패턴은 소규모 앱에서 단순하게 유지 관리를 할 수 있어서 좋다. 유지 보수 관리의 핵심은 단순함이기 때문이다.
ORM
객체와 RDB의 테이블 데이터 저장 방식이 서로 다르다는 것을 알고 있기 때문에, ORM 프레임워크는 객체와 관계형 데이터베이스 사이의 매핑을 제공한다. 스타트업에서 많이 사용하는 Rails 프레임워크는 Active Record 패턴을 주로 사용하고, 대기업에서 많이 사용하는 Spring 프레임워크는 Data Mapper 패턴을 주로 사용한다.
Ruby의 Active Record
- Active Record라는 디자인 패턴은 'ActiveRecord'라는 Ruby 모듈에서 제공된다.
- 이 모듈에서 제공하는 기능을 사용하여 다음을 수행할 수 있다.
- Establish a connection to a database.
- Create database tables.
- Specify associations between tables that correspond to associations between the Ruby classes.
- Establish an ORM between Ruby classes/objects/attributes and the tables/rows/columns in the underlying database.
- Peform CRUD operations on Ruby ActiveRecord objects.
- ActiveRecord 모듈은 Rails에 내장되어 있다. 위의 기능은 Rails 앱을 만들고 scaffold 및 model generator를 실행할 때 활용된다.
Rails의 Active Record
- ActiveRecord::Base.establish_connection 메소드는 Rails 애플리케이션을 데이터베이스에 연결하기 위해 ./conifg/database.yml의 정보를 사용한다.
- ActiveRecord::Migration 객체는 DB 스키마의 변화를 시간순으로 관리한다. 마이그레이션을 하면 ./db/schema.rb 파일을 업데이트한다. (flyway같은 툴을 사용할 필요가 없다.)
- Rails의 ActiveRecord는 ORM으로써, 다음과 같은 메커니즘을 제공한다.
- Represent models and their data.
- Represent associations between these models.
- Represent inheritance hierarchies through related models.
- Validate models before they get persisted to the database.
- Perform database operations in an object-oriented fashion.
Spring의 Data Mapper
- Spring 에서는 Hibernate, JPA와 같은 ORM을 사용하여 객체와 DB 간의 매핑 메커니즘을 제공한다
- Spring Data는 DB 접근을 위하여 일관되고 추상화된 모델들을 제공한다. 이를 사용하여 다양한 DB 연동 개발을 심플하게 구축할 수 있다.
-
- Spring Data Commons - Core Spring concepts underpinning every Spring Data module.
- Spring Data JDBC - Spring Data repository support for JDBC.
- Spring Data JPA - Spring Data repository support for JPA.
- Spring Data MongoDB - Spring based, object-document support and repositories for MongoDB.
- Spring Data Redis - Easy configuration and access to Redis from Spring applications.
- Spring Data REST - Exports Spring Data repositories as hypermedia-driven RESTful resources.
- Spring Data for Apache Cassandra - Easy configuration and access to Apache Cassandra or large scale, highly available, data oriented Spring applications.
- ...
-
'Dot Computer Science > Concept' 카테고리의 다른 글
WebAssembly(WASM)와 WASI: 웹 브라우저 및 서버사이드 기술 (2) | 2023.06.23 |
---|---|
컨테이너 Container: Linux Kernel, Docker (0) | 2023.06.22 |
가상 머신 VM: 가상 메모리, 메모리 관리 기법, Hypervisor (0) | 2023.05.21 |
[서비스 배포 전략 구상하기] 무중단 배포 3가지 방식 (Rolling, Blue-Green, Canary) (1) | 2022.03.22 |
[Naver DEVIEW 요약] RESTful API에 대해 잘 이해하고 있는가? REST의 출현과 올바른 사용법에 대해 (0) | 2021.12.28 |