CodeKitHub
생성기 도구

이름 뽑기 생성기

마지막 업데이트:

시크릿 산타나 선물 교환을 위해 손으로 이름을 뽑으면 실제 수학적 문제에 부딪힙니다. 순수하게 무작위로 섞으면 누군가가 우연히 자기 자신에게 배정될 수 있고, "제대로 나올" 때까지 다시 뽑는 것은 더 이상 진짜 무작위가 아닙니다. 이 도구는 이 문제를 제대로 해결합니다 — 모든 사람의 이름을 입력하면, 아무도 자신의 이름에 배정되지 않도록 수학적으로 보장된 셔플인 교란순열(derangement)을 계산한 다음, 각 결과를 탭하여 공개하는 버튼 뒤에 숨겨서 공유 화면에서도 각자 다른 사람의 결과를 보지 않고 자신의 배정만 확인할 수 있게 합니다.

이 도구는 무엇인가요?

교란순열(derangement)은 특정한 수학적 개념으로, 집합의 순열(재배열) 중 어떤 원소도 원래 위치에 남지 않는 것을 말합니다. 선물 교환에 적용하면, 모든 사람의 이름을 새로운 순서로 섞되 아무도 자기 자신과 짝이 되지 않도록 하는 것을 의미합니다 — 이는 공정한 시크릿 산타 추첨에 필요한 바로 그 제약이며, 단순한 `array.sort(() => Math.random() - 0.5)` 셔플로는 그 자체로 보장되지 않는 것입니다.

이 도구는 무작위 알고리즘으로 목록을 반복해서 섞고 자기 배정 제약을 확인하여 교란순열을 생성하며, 기반이 되는 무작위성에는 `Math.random()`이 아니라 `crypto.getRandomValues()`를 사용합니다 — 이는 이 사이트의 [비밀번호 생성기](/password-generator/)와 [무작위 문자 생성기](/random-letter-generator/)에서 사용하는 것과 동일한 암호학적으로 안전한 소스입니다.

공개 버튼 디자인은 그룹으로 이름을 뽑을 때 발생하는 별도의 매우 실용적인 문제를 해결합니다. 모든 배정을 한 번에 화면에 표시하면 모두의 서프라이즈가 동시에 사라져 버립니다. 각 사람의 결과를 각자의 버튼 뒤에 숨김으로써, 기기 하나를 돌려가며 사용하거나(또는 화면을 공유하여) 각자 자신의 이름만 확인할 수 있습니다.

왜 사용해야 할까요?

  • 가족 모임이 한창인데 누군가 갑자기 선물 교환을 하자고 제안했다면, 휴대폰으로 이 도구를 열어 사촌 이름 열 몇 개를 입력하는 사이 두 번째 디저트가 나오기 전에 추첨이 끝납니다.
  • 회사 단체 채팅방에서 시크릿 산타를 하기로 했지만 누구도 "모든 짝을 아는 사람"이 되고 싶어하지 않을 때, 휴대폰 하나로 추첨을 돌린 뒤 돌려가며 각자 공개 버튼을 누르게 하면 비밀을 지키는 담당자가 따로 필요 없습니다.
  • 예전에 손으로 이름을 뽑다가 누군가 자기 이름을 적고 몰래 쪽지를 바꾼 경험이 있어서, 절대 조작할 수 없고 우연히도 자기 자신에게 배정되지 않는 확실한 방법이 필요할 때.
  • 행사 이틀 전에 가족 한 명이 갑자기 참석이 어려워졌다면, 목록에서 이름만 지우고 몇 초 만에 다시 뽑으면 됩니다. 채팅방이나 명단을 처음부터 다시 만들 필요가 없습니다.
  • 서로 친하지 않은 취미 모임 회원들을 위해 선물 교환을 준비하면서, 복잡한 수학 공식을 설명하지 않고도 공정한 과정임을 보여주고 싶을 때.
  • 모든 데이터는 그 순간 브라우저에만 존재합니다 — 탭을 닫으면 이름 목록도 배정 결과도 어떤 서버에도 남지 않습니다.

사용 방법

  1. 각 참가자의 이름을 한 줄에 하나씩 입력합니다 — 서로 다른 이름이 최소 3개 필요합니다.
  2. "짝 뽑기"를 클릭합니다 — 도구가 아무도 자기 자신과 짝이 되지 않는 유효한 교란순열을 계산합니다.
  3. 각 참가자의 행에는 이름과 숨겨진 결과가 표시됩니다 — 기기를 돌려가며 사용하거나 화면을 공유하고, 각자 자신의 "탭하여 공개" 버튼을 클릭해 누구에게 선물을 줄지 확인하게 합니다.
  4. 누군가 결과를 확인한 뒤에는 공개 버튼을 다시 클릭해 숨겨서, 다음 사람을 위해 화면을 준비된 상태로 유지합니다.

예시

입력

Alice, Bob, Carol, Dave

결과

Alice → Carol, Bob → Dave, Carol → Bob, Dave → Alice

실행할 때마다 서로 다른 유효한 교란순열이 생성됩니다 — 이는 하나의 예시 결과입니다. 아무도 자기 자신에게 배정되지 않았음을 확인하세요. 이는 진짜 시크릿 산타 추첨에 필요한 유일한 엄격한 제약이며, 단순한 무작위 셔플로는 보장되지 않습니다.

교란순열 vs. 단순 무작위 셔플

단순한 셔플과 교란순열은 비슷해 보이지만, 선물 교환에 실제로 안전한 것은 둘 중 하나뿐입니다.

방법누군가 자기 자신에게 배정될 수 있는가?"제대로 나올" 때까지 다시 뽑는 것이 공정한가?
단순 무작위 셔플있음 — 특히 소규모 그룹에서 실제로 발생할 수 있음아니요 — 나쁜 결과를 수동으로 거부하면 결과에 편향이 생김
교란순열(이 도구)없음 — 구조상 수학적으로 배제됨해당 없음 — 유효한 결과는 이미 모두 제약을 충족함

관련 도구

다른 무작위 추첨이나 생성기가 필요하다면 다음 도구를 사용해 보세요.

판타지 이름 생성기 · 무작위 숫자 생성기 · 무작위 문자 생성기

선물 교환 행사를 매끄럽게 진행하는 방법

  • 추첨 전에 선물 예산을 정해두세요 — 짝이 정해진 뒤에 바꾸면 누군가는 불공평하다고 느끼기 쉽습니다.
  • 회사나 큰 커뮤니티 행사라면 휴대폰 하나를 돌려가며 모두가 보는 앞에서 추첨하세요 — 한 사람이 혼자 뽑고 개인 메시지로 알려주는 것보다 훨씬 투명하게 느껴집니다.
  • 화상회의로 진행하는 행사라면 추첨 화면은 공유하되, 공개 버튼은 각자 차례가 됐을 때 원격 제어나 화면 공유를 돌아가며 눌러 본인만 확인하게 하세요.
  • 결과 화면은 진행자가 정말 백업이 필요할 때만 캡처하세요 — 공개 버튼의 목적 자체가 서프라이즈를 지키는 것이라, 전체 화면 캡처는 모든 짝을 한 번에 노출시킬 수 있습니다.

자주 묻는 질문

이름이 두 번 입력되면 어떻게 되나요?

이 도구는 추첨을 진행하기 전에 모든 이름이 고유해야 합니다 — 중복된 줄을 감지하면 먼저 목록을 수정하도록 요청합니다. 이름이 완전히 동일한 두 참가자가 있으면 각자의 결과를 구별하는 것이 불가능해지기 때문입니다.

누군가 자기 자신의 이름을 뽑을 수 있나요?

아니요 — 이 도구는 특별히 교란순열을 계산합니다. 이는 어떤 원소(사람)도 자신의 원래 위치에 매핑되지 않는다는 수학적 속성을 가진 셔플입니다. 이 보장은 단순한 무작위 셔플처럼 운에 맡기는 것이 아니라 알고리즘에 의해 강제됩니다.

필요한 최소 인원은 몇 명인가요?

3명입니다. 단 두 사람만 있으면 매번 서로에게 배정되는 것 외에는 교란순열이 불가능하며, 이는 의미 있는 무작위성이라 할 수 없으므로 이 도구는 최소 3명의 참가자를 요구합니다.

모두 같은 화면을 보고 있을 때 결과의 비공개는 어떻게 유지되나요?

각 참가자의 결과는 한꺼번에 표시되지 않고 각자의 "탭하여 공개" 버튼 뒤에 숨겨져 있습니다. 기기를(또는 화면을 공유하며) 순서대로 각자에게 건네고, 자신의 행만 공개해 확인하게 한 다음, 다음 사람에게 넘기기 전에 다시 클릭해서 숨깁니다.

이름이나 추첨 결과가 서버로 전송되나요?

아니요. 이름 읽기, 교란순열 계산, 공개 버튼 표시까지 모든 과정이 전적으로 브라우저 내에서 이루어집니다. 아무것도 업로드되지 않으며, 탭을 닫으면 모든 것이 지워지므로 서프라이즈를 실수로 망칠 만한 추첨 기록이 어디에도 남지 않습니다.

부부처럼 특정 두 사람이 서로 배정되지 않도록 제외할 수 있나요?

현재 이 도구는 기본적인 교란순열 제약(자기 자신에게 배정되지 않음)만 보장하며, 특정 쌍을 제외하는 기능은 지원하지 않습니다. 부부가 서로 짝이 되는 결과가 나왔다면 "짝 뽑기"를 다시 눌러 원하는 조합이 나올 때까지 새 교란순열을 뽑는 것이 가장 실용적인 방법입니다.

다시 뽑기 버튼을 누를 때마다 결과가 달라지나요?

네 — 누를 때마다 암호학적 난수를 사용해 완전히 새로운 교란순열이 계산되므로, 만족할 때까지 여러 번 다시 뽑을 수 있으며 매번 나오는 결과는 모두 수학적으로 똑같이 유효합니다(누구도 자기 자신에게 배정되지 않음).

이름은 실명으로 입력해야 하나요, 별명이어도 되나요?

목록의 각 이름이 서로 다르기만 하면 별명이나 애칭도 문제없습니다 — 이 도구는 각 참가자를 구분할 고유한 문자열이 필요할 뿐, 실명 여부를 검증하지 않습니다.

회사 전체처럼 인원이 30명이 넘게 많으면 어떻게 되나요?

입력할 수 있는 이름 수에는 상한이 없습니다 — 교란순열 알고리즘은 3명이든 30명이든 똑같이 빠르게 작동하는데, 모든 계산이 서버 왕복 없이 브라우저 안에서 즉시 처리되기 때문입니다.

관련 도구