뷰와 렌더링
응답을 반환합니다
뷰와 렌더링은(는) CoddyKit의 무료 Ruby Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Ruby Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Ruby Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
뷰란 무엇인가요?
뷰는 클라이언트로 전송할 응답(일반적으로 HTML)을 생성하는 템플릿입니다. 컨트롤러가 준비한 데이터를 페이지로 변환합니다.
- 뷰는
app/views에 있습니다. app/views/articles처럼 컨트롤러별로 그룹화됩니다.- 기본 템플릿 이름은 동작 이름과 일치합니다.
관례에 따른 렌더링
기본적으로 동작은 해당 동작의 이름을 딴 템플릿을 렌더링합니다. ArticlesController의 index 동작은 명시적인 render 호출 없이 app/views/articles/index.html.erb를 렌더링합니다.
def index
@articles = Article.all
# automatically renders articles/index.html.erb
endERB 템플릿
기본 템플릿 언어는 ERB(내장 루비)입니다. ERB는 HTML과 루비를 함께 사용합니다:
<%= ... %>는 값을 출력합니다.<% ... %>는 출력 없이 코드를 실행합니다.
<h1>Articles</h1>
<% @articles.each do |article| %>
<p><%= article.title %></p>
<% end %>레이아웃
레이아웃은 헤더, 탐색 메뉴, 푸터 같은 공통 마크업으로 모든 뷰를 감쌉니다. 기본 app/views/layouts/application.html.erb에는 동작의 뷰가 삽입되는 위치를 나타내는 <%= yield %>가 포함되어 있습니다.
<!-- application.html.erb -->
<html>
<body>
<%= yield %>
</body>
</html>부분 템플릿
부분 템플릿은 파일 이름이 밑줄로 시작하는 재사용 가능한 템플릿 조각입니다. render로 렌더링하여 마크업을 중복하지 마십시오.
<!-- _article.html.erb -->
<p><%= article.title %></p>
<!-- in index.html.erb -->
<%= render "article", article: @article %>컬렉션 렌더링
컬렉션을 render에 전달하면 항목마다 부분 템플릿을 한 번씩 렌더링할 수 있습니다. 이는 관용적인 단축 방법입니다. 레일스는 모델에서 부분 템플릿 이름을 추론합니다.
<%= render @articles %>
<!-- renders _article.html.erb for each article -->뷰 헬퍼
레일스는 HTML을 안전하게 생성하는 헬퍼를 제공합니다. 링크에는 link_to, 양식에는 form_with, 이미지에는 image_tag를 사용합니다. 헬퍼를 사용하면 템플릿을 깔끔하고 일관되게 유지할 수 있습니다.
<%= link_to "View", article_path(@article) %>
<%= image_tag "logo.png" %>다른 형식으로 응답하기
컨트롤러는 HTML 외에도 다양한 형식을 반환할 수 있습니다. render json:은 API에 JSON을 전송하고, respond_to는 클라이언트가 요청한 형식에 따라 서로 다른 형식을 제공합니다.
def show
@article = Article.find(params[:id])
render json: @article
end응답 형식 블록
하나의 동작에서 여러 형식을 처리하려면 respond_to를 사용하십시오. 같은 동작이 브라우저에는 HTML을, API 클라이언트에는 JSON을 반환할 수 있습니다.
def show
@article = Article.find(params[:id])
respond_to do |format|
format.html
format.json { render json: @article }
end
end상태 코드
status:를 사용하여 응답의 HTTP 상태를 설정하십시오. 성공적으로 생성한 후에는 :ok(200), :created(201)를 사용하고, 검증에 실패하면 :unprocessable_entity(422)를 사용하여 클라이언트가 올바르게 반응하도록 하십시오.
render :new, status: :unprocessable_entity
render json: @article, status: :created이스케이프와 안전성
ERB는 <%= %>의 출력을 자동으로 HTML 이스케이프하므로 사용자 데이터로 인한 사이트 간 스크립팅을 방지합니다. 내용을 완전히 신뢰할 수 있을 때만 raw 또는 html_safe로 안전한 콘텐츠라고 표시하십시오. 이를 잘못 사용하면 XSS 취약점이 다시 열립니다.
빠른 확인
뷰와 렌더링에 대한 이해도를 확인해 보십시오.
복습: 뷰와 렌더링
응답을 반환하는 방법을 배웠습니다:
- 관례에 따라 동작은 이름이 일치하는 ERB 뷰를 렌더링합니다.
- 레이아웃은 뷰를 감싸고, 부분 템플릿은 조각을 재사용합니다.
link_to와form_with같은 헬퍼가 HTML을 만듭니다.render json:과respond_to로 API를 제공하고 적절한 상태 코드를 설정합니다.- ERB는 출력 내용을 이스케이프하여 XSS를 방지합니다.
이로써 컨트롤러와 라우팅 과정이 끝났습니다.
자주 묻는 질문
“뷰와 렌더링” 강의는 무료인가요?
네 — “뷰와 렌더링” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Ruby Academy 강의 전체를 잠금 해제할 수 있습니다. Ruby Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“뷰와 렌더링”에서 뭘 배우나요?
응답을 반환합니다 브라우저에서 직접 실행하는 실습 코드로 Ruby Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Ruby Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Ruby Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“뷰와 렌더링” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Ruby Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Ruby Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.