반응형
프로젝트 진행 중 코드를 발급해야하는 경우가 발생했다.
아래에 작성한 코드는 많은 사용자가 동시다발적으로 접근을 하지는 않을 것이라 문제는 없겠지만, 잠재적으로 문제를 가지고 있는 코드이다.
private function create_whistle_code(){
$codeArr = $this->Front_whistle_model->get_whistle_code_list();
$newCode = '';
while(in_array($newCode = $this->common->get_rand_password(8), $codeArr));
return $newCode;
}
1. $codeArr에는 현재 DB에 입력된 코드들이 배열에 담김
2. $this->common->get_rand_password(8)을 통해서 8자리 랜덤코드가 발급
3. DB에 담김 배열과 비교하여 중복되지 않을때까지 코드 재발급
위의 로직상으로 일반적인 상황에는 문제가 없지만, 엄청 많은 사용자가 동시에 접근하는 경우의 수를 생각하면 사용하면 안 되는 코드이다.(예를 들면 관리자에서 제품 코드 생성 같은 경우에는 적합 하다고 볼 수 있다.)
생성을 하고 뒤에 유니크한 값을 한번 더 붙이거나 아니면 현재 DB에 들어있는 값과 한번 더 비교를 해주는 작업과 같은게 필요할 것으로 보인다.
사실 위의 연산도 효율적이지 않다.
내 생각에 가능하다면 쿼리만을 사용하여 트랜잭션으로 묶어버리는게 가장 최고의 해법이 아닐까 싶다.
728x90
'php' 카테고리의 다른 글
[php] simple_html_dom을 활용한 크롤링(스크래핑) (0) | 2022.06.16 |
---|---|
[php] include, require 차이점에 대해 (0) | 2022.06.16 |
ie에서 파일 다운로드 한글 깨짐 (0) | 2022.04.15 |
PHP NULL 병합 연산자 '??' (javascript도 사용 가능) (0) | 2022.04.14 |
한글 MIME type feat Codeigniter (0) | 2022.02.17 |
댓글