guard 에서 돌려주는 user 데이터는 캐쉬 되어 빈번한 디비 호출을 줄여줍니다.
https://github.com/laravel/framework/blob/5.4/src/Illuminate/Auth/SessionGuard.php
// If we've already retrieved the user for the current request we can just
// return it back immediately. We do not want to fetch the user data on
// every call to this method because that would be tremendously slow.
if (! is_null($this->user)) {
return $this->user;
}
권한 변경이 일어났을 경우는 관리를 해 주셔야 하구요 ^^
코드를 좀 살펴봤는데 이 부분을 항상 타게 되어있네요. DB를 타지 않는 Guard를 만들고 config/auth.php에 guards 배열에 등록하면 될 것 같은데, 1만 동접 아니면 성능에 큰 영향 없으니 지금대로 써도 아무 문제 없을 듯 합니다.
https://github.com/laravel/framework/blob/5.4/src/Illuminate/Auth/AuthManager.php#L53-L55
블레이드에서 아래와 같이 하면 커멘트를 삭제할 수 있는 권한이 있는 사람에게만 삭제 버튼을 보여줄 수 있다고 하는데요,
DB::query 를 모니터링 해보니 매 @can 마다 아래의 쿼리를 요청하고 있더라구요.
사용자 정보는 한 번만 조회해서 계속 쓰면 되는데 저렇게 되면 쓸데 없이 DB에 무리만 주는 것 같아요. 원래 그런가요? 아니면 제가 뭔가 설정을 잘못했기 때문인가요?
--------------------------
아 @can 때문에 저 쿼리가 계속 나오는게 아니었습니다. 저 코드 상단에 eager 로드 되지 않은 관계 로드가 있었는데 제대로 파악을 못했었네요. 혹시 이 문제로 시간 쓰신 분들께 죄송합니다. ㅠ