REST API 와 RESTful API 차이는 그냥 부모, 자식 간의 관계인듯 하다

이번에 동료 개발자들과 점심을 먹던 중 사소한 주제에 대한 토론(?)이 있었습니다.

바로 REST API 와 RESTful API 입니다.

사실 저도 REST API 나 RESTful API 모두 동일하다 생각하고 있었습니다.

하지만 엄밀히 말하면 동일한 개념은 아니며, 그 차이점을 설명할 수 있어야 된단 생각이 들어 포스팅합니다 :)

 

REST API 란?

REST API 란 Representational State Transfer API의 약자로, 분산 시스템(ex. MSA)간의 자원을 표현하고 전달하기 위한 아키텍처 스타일입니다.

  • REST API 특징
    • 자원(URI) : 서비스의 모든 것을 나타내는 개념. (ex. 주문, 결제, 회원 등)
    • 표현(Representation) : json, xml 등 다양한 형식으로 표현 가능
    • 상태(State) : HTTP 응답 상태 코드(2xx[성공], 3xx[리다이렉트], 4xx[클라이언트 에러], 5xx[서버 에러])
    • 표준화된 인터페이스(Uniform Interface) : HTTP 요청 메소드(GET, POST, PUT, DELETE)

정리하자면, REST API 는 자원, 표현, 상태, 표준 인터페이스를 통해 클라이언트와 서버 간의 통신을 구현하는 아키텍처 입니다.

즉 REST API 는 REST 아키텍처 스타일을 따르는 API를 의미합니다.

 

  • REST API 원칙
    • 클라이언트/서버 구조 : 클라이언트와 서버는 독립적으로 구성되어 있습니다.
    • 무상태성(Stateless) : 서버가 클라이언트의 상태를 유지하지 않고 각 요청을 완전히 독립적으로 처리하는 방식입니다. 즉, 서버는 클라이언트의 이전 요청이나 상태에 대해 알지 못하며, 
    • 캐시 처리 가능(Cacheable) : 서버 응답 시간 개선을 위해 캐시를 처리할 수 있습니다.
    • 계층화 시스템(Layered System) : 클라이언트와 서버 사이에 여러 개의 중간 계층(레이어)을 두고 통신하는 방식입니다. 시스템의 확장성, 보안성, 성능 등을 향상시킵니다.
    • 인터페이스 일관성(Uniform Interface) : 위의 REST API 의 특징 참고
    • 자기 서술적 메시지(Self-descriptive Messages) : 위의 REST API 의 특징 참고

 

RESTful API란?

RESTful API 는 REST API 아케텍처를 적용하여 설계된 API를 의미합니다. REST API 를 상속 했다고 보시면 될 것 같습니다.

 

그렇다면 차이점은?

* 원칙이나 특징은 똑같습니다. 하지만 RESTful API 는 REST API 아키텍처 기반으로 좀 더 구체적으로 설계되었고, 더 엄격하게 REST API 를 따른다고 말할 수 있습니다.

 

제가 게임 업계에서 근무하며 접하는 게임 업계 용어입니다.
혹시 다른게 있다면 알려주세요 :-)



ACL(Access Control List) :
 서버에서 트래픽을 선택하여 허용하거나 거부하는 기능을 
설정 할 수 있는 기능입니다.
게임 업계에서는 운영팀 or 플랫폼 개발팀에서 접근을 필요로 하는 사용자에게 ACL을 설정 해줍니다.


알파테스트(Alpha Test) :
 내부테스트란 뜻으로 개발사 직원들을 대상으로 실시하는 테스트 입니다(게임 퍼블리싱 이전)


API(Application Programming Interface ) :
  서비스와 서비스를 연동하기 위해 사용하는 연결 프로그램입니다.
게임 업계에서는 게임포탈과 게임 사이의 로그인, 캐쉬 충전 및 구매 등을 연결하기 위해 사용됩니다.


베타테스트(Beta Test) :
 정식 서비스 이전에 외부를 대상으로 진행. CBT 와 OBT에 해당됨(게임 퍼블리싱 이전)


CBT(Closed Beta Test) : 
게임 개발사가 테스터들을 모집하여 개발이 완료된 게임을 퍼블리싱 이전에 플레이 하게 한 뒤, 게임의 버그나 개선 및 건의사항등을 보고 받아 한 층 더 완벽해진 게임을 만들기 위해 진행합니다.


CDN(Content Delivery Network) :
 인터넷을 통해 컨텐츠를 효율적으로 전달하기 위해 여러곳에 데이터를 저장해두고 사용자들이 빠르게 컨텐츠를 다운로드 할 수 있게 해주는 서비스를 말합니다.
쉬운 예시를 보이자면,  Steam 이나 Google Player Store 라고 할 수 있습니다.


DB(Data Base) :
 다양한 데이터들을 저장하는 곳입니다.(보통 IDC에 구축되어 운영됩니다.)


FFT(Family&Friend Test) :
 친분이 있거나 테스트를 위한 전문적 지식을 가진 소규모 인원을 대상으로 실시되는
테스트입니다(게임 퍼블리싱 이전)


GMTool :
 게임 개발사에서 제공한 Tool이며 효과적으로 게임 운영을 할 수 있습니다. GM 계정으로 다양한 컨텐츠 및 이벤트를 진행 할 수 있으며, 필요한 데이터를 추출하여 게임 운영을 위한 지표분석도 할 수 있습니다. 
게임 업계에서는 운영팀에서 다양한 요구분석을 위해 많이 사용합니다.


Game Patch:
 게임 개발사가 게임의 버그 수정 및 신규 기능을 업데이트 하기 위해 정기적으로
 실시하는 패치입니다.


IDC(Internet Data Center) :
 게임 운영을 위해 다수의 서버PC 와 빠르고 안정적인 네트워크 회선을 제공하는 장소.


IP(Internet Protocol) :
 흔히 IP주소라고 말하며 인터넷에서 통신을 하기 위해서는 서버로부터 유일한 IP값을 받습니다.
게임 업계에서는 테스트 서버 및 라이브 서버등을 구축할때 IP주소를 할당해야 합니다.
 이 작업은 주로 플랫폼 개발팀에서 진행하게 되며 IP주소는 항상 미리
 할당 및 고지를 해야 합니다.


런쳐(Launcher) :
게임을 실행해주기 위한 .exe 프로그램


모니터링(Monitoring) :
 게임 서버가 정상적으로 작동하고 있는지 실시간으로 확인을 하는 작업입니다.
 꼭 서버 뿐만이 아니라 게임 내부에서 비정상적, 비매너 행위에 대한 대응을 위해 모니터링을
하기도 합니다.


OBT(Open Beta Test) : 
불특정 다수를 대상으로 진행하는 외부 테스트. CBT 보다 차후에 실시되며 게임에 대해
최종적으로 개선사항을 추가 할 수 있습니다.

OP(OPeration Team, 운영팀) :
게임 운영을 담당하는 부서입니다.

OTP(One Time Password) :
 비밀번호 재사용으로 인한 피해를 최소화 하기위해 사용자에게
일회성 비밀번호를 부여하는 방식입니다.


Port : 
서버의 통신 프로그램을 구분하기 위한 장치입니다. IP+Port 로 접속을 합니다.
 ex) 100.100.100.100:8080 


+ Recent posts