이번에 RESTful API를 주제로 테코톡 발표를 진행하게 되었고, 발표를 준비하면서 학습했던 자료들을 토대로 REST의 기본 개념을 정리하고자 합니다. 대부분의 내용은 로이 필딩의 논문에서 비롯되었으나, 설명을 위해 주관적인 내용이 포함될 수도 있다는 점은 미리 알려드리고자 합니다.
REST가 없던 시기, 무엇이 문제였나
REST를 이해하기 앞서, 이전에는 도대체 무엇이 문제였길래 REST라는 개념이 등장했는지를 먼저 살펴봅시다.
1990년대 초반에 WWW(World Wide Web)은 폭발적으로 사용되기 시작했습니다. 그리고 이를 통해서 사람들은 정보의 공유와 접근을 굉장히 쉽게 할 수 있었습니다. WWW은 단순성과 접근성이 아주 좋았기 때문입니다. 누구나 정보에 접근하고 싶다면 컴퓨터 하나를 들고 WWW에 접근해 찾아볼 수 있었습니다.
하지만 이런 WWW의 단순성, 접근성은 시간이 지날수록 오히려 양날의 검이 되었습니다. 왜일까요? 생각해 봅시다. 누구나 접근 가능하고, 누구나 쉽게 사용할 수 있다는 것은 무엇을 의미할까요? 엄청나게 많은 사람들, 엄청나게 많은 기업들이 WWW에 접근하기 시작했다는 것을 의미합니다.
따라서 네트워크 통신량 자체도 많아졌고 점점 더 웹이 복잡해지면서 기존에는 없던 몇가지 문제가 생겨나게 되었습니다.
클라이언트 - 서버 간 결합도가 높다
첫번째 문제는 클라이언트와 서버 간의 결합도가 높다는 것이었습니다. 이게 무슨 말일까요?
그림을 통해 살펴봅시다. 배달이, 냥이, 메이가 WWW 상에서 통신을 하고 있다고 가정해볼게요. 이런 통신 과정에서 배달이는 B 프로토콜과 JSON 데이터 형식을 사용했고, 냥이는 A 프로토콜과 XML 데이터 형식을 사용했습니다.
기존 WWW에서는 이처럼 각 서버마다, 사용하는 프로토콜이나 데이터 형식이 천차만별이었습니다. 이것은 무엇을 의미할까요? '통신해야 하는 대상마다 사용하는 프로토콜, 데이터 형식이 달라짐'을 의미합니다.
쉽게 말해 클라이언트와 서버간의 결합도가 높아진다는 것입니다. 만약 서버가 A 프로토콜을 사용하다가 B 프로토콜을 사용한다고 하면 어떨까요? 그리고 XML을 사용하다가 JSON을 사용한다고 갑자기 바꿔버리면요? URI를 갑자기 수정해버린다면 또 어떨까요? 클라이언트는 코드를 수정하느라 매일 밤낮을 지새워야 할 것입니다.
이처럼 표준 혹은 표준이라고 불릴 만한 통신 규약 자체가 존재하지 않으니 클라이언트와 서버간의 결합도가 높아지게 되었고, 이것이 기존 WWW의 첫번째 문제점이었습니다.
자원의 표현 및 상태관리의 어려움
기존 WWW의 두번째 문제점은 바로 자원의 표현과 상태관리가 어려웠다는 것입니다. WWW는 엄청나게 많은 정보들로 구성되어 있습니다. 그렇다면 이런 정보를 찾는 방법, 저장하는 방법이 중요해지겠죠. 도서관에 사서가 존재하는 이유도 비슷한 맥락입니다. 책은 엄청나게 많을테고 분류를 해야 나중에 찾아볼 수 있으니까요.
WWW도 마찬가지입니다. 정보가 엄청나게 많아졌기 때문에 이를 관리할 메커니즘이 점점 더 중요해졌습니다. 하지만 기존의 WWW에는 그런 메커니즘이 거의 없다시피 했습니다. 왜일까요? WWW은 처음부터 각각의 자원을 어떻게 관리할지에 대해 초점을 맞췄던 게 아니기 때문입니다. WWW은 사실 정적인 자원(문서, 이미지, 파일 등)을 전송하기 위한 시스템으로 고안되었습니다.
문제가 생겼던 상황을 예를 통해 한번 설명해보겠습니다. 똑같은 회원 정보 생성이라는 기능을 정의하는데, A라는 사람은 /new-user로 URI를 설계를 했고, B라는 사람은 /new/user로 설계했습니다. 이처럼 어떻게 자원을 관리할지, 표현할지에 대한 표준도 거의 없다시피 했기 때문에 WWW의 높은 복잡도로 이어졌습니다.
이렇게 자원 관리 자체가 어려우니까 네트워크 통신량도 많아졌습니다. 한번에 요청을 보내 받아오면 될 일을 돌고 돌아 여러번 요청을 보내 처리하게 되는 것이죠. 그리고 이는 네트워크 성능 문제로 직결됐습니다.
REST의 등장
WWW은 유망했으나, 앞서 말한 문제점들로 인해 많은 개발자들이 'WWW은 파멸의 길로 갈 거야!' 라고 예측했습니다. 정보의 양, 사용자의 양은 점점 더 많아질텐데, 이런 문제점들을 안고 갈 수는 없었습니다.
이때, 로이 필딩이라는 사람이 다음과 같은 고민을 합니다. '기존의 웹을 해치지 않으면서(즉, HTTP 호환성을 유지하면서) 웹을 보다 개선할 수 있는 방법이 없을까?'
HTTP 호환성을 유지해야 하는 이유는, 이미 이런 고민을 할 시점에는 HTTP 프로토콜이 WWW 상에서 널리 사용되고 있었기에 완전히 대체할 수 있는 방법은 없었기 때문입니다.
그리고 등장한 개념이 뭘까요?
바로 REST입니다.
이어질 포스팅에서는 REST란 무엇인지를 알아보겠습니다.
'우테코 5기' 카테고리의 다른 글
REST 기본 개념 총정리 3편 - 균일한 인터페이스 (3) | 2023.06.11 |
---|---|
REST 기본 개념 총정리 2편 - REST의 6가지 제약조건 소개 (2) | 2023.06.11 |
[레벨 2 미션] 지하철 미션 학습 기록(2) (0) | 2023.06.08 |
[레벨 2 미션] 지하철 미션 학습 기록(1) (0) | 2023.05.29 |
Forward Proxy, Reverse Proxy (0) | 2023.05.29 |