라우팅(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.erb
와 show.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) 덕분에 원활하게 작동합니다. 예를 들어, ProjectsController
의 index
액션은 자동으로 index.html.erb
뷰와 연결되며, Project
모델은 projects
테이블과 자동으로 매핑됩니다. 이러한 컨벤션은 개발자가 불필요한 설정을 줄이고 비즈니스 로직에 집중할 수 있도록 돕습니다.