Computer Engineering/ruby on rails

[rails] 모델 흐름 상상해보기

soohey 2022. 7. 12. 15:34

레일즈를 다루던 중 지식을 견고히 하기 위해 써보는 정리입니다! 

 

Q1. 레일즈에서 모델을 다룰 때 어떻게 다룰까요?

A.

레일즈는 복잡한 SQL 쿼리문을 사용하지 않고도 모델 클래스를 통해 데이터베이스에 접근 가능하다.

데이터베이스의 테이블을 모델 클래스처럼 만들어서 객체화시켜 사용할 수 있다.

이를 Active Record라고 하며 객체/관계 매핑 모듈 또는 O/R 맵퍼라고 부른다.

모델 생성시 테이블을 생성하는 파일이 함께 만들어진다.

  • 모델이름.rb : 클래스 파일로서 ActiveRecord::Base 파일을 상속받는 자식클래스이다. 모델의 유효성 검사를 하거나 다른 모델과의 관계도 설정을 기입한다.
  • 마이그레이션 파일 : 데이터베이스를 생성하거나 수정시 마이그레이션 기능을 사용한다. 데이터베이스를 만들 때 필요한 정보와 구조(테이블)를 생성 또는 변경하기 위한 파일이다. 마이그레이션 파일은 데이터베이스의 설계도이며, 뎅데이터베이스를 생성하거나 변경할 때 rake db:migrate 명령어로 확정을 하게 되면 데이터베이스가 생성 또는 수정된다. 마이그레이션 파일이 변경될 경우 다시 rake db:migrate 해줘야 하며 rake db:drop으로 데이터베이스를 날릴 수 있다.
  • schema.rb : 마이그레이션 명령어 결과로서 데이터베이스 테이블 정보를 담은 파일이 생성된다.
  • ActiveRecord::Base는 데이터베이스 접근을 위한 기본적인 기능을 제공하는 클래스. 모델.rb 클래스는 이것을 상속받아 모델 클래스 객체를 이용해 데이터베이스 테이블에 접근하여 데이터를 가져올 수 있다.

 

모델 생성 흐름

  • 모델 생성 -> 마이그레이션 파일 생성 -> 마이그레이션 파일 확인 및 수정(수정하고 싶을 경우) -> 마이그레이트 확정(rake db:migrate)시 데이터베이스 생성

 

Q1-1. 새로운 모델과의 관계를 추가할 때 어떻게 하는지?

https://rubykr.github.io/rails_guides/association_basics.html

 

Ruby on Rails Guides: 활성 레코드관계(Active Record Association)에 대한 안내

h3(#). 1 왜 ``관계’’인가? 왜 우린 모델들사이에 관계가 필요한 것일까요? 그것은 관계가 연결된 모델들을 보다 간단하고 쉽게 동시에 처리를 해주기 때문입니다. 예를 들어서 간단한 레일즈 응

rubykr.github.io

 

A. 보통 모델.rb파일에서 종속관계를 표현한다.

 

  • belongs_to
    • 다른 모델과의 1:1 연관을 정의하며 한 모델의 예가 다른 모델의 예에 속하게 됨을 의미
    • 외래키를 생성해야 한다.
  • has_one
    • 다른 모델의 예를 소유하거나 포함하는 것을 의미
  • has_many
    • 다른 모델과의 1:다 관계, belong_to 관계의 반대 관점
    • 다른 모델의 예를 하나도 가지고 있지 않거나 복수개 가지고 있을 때 (0~n개 가지고 있을 때)
  • has_many :through
    • 다른 모델과 다:다 관계 설정시 종종 사용
    • 다른 복수(0개 포함)개의 모델을 제 3의 모델을 통해 가지게 됨을 의미
    • 연결 모델상에 validation, 되부름, 추가 속성이 필요할 경우 사용
  • has_one :through
    • 다른 모델과의 1:1 연관을 설정
    • 모델이 제3의 모델을 통해 다른 모델과 관련을 갖게 한다.
    • ex) 각각의 납품회사가 하나의 계정을 가지고, 각 계정은 계정내역을 가지고 있을 때
  • has_and_belongs_to_many
    • 다른 모델과의 다:다 관계 표현시 사용함
    • 연결 사이에 다른 모델이 존재하지 않음
    • 연결 테이블이 생성됨(joinging table)
    • ex) 응용 프로그램이 부품과, 부품의 조립품을 포함하는데, 조립품은 많은 부품을 가지고, 한 부품은 많은 부품에 사용된다.
  • pholimorphic
    • 하나의 모델이 다른 하나 또는 여러 모델에 속할 수 있음
    • ex) 사진은 직원 또는 생상품에 속할 수 있다.
      • 직원과 생산품을 하나의 사진집합으로 만든 후 has_many에서 :as로 설정해줌

 

Q1-2. 레일즈 ORM이 어떻게 작동하는지?

https://velog.io/@sunaaank/Ruby-On-Rails-thankyou-orm

 

[Ruby On Rails] Thank you ORM_ORM역사와 장단점

오늘의 삽질기록 : ORM을 알았는데요 몰랐습니다

velog.io

ORM이란 Object Relational Mapping 으로 데이터베이스를 제어해주는 역할을 한다.

레일즈에서는 ORM을 사용한다.

 

레일즈는 클래스 객체를 사용하고, 관계형 데이터베이스(PostgresSQL)은 테이블을 사용한다.

이때 객체 모델과 관계형 모델 사이에 불일치가 존재하는데 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다.

(ORM 예시 : Student.all -> sql : select * from student)

 

 

 

커넥션 풀이란?

 

커넥션 풀이 어떻게 DB와 연결되었다는 표시를 하는지?