UUID, Bearer 등등

김정용·2024년 8월 23일
0

Today I Learned

목록 보기
16/21

프로젝트의 개발을 들어가기 이전 여러 사전작업들을 이틀동안 진행했다.

ERD설계나 API설계, 인프라 설계등을 진행하면서 잘 못알아들었던 부분을 적어놨다가 정리하는 글이다.

1. UUID

UUID를 여러번 들어봤지만 내가 적용해본적은 없었다.

우선 UUID의 풀네임을 알아보자.

'Universally Unique Identifier'의 약자다.

대충 128bit의 고유식별자로 쓰이는 친구다.

같은 식별자인 일반 ID와는 어떤 차이가 있을까?

UUID의 차별점

UUID는 entity단에서 고유로 생성되는 id들과는 다르게 중앙시스템에 등록하고 발급하는 부수적인 단계가 없어서 빠르게 발급이 가능하다는 장점이 있다.

또한 크기가 작아 정렬이나 해싱 등 다양한 알고리즘에 사용될 수 있다 !

구조

다음과 같은 내용으로 되어있다.

UUID의 경우 128bit로 이루어져있기때문에 중복이 될 가능성이 아주 조금 존재한다.

(1조개의 UUID 중 10억분의 1 확률이 중복이 일어난다고 한다 ㅋ..)

(100년동안 생성하면 최소 1개가 중복이나 충돌된다고 한다...)

왜 UUID?

그럼 왜 쓸까?

UUID는 위 그림에서도 볼 수 있듯 일반적으로 auto 증가시키는 일반적인 id들과는 다르게 시간정보가 포함된다.

그래서 서버가 다르더라도 각기 다른 식별자를 가질 수 있다.

만약 각각의 서버가 서로 0부터 1씩 증가하는 id를 발급받았는데 통합시켜야한다면? 굉장히 피곤해져버린다.....

이를 전역 고유성 이라고 하는데, 한 서버. 지역적으로만 고유한 id가 아닌 모든 서버를 합쳐도 고유한 전역 고유성을 띄고 있다.

UUID는 1씩 증가하는 auto raise와는 다르게 다음 id를 예측할 수 없다.

이는 보안적인 측면에서 꽤나 큰 이점을 가져온다.

물론 길이가 정해진 특징, 정수형 ID 보다 UUID 보다 길다는 특징으로 특정 케이스에서 성능적으로 떨어지는 모습을 보일 수는 있다..

더 찾아봤는데 생각보다 UUID를 PK로 쓰면서 버리는 디스크 용량의 손해가 큰듯 하다... (확인이 필요하다.)

결론

UUID의 큰 장점은 보안이다. 외부에 보이는 ID의 경우 UUID를 사용하고 내부에서만 돌아가는 ID의 경우 보안의 중요도가 그래도 조금은 낮으니 내부 메모리를 위해 일반적인 increment id를 사용하면 좋을듯하다 !


2. 아키텍처 그리기

두번째로 궁금한 내용이다....

다른 사람들이 개발한 프로젝트나 웹서핑을하면서 보는 인프라 설계도 들을 보면 되게 복잡하고 있어보인다(?) 왜 나는 그렇게 못그리겠는지 모르겠다...

사용하는 도구나 로직의 이해도가 부족한것 같다..

이 점은 많이 해가면서 풀어나가야할 숙제인듯하다.

너무너무 궁금해서 GPT님한테 여쭤봤다...

(아래는 GPT의 대답)

  1. 시스템의 모든 구성 요소를 포함
    세분화된 서비스: 시스템 내 모든 서비스를 가능한 한 세분화하여 표현합니다. 예를 들어, 애플리케이션 서버, 데이터베이스, 로드 밸런서, 캐시 서버, 메시지 큐 등 각 구성 요소를 별도로 표시합니다.

  2. 컴포넌트 간의 상호작용 표현
    데이터 흐름: 시스템 내 데이터 흐름을 선으로 명확하게 표현합니다. 어떤 컴포넌트가 다른 컴포넌트와 어떻게 상호작용하는지를 선, 화살표 및 라벨을 사용해 설명합니다.

  3. 다양한 레이어 표현
    서버, 네트워크, 데이터베이스 등의 물리적 레이어와 애플리케이션, 비즈니스 로직, 사용자 인터페이스 등의 논리적 레이어를 구분하여 표현합니다. 이러면 시스템이 더 체계적으로 보이고, 복잡한 관계를 더 명확하게 이해할 수 있습니다.

결론

사실 아키텍처는 복잡해보이면 안되는 구조도이다. 결국 복잡한 구조를 얼마나 이해하기 쉽게 설명하는게 목적이니까!

내 어플리케이션의 로직을 다 보여주면서 아키텍처가 간단해보인다면 그건 오히려 아키텍처를 잘 그리고 있다는거 아닐까? 😄


3. Request header에 있는 ~~ Bearer ~~

이번 프로젝트에도 이 내용이 나왔고, 저번에 진행한 프로젝트에도 아래 내용이 나왔다.

아래 스크린샷은 저번프로젝트 사용한 api 명세에 적힌 내용이다.

사진에는 사용자 정보를 조회하는 목적으로 전달하고자하는 request와 그 응답에 해당하는 response가 적혀있다.

request의 첫줄 GET/api/users/{userId}는 GET요청으로 해당 엔드포인트에 userId라는 파라미터를 같이 보내면 아래의 response가 온다는 뜻이다.

그런데 이제 문제의 저 Authorization: Bearer {token}이 대체 뭔지 몰랐다.

알아보자.

인증

{} 안에들어있는 token이 힌트다 !

다른 api도 아니고 사용자 정보 조회 의 경우 해당 사용자만 조회할 수 있어야하는 개인적인 정보가 들어있다.

아무한테나 주면 안되는 개인정보이기때문에 이 정보를 열람할 수 있는 사람인지 확인하는 과정이 필요하다.

그렇지않으면 아무나 GET요청을 하면 정보를 response 해줄테니까..

결론

클라이언트가 서버에 인증 정보를 전달하는 HTTP 헤더가 Authorization 부분이다.

Bearer은 이 토큰 소지한 사람 이라고 해석된다.

Bearer 방식은 OAuth 2.0 인증 시 사용되며 Authorization 헤더에 해당 토큰을 포함시켜 인증을 진행한다.


마치며

확실히 부족한 부분을 계속해서 찾으려고하니 끊임없이 나온다.

지금까지 내 무지가 부끄러워 모르는 부분은 안보려고하고 아는척만 하고 다녔던것 같다.

계속 공부하자

출처

https://developers.tosspayments.com/

profile
누군가의 롤모델이 될 때까지😇

1개의 댓글

comment-user-thumbnail
2024년 8월 27일

재밌어요! 토스에 저런 기능이 있는지도 처음 알았어요! 잘 읽고 갑니다 :-)

답글 달기