ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • REST API 서버 만들기 (8) - UUID
    Server 2020. 4. 12. 04:09

    <참고>

    REST API 서버 제작 수업을 듣고 포스팅을 하는 게시글 입니다.

    서버 개발자가 아니고, 노드를 전문적으로 사용하는 개발자가 아니기에 오류가 있을 수 있습니다.

     

    윈도우로 진행하시는 분들은 콘솔 명령어 수행 시 GitBash 사용을 권장드립니다.


    이번 강의에서 작업 할 내용

    • UUID가 무엇일까?
    • UUID 만들기 
    • UUID 적용하기

    UUID가 무엇일까?

    우선 UUID 가 무엇일까?

     

    UUID는 기본적으로 어떤 개체(데이터)를 고유하게 식별하는 데 사용되는 16바이트(128비트) 길이의 숫자입니다. 이 숫자는 32개의 16진수로 구성되며, 5개의 그룹으로 표시되고 각 그룹은 하이픈으로 구분 된다. 

     

    라고 구글씨가 설명해준다. 쉽게 말해 UUID (범용 고유 식별자) 는 네트워크 상에서 서로 모르는 객체들을 식별하고 구별하기 위해 각각의 고유한 이름을 부여하기 위해 고안된 기술 이라고 보면 된다.

     

    아니 잠만 DB User 테이블에 분명 id 라는게 존재하고 그것으로 유저들을 구분하면 되지 않는가? 라고 생각할 수 있다.

     

    예를 들어 Question 이라는 테이블이 있고 해당 테이블을 크롤링을 하려고 한다면 크롤러들은 이렇게 크롤링을 할 것이다.

    https://ddns.com/question/1

    위 주소에서 뒤에 숫자만 변경하여 크롤링을 하면 된다. 

     

    이는 우리 홈페이지의 내용을 쉽게 크롤링 해주세요~ 라고 해주는것과 다름 없다.

    그렇기에 서버 내부에서는 id로 통신을 하고 외부에서는 uuid를 노출시켜 이를 방지하면 되는 것이다.

     

    그러면 UUID를 써보도록 할 것인데 UUID는 총 5가지의 버전이 있다. 

     

    UUID1

    첫번째 버전은 시간을 기반으로 유니크한 ID를 생성한다.

     

    UUID2

    두번째 버전은 MD5를 해싱하여 유니크한 ID를 생성한다.

     

    UUID4

    네번째 버전은 랜덤한 숫자 값을 이용해서 UUID를 생성한다.

     

    UUID5

    다섯번째 버전은 SHA-1를 해싱하여 유니크한 ID를 생성한다.


    UUID 만들기  

    uuid 모듈을 우선 설치해주도록 합시다. `npm install uuid`

    간단하게 터미널에서 코드를 작성해보도록 하겠습니다. node 를 입력하시면 간단하게 코드를 작성 할 수 있습니다.

    uuid.v4() 명령어를 통해 생성을 할 수 있습니다.

    총 32개의 16진수 문자열과 4개의 ‘-’ 를 사용해 연결되어 있습니다. 이제 아래와 같이 코드를 작성 해보도록 합시다.

     

    - ( 하이픈 ) 으로 split을 하여 재 배열을 하는데 왜 하는 걸까요? / 우리의 최종 목적은 uuid를 인덱싱을 하기 위한 것입니다.

    하지만 - 이 들어가는 순간 문자열이 되어 버리고 DB 에서 String 데이터를 인덱싱 하는 것은 절대로 추천하지 않습니다.

    따라서 UUID 계열 값을 인덱싱 가능하고 순서를 보장받는 체계로 변경해야 하는데 그 방법은 다음의 링크에 아주 자세하게 나와 있습니다.

     

    https://www.percona.com/blog/2014/12/19/store-uuid-optimized-way/

     

    Storing UUID Values in MySQL

    Karthik Appigatla revisits a post Peter Zaitsev wrote on UUIDs (Universal Unique IDs), rearranging the timestamp and talks about storing UUID Values.

    www.percona.com

     

    위의 글을 한줄로 요약하자면 UUID 의 구조를 아래와 같이 변경하면 인덱싱이 가능한, 순서를 ‘어느정도' 보장받는 수 체계로 변환할 수 있다고 합니다.

     


    UUID 적용하기

    이제 위 유틸 파일을 가지고 실제 DB에 uuid를 넣어 보도록 하겠습니다.

     

    먼저 uuid 컬럼을 추가하여야 하니 새로운 마이그레이션 파일을 생성해주도록 합시다.

    그리고 다음과 같이 마이그레이션 파일을 작성해주도록 합니다.

    이제 마이그레이션도 실행해주도록 합시다.

    이제 mysql 에 조회를 해보면 성공적으로 uuid 컬럼이 추가되었고 데이터가 null 값이 들어간 것을 볼 수 있습니다.

    해서 유저 조회시 uuid를 넘겨주면 될 것 같습니다. 조회 쿼리에도 uuid를 같이 반환을 해주면 될 것 같습니다.

     

    마지막으로 user model 에도 다음과 같이 수정을 해주면 유저를 생성시에 uuid를 생성하여 기본값으로 설정해주면 됩니다.


     

    댓글

Designed by Tistory.