본문 바로가기
php

중복되지 않는 코드 발급 feat codeigniter

by 하이바네 2022. 4. 20.
반응형

프로젝트 진행 중 코드를 발급해야하는 경우가 발생했다.

 

아래에 작성한 코드는 많은 사용자가 동시다발적으로 접근을 하지는 않을 것이라 문제는 없겠지만, 잠재적으로 문제를 가지고 있는 코드이다.

 

    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

댓글