비트 연산자 : 숫자를 이진수(binary) 단위로 조작하는 연산자
| 연산자 | |||
& | AND | $a & $b | 두 값 모두 1인 비트만 1 |
| | OR | $a | $b | 둘 중 하나라도 1이면 1 |
^ | XOR | $a ^ $b | 둘 중 하나만 1이면 1 |
~ | NOT | ~$a | 비트를 반전 (0→1, 1→0) |
<< | Left Shift | $a << $b | 비트를 왼쪽으로 $b만큼 이동 |
>> | Right Shift | $a >> $b | 비트를 오른쪽으로 $b만큼 이동 |
실무에서 비트 연산(&)을 쓰는 이유는 "확장성"과 "중복 권한" 때문입니다.
ⓐ 한 명의 사용자가 여러 권한을 가질 수 있어서
ⓑ DB 설계를 깔끔하게 유지하려고
비트 연산을 안 쓰면, 권한이 늘어날 때마다 DB에 is_admin, is_staff, is_vip 같은 컬럼을 계속 추가해야 합니다. 하지만 이 방식을 쓰면 member_type이라는 숫자 컬럼 딱 하나에 수십 개의 권한 조합을 다 집어넣을 수 있어요.
// CI3
$this->CI->session->userdata('member_type')
// CI4
session()->get('member_type')
$member_type = 5;
if (!((int)session()->get('member_type') & $member_type)) {
return $this->response->setJSON(['error' => '권한이 없는 접근입니다.']);
}