일단 이 글은 컴퓨터공학적인 내용을 담고 있어서 머리가 좀 아플 수 있음


최대한 쉽게 설명할려고 노력은 했음




우선 설명해야 할게 있는데 컴퓨터는 '완전히' 랜덤한 값을 생성해 내는 게 불가능함


왜냐하면 컴퓨터는 같은 입력값을 주면 무조건 같은 출력값이 나오기 때문임


같은 입력값을 넣었는데 이번엔 0이 나오고 다음번엔 1이 나올 수는 없음 무조건 똑같은 값이 나옴


그렇다면 컴퓨터는 어떻게 랜덤한 숫자를 뽑아내느냐 하면


정확하게는 랜덤인것처럼 보이는 값을 뽑아내는 것임


완전한 랜덤값은 아니지만 사람이 보기에는 랜덤인것처럼 보이는 값을 뽑는다는거지



이 랜덤인것처럼 보이는 숫자를 뽑는 방법이 바로 의사 난수 생성 알고리즘임


여기서 의사는 독타를 의미하는게 아니라 '~와 유사하다'라는 뜻임


즉 랜덤인것 처럼 보이는 숫자를 뽑아내는 알고리즘이라는 거지


이 알고리즘이 하나는 아니고 여러 종류가 있겠지만 한 가지 공통점이 있는데


바로 시드(seed)값이 필요하다는 점임


게임을 좋아하는 사람이라면 한 번쯤 들어봤을 용어인데


말 그대로 의사 난수 생성 알고리즘의 '씨앗'이라고 생각하면 됨


콩 심은데 콩 나고 팥 심은데 팥이 나듯이


시드값이 같으면 난수 생성 알고리즘의 출력값이 같음


즉 같은 수열이 나오게됨



예를들어 랜덤하게 주사위를 굴려주는 프로그램이 있고


이 프로그램의 난수 생성 알고리즘의 시드값이 같다고 치면


프로그램을 실행해서 주사위 값이 순서대로 4, 3, 1 ,6, 2, 3.... 이렇게 나왔으면


프로그램을 껐다가 다시 켜도 똑같이 4, 3, 1 ,6, 2, 3.... 순서로 나오게됨


이건 몇번을 껐다 켜도 시드값이 같다면 똑같은 결과가 나옴


이게 바로 마인크래프트나 테라리아 같은 게임에서 똑같은 시드를 넣으면 똑같은 맵이 나오는 이유임


시드값이 같고, 난수 생성 알고리즘이 같고, 맵 생성 알고리즘이 같으니까 결과적으로 같은 맵이 나오는거지 


복잡한 과정이지만 결국 컴퓨터는 입력값(시드)이 같으면 출력값(맵)이 같으니까



그렇다면 이 시드값에 무슨 숫자를 넣느냐하면


보통은 현재 시간값을 시드값으로 쓰는 경우가 많음, 항상은 아님


시간값은 실행할 때마다 매번 다른값이니까


결과적으로 프로그램을 실행할 때마다 다른 수열이 뽑혀 나오게됨




그래서 왜 이번 사태가 일어났는지 추측해보자면


로스트아크에는 아이템을 식별할 수 있는 고유번호 같은게 있고


상자류 아이템을 깔 때 해당 아이템의 고유번호를 시드값으로 해서 랜덤한 결과를 뽑아내는 것 같음


그런데 이 랜덤한 결과를 뽑는 알고리즘이 랜덤인것 처럼 보이는 숫자를 잘 뽑아야 되는데


특정 시드값에 대해서는 숫자 몇개만 번갈아가면서 계속 나오는 문제가 있었던거지


그래서 사이카랑 피요르긴 2장만 계속 나왔던거고



공지사항에 보면


'특정 캐릭터가 보유한 아이템에서 랜덤 결과값이 순환되는 사례가 발견되었습니다.'


라고 하는데 이 말이


특정 시드값(아이템 고유번호)으로 랜덤 알고리즘을 돌렸더니 숫자 몇개가 계속 번갈아가면서 나왔다라는 뜻인것 같음



아이템 고유번호를 시드값으로 쓴다고 생각한 이유는


문제가 생긴 카드팩 뭉치는 계속 문제가 발생하고


카드팩을 나누기해서 깐거는 정상적으로 뽑혔다는 점임


나눈 카드팩 뭉치는 아이템 고유번호가 다를테니까 시드값이 다르고 결과도 달랐던거지




그리고 여기서부터는 진짜 틀릴 가능성이 매우 높은 내 개인적인 추측인데


왜 하필 14억분의 1이냐 하면


컴퓨터에서 데이터를 저장하는 형태중에 int 자료형이 있는데


int 자료형은 4Byte의 메모리(램) 용량를 차지하고 약 -21억 ~ 21억 사이의 정수값을 저장 할 수 있음


즉 약 42억 가지의 숫자를 저장할 수 있음


그리고 랜덤 생성 알고리즘의 시드값으로 int 자료형이 쓰인거지


그러니까 시드값으로 들어갈 수 있는 숫자가 42억가지인데


이중에 알고리즘에서 문제가 되는 시드값이 단 3개 있었던거임


42억을 3으로나누면 14억이니까 그럼 왜 하필 14억이냐 라는게 설명이 됨





요약


(팩트)

컴퓨터는 완전히 랜덤한 숫자를 생성하는게 불가능함

대신 랜덤한것처럼 보이는 숫자의 배열을 생성하는 방법이 있음

이 방법은 '시드'라는 초기값을 하나 입력해 줘야함

시드값이 같으면 같은 숫자 배열이 나옴


(추측)

로스트아크의 박스류 아이템은 그 아이템의 고유번호를 시드값으로 쓰는 것 같음

시드값으로 쓸 수 있는 42억 가지의 숫자 중에 3개에 문제가 있었음 ( 42억 / 3 = 14억)