🚀
Growth log
  • About me
  • I LEARNED
    • General
      • 개발자 꿀팁
      • 그로스해킹 기초
      • 개발자에게 도메인 지식은 얼마나 중요할까?
      • DTO 논쟁에 대하여
      • MSA란?
    • Seminar
      • 테스트 커버리지 100% - SLASH 21
      • TDD가 실패하는 이유 - by 이규원님
      • 대규모 트래픽 애플리케이션 성능 튜닝 노하우 다 알려 드림|라인개발실록
      • 결제 시스템의 SDK와 API 디자인 - SLASH 21
    • Web
      • SOP와 CORS
    • Spring & OOP
      • DTO vs VO
    • Ruby On Rails
      • Rails lib 디렉토리에 대하여
      • Rails의 concerns란?
      • Rails에서의 GC 작동원리
      • Eager loading vs Lazy loading
      • Rails 환경 구성
      • ActionCable
      • 📔Perfect ruby on rails
        • MVC 패턴인 Rails
        • Ruby on Rails 기본 - 컨트롤러
        • Ruby on Rails 기본 - 뷰
        • Ruby on Rails 기본 - 모델
        • 스캐폴딩 기능을 사용한 Rails 개발 기초
        • 뷰 개발
        • 모델 개발
        • 모델 개발 - 낙관적 동시 실행 제어
        • 모델 개발 - 유효성 검사 구현
        • 모델 개발 - Association
        • 모델 개발 - 콜백
        • 모델 개발 - 마이그레이션
        • 모델 개발 - 데이터 초기화
        • 컨트롤러 개발 - 요청 정보 추출
        • 컨트롤러 개발 - 응답
        • 컨트롤러 개발 - 상태 관리
        • 라우팅 - RESTful
        • 라우팅 - RESTful 인터페이스의 사용자 정의화
        • 라우팅 - RESTful 하지 않은 라우트 정의
        • 테스트
        • 테스트 - 준비
        • 테스트 - Unit 테스트
        • 테스트 - Functional 테스트
        • 테스트 - Integration 테스트
        • 클라이언트 개발 - Sprockets vs Webpacker
        • 클라이언트 개발 - Sprockets
    • Node.js & Express
      • 기본 개념
      • npx
    • Programing Language
      • Java
        • JavaDoc에 대해
        • invocation에 대해서
        • 어노테이션
        • 추상클래스 & 인터페이스
        • Package
        • 오버로딩 vs 오버라이딩
      • Javascript
        • TCP School 훑어보기
          • 타입
          • 형 변환
          • 변수
          • 연산자
          • 반복문
          • 배열(array)
          • 함수
          • 함수 - 스코프와 호이스팅
          • 함수 - 매개변수와 인수
          • 함수 - 미리 정의된 전역 함수
          • 객체
          • 프로토타입
          • DOM
          • BOM - Window 객체
          • 이벤트(event)
      • Ruby
        • 📔퍼펙트 루비
    • DB
      • Redis
        • Redis 개요
      • Index(인덱스)?
      • DB Transaction & Lock
      • 동시성 제어에 관하여
      • Lock(잠금)이란?
      • ActiveRecord lock vs with_lock
      • Table lock vs Row lock
      • WHERE 1=1 구문에 대하여
      • COUNT(*) vs COUNT(indexed column)
      • 📕관계형 데이터베이스 실전입문
      • 📔SQL 첫걸음
      • 📔모두의 SQL
    • Design Patterns
      • Observer pattern
      • Flyweight pattern
      • Singleton pattern
    • OOP
      • 📔오브젝트
        • 6장 메시지와 인터페이스
      • 클래스간 관계 간단 정리
    • Regex
    • Collaboration
      • Git
      • Sourcetree
  • DAILY REVIEW
    • 2021
      • August
        • 2021-08-25(Wed)
        • 2021-08-23(Mon)
        • 2021-08-11(Wed)
        • 2021-08-04(Wed)
        • 2021-08-03(Tue)
        • 2021-08-02(Mon)
      • July
        • 2021-07-29(Thu)
        • 2021-07-26(Mon)
        • 2021-07-23(Fri)
        • 2021-07-22(Thu)
        • 2021-07-21(Wed)
        • 2021-07-20(Tue)
        • 2021-07-19(Mon)
        • 2021-07-15(Thu)
        • 2021-07-14(Wed)
        • 2021-07-13(Tue)
        • 2021-07-12(Mon)
      • June
        • 2021-06-05(Sat)
        • 2021-06-04(Fri)
        • 2021-06-03(Thu)
        • 2021-06-02(Wed)
        • 2021-06-01(Tue)
      • May
        • 2021-05-31(Mon)
        • 2021-05-29(Sat)
        • 2021-05-28(Fri)
        • 2021-05-27(Thu)
        • 2021-05-26(Wed)
        • 2021-05-25(Tue)
        • 2021-05-24(Mon)
        • 2021-05-22(Sat)
        • 2021-05-21(Fri)
        • 2021-05-20(Thu)
        • 2021-05-19(Wed)
        • 2021-05-18(Tue)
        • 2021-05-17(Mon)
        • 2021-05-15(Sat)
        • 2021-05-13(Thu)
        • 2021-05-12(Wed)
        • 2021-05-11(Tue)
        • 2021-05-10(Mon)
        • 2021-05-03(Mon)
      • April
        • 2021-04-30(Fri)
        • 2021-04-29(Thu)
        • 2021-04-28(Wed)
        • 2021-04-27(Tue)
        • 2021-04-26(Mon)
        • 2021-04-24(Sat)
        • 2021-04-23(Fri)
        • 2021-04-21(Wed)
        • 2021-04-20(Tue)
        • 2021-04-19(Mon)
        • 2021-04-18(Sun)
        • 2021-04-16(Fri)
        • 2021-04-15(Thu)
        • 2021-04-14(Wed)
        • 2021-04-12(Mon)
        • 2021-04-11(Sun)
        • 2021-04-09(Fri)
        • 2021-04-08(Thu)
        • 2021-04-06(Tue)
        • 2021-04-05(Mon)
        • 2021-04-04(Sun)
        • 2021-04-03(Sat)
        • 2021-04-02(Fri)
        • 2021-04-01(Thu)
      • March
        • 2021-03-29(Mon)
        • 2021-03-28(Sun)
        • 2021-03-26(Fri)
        • 2021-03-25(Thu)
        • 2021-03-24(Wed)
        • 2021-03-23(Tue)
        • 2021-03-22(Mon)
        • 2021-03-21(Sun)
        • 2021-03-20(Sat)
        • 2021-03-17(Wed)
        • 2021-03-16(Tue)
        • 2021-03-15(Mon)
        • 2021-03-12(Fri)
        • 2021-03-11(Thu)
        • 2021-03-10(Wed)
        • 2021-03-09(Tue)
        • 2021-03-08(Mon)
        • 2021-03-07(Sun)
        • 2021-03-05(Fri)
        • 2021-03-03(Wed)
        • 2021-03-02(Tue)
        • 2021-03-01(Mon)
      • Feb
        • 2021-02-26(Fri)
        • 2021-02-25(Thu)
        • 2021-02-24(Wed)
        • 2021-02-23(Tue)
        • 2021-02-22(Mon)
        • 2021-02-19(Fri)
        • 2021-02-18(Thu)
        • 2021-02-17(Wed)
        • 2021-02-16(Tue)
        • 2021-02-15(Mon)
        • 2021-02-14(Sun)
        • 2021-02-13(Sat)
        • 2021-02-12(Fri)
        • 2021-02-10(Wed)
        • 2021-02-09(Tue)
        • 2021-02-08(Mon)
        • 2021-02-07(Sun)
        • 2021-02-05(Fri)
        • 2021-02-03(Wed)
        • 2021-02-02(Tue)
        • 2021-02-01(Mon)
      • Jan
        • 2021-01-29(Fri)
        • 2021-01-28(Thu)
        • 2021-01-27(Wed)
        • 2021-01-26(Tue)
        • 2021-01-25(Mon)
        • 2021-01-23(Sat)
        • 2021-01-22(Fri)
        • 2021-01-20(Wed)
        • 2021-01-19(Tue)
        • 2021-01-18(Mon)
        • 2021-01-12(Tue)
        • 2020-01-11(Mon)
        • 2021-01-08(Fri)
        • 2021-01-07(Thu)
        • 2021-01-06(Wed)
        • 2021-01-05(Tue)
        • 2021-01-04(Mon)
        • 2021-01-01(Fri)
    • 2020
      • Dec
        • 2020-12-30(Thu)
        • 2020-12-25(Fri)
        • 2020-12-24(Thu)
        • 2020-12-23(Wed)
        • 2020-12-22(Tue)
        • 2020-12-21(Mon)
        • 2020-12-18 (Fri)
      • Nov
        • 2020-11-30(Mon)
        • 2020-11-28(Sat)
        • 2020-11-26(Thu)
        • 2020-11-25(Wed)
        • 2020-11-24(Tue)
        • 2020-11-23(Mon)
        • 2020-11-22(Sun)
        • 2020-11-20(Fri)
        • 2020-11-19(Thu)
        • 2020-11-18(Wed)
        • 2020-11-17(Tue)
        • 2020-11-14(Sat)
        • 2020-11-13(Fri)
        • 2020-11-12(Thu)
        • 2020-11-11(Wed)
        • 2020-11-09(Mon)
        • 2020-11-07(Sat)
        • 2020-11-05(Thu)
        • 2020-11-04(Wed)
        • 2020-11-03(Tue)
        • 2020-11-02(Mon)
    • Good article 아카이빙
Powered by GitBook
On this page

Was this helpful?

  1. I LEARNED
  2. Ruby On Rails
  3. Perfect ruby on rails

Ruby on Rails 기본 - 모델

모델은 데이터베이스 또는 외부 서비스에 접근하기 위한 비즈니스 로직을 담당하는 컴포넌트이다. 다양한 컴포넌트를 이용할 수 있지만 Rails 초보자라면 O/R 맵퍼를 사용하는 액티브 레코드를 이용해보자.

O/R 맵퍼

O/R(Object/Relational) 맵퍼는 관계형 데이터베이스와 객체 지향 언어의 객체를 이어주는 라이브러리다.

객체 모델과 데이터베이스 관계 모델은 구조가 다르다. 이를 객체 관계 불일치(impedance mismatch)라고 부르는데, O/R 맵퍼는 이러한 잘못된 매칭을 제거하기 위한 툴이다. 액티브 레코드에서는 데이터베이스의 테이블 한 개로 모델 클래스 한 개를 생성한다. 모델 클래스의 인스턴스는 레코드 한 개를 나타내는 객체로 객체의 속성은 테이블의 필드를 그대로 갖게 된다.

O/R 맵퍼로 사용되는 액티브 레코드를 사용하면 Rails에서 관계형 데이터베이스를 마치 객체를 다루듯이 조작할 수 있다.

액티브 레코드를 사용해 데이터베이스에 연결하려면 일단 config/database.yml에 연결과 관련된 설정을 해줘야한다.

YAML은 <매개 변수 이름>: <값>의 형태로 매개 변수를 표시한다. 또한 들여쓰기로 계층을 표현할 수 있는데 들여쓰기로 탭 문자를 이용할 수는 없다.

database.yml에서 사용할 수 있는 중요한 접속 관련 매개 변수

매개 변수 이름

설명

adapter

접속할 데이터베이스 종류

database

데이터베이스 이름(SQLite는 데이터베이스 파일 경로)

host

호스트 이름 또는 IP 주소

port

포트 번호

pool

확보할 접속 풀. 데이터베이스 접속을 미리 준비해두고 이용 후에도 접속을 끊지 안혹서 풀에 돌려보내는 식으로 접속 오버헤드를 줄일 때 사용한다.

timeout

접속 타임아웃 시간. 밀리초 단위다.

encoding

사용할 문자코드

username

사용자 이름

password

비밀번호

socket

소켓

데이터베이스 이름은 보통 개발(development), 테스트(test), 배포(production) 환경으로 목적에 맞게 환경을 구분할 수 있다. 데이터베이스 이름은 보통 <환경 이름>.sqlite3가 되지만 변경해도 상관없다.

모델도 generate 명령어로 생성한다.

rails generate model naem field:type [...] [options]

모델 Association 이름 규칙

종류

설명

예

모델 클래스

첫 글자를 대문자로 하고 단수형으로 사용

Book

모델 클래스의 파일 이름

첫 글자를 소문자로 하고 단수형으로 사용

book.rb

테이블

첫 글자를 소문자로 하고 복수형으로 사용

books

테스트 스크립트

xxx_test.rb(첫 글자는 소문자로 하고 단수형으로 사용)

book_test.rb

Rails는 테이블 생성 또는 수정에 마이그레이션(Migration)이라는 기능을 사용한다. 마이그레이션은 테이블 레이아웃을 생성 또는 변경하기 위한 구조이다. 마이그레이션을 사용하면 테이블 관련 작업을 반자동할 수 있어서 레이아웃을 변경하는 일이 발생하더라도 쉽게 반영할 수 있다.

rake db:migrate

로 마이그레이션 파일을 실행할 수 있다.

Rails는 테스트 데이터를 데이터베이스 내부에 셋팅해둘 수 있도록 픽스처(fixture)라는 기능을 제공한다. 픽스처는 YAML 형식의 데이터를 데이터베이스에 넣어주는 기능이라 생각하면 된다.

만약 config/test/fixtures 경로에 books.yml을 옮겼다면, 아래 커맨드를 치는 식으로 작동시킨다.

rake db:fixtures:load FIXTURES=books

DB에 저장된 Table은 Rails 가 예약해서 사용하는 필드가 포함되어있다.

Rails가 자동 생성한 필드

필드 이름

설명

id

Primary key(자동으로 번호가 붙음)

created_at

레코드 생성 일자(액티브 레코드가 자동으로 설정)

updated_at

레코드 수정 일자(액티브 레코드가 자동으로 설정)

따라서 개발자가 필드를 정의할 때 이런 예약어를 피해야한다.

PreviousRuby on Rails 기본 - 뷰Next스캐폴딩 기능을 사용한 Rails 개발 기초

Last updated 4 years ago

Was this helpful?

📔