작성
·
9
0
안녕하세요.
사이드 프로젝트를 설계하다 보면 테이블의 키를 어떻게 가져갈지 고민을 많이 하게됩니다.
영한님의 말씀대로 대부분 대체키로 만들지만 숫자 대체키의 경우 1부터 순차적으로 올라가게 대부분 구조가 만들어지게 됩니다. 이게 혹여나 보안에 우려가 있을까 염려됩니다.
안전하게 UUID로 대체키를 주면 강의에서 말씀해 주신것 처럼 성능 부분에서 trade off가 있어서 이 방법도 고민됩니다.
예를 들어서 회원이라면 회원 정보를 조회하는 GET API에 회원ID(숫자 대리키, pk) 를 보내면 해당 유저 정보를 조회하게 되는데 숫자를 임의로 바꿔서 다른 유저 정보를 조회하는 이런 부분에서 혹여나 보안 관점에서 우려가 있지 않을까? 생각을 갖게 됩니다.
그러다 보니 두 가지 방안이 떠오르는데 실무에서 추천해주실 방안이 있는지 궁금합니다.
대체키(숫자)를 사용하되 애플리케이션에서 validation을 확실하게 설정
pk는 대체키(숫자, pk)를 하되 db에서 join, 외래키로만 사용하고 외부로 나갈 때는 다른 대체키(UUID, unique)로만 보내는 방식
영한님을 기다리며... 답변에 미리 감사드립니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. index님.
대리키의 외부 노출과 관련된 고민은 데이터베이스 설계에서 매우 중요합니다. 특히 보안 측면에서 어떻게 접근해야 할지가 핵심입니다. 대체키의 사용 목적은 여러 가지가 있을 수 있지만, 보안과 관련해서는 다음과 같은 두 가지 방안이 일반적으로 고려됩니다:
대체키(숫자)를 사용하되 애플리케이션에서 validation을 확실하게 설정: 이 방법은 사실상 대체키의 외부 노출을 허용하지만, 애플리케이션 레벨에서 철저한 권한 검사를 통해 보안을 보장하려는 것입니다. 각 요청에서 사용자가 접근할 수 있는 자원인지 확인하여 잘못된 접근을 방지할 수 있습니다. 이는 구현의 복잡성을 가져올 수 있으나, 성능 측면에서 효율적입니다.
PK는 대체키(숫자, PK)를 하되 DB에서 JOIN 및 외래키로만 사용하고 외부로 나갈 때는 다른 대체키(UUID, unique)로만 보내는 방식: 이 방법은 외부에 노출되는 식별자를 내부 DB 구조와 분리하여 보안성을 높입니다. UUID를 사용하면 고유성과 난수성이 보장되어 보안성을 확보할 수 있지만, 성능 저하가 일부 발생할 수 있습니다. 그러나 트래픽이나 시스템의 규모에 따라 이 성능 저하는 무시할 수 있는 수준일 수도 있습니다.
대리키의 외부 노출에 대한 고민은 시스템의 보안 요구사항과 성능의 균형을 고려해야 합니다. 각 방법마다 장단점이 있으므로, 본인 시스템의 요구사항에 맞게 설정하는 것이 중요합니다.
관련해서 도움이 될 수 있는 강의 자료가 아래에 있습니다. 비슷한 주제를 다루고 있으니 참고해 보시기 바랍니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.