-
REST API 서버 만들기 (8) - UUIDServer 2020. 4. 12. 04:09
<참고>
REST API 서버 제작 수업을 듣고 포스팅을 하는 게시글 입니다.
서버 개발자가 아니고, 노드를 전문적으로 사용하는 개발자가 아니기에 오류가 있을 수 있습니다.
윈도우로 진행하시는 분들은 콘솔 명령어 수행 시 GitBash 사용을 권장드립니다.
이번 강의에서 작업 할 내용
- UUID가 무엇일까?
- UUID 만들기
- UUID 적용하기
UUID가 무엇일까?
우선 UUID 가 무엇일까?
UUID는 기본적으로 어떤 개체(데이터)를 고유하게 식별하는 데 사용되는 16바이트(128비트) 길이의 숫자입니다. 이 숫자는 32개의 16진수로 구성되며, 5개의 그룹으로 표시되고 각 그룹은 하이픈으로 구분 된다.
라고 구글씨가 설명해준다. 쉽게 말해 UUID (범용 고유 식별자) 는 네트워크 상에서 서로 모르는 객체들을 식별하고 구별하기 위해 각각의 고유한 이름을 부여하기 위해 고안된 기술 이라고 보면 된다.
아니 잠만 DB User 테이블에 분명 id 라는게 존재하고 그것으로 유저들을 구분하면 되지 않는가? 라고 생각할 수 있다.
예를 들어 Question 이라는 테이블이 있고 해당 테이블을 크롤링을 하려고 한다면 크롤러들은 이렇게 크롤링을 할 것이다.
위 주소에서 뒤에 숫자만 변경하여 크롤링을 하면 된다.
이는 우리 홈페이지의 내용을 쉽게 크롤링 해주세요~ 라고 해주는것과 다름 없다.
그렇기에 서버 내부에서는 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/
위의 글을 한줄로 요약하자면 UUID 의 구조를 아래와 같이 변경하면 인덱싱이 가능한, 순서를 ‘어느정도' 보장받는 수 체계로 변환할 수 있다고 합니다.
UUID 적용하기
이제 위 유틸 파일을 가지고 실제 DB에 uuid를 넣어 보도록 하겠습니다.
먼저 uuid 컬럼을 추가하여야 하니 새로운 마이그레이션 파일을 생성해주도록 합시다.
그리고 다음과 같이 마이그레이션 파일을 작성해주도록 합니다.
이제 마이그레이션도 실행해주도록 합시다.
이제 mysql 에 조회를 해보면 성공적으로 uuid 컬럼이 추가되었고 데이터가 null 값이 들어간 것을 볼 수 있습니다.
해서 유저 조회시 uuid를 넘겨주면 될 것 같습니다. 조회 쿼리에도 uuid를 같이 반환을 해주면 될 것 같습니다.
마지막으로 user model 에도 다음과 같이 수정을 해주면 유저를 생성시에 uuid를 생성하여 기본값으로 설정해주면 됩니다.
'Server' 카테고리의 다른 글
REST API 서버 만들기 (7) - 패스워드 암호화 및 JWT 발급하기 (0) 2020.04.10 REST API 서버 만들기 (6) - CRUD 메서드 만들기 (0) 2020.04.06 REST API 서버 만들기 (5) - Sequelize Model, Migration (0) 2020.04.01 REST API 서버 만들기 (4) - Dotenv, Sequelize 설치 및 세팅하기 (3) 2020.04.01 REST API 서버 만들기 (3) - Router 와 Controller (0) 2020.03.31