요즘IT
위시켓
최근 검색어
전체 삭제
최근 검색어가 없습니다.

국내 IT 기업은 한국을 넘어 세계를 무대로 할 정도로 뛰어난 기술과 아이디어를 자랑합니다. 이들은 기업 블로그를 통해 이러한 정보를 공개하고 있습니다. 요즘IT는 각 기업의 특색 있고 유익한 콘텐츠를 소개하는 시리즈를 준비했습니다. 이들은 어떻게 사고하고, 어떤 방식으로 일하고 있을까요?

회원가입을 하면 원하는 문장을
저장할 수 있어요!

다음

회원가입을 하면
성장에 도움이 되는 콘텐츠를
스크랩할 수 있어요!

확인

개발

좋은 객체 ID(Object ID) 만들기

년차,
어떤 스킬
,
어떤 직무
독자들이 봤을까요?
어떤 독자들이 봤는지 궁금하다면?
로그인

국내 IT 기업은 한국을 넘어 세계를 무대로 할 정도로 뛰어난 기술과 아이디어를 자랑합니다. 이들은 기업 블로그를 통해 이러한 정보를 공개하고 있습니다. 요즘IT는 각 기업의 특색 있고 유익한 콘텐츠를 소개하는 시리즈를 준비했습니다. 이들은 어떻게 사고하고, 어떤 방식으로 일하고 있을까요?

 

이번 글은 토스의 페이테크 계열사 '토스페이먼츠'의 기술 블로그에서 객체 ID란 무엇인지, 좋은 객체 ID를 만드는 방법에 대해 소개합니다.

 

객체 ID는 객체 지향 프로그래밍, 데이터베이스 관리, 네트워킹 등 다양한 컴퓨팅 환경에서 사용되는데요. 이 포스트에서는 좋은 객체 ID를 만들어야 하는 이유와 방법을 고유성과 식별 가능성을 중심으로 알아보겠습니다.

 

객체 ID(Object ID)란?

좋은 객체 ID(Object ID)
객체 ID를 만들 때 사용하는 UUID의 구조 <출처: mparticle>

 

객체 ID는 말 그대로 객체를 구분하는 고유한 식별자(identifier)를 뜻합니다. 객체 ID를 사용해서 특정 객체를 참조하거나 검색할 수 있죠. 객체 ID는 버그 추적, 로깅, 데이터 분석 등 다양한 상황에서 사용하는데요. 특정 이벤트나 문제가 발생했을 때 객체 ID로 관련 객체를 식별하고 문제의 원인을 찾을 수 있습니다. 객체 ID가 중요한 이유죠.

 

 

객체 ID를 만들 때 고려할 점

중요한 객체 ID, 어떻게 만들면 좋을까요? 아래 세 가지를 고려해주세요.

 

  • 고유성: 동일한 시스템 또는 전체 네트워크 내에서 두 개 이상의 객체가 동일한 ID를 갖지 않는 것을 뜻합니다. 객체 ID의 고유성은 데이터 무결성과 일관성을 보장하는 데 필요하죠.
  • 식별 가능성: 명확한 네이밍, 일관된 구조로 사용자가 예측할 수 있는 방식으로 객체 ID를 만드는 것을 뜻합니다. 접두사(prefix)는 객체 ID에 추가적인 의미나 구분자를 제공하는데, 이를 통해 객체의 특성이나 속성을 나타내서 식별 가능성을 높일 수 있습니다. 예를 들어 접두사 user-을 사용해서 객체 ID를 보고 사용자 객체임을 쉽게 인지할 수 있겠죠.
  • 보안성: 객체 ID는 사용자, 세션, 데이터 등을 고유하게 식별하기 때문에 악의적인 사용자가 이러한 ID를 추측하거나 탈취하여 부적절하게 사용하는 것을 방지하는 것이 중요합니다. 그러려면 객체 ID는 예측할 수 없도록 랜덤해야 하죠. 순차적이거나 예측할 수 있는 ID를 사용하는 것보다 UUID를 사용하면 더 안전합니다. 랜덤한 정도 뿐 아니라 길이와 복잡성도 중요합니다. 길고 문자, 숫자, 특수 문자 등이 혼합된 ID는 여러 정보가 조합되어 있기 때문에 추측하기 더 어려워요.

 

그럼 이 중에서 고유성과 식별 가능성을 더 자세히 다뤄보겠습니다.

 

 

고유성: UUID vs. Hash 함수

객체 ID는 어떻게 “고유성”을 가질 수 있을까요? 객체 ID를 생성하는 방법에는 여러 가지가 있는데요, 가장 일반적인 방법은 UUID(Universally Unique Identifier)를 만들거나 Hash 함수를 사용하여 문자열을 생성하는 겁니다. 각 방식을 비교해 보겠습니다.

 

좋은 객체 ID(Object ID)

 

UUID는 랜덤하고 예측 불가능한 식별자가 필요할 때 유용하고, 해시 함수는 임의의 입력을 고정된 크기의 해시값으로 변환하는 데 주로 사용되기 때문에 항상 일관된 결과를 제공해야 하는 검색 작업에 사용될 때 유용합니다. 보안 관련 요구 사항이 있다면 UUID 사용을, 검색이나 데이터 구조에 활용하고자 한다면 Hash 함수 사용을 고려해 보세요.

 

 

식별 가능성: 사람이 읽을 수 있는 디자인

클라이언트 키

 

이 값은 토스페이먼츠에서 사용하고 있는 키 값입니다. 이 값을 보면 어떤 생각이 드시나요? 값이 _로 구분되어 있는데요. 구분된 첫 번째 값을 먼저 볼까요. test가 앞에 붙은 걸로 봐서 테스트용으로 쓸 것 같습니다. test 뒤에는 ck 라는 값이 있는데, 위에 보니 클라이언트 키라고 쓰여있는 걸 보아 ‘client key’를 의미하는 것 같죠. 이렇게 토스페이먼츠의 테스트용 클라이언트 키의 줄임말인 걸 유추해 볼 수 있습니다. 이렇게 식별 가능성을 고려해서 ID를 디자인하니 랜덤한 문자열인 D5GePWvyJnrK0W0k6q8gLzN97Eoq만 있는 것보다 개발자가 얻을 수 있는 정보가 훨씬 많습니다.

 

이렇게 객체 ID에 접두사를 붙이면 어떤 장점이 있을까요? 먼저 객체 ID의 가독성이 향상됩니다. 객체 ID에 의미 있는 접두사를 사용하면 다른 사람이나 개발자가 객체를 식별하고 이해하기 쉬워지죠. 또 객체들을 접두사로 그룹화하면 특정 유형이나 카테고리에 속한 객체를 쉽게 필터링하거나 검색할 수 있습니다. 예를 들어, user- 접두사를 가진 모든 사용자 객체를 조회하거나 prod- 접두사를 가진 제품 객체들을 필터링할 수 있죠. 마지막으로 접두사는 객체 ID 충돌을 방지하는 데 도움을 줄 수 있습니다. 서로 다른 유형의 객체에 다른 접두사를 사용하면 객체 ID가 충돌할 가능성이 줄어들기 때문입니다.

 

이렇게 객체 ID를 생성하고 관리하는 규칙을 설정하고 적용하면 사람이 읽기 좋을 뿐 아니라, 데이터의 예측 가능성과 일관성도 같이 높아집니다. 객체 ID는 데이터 간의 관계를 정의하는 데 사용되기 때문이죠.

좋은 객체 ID(Object ID)

 

예를 들면, 사용자를 나타내는 Customer 객체와 주문을 나타내는 Order 객체 사이에는 강한 연관성이 있습니다. 그래서 Order 객체는 주문한 특정 사용자를 식별하기 위한 사용자 ID, 즉 Customer 객체의 ID를 포함합니다. 이 값으로 특정 사용자의 주문 목록을 쉽게 추적하고, 사용자가 주문한 상품, 결제 정보 등과 연관된 정보를 쉽게 얻을 수 있겠죠. 이렇게 객체 ID만 잘 디자인해도 특정 객체가 다른 객체와 어떻게 연관되어 있는지를 이해하기가 쉬워집니다.

 

 

예제: 고객 키 만들기

토스페이먼츠를 사용하다 보면 API나 SDK 요청을 보낼 때 가맹점에서 직접 객체 ID를 만들어서 보내야 하는 경우가 있습니다. 여기서는 결제위젯을 초기화할 때 사용하는 customerKey를 예시로 살펴볼게요. customerKey는 고객을 특정하는 값으로 가맹점의 고객 정보와 연동된 고유한 값으로 가맹점에서 직접 만들어서 넣어줘야 하는 값입니다. 아래와 같이 결제위젯을 초기화할 때 사용합니다.

 

좋은 객체 ID(Object ID)

 

 

이 값을 만약 user-01 같은 형식으로 사용하면 어떻게 될까요? 만약 하나의 customerKey만 유출되어도 누구나 다른 값을 유추해서 악의적으로 사용할 수 있죠. 그래서 연동 문서에서 UUID와 같이 충분히 무작위적인 값을 사용해 달라고 안내하고 있습니다.

 

정리하면 객체 ID는 고유성, 식별 가능성, 보안성을 충분히 만족해야 합니다. 고유성과 보안성은 기본이고, 식별 가능성까지 고려해 사람이 읽을 수 있고 이해할 수 있는 객체 ID를 만들어 보세요. 효율적인 ID 시스템은 데이터를 빠르게 검색하고 참조할 수 있게 함으로써 전반적인 API의 성능 향상에 기여합니다.


<참고하면 좋은 자료>

 

<원문>

좋은 객체 ID(Object ID) 만들기

 

요즘IT의 모든 콘텐츠는 저작권법의 보호를 받는 바, 무단 전재와 복사, 배포 등을 금합니다.

좋아요

댓글

공유

공유

댓글 0
토스페이먼츠 기술 블로그
80
명 알림 받는 중

작가 홈

토스페이먼츠 기술 블로그
80
명 알림 받는 중
토스페이먼츠 기술 블로그입니다. 개발자들이 만든, 개발자들을 위한 PG사 토스페이먼츠는 PG를 연동하는 개발자 경험을 수호하기 위해 직관적인 API, 편리한 개발자센터, 읽기 쉬운 문서를 만들고 있습니다.

좋아요

댓글

스크랩

공유

공유

요즘IT가 PICK한 뉴스레터를 매주 목요일에 만나보세요

요즘IT가 PICK한 뉴스레터를
매주 목요일에 만나보세요

뉴스레터를 구독하려면 동의가 필요합니다.
https://auth.wishket.com/login