📋
Params & Strong Parameters
요청 파라미터 접근과 허용 목록 관리
Rails의 params는 URL 파라미터, 쿼리 스트링, 폼 데이터, JSON 바디 등을 하나의 해시로 통합 접근할 수 있게 해줍니다.
params 소스:
URL 세그먼트:
/posts/:id→params[:id]쿼리 스트링:
?page=2→params[: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 요청 바디 파싱
검색/필터 파라미터 처리
파일 업로드 파라미터