📋

Params & Strong Parameters

요청 파라미터 접근과 허용 목록 관리

Rails의 params는 URL 파라미터, 쿼리 스트링, 폼 데이터, JSON 바디 등을 하나의 해시로 통합 접근할 수 있게 해줍니다.

params 소스:

  • URL 세그먼트: /posts/:idparams[:id]

  • 쿼리 스트링: ?page=2params[:page]

  • 폼 데이터: <input name="post[title]">params[:post][:title]

  • JSON Body: {"post": {"title": "..."}}params[:post][:title]

Strong Parameters는 Rails 4에서 도입된 보안 기능입니다. Mass Assignment 공격(사용자가 admin=true 같은 필드를 몰래 전송)을 방지합니다.

def post_params
  params.require(:post).permit(:title, :content, :category_id)
end

require로 필수 파라미터 키를 확인하고, permit으로 허용할 필드만 화이트리스트에 추가합니다. 허용되지 않은 필드는 자동으로 무시됩니다.

핵심 포인트

1

params 해시로 URL, 쿼리 스트링, 폼 데이터 접근

2

params[:id] — URL 세그먼트에서 값 추출

3

params.require(:post) — 필수 파라미터 키 검증 (없으면 400 에러)

4

.permit(:title, :content) — 허용할 필드를 화이트리스트에 추가

5

허용되지 않은 필드(예: admin, role)는 자동으로 제거

6

Model.create(post_params) 또는 Model.update(post_params)로 안전하게 사용

장점

  • Mass Assignment 공격 원천 차단
  • 허용 필드가 코드에 명시적으로 드러남
  • 컨트롤러별로 다른 허용 필드 설정 가능
  • 중첩 파라미터도 지원

단점

  • 새 필드 추가 시 permit에 추가하는 것을 잊기 쉬움
  • 중첩 구조가 복잡하면 permit 코드가 길어짐
  • 배열/해시 파라미터 permit 문법이 직관적이지 않음

사용 사례

폼 데이터 처리 API 요청 바디 파싱 검색/필터 파라미터 처리 파일 업로드 파라미터