알림톡 - 유저키의 늪
커머스 플랫폼과 다양한 서비스에서 유저들에게 제공되는 알림은 매우 중요하다. 이 알림들은 유저들이 서비스에 재접속하는 중요한 통로 역할을 한다. 필자가 참여하고 있는 스타트업에서도 이 중요성을 잘 알고 있어, 회원가입부터 주문결제, 상품배송 등 다양한 상황에서 알림톡을 적극 활용하고 있다.
알림톡을 만드는 과정에서 가장 까다로운 부분은 유저키 생성이었다. 유저키는 중복되지 않으면서 최대 12자리의 숫자와 영문자 조합으로 이루어져야 한다. 과거에는 유저의 UID, 상품의 UID 등의 고유값을 조합하거나, 연월일시분초를 활용하는 등 다양한 방법을 사용했지만, 알림톡의 종류가 늘어나면서 유저키 생성이 점점 더 복잡해졌다.
이에 필자는 새로운 방식을 고안했다. 웹사이트의 세션을 활용하고, 렉시코그래피컬 오더 방식(렉시코그래피컬 오더 방식에 대한 설명은 글 최하단 참고)을 응용한 것이다. 필자는 이를 '동시코그래피컬 오더'라고 부르고 있다. 이 방식의 효율성을 강조하고자 하는 것은 아니지만, 중요한 것은 유저키가 필자의 생애 동안 절대로 중복되지 않는다는 점이다.
이 방식은 다음과 같은 조건을 가진다:
1. 자릿수 설정: 최대 10자리의 숫자 또는 문자를 사용. 예: '0000000000'부터 'ZZZZZZZZZZ'까지.
2. 숫자 증가: 시작 숫자는 '0000000000', '9999999999'에 이를 때까지 1씩 증가.
3. 알파벳 증가: 숫자가 '9999999999'를 넘으면, 'AAAAAAAAAA'에서 시작. 알파벳은 'A'부터 'Z'까지 증가.
4. 일일 초기화: 날짜가 변경되면 숫자는 '0000000000'으로 초기화.
5. 순차적 증가: 모든 가능한 숫자 조합을 사용한 후에 알파벳 조합이 시작.
6. 알림톡 내용의 알파벳 2자리 요약과 위 넘버링을 조합.
이 방식을 사용하면 하루에 최대 141,177,095,653,376번, 즉 약 141조 번의 호출이 가능하다. 이는 필자의 생애 동안 중복될 일이 없음을 의미한다.
필자가 고안한 '동시코그래피컬 오더' 방식은 무조건적으로 최고라고는 할 수 없으며, 효율적인 측면에서 더 나은 방법이 있을 수도 있다. 필자는 이 글을 통해 자신의 생각과 경험을 소소하게 풀어내고 있으며, 이 과정 자체가 필자에게 큰 즐거움을 주고 있다. 기술적 해결책을 찾는 과정에서 느끼는 성취감과 새로운 시도에 대한 흥분을 글로 남겨본 것이다.
필자의 방식이 모든 상황에 최적의 해결책은 아닐 수 있지만, 이러한 창의적인 시도는 새로운 아이디어와 가능성을 탐색하는 데 중요한 역할을 한다. 기술의 세계에서는 때로 자유로운 사고와 실험이 더 나은 해법을 찾는 데 중요한 열쇠가 될 수 있다. 필자의 이야기는 '적절한 시기에 적합한 해결책을 찾는 것'의 중요성과 그 과정이 주는 즐거움을 잘 보여준다.
렉시코그래피컬 오더(Lexicographical Order)는 사전순서 또는 사전식 순서라고도 불리며, 문자열 또는 다른 시퀀스 요소들을 정렬하는 방법 중 하나입니다. 이 순서는 사전에서 단어나 문구를 찾을 때 사용하는 방식과 유사합니다. 각 요소(예: 문자, 숫자, 단어)의 비교에 따라 이 순서를 결정합니다.
렉시코그래피컬 오더의 원칙은 다음과 같습니다:
1. 첫 번째 요소 비교: 두 시퀀스 요소의 첫 번째 문자 또는 숫자를 비교합니다.
2. 비교 결과: 만약 두 요소의 첫 번째 문자 또는 숫자가 다르다면, 해당 문자 또는 숫자의 유니코드 코드 포인트를 비교하여 작은 값이 먼저 나오도록 합니다. 이를 통해 사전 순서를 유지합니다.
3. 첫 번째 문자 또는 숫자가 같은 경우, 다음 문자나 숫자를 비교합니다. 이 과정을 두 요소 중 하나의 요소가 끝날 때까지 반복합니다.
4. 한 요소가 끝났을 때, 다른 요소가 남아 있다면 끝나지 않은 요소가 사전 순서상 앞에 위치합니다.
예를 들어, 다음 문자열을 렉시코그래피컬 오더로 정렬해보겠습니다:
1. "apple"
2. "banana"
3. "app"
먼저 첫 번째 문자를 비교하면 "apple"과 "banana"에서 "a"가 동일하므로 두 번째 문자인 "p"와 "b"를 비교합니다. "p"가 "b"보다 유니코드 코드 포인트 값이 크므로 "apple"이 "banana"보다 앞에 위치합니다. 그 다음으로 "apple"과 "app"를 비교하면 "a"와 "a"가 같으므로 두 번째 문자인 "p"와 "p"를 비교합니다. 여기서도 두 문자가 같으므로 세 번째 문자인 "l"과 ""을 비교합니다. "l"이 ""보다 크므로 "app"이 "apple"보다 앞에 위치합니다.
따라서 렉시코그래피컬 오더를 적용하면 다음과 같이 정렬됩니다:
1. "app"
2. "apple"
3. "banana"
렉시코그래피컬 오더는 문자열 뿐만 아니라 숫자, 날짜, 기타 시퀀스 데이터 유형을 정렬하는 데 일반적으로 사용되며, 컴퓨터 과학 및 데이터 처리에서 중요한 역할을 합니다.