무엇을 공부했나요?
Two scoops of Django 16장 REST API 구현하기 내용을 함께 살펴보았습니다. 마침 이번주부터 새로 시작되는 프로젝트에서 API 개발을 하시게된 문수님께서 책 내용을 정리해서 발표해주셨습니다. (요약자료) REST API는 Representational State Transfer API의 약자로 다양한 환경과 용도에 맞는 데이터를 제공하는 디자인을 정의하고 있습니다. 16장에서는 데이터 생산자의 측면에서 다룬 REST API 구현에 대한 내용이 포함되어 있었습니다. (참고로 17장에서는 사용자의 측면에서 다룬 REST API 이용하기 내용을 공부할 예정입니다.)
함께 공부한 내용을 간단하게 정리하면 아래와 같습니다.
REST API 아키텍처
django-rest-framework(DRF) 등을 이용하여 빠르게 API를 구현하는 것은 어렵지 않다. 하지만 이를 자신의 프로젝트에 맞게 변형하고 관리하는 것은 쉽지 않은 일이다. 책에서는 더 나은 REST API 아키텍처를 위해서 아래와 같은 조언을 제공하고 있다.
- 프로젝트 코드들은 간결하게 정리되어 있어야 한다.
- 앱의 코드는 앱 안에 두자.
- 비지니스 로직을 API 뷰에서 분리하자
- API URL을 모아두기
- API 버저닝 하기
서비스 지향 아키텍처
웹 어플리케이션은 독립적이고 분리된 컴포넌트로 구성된다. 각 컴포넌트는 독립된 서버에서 구동되며, 각 컴포넌트는 서로 커뮤니케이션을 하게 된다. 일반적으로 서비스 지향 아키텍처 스타일의 장고 프로젝트들은 이러한 컴포넌트 사이 커뮤니케이션에 REST API를 이용한다. 이와같은 서비스 지향 아키텍처 스타일을 사용함으로써 많은 엔지니어가 상호 충돌 없이 서로 분리된 컴포넌트를 작업할 수 있게된다. (엔지니어 100명으로 이루어진 거대한 하나의 팀이 단일 코드 베이스로 동시에 일하는 것보다, 엔지니어 열 명으로 이루어진 열개의 팀이 각각 독립된 서비스 지향 아키텍처 컴포넌트를 작업한다고 생각해보자)
REST 프레임워크들에 대한 평가
django-rest-framework가 현실적인 표준으로 자리잡고 있다. 대부분의 장고 프로젝트가 django-rest-framework를 이용하고 있고, 이는 해당 패키지가 앞으로도 잘 유지되리라는 보장으로 볼 수 있을 것이다. 또한 해당 프레임워크에서는 클래스 기반 뷰 뿐만 아니라 함수 기반 뷰의 구현을 옵션으로 제공하고 있다.
심화시간
책 내용의 간단한 요약 이후에는, 심화내용으로 호성님께서 이전에 일했던 회사에서의 경험담을 이야기 해주셨습니다. 프로젝트의 규모가 커지면서 여러가지 일을 할 수 있는 서버를 만들 필요성이 생겼고, 각각의 역할을 가진 서버가 REST API로 통신하도록 개발했던 이야기를 들을 수 있었습니다. 그 당시에는 django-rest-framework 같은 프레임워크가 안정화 되지 않았던 시기였기에 그때와 비교하면 지금은 정말 많이 편해졌다는 말씀을 하셨습니다. 역시 불편함을 느껴본 사람이 편리함도 더 크게 느낄 수 있구나 생각했습니다.
추가로 REST의 Resource(컬렉션, 도큐먼트, 콘트롤러 리소스)에 대한 좀 더 자세한 내용과 URI, HTTP를 이용한 인터렉션 설계에 대해서 다루었습니다. 자세한 내용은 호성님이 올려주신 자료를 통해서 참고하실 수 있습니다. 예시로 Github Pull Requests API를 살펴보며 API 이용에 대한 개념을 좀 더 구체화 시킬 수 있었습니다.
어땠나요?
스터디 중에 잠깐 각자의 API 개발 경험에 대해서 이야기하는 시간을 가졌습니다. 초초보 개발자인 저를 제외하고 모든 스터디원 분들께서 경험이 있으셨기에 API 개발중 겪었던 어려움과 재미난 에피소드가 오고 갔습니다. 제가 좀 더 경험이 있었더라면 더 공감할 수 있고 얻을 수 있는 것도 많았을텐데 하는 아쉬운 마음이 들었습니다.
사실 이번 스터디에서 REST API를 다룬다는 이야기를 듣고 걱정이 되었습니다. 앞서 적은 것 처럼 저는 아직 API 개발 경험이 없기 때문입니다. 하지만 꼭 공부하고 싶었던 내용이기도 했기에 이번 기회를 동기부여로 삼아서 예습을 해보기로 했습니다. 처음에는 무작정 Django REST framework Tutorial 내용을 따라서 코드를 쳐보았습니다. 하지만 왜 사용해야 하는지 필요성이 충분히 공감되지 않은 상태에서 공부하려고 하니 막연한 느낌이 들었습니다. 그래서 방법을 바꾸어 REST API가 무엇인지, 왜 필요한 것인지에 대한 것부터 알아보기로 했습니다. 아래 목록은 이러한 궁금증을 해소하는데 조금씩 도움을 받았던 자료입니다. 혹시 저와 비슷한 입문자 분이 이 글을 읽으실 수도 있기에 공유합니다.
이번 스터디를 통해서 REST API가 무엇인지 명확하게 알게 되었다고 하기는 어려울 것 같습니다. 여전히 저에게는 모호한 개념이지만 이번 스터디를 통해서 REST API에 대해서 더 공부해보고 싶다는 생각을 하게 되었습니다. 그리고 무엇보다 필요성이 가장 좋은 학습 동기이자 효과적인 학습방법이라고 느꼈습니다. 특히 업무에서 필요하다면 더 그렇겠지요. 가까운 미래에 이런 필요성을 느낄 수 있는 날이 왔으면 좋겠습니다 :)