컨트롤러와 액션
요청을 처리합니다
컨트롤러와 액션은(는) CoddyKit의 무료 Ruby Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Ruby Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Ruby Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
컨트롤러란 무엇일까요?
컨트롤러는 라우터에서 요청을 받고, 작업을 수행한 다음, 무엇을 돌려보낼지 결정합니다. 모델과 뷰 사이를 조정하는 역할을 합니다.
- 컨트롤러는
app/controllers에 있습니다. ApplicationController를 상속합니다.- 각 공개 메서드는 액션입니다.
컨트롤러 정의
컨트롤러는 이름이 Controller로 끝나는 클래스입니다. 관례에 따라 ArticlesController는 articles 리소스의 경로를 처리합니다.
class ArticlesController < ApplicationController
def index
@articles = Article.all
end
end액션과 경로의 연결
REST 경로 7개는 각각 대응하는 액션을 호출합니다. 라우터는 GET /articles를 index로, GET /articles/1을 show로 보내는 식으로 처리합니다. 관례에 맞게 액션 이름을 지정하면 모든 연결이 자동으로 이루어집니다.
params 해시
요청 데이터는 경로의 각 부분, 질의 문자열, 양식 필드를 담은 해시와 비슷한 객체인 params로 전달됩니다. /articles/5에서 params[:id]는 "5"입니다.
def show
@article = Article.find(params[:id])
end뷰에 전달하는 인스턴스 변수
컨트롤러는 인스턴스 변수(@ 접두사)를 통해 뷰에 데이터를 전달합니다. 액션에서 설정한 모든 @variable은 일치하는 뷰 템플릿에서 사용할 수 있습니다.
def index
@articles = Article.all
# @articles is available in index.html.erb
endindex와 show 구현
읽기 액션은 간단합니다. index는 컬렉션을 불러오고, show는 ID로 레코드 하나를 불러옵니다. 그런 다음 각 액션의 기본 템플릿을 렌더링합니다.
class ArticlesController < ApplicationController
def index
@articles = Article.all
end
def show
@article = Article.find(params[:id])
end
endcreate 구현
create 액션은 제출된 데이터로 레코드를 만들고 저장합니다. 성공하면 다른 경로로 리디렉션하고, 실패하면 사용자가 오류를 수정할 수 있도록 양식을 다시 렌더링합니다.
def create
@article = Article.new(article_params)
if @article.save
redirect_to @article
else
render :new, status: :unprocessable_entity
end
endredirect_to와 render 비교
서로 매우 다른 두 응답입니다.
redirect_to는 브라우저에 다른 URL로 새 요청을 보내도록 지시합니다.render는 현재 요청에 대한 뷰를 직접 반환합니다.
쓰기 작업이 성공하면 리디렉션하고, 오류와 함께 양식을 다시 보여 주려면 렌더링합니다.
액션 실행 전 처리
before_action은 선택한 액션 전에 공통 설정을 실행하여 중복을 줄입니다. show, edit, update, destroy에 필요한 레코드를 불러오는 것이 일반적인 사용 방법입니다.
class ArticlesController < ApplicationController
before_action :set_article, only: [:show, :edit, :update, :destroy]
private
def set_article
@article = Article.find(params[:id])
end
end필터와 인증
before_action은 규칙도 적용합니다. before_action :require_login과 같은 보호 장치는 사용자가 로그인하지 않았다면 redirect_to login_path를 실행하고 액션을 중단할 수 있으므로, 컨트롤러 전체를 한 번에 보호할 수 있습니다.
before_action :require_login
private
def require_login
redirect_to login_path unless current_user
end누락된 레코드 처리
find가 레코드를 찾지 못하면 RecordNotFound를 발생시키며, Rails는 이를 운영 환경에서 404 응답으로 변환합니다. rescue_from을 사용해 친절한 페이지를 표시하도록 이 동작을 사용자 지정할 수 있습니다.
rescue_from ActiveRecord::RecordNotFound do
redirect_to articles_path, alert: "Not found"
end빠른 확인
컨트롤러에 대한 이해도를 확인해 보세요.
복습: 컨트롤러와 액션
컨트롤러가 요청을 처리하는 방법을 배웠습니다.
- 관례에 따라 액션이 경로에 연결됩니다.
params는 요청 데이터를 전달하고,@variables는 뷰에 전달됩니다.create는 저장한 다음 리디렉션하거나 다시 렌더링합니다.redirect_to와render는 서로 다른 용도로 사용됩니다.before_action은 설정을 공유하고 인증을 적용합니다.
다음으로 강력한 매개변수를 사용해 대량 할당을 안전하게 처리합니다.
자주 묻는 질문
“컨트롤러와 액션” 강의는 무료인가요?
네 — “컨트롤러와 액션” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Ruby Academy 강의 전체를 잠금 해제할 수 있습니다. Ruby Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“컨트롤러와 액션”에서 뭘 배우나요?
요청을 처리합니다 브라우저에서 직접 실행하는 실습 코드로 Ruby Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Ruby Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Ruby Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“컨트롤러와 액션” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Ruby Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Ruby Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.