129호. $fillable과 $guarded, 여러분은 어떤 방식을 더 선호하시나요? free

2020-04-21

며칠 전에 제프리 웨이(라라캐스트 운영자)가 재미난 설문을 올렸습니다. 바로 $fillable과 $guarded 중 어떤 걸 사용하냐는 질문이었는데요. 여러분은 어떤걸 더 선호하시나요?


설문을 올린지 일주일이 지난 2020년 4월 21일 현재 총 2,941명이 응답한 설문의 결과는 다음과 같습니다.



$fillable을 사용하는 선호하는 사람이 $guarded를 선호하는 사람보다 조금 더 많네요.


저는 개인적으로 $fillable을 사용해왔는데요. 특별한 이유가 있었던 건 아니고, 별 생각없이 쓰고 있었습니다. 돌이켜보면 공식 매뉴얼에도 $fillable이 더 먼저나오고 수 많은 튜토리얼에서 $fillable을 사용해서 그랬던게 아닌가 싶어요.


그렇다면 대가들은 어떤 것을 선호할까요?



제프리 웨이는 $guarded = [] 입니다.



조셉 실버도 마찬가지이고, 아담 와든은 댓글로 자신의 선호를 직접 밝히진 않았지만 $guarded에 표를 던진듯한 늬앙스입니다.



1일 1식 라라벨의 최대 단골 손님 프릭 형님도 $guarded 편이네요. 심지어 서비스 프로바이더에서 Model::unguard() 모든 모델의 가드를 해제한다고 합니다!


대중들의 선택과는 반대로 유명한 사람들이 $guarded 편에 서서 조금 놀랐습니다. 그래서 이들이 $guarded를 사용하는 이유를 트위터 댓글을 통해 유추해봤습니다.


첫 번째 이유는 다루고자 하는 모든 속성에 대한 유효성 검사를 하면 굳이 $fillable을 쓸 필요가 없다는 것입니다. 두 번째는 MyModel::create($request->all()) 같이 위험한 짓을 애초에 하지 말자는 것 같습니다.


일리가 있다고 생각합니다. create나 update에 $request->all()을 쓰지 않고 속성을 하나하나 적어준다면, 게다가 유효성 검사도 충실히 수행한다면 의도치 않은 컬럼에 의도치 않은 값이 들어갈 일이 없겠네요.


그래서 저는 오늘부로 Model::unguard() 파가 되기로 했습니다. :)

여러분은 어떠신가요?


1일 1식 라라벨 129호

2020년 4월 21일


이현석

메쉬 코리아 개발자. 바쁜 팀장님 대신 알려주는 신입 PHP 개발자 안내서를 쓰고, 클린 아키텍처 인 PHP를 번역했습니다. 2020년에 출간될 Laravel Up & Running 2nd Edition을 번역하고 있습니다.