RESTFUL API에서 URI를 통해 계층적인 구조로 자원을 식별한다고 하는데... 이거는 매번 찾아보고 나서도 헷갈려서 이번 기회에 나만의 방식대로 확실하게 이해하고 정리해보고자 포스팅을 하기로 결심했다!
이해의 편의를 위해 지극히 개인적인 생각이 많이 들어간 글이므로 양해부탁드립니다
URL은 굳이 개발자가 아니더라도 종종 쓰이는 단어이다. 왜 그럴까?
먼저 URL은 Uniform Resource Locator의 약자라는 것부터 알아야한다. 간단하게 직역해보자면 유일 자원 주소를 의미한다. 그리고 여기서 자원은 JSON, XML, 페이지 등 다양한 범주의 데이터를 의미한다. 즉, 우리가 일상생활에서 URL이라 칭하는 것은 인터넷 상의 자원 위치를 의미하는 것이다.
특정 사이트 페이지가 있는 위치를 통해 우리는 브라우저를 통해 렌더링된 페이지를 볼 수 있다. 따라서 일반 사용자들에게 가장 밀접한 관계에 있는 용어라서 우리가 이 용어를 배우기 전에도 잘 알고 있는 것이라고 생각한다.

아마 많은 사람들이 URL과 URI를 거의 구분없이 쓰고 있을 것이다. ( 나도 그랬다... )
하지만 사실 크게 틀린 말은 아니다. URL을 모두 URI로 바꿔서 표현하면 더더욱 그렇다. 왜냐면 URL은 URI의 일종이기 때문이다.
URI는 Uniform Resource Identifier로, 유일 자원 식별자를 의미한다. 얼핏 보기엔 비슷해보이는데, URI와 URL은 어떤 측면에서 다른걸까?
여기서 우리는 식별자와 위치라는 표현에 집중해야한다.
만약 우리가 창원시 제일고등학교 3반에 소속된 "홍길동"을 찾는다고 가정해보자. 그럼 우리는 창원시 제일고등학교 3반이라는 고유한 위치를 통해 홍길동을 찾으러갈 수 있다. 이 때, 여기 소속된 홍길동이 유일할 때, 우리는 이 위치를 URL이자 URI라고 칭할 수 있다.
다행히 제일고등학교 3반 안에는 홍길동이 한 명이었지만, 만약 전국에서 이 "홍길동"을 찾아야한다고 가정하자. 하지만 이 친구는 워낙 활동적이라 위치가 매번 바뀌기 때문에 특정 위치로 찾아간다고 해서 찾을 수는 없다. 이런 경우 우리는 주민번호, 지문 등의 식별자를 통해 "홍길동"을 수배(?)해서 찾으려고 한다. 이 경우 홍길동의 실제 위치를 나타내지는 않지만, 홍길동을 유일하게 식별할 수 있는 요인이 된다. 이런 식별자를 URI이지만, URL는 아니라고 한다.
사용자들은 일반적으로 URI이자 URL인 웹 페이지를 브라우저로 접근해서 탐색하여 원하는 자원 및 정보를 가져간다. 하지만 프론트엔드에서 REST API기반 백엔드 서버에서 데이터를 받아올때는? 우리는 자원의 위치에 접근해서 탐색하여 가져오는 것이 아니다. 백엔드 측에서 "여기로 요청보내면 너가 이게 어딨는지는 몰라도 돼~ 내가 알아서 찾아서 전달해줄게!" 라고 정의해둔 위치에 요청을 보내는 것이다. 따라서 이때 사용되는 표현이 바로 URL이 아닌 순수한 URI다.
이번 글은 사실 정말 내 주관적인 생각이 너무 많이 반영되어 있어서 적으면서 "이래도 괜찮을까.."하는 생각이 많이 들었지만, 어차피 내 개인적인 개념 정리 공간이라고 생각하고 작성하고 있는거라 신경 안 쓰기로 했다! 만약 나처럼 계속 헷갈리는 사람이 있다면, 100명 중 1명 쯤에게는 도움이 되길 바란다....!
안녕하세요. 오래된 글이라 답변받을 수 있을지 모르겠지만 이해에 궁금한 점이 생겨 문의 드립니다.
백엔드 서버를 통한 DB와의 소통 시, http 형식의 주소를 백엔드 서버로 전송하여 백엔드서버-DB와 소통 후 백엔드 서버를 통해 불러옴으로 이 때 사용되는 http주소를 URI라고 지칭.
백엔드 서버를 거치지 않고 DB와의 소통 시, http 형식의 주소로 직접 DB와 소통하여 저장된 주소를 찾아가 불러옴으로 이 때 사용되는 http 주소를 URL이라고 지칭.
이 내용이 맞을까요?