Ruby on Rails: 프로젝트 CRUD 기능 구현 및 Rails 컨벤션 이해

Ep 3. Adding CRUD actions | Rails New Tutorial with Typecraft

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

핵심 요약

  • 1 본 비디오는 Ruby on Rails 기반 To-Do 앱 'Doable'에 프로젝트 생성, 조회, 수정, 삭제(CRUD) 기능을 추가하는 과정을 상세히 설명합니다.
  • 2 Rails의 라우팅, 컨트롤러 액션, 뷰, 모델 유효성 검증, Flash 메시지, 부분 뷰, 그리고 'resources' 헬퍼와 같은 핵심 컨벤션과 패턴을 다룹니다.
  • 3 DRY(Don't Repeat Yourself) 원칙을 적용하고 Rails의 내장 기능을 활용하여 효율적이고 견고한 웹 애플리케이션을 구축하는 방법을 제시합니다.

도입

이전 비디오에서는 'Doable' To-Do 애플리케이션에 프로젝트 모델, 컨트롤러, 뷰를 생성하고 데이터베이스에서 프로젝트 목록을 조회하는 기능까지 구현했습니다. 본 비디오는 여기서 한 단계 더 나아가, 사용자가 브라우저를 통해 새로운 프로젝트를 추가하고(Create), 기존 프로젝트를 수정하며(Update), 불필요한 프로젝트를 삭제하는(Delete) 등 완전한 CRUD(Create, Read, Update, Delete) 기능을 구현하는 데 초점을 맞춥니다. 이 과정에서 Rails의 핵심적인 라우팅, 컨트롤러 설계, 뷰 렌더링, 모델 유효성 검사, 그리고 코드 재사용을 위한 부분 뷰(Partial)와 같은 중요한 컨벤션과 기법들을 심층적으로 탐구하며, Rails 개발자로서의 사고방식을 함양하는 것을 목표로 합니다.

새로운 프로젝트를 생성하기 위해 먼저 config/routes.rb 파일에 get '/projects/new', to: 'projects#new', as: :new_project 라우트를 추가하고, ProjectsControllernew 액션을 정의합니다. new 액션 내에서 @project = Project.new를 통해 비어 있는 Project 인스턴스를 생성함으로써 폼 빌딩을 용이하게 합니다. 뷰 파일 new.html.erb에서는 Rails의 강력한 form_with 헬퍼를 사용하여 폼을 생성합니다. 이 헬퍼는 폼 제출 경로, HTTP 메서드(POST), 그리고 필드 이름 포맷팅 및 CSRF 보호를 위한 숨겨진 필드까지 자동으로 처리하여 개발자가 직접 HTML 폼을 작성하는 수고를 덜어줍니다. 폼이 제출되면 post '/projects' 라우트에 매칭되어 create 액션이 호출됩니다. create 액션에서는 project_params 메서드를 통해 Strong Parameters를 적용하여 보안을 강화합니다. Strong Parameters는 허용된 파라미터만 데이터베이스에 저장되도록 하여 악의적인 데이터 주입을 방지하는 Rails의 중요한 보안 기능입니다. 프로젝트 저장이 성공하면 해당 프로젝트의 상세 페이지로 리다이렉션하고(redirect_to project_path(@project)), 실패하면 render :new, status: :unprocessable_entity를 통해 폼을 다시 렌더링하여 사용자에게 오류를 알립니다.

프로젝트 생성 시 이름 필드가 비어 있는 것을 방지하기 위해 Project 모델에 validates :name, presence: true 유효성 검사를 추가합니다. Rails 콘솔을 통해 project.errors.full_messages로 유효성 검사 실패 이유를 확인할 수 있으며, 뷰에서는 @project.errors.any? 조건을 사용하여 오류 메시지를 사용자에게 친절하게 표시합니다. 또한, message: "Did you forget to add a name?"과 같이 사용자 정의 오류 메시지를 설정하여 더 나은 사용자 경험을 제공할 수 있습니다.

기존 프로젝트를 수정하기 위해 get '/projects/:id/edit', to: 'projects#edit', as: :edit_project 라우트를 추가하고 edit 액션에서 Project.find(params[:id])를 통해 특정 프로젝트를 조회합니다. 수정 폼을 위한 edit.html.erb 뷰는 새로운 프로젝트 생성 시 사용했던 폼과 동일한 form_with 헬퍼를 재사용합니다. Rails는 form_with에 전달된 객체가 기존 객체임을 인지하여 자동으로 업데이트 폼으로 동작하도록 설정합니다. 폼 제출 시에는 patch '/projects/:id' 라우트에 매칭되어 update 액션이 호출되며, project.update(project_params)를 통해 프로젝트 정보를 업데이트합니다.

프로젝트 삭제 기능은 delete '/projects/:id' 라우트와 destroy 액션을 통해 구현됩니다. destroy 액션에서는 project.destroy를 호출하여 데이터베이스에서 해당 프로젝트를 삭제하고, flash[:notice] = 'Project deleted' 메시지와 함께 projects_path로 리다이렉션합니다.

사용자에게 작업 성공 여부를 즉각적으로 알리기 위해 Flash 메시지를 활용합니다. flash[:notice]에 메시지를 저장하면 다음 요청 시 해당 메시지가 application.html.erb 레이아웃 파일에 표시됩니다. 또한, new.html.erbedit.html.erb 뷰에서 동일하게 사용되는 폼 코드를 DRY(Don’t Repeat Yourself) 원칙에 따라 _form.html.erb라는 부분 뷰(Partial)로 분리하고, render 'form', project: @project와 같이 렌더링하여 코드 중복을 제거하고 유지보수성을 높입니다. 마지막으로, Rails는 CRUD 기능에 필요한 모든 라우트를 한 줄로 자동 생성해주는 resources :projects 헬퍼를 제공하여, 개발자가 개별 라우트를 수동으로 정의하는 번거로움을 줄여줍니다. 이는 Rails의 강력한 컨벤션 기반 개발 방식의 대표적인 예시입니다.

결론

본 비디오를 통해 우리는 Ruby on Rails에서 프로젝트 리소스에 대한 완전한 CRUD 기능을 수동으로 구현하는 과정을 면밀히 살펴보았습니다. 이 과정에서 폼과 컨트롤러 액션의 연동, 모델 유효성 검사의 작동 방식, 사용자 피드백을 위한 Flash 메시지 활용법, 그리고 코드 재사용을 위한 부분 뷰의 중요성을 깊이 이해할 수 있었습니다. 특히 `resources` 헬퍼와 같은 Rails의 강력한 컨벤션을 적용함으로써 최소한의 코드로 최대의 기능을 구현하는 'Rails Way'에 대한 통찰력을 얻었습니다. 이러한 경험은 단순히 기능을 구현하는 것을 넘어, Rails 개발자처럼 문제에 접근하고 해결하는 사고방식의 전환을 의미합니다. 다음 에피소드에서는 Active Record를 더욱 심층적으로 탐구하며 애플리케이션에 더 많은 기능을 추가할 예정입니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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