Ruby on Rails에서 수동으로 프로젝트 기능 구축하기

Ep 2. Adding a Projects model | Rails New Tutorial with Typecraft

작성자
Ruby on Rails Youtube
발행일
2025년 07월 16일

핵심 요약

  • 1 이 영상은 Ruby on Rails에서 스캐폴딩 없이 '프로젝트' 기능을 수동으로 구축하는 과정을 설명합니다.
  • 2 Rails의 MVC 아키텍처를 기반으로 라우트, 컨트롤러, 모델, 뷰를 직접 생성하고 연결하는 방법을 다룹니다.
  • 3 데이터베이스 상호작용, 동적 URL 처리, 뷰 헬퍼 사용 등 Rails의 핵심 개념을 심층적으로 이해할 수 있도록 돕습니다.

도입

본 비디오는 기존에 구축된 'Doable' To-Do 애플리케이션에 '프로젝트' 기능을 추가하는 과정을 다룹니다. 특히, Rails의 강력한 스캐폴딩(scaffolding) 명령어를 사용하는 대신, 각 구성 요소를 수동으로 생성하고 연결함으로써 Rails 프레임워크의 내부 동작 원리와 MVC(Model-View-Controller) 아키텍처에 대한 깊이 있는 이해를 목표로 합니다. To-Do 항목들을 효율적으로 그룹화할 수 있는 '프로젝트' 개념을 도입하여 애플리케이션의 유용성을 확장하는 것이 주된 목적입니다.

라우팅(Routing) 정의

가장 먼저 애플리케이션의 config/routes.rb 파일에 새로운 라우트를 수동으로 추가합니다. get '/projects'는 모든 프로젝트 목록을 표시하기 위한 경로이며, get '/projects/:id'는 특정 프로젝트의 상세 정보를 조회하기 위한 동적 경로입니다. 여기서 :id는 URL의 가변적인 부분을 나타내며, Rails는 이 값을 params 객체를 통해 컨트롤러로 전달합니다. as project 옵션은 뷰에서 project_path와 같은 헬퍼 메서드를 사용할 수 있게 하여 URL 생성을 간소화합니다.

컨트롤러(Controller) 구현

라우트 정의 후, bin/rails generate controller projects 명령어를 사용하여 ProjectsController를 생성합니다. 이 컨트롤러 내에는 index 액션과 show 액션을 정의합니다. index 액션에서는 Project.all을 호출하여 데이터베이스의 모든 프로젝트를 가져와 @projects 인스턴스 변수에 할당합니다. show 액션에서는 params[:id]를 사용하여 특정 프로젝트의 ID를 추출하고, Project.find(params[:id])를 통해 해당 프로젝트를 찾아 @project 인스턴스 변수에 할당합니다. 이 인스턴스 변수들은 해당 컨트롤러 액션과 연결된 뷰에서 접근 가능합니다.

모델(Model) 및 데이터베이스 상호작용

Project 클래스는 데이터베이스의 projects 테이블과 매핑되는 모델입니다. bin/rails generate model project name:string 명령어를 통해 Project 모델과 함께 name 속성을 가진 projects 테이블을 생성하기 위한 마이그레이션 파일이 생성됩니다. 이 마이그레이션 파일은 bin/rails db migrate 명령어를 실행해야 실제 데이터베이스 스키마에 반영됩니다. Rails의 Active Record는 Project.all이나 Project.find와 같은 메서드를 통해 SQL 쿼리를 자동으로 생성하고 데이터베이스와 상호작용하는 역할을 합니다. 개발자는 bin/rails c(Rails 콘솔)를 사용하여 Project.create(name: 'Plan a Vacation')과 같이 데이터를 직접 생성하고 조회하며 모델의 동작을 실시간으로 테스트할 수 있습니다.

뷰(View) 생성 및 데이터 표시

app/views/projects 디렉토리 내에 index.html.erbshow.html.erb 파일을 생성합니다. 이 파일들은 Rails의 ERB(Embedded Ruby) 템플릿 언어를 사용하며, HTML 코드 내에 Ruby 코드를 삽입할 수 있습니다. <% %>는 Ruby 코드를 실행하지만 결과를 출력하지 않을 때 사용되며, <%= %>는 Ruby 코드의 결과를 HTML에 출력할 때 사용됩니다. index.html.erb에서는 @projects 인스턴스 변수를 반복하여 각 프로젝트의 이름을 표시하고, link_to 헬퍼와 project_path를 사용하여 각 프로젝트 이름에 해당 프로젝트의 상세 보기 페이지로 연결되는 링크를 추가합니다. show.html.erb에서는 @project.name을 사용하여 특정 프로젝트의 이름을 표시합니다. 이러한 뷰들은 컨트롤러에서 전달된 데이터를 사용자에게 시각적으로 보여주는 역할을 합니다.

Rails 컨벤션의 중요성

이 모든 과정은 Rails의 강력한 명명 규칙(naming conventions) 덕분에 원활하게 작동합니다. 예를 들어, ProjectsControllerindex 액션은 자동으로 index.html.erb 뷰와 연결되며, Project 모델은 projects 테이블과 자동으로 매핑됩니다. 이러한 컨벤션은 개발자가 불필요한 설정을 줄이고 비즈니스 로직에 집중할 수 있도록 돕습니다.

결론

본 비디오는 Rails의 스캐폴딩 기능에 의존하지 않고, 라우트, 컨트롤러, 모델, 뷰를 직접 구현함으로써 Rails 애플리케이션의 핵심 구성 요소들이 어떻게 유기적으로 결합되어 작동하는지 명확하게 보여주었습니다. 특히, Rails의 MVC 아키텍처, Active Record를 통한 데이터베이스 상호작용, `params` 객체를 활용한 동적 데이터 처리, 그리고 뷰 헬퍼를 통한 간결한 링크 생성 등 Rails 개발에 필수적인 개념들을 실습을 통해 심층적으로 이해할 수 있도록 구성되었습니다. 다음 비디오에서는 현재 읽기 전용으로 구현된 프로젝트 기능에 생성(Create), 업데이트(Update), 삭제(Delete) 기능을 추가하여 더욱 상호작용적인 웹 애플리케이션을 구축할 예정입니다.

댓글 0

댓글 작성

0/1000
정중하고 건설적인 댓글을 작성해 주세요.

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!