Rails에서 다중 데이터베이스를 사용하는 방법은 무엇인가요?
_____A1: Rails 6 이상부터는 다중 데이터베이스 지원이 내장되어 있습니다. `config/database.yml` 파일에 여러 데이터베이스 환경을 정의할 수 있습니다. 예를 들어, 기본(primary) 데이터베이스 외에 보조(secondary) 데이터베이스를 다음과 같이 설정합니다.
```yaml
default: &default
adapter: postgresql
encoding: unicode
pool: 5
development:
primary:
<<: *default
database: myapp_primary_development
secondary:
<<: *default
database: myapp_secondary_development
```
이렇게 하면 `primary`와 `secondary` 두 개의 데이터베이스 접속 정보를 정의한 것입니다.
---
Q2: 여러 데이터베이스를 사용하는 모델은 어떻게 지정하나요?
A2: ActiveRecord 모델에서 `connects_to` 메서드를 사용하여 데이터베이스 연결을 지정합니다.
```ruby
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
end
class SecondaryRecord < ApplicationRecord
connects_to database: { writing: :secondary }
end
class Product < SecondaryRecord
end
```
`Product` 모델은 `SecondaryRecord`를 상속받고, `SecondaryRecord`가 `secondary` 데이터베이스에 연결되므로 `Product`도 해당 데이터베이스와 연결됩니다.
---
Q3: 읽기/쓰기 분리(Read/Write Splitting)도 가능한가요?
A3: 네, Rails는 쓰기용(writing)과 읽기용(reading) 데이터베이스를 분리하는 기능을 지원합니다. `database.yml`에서 읽기, 쓰기 각각 연결을 정의합니다.
```yaml
development:
primary:
writing:
<<: *default
database: myapp_primary_development
reading:
<<: *default
database: myapp_primary_replica_development
```
모델에서 다음과 같이 연결합니다.
```ruby
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
connects_to database: { writing: :primary, reading: :primary_replica }
end
```
이렇게 하면 읽기 작업은 `primary_replica`에서, 쓰기 작업은 `primary`에서 수행됩니다.
---
Q4: 마이그레이션(migration)은 어떻게 하나요?
A4: 다중 데이터베이스는 각 데이터베이스마다 별도의 마이그레이션 디렉터리를 가지는 것이 일반적입니다. 기본적으로 Rails는 각 데이터베이스에 대해 `db/migrate` 대신 `db/
예를 들어, `secondary` 데이터베이스 마이그레이션은 `db/secondary_migrate`에 위치합니다. 마이그레이션 실행 시 다음과 같은 명령어를 사용합니다.
```bash
rails db:migrate 기본(primary) 데이터베이스 마이그레이션
rails db:migrate:secondary secondary 데이터베이스 마이그레이션
```
`config/database.yml`에서 마이그레이션 경로를 아래처럼 지정할 수도 있습니다.
---
Q5: 다중 데이터베이스 환경에서 트랜잭션 처리는 어떻게 하나요?
A5: 트랜잭션은 기본적으로 한 데이터베이스 연결 내에서만 유효합니다. 여러 데이터베이스를 아우르는 단일 트랜잭션을 지원하지 않으므로 주의가 필요합니다. 따라서 분산 트랜잭션이 필요한 경우 별도 처리가 필요하거나, 애플리케이션 레벨에서 트랜잭션 관리를 해야 합니다.
---
Q6: 다중 데이터베이스 관련 주요 메서드나 기능은 무엇인가요?
A6:
- `connects_to`: 모델이 연결할 데이터베이스를 지정합니다.
- `ActiveRecord::Base.connected_to(role: :reading) { ... }`: 코드 블록 내에서 특정 역할(읽기/쓰기) 데이터베이스를 사용하도록 전환합니다.
- `ActiveRecord::Base.connected_to(database: :secondary) { ... }`: 특정 데이터베이스 연결을 사용.
- `switch_connections_to(database: :secondary)`: 연결 전환 메서드.
---
Q7: 다중 데이터베이스 사용 시 주의사항은 무엇인가요?
A7:
- 각 데이터베이스에 대해 별도의 모델 계층을 생성하는 것이 관리에 유리합니다.
- 트랜잭션은 한 데이터베이스에 한정되므로 복수 데이터베이스에 걸친 원자성을 보장하지 못합니다.
- 마이그레이션 실행 시 대상 데이터베이스를 명확히 지정해야 하며, 실수로 마이그레이션이 누락되지 않도록 주의하세요.
- 배포 및 운영 환경에서도 DB 커넥션 설정을 꼼꼼히 관리해야 합니다.
---
요약하면, Rails 내장 다중 데이터베이스 지원 기능을 활용하려면 `config/database.yml` 설정, 모델에서 연결 지정, 읽기/쓰기 분리, 각 DB별 마이그레이션 디렉터리 구성이 핵심이고, 트랜잭션과 마이그레이션 시 주의를 기울여야 합니다.
작성자:
김민하 [비회원]
| 작성일자: 1년 전
2025-01-02 06:11:51
조회수: 134 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 134 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.