레일즈를 다루던 중 지식을 견고히 하기 위해 써보는 정리입니다!
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
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
ORM이란 Object Relational Mapping 으로 데이터베이스를 제어해주는 역할을 한다.
레일즈에서는 ORM을 사용한다.
레일즈는 클래스 객체를 사용하고, 관계형 데이터베이스(PostgresSQL)은 테이블을 사용한다.
이때 객체 모델과 관계형 모델 사이에 불일치가 존재하는데 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다.
(ORM 예시 : Student.all -> sql : select * from student)
커넥션 풀이란?
커넥션 풀이 어떻게 DB와 연결되었다는 표시를 하는지?
'Computer Engineering > ruby on rails' 카테고리의 다른 글
[ruby on rails] Kaminary로 js.erb 렌더링을 통한 페이지네이션 (0) | 2022.07.29 |
---|---|
[ruby on rails] js를 통한 partial 조각 렌더링 (0) | 2022.07.15 |
[ruby on rails] acts_as_paranoid로 레코드 삭제를 칼럼으로 대체하기 (0) | 2022.06.27 |
[ruby on rails] err 422 및 CSRF token authenticity 해결 (0) | 2022.06.24 |
[ruby on rails] 히스킨 클론 코딩 4 - 장바구니 기능 (0) | 2022.06.07 |