# **Ruby에서 데이터베이스 연동 및 Active Record 사용법** 웹 애플리케이션을 개발할 때 데이터베이스(Database)는 필수적인 요소다. Ruby에서는 다양한 데이터베이스와 쉽게 연동할 수 있으며, 특히 **Active Record**를 사용하면 객체지향적으로 데이터를 다룰 수 있다. 이번 글에서는 **Ruby에서 데이터베이스를 연동하는 방법과 Active Record의 기본 개념 및 사용법**을 설명한다. --- ## **1. Ruby에서 데이터베이스 연동 방법** Ruby는 다양한 데이터베이스를 지원한다. 대표적으로 **SQLite, MySQL, PostgreSQL** 등이 있으며, 각각의 데이터베이스를 사용하기 위해 적절한 **드라이버(Gem)** 를 설치해야 한다. ### **1.1. SQLite 사용하기** SQLite는 가벼운 파일 기반의 데이터베이스로, 별도의 서버 설정 없이 사용할 수 있어 개발 및 테스트 환경에서 많이 사용된다. #### **설치 및 초기 설정** SQLite를 사용하려면 `sqlite3` gem을 설치해야 한다. ```sh gem install sqlite3 ``` 데이터베이스 파일을 생성하고 연결하는 간단한 Ruby 코드: ```ruby require "sqlite3" # SQLite 데이터베이스 파일 생성 (파일이 없다면 자동 생성) db = SQLite3::Database.new "test.db" # 테이블 생성 db.execute <<-SQL CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY, name TEXT, age INTEGER ); SQL # 데이터 삽입 db.execute "INSERT INTO users (name, age) VALUES (?, ?)", ["홍길동", 30] # 데이터 조회 db.execute "SELECT * FROM users" do |row| puts row.join(", ") end db.close # 연결 종료 ``` 출력: ``` 1, 홍길동, 30 ``` SQLite는 파일 기반이므로 `test.db`라는 파일이 생성된다. 이후 Ruby 코드에서 해당 파일을 사용하여 데이터를 읽고 쓸 수 있다. --- ### **1.2. MySQL 사용하기** MySQL은 대규모 프로젝트에서 자주 사용되는 데이터베이스다. MySQL과 연동하려면 `mysql2` gem을 설치해야 한다. #### **설치** ```sh gem install mysql2 ``` #### **MySQL 데이터베이스 연결 및 쿼리 실행** ```ruby require "mysql2" # MySQL 클라이언트 설정 client = Mysql2::Client.new( host: "localhost", username: "root", password: "password", database: "test_db" ) # 테이블 생성 client.query <<-SQL CREATE TABLE IF NOT EXISTS users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), age INT ); SQL # 데이터 삽입 client.query("INSERT INTO users (name, age) VALUES ('이순신', 45)") # 데이터 조회 results = client.query("SELECT * FROM users") results.each do |row| puts row["id"], row["name"], row["age"] end client.close # 연결 종료 ``` 이 방식은 SQL을 직접 실행하는 방법으로, ORM(Object-Relational Mapping) 방식보다 코드가 길어질 수 있다. 이를 간편하게 하기 위해 **Active Record**를 사용할 수 있다. --- ## **2. Active Record란?** **Active Record**는 Ruby on Rails에서 사용하는 ORM(Object-Relational Mapping) 라이브러리다. SQL을 직접 작성하지 않고도 Ruby 객체를 사용해 데이터를 조작할 수 있다. Active Record를 사용하면 SQL 쿼리를 직접 작성할 필요 없이 **객체 지향 방식으로 데이터를 다룰 수 있다**. ### **2.1. Active Record 설치 및 설정** Active Record는 별도로 Rails 프레임워크 없이 사용할 수도 있다. #### **설치** ```sh gem install activerecord sqlite3 ``` #### **데이터베이스 연결 설정** ```ruby require "active_record" # SQLite 데이터베이스 연결 ActiveRecord::Base.establish_connection( adapter: "sqlite3", database: "test.db" ) ``` 이제 Active Record를 활용하여 데이터를 다루는 방법을 살펴보자. --- ## **3. Active Record 사용법** Active Record를 사용하려면 데이터베이스 테이블에 매핑되는 **모델(Model)** 을 정의해야 한다. ### **3.1. 모델 정의하기** ```ruby class User < ActiveRecord::Base end ``` 위 코드에서 `User` 클래스는 `users` 테이블과 연결된다. Active Record는 자동으로 **클래스명을 기반으로 테이블명을 추론**하므로, `User` 모델은 `users` 테이블과 매칭된다. --- ### **3.2. 테이블 생성 (마이그레이션 사용)** Active Record에서는 **마이그레이션(Migration)** 을 사용하여 테이블을 생성할 수 있다. ```ruby require "active_record" ActiveRecord::Schema.define do create_table :users, if_not_exists: true do |t| t.string :name t.integer :age t.timestamps end end ``` 이제 `users` 테이블이 생성된다. --- ### **3.3. 데이터 삽입** 객체를 생성하고 `.save` 메서드를 호출하면 데이터베이스에 저장된다. ```ruby user = User.new(name: "강감찬", age: 40) user.save # 데이터베이스에 저장 ``` 또는 한 줄로 작성할 수도 있다. ```ruby User.create(name: "김유신", age: 35) ``` --- ### **3.4. 데이터 조회** ```ruby users = User.all # 모든 데이터 조회 users.each do |user| puts "#{user.id}, #{user.name}, #{user.age}" end ``` 특정 조건을 사용하여 데이터를 조회할 수도 있다. ```ruby user = User.find_by(name: "강감찬") puts user.age # 강감찬의 나이 출력 ``` --- ### **3.5. 데이터 수정** ```ruby user = User.find_by(name: "강감찬") user.age = 50 user.save # 변경된 내용 저장 ``` 또는 한 줄로 작성 가능하다. ```ruby User.find_by(name: "강감찬")&.update(age: 50) ``` --- ### **3.6. 데이터 삭제** ```ruby user = User.find_by(name: "강감찬") user.destroy # 데이터 삭제 ``` 또는 한 번에 여러 개 삭제할 수도 있다. ```ruby User.where(age: 50).destroy_all ``` --- ## **4. 정리** Ruby에서 데이터베이스를 연동하는 방법과 **Active Record**를 활용하여 데이터를 다루는 방법을 살펴보았다. ### **📌 데이터베이스 연동 방식** - `sqlite3`, `mysql2` 등의 Gem을 사용하여 SQL을 직접 실행할 수 있다. - Active Record를 사용하면 ORM 방식으로 객체 지향적으로 데이터를 다룰 수 있다. ### **📌 Active Record 주요 기능** - `User.create(name: "홍길동", age: 30)` → 데이터 삽입 - `User.all` → 모든 데이터 조회 - `User.find_by(name: "홍길동")` → 특정 데이터 조회 - `user.update(age: 35)` → 데이터 수정 - `user.destroy` → 데이터 삭제 Active Record를 사용하면 SQL을 직접 작성하지 않고도 데이터를 쉽게 관리할 수 있다. Ruby로 웹 애플리케이션을 개발할 계획이라면, Active Record는 반드시 익혀야 할 핵심 기술이다!