💎

Ruby on Rails 가이드로 시작하기

작성일자
Dec 17, 2024
태그
ETC
프로젝트
RubyOnRails
책 종류

Ruby on Rails 가이드로 시작하기

공식 문서가 제공하는 가이드를 이용해 Ruby on Rails를 시작해보자.

1. 설치

1-1. Ruby 설치

Rails에는 Ruby 버전 3.2.0 이상이 필요하다. 아래 공식 문서에 바탕해 설치했다. homebrew를 사용 중이라서 brew install ruby 명령어 한 줄로 간단하게 설치 가능했다. stable version인 3.3.6으로 설치했다.
 
이때 macOS에 기본적으로 포함된 Ruby가 PATH에서 우선적으로 호출되어 버전을 확인했을 때 아래와 같이 뜨는 문제가 있었다.
 
이를 해결하기 위해 PATH를 수정해주었다.

1-2. SQLite3 설치

SQLite3 데이터베이스 설치도 필요하다. brew를 이용해 간단하게 깔았다.

1-3. Rails 설치

RubyGems를 통해 Rails 라이브러리를 설치했다.
 
이때 아래와 같이 rails 명령어 사용이 불가한 문제가 발생했었다.
 
절대 경로를 지정한 rails 명령어는 사용이 가능했기에 Rails 설치 자체엔 문제가 없다 판단했다.
 
type 명령어를 쳐보면, 현재 사용 중인 rails 명령이 /usr/bin/rails로 설정되어 있었다. 아마 MacOS 기본 시스템에서 제공하는 오래된 Rails 버전 때문인 것 같다.
 
homebrew에서 설치한 Rails 경로가 /usr/bin/rails보다 먼저 탐색되게 하기 위해 환경 설정을 수정해주어 해결했다.

2. 라우팅

2-1. 블로그 애플리케이션 생성

원하는 경로에서 아래 명령어를 입력하면 blog 어플리케이션에 blog 디렉터리에 만들어진다.

2-2. Rails 애플리케이션 서버 실행

blog 디렉터리에서 아래 명령어를 입력하면 웹 서버를 실행할 수 있다. 이렇게 하면 기본적으로 Rails 와 함께 배포되는 웹 서버인 Puma가 시작된다. 애플리케이션이 작동하는 모습을 보려면, http://localhost:3000 으로 이동하면 된다. control+c 를 입력해 중지할 수 있다. 참고로 서버가 동작하는 동안엔 파일에서 변경한 내용이 서버에 자동으로 들어가기에 서버를 재시작할 필요 없다.
 
notion image

2-3. “Hello, Rails!” 텍스트 띄우기

Rails에서 “Hello, Rails!” 텍스트를 띄우려면 최소한 route, controller action, view가 필요하다.
  • route: 요청을 controller action에 매핑한다.
    • Ruby DSL로 작성된 규칙으로 구현된다.
  • controller action: 요청을 처리하는 데 필요한 작업을 수행하고, view에 대한 모든 데이터를 준비한다.
    • controller는 Ruby 클래스로, action은 public method로 구현된다.
  • view: 원하는 형식으로 데이터를 표시한다.
    • 템플릿으로 일반적으로 HTML과 Ruby를 혼합해 작성된다.
 
route 파일(config/routes.rb)을 먼저 수정해보자. 아래와 같이 설정함으로써 GET /articles 요청이 ArticlesControllerindex action에 매핑되게 하였다.
 
다음으로 controller action을 만들어 보자. 터미널에 아래 명령어를 입력해 쉽게 생성할 수 있다.
 
app/controllers/articles_controller.rb 에 들어가보면, controller 파일의 action이 비어있다. 이처럼 action이 view를 명시적으로 렌더링하지 않을 때 Rails는 controller와 action의 이름과 일치하는 뷰를 자동으로 렌더링한다. 지금같은 경우 app/views/articles/index.html.erb 와 렌더링된다.
 
마지막으로, 뷰 파일을 수정해보자. app/views/articles/index.html.erb 내용을 아래와 같이 바꿔주었다. 이제 http://localhost:3000/articles 에 접속하면 “Hello, Rails!” 텍스트가 보이는 걸 확인할 수 있다.
notion image
만일 루트 경로인 http://localhost:3000 역시 “Hello, Rails!” 텍스트를 띄우게 하고 싶다면 config/routes.rb 에 아래와 같이 root 문을 추가하면 된다.
 
참고로, 지금까지의 과정에서 require 문이 필요 없었다. 애플리케이션 클래스와 모듈은 어디에서나 사용할 수 있기 때문이다. 따라서 아무것도 로드할 필요 없고 로드해서는 안된다. 이 기능을 자동 로딩이라고 한다. require 문은 lib 디렉터리 하위의 파일을 로드하거나 GemFile의 require:false 속성을 가진 gem dependencies를 로드할 때 딱 두 가지 케이스에만 필요하다.

3. MVC

3.1. model 생성

route, controller action, view에 대해 논했는데, 이는 MVC 패턴을 다르는 웹 애플리케이션의 전형적인 부분이다. controller와 view가 있으니 다음 요소인 model을 생성해보자.
  • model: 데이터를 표현하는 데 사용되는 Ruby 클래스다.
    • Active Record라는 Rails 기능을 통해 데이터베이스와 상호 작용 가능하다.
    • model의 이름은 단수형이다. 인스턴스화된 모델은 단일 데이터 레코드를 나타내기 때문이다.
 
model은 터미널에 아래 명령어(모델 생성기)를 입력해 쉽게 생성할 수 있다.

3.2. 데이터베이스 마이그레이션

마이그레이션 파일(db/migrate/<timestamp>_create_articles.rb)은 애플리케이션의 데이터베이스 구조를 변경하는 데 사용돈다. 마이그레이션 파일은 Ruby로 작성되기 때문에 데이터베이스에 구애받지 않는다.
 
파일 내용을 살펴보자. create_table 은 auto increment 방식을 뜻한다. articles 라는 테이블은 자동 증가하는 기본 키와, string 타입의 title 컬럼, text 타입의 body 컬럼, created_atupdated_at 컬럼 총 5개 컬럼을 가진다.
 
아래 명령을 통해 마이그레이션을 실행할 수 있다. 실행하면 테이블이 생성된다.

3.3. 모델 사용해 데이터베이스와 상호작용

Rails의 콘솔 기능을 이용해 데이터베이스에 쿼리를 날려보자.
 
먼저 콘솔 프롬프트에서 새 Article 객체를 초기화한다. 그리곤 객체를 데이터베이스에 저장하기 위해 save를 호출한다. save 를 호출한 후 article을 다시 살펴보면 id, created_at, updated_at 속성이 추가적으로 설정된 걸 확인할 수 있다.
 
데이터베이스에서 article을 조회하려면 find(id) 메서드를 이용하면 된다. 모든 article을 조회하려면 all 메서드를 이용하면 된다.

3.4. article 목록 표시하기

controller(app/controllers/articles_controller.rb)에 article 목록을 가져오는 action을 만들어보자.
 
controller 인스턴스 변수는 view에서 접근할 수 있다. view(app/views/articles/index.html.erb)가 @articles를 참조하게 만들어보자.