MySQL - UUID

안녕하세요, 미래의 데이터베이스 마법사 여러분! 오늘 우리는 MySQL에서 UUID의 마법적인 세계로 다潜입해보겠습니다. 초보자라면 걱정하지 마세요; 이 수업이 끝나면 프로처럼 UUID를 부를 수 있을 것입니다!

MySQL - UUID

MySQL UUID 함수

基础부터 시작해보겠습니다. UUID는 Universally Unique Identifier의 약자로, 모든 모래 입자에 고유한 이름을 지정하는 것과 같습니다. 멋지지 않나요?

MySQL에서는 이러한 고유 식별자를 생성해주는 UUID() 함수를 제공하고 있습니다. 마치 요술쟁이가 매번 부를 때마다 고유한 소원을 이루어주는 것처럼!

다음은 사용 방법입니다:

SELECT UUID();

이 명령어를 실행하면 다음과 같은 결과를 얻을 수 있습니다:

'123e4567-e89b-12d3-a456-426614174000'

매번 UUID()를 호출할 때마다 다른 결과가 나타납니다. 마치 trillions의 면을 가진 주사위를 굴리는 것과 같습니다!

UUID를 사용하는 이유

"이러한 긴 복잡한 문자열을 왜 귀찮게 사용하느냐"고 궁금할 수도 있습니다. 대규모 온라인 상점을 운영 중이라면, 두 고객이 정확히 같은 밀리초에 주문을 넣는 경우에도 각 주문이 고유한 번호를 가지고 있어야 합니다. UUID는 이러한 문제를 아주 잘 해결해줍니다!

UUID 형식

이제 UUID의 구조를 분해해보겠습니다. 이것은 무작위로 이루어진 문자열이 아니라, 방법이 있습니다!

UUID는 128비트 숫자로 표현되며, 32개의 16진수 디지트로 구성되어 있으며, 다섯 그룹으로 나누어 하이픈으로 구분됩니다. 다음과 같습니다:

xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx

에서:

  • x는 16진수 디지트(0-9 또는 a-f)
  • M은 UUID 버전(1-5)
  • N은 변형(8, 9, a, 또는 b)

MySQL에서는 일반적으로 버전 1 또는 4의 UUID를 사용합니다.

데이터베이스 테이블에서 UUID 사용

우리의 새로운 UUID 지식을 실제 데이터베이스 테이블에서 사용해보겠습니다!

도서관의 책을 추적하기 위한 테이블을 생성하는 것을 상상해보겠습니다. 우리는 UUID를 주요 키로 사용할 것입니다:

CREATE TABLE books (
book_id CHAR(36) PRIMARY KEY,
title VARCHAR(100),
author VARCHAR(100),
publication_year INT
);

이제 도서관에 책을 추가해보겠습니다:

INSERT INTO books (book_id, title, author, publication_year)
VALUES (UUID(), 'The MySQL Magician', 'Query Queen', 2023);

이 INSERT 문을 매번 실행할 때마다 고유한 ID를 가진 새로운 책을 추가할 수 있습니다. 중복 키에 대한 걱정은 더 이상 필요 없습니다!

UUID를 사용한 책 선택

우리의 마법적인 MySQL 책을 검색하려면 다음과 같이 사용할 수 있습니다:

SELECT * FROM books WHERE title = 'The MySQL Magician';

이를 통해 다음과 같은 결과를 얻을 수 있습니다:

book_id                               | title               | author      | publication_year
--------------------------------------+---------------------+-------------+------------------
f47ac10b-58cc-4372-a567-0e02b2c3d479  | The MySQL Magician  | Query Queen | 2023

UUID 수정

이제 "UUID가 생성된 후 변경할 수 있을까요?"라고 고민할 수도 있습니다. 짧은 답변은: 가능하지만, 그럴 필요는 없습니다!

UUID는 고유하고 영구적인 것이 목적입니다. 변경하면 그 목적을 상실합니다. 그러나 절대로 다른 UUID를 사용해야 한다고 생각되는 경우(예: 테스트 데이터 정리), 다음과 같이 할 수 있습니다:

UPDATE books
SET book_id = UUID()
WHERE title = 'The MySQL Magician';

이렇게 하면 우리의 책에 새로운 UUID를 할당합니다. 하지만 실제 세계에서는 이렇게 하면 다른 시스템 부분이 이전 UUID를 참조하고 있을 경우 문제가 발생할 수 있습니다!

UUID 함수 및 메서드

MySQL은 UUID를 다루기 위한 여러 함수를 제공하고 있습니다. 이를 편리한 표로 보여드리겠습니다:

함수 설명
UUID() 새로운 UUID 생성
UUID_TO_BIN(uuid) UUID를 문자열 형식에서 이진 형식으로 변환
BIN_TO_UUID(uuid_bin) UUID를 이진 형식에서 문자열 형식으로 변환
IS_UUID(string) 문자열이 유효한 UUID인지 확인

다음은 이러한 함수를 사용하는 빠른 예제입니다:

SELECT UUID() AS new_uuid,
UUID_TO_BIN(UUID()) AS binary_uuid,
BIN_TO_UUID(UUID_TO_BIN(UUID())) AS back_to_string,
IS_UUID(UUID()) AS is_valid_uuid;

이렇게 하면 새로운 UUID, 이진 표현, 이진에서 다시 문자열로 변환된 UUID, 그리고 이것이 유효한 UUID인지 확인할 수 있습니다.

결론

그리고 여러분, 내 사랑하는 학생들이여! 우리는 UUID의 땅을 거쳐, 그들의 생성에서 데이터베이스 사용에 이르기까지, 심지어 고급 함수를 조망하기까지 여행을 했습니다.

UUID는 눈솔처럼 - 두 개는 동일하지 않습니다(그 가능성은 우주적으로 작습니다). 분산 시스템에서 고유 식별자를 보장하는 데 이상적이며, MySQL 도구箱에서 강력한 도구입니다.

MySQL 모험을 계속하면서, UUID의 많은 다른 용도를 발견할 것입니다. 고유 식별자를 중앙 관리 기관 없이 필요한 경우 특히 유용합니다.

지속적으로 연습하고, 호기심을 유지하면, 언제든지 개발 팀에서 UUID 마법사가 될 수 있습니다! 다음 시간까지, 행복한 쿼리 작성을 기원합니다!

Credits: Image by storyset