본문 바로가기
오늘은 뭘 배울까?/etc

REST API, OkHttp, Retrofit 파헤치기

by Kim Juhwan 2020. 12. 15.

이 세 가지 키워드는 오다가다 참 많이 봤는데

누군가 나에게 이게 뭐냐고 물어보면 입 뻥긋도 못할 것 같다.

대충 알고 넘어가면 걸림돌이 될테니 정리해놓자.

 

1. OkHttp

Okhttp는 REST API, HTTP 통신을 간편하게 구현할 수 있도록 다양한 기능을 제공해주는 라이브러리이다.
그리고 Retrofit이라는 라이브러리의 베이스가 된다.

 

이해를 하고 싶었으나 바로 두 번째 단어부터 막혀버렸다... 아는 게 없는 나에겐 위 문장이 아래처럼 읽힌다.

 

Okhttp는 *!@, )&#? 통신을 간편하게 구현할 수 있도록 다양한 기능을 제공해주는 라이브러리이다.
그리고 #^$#이라는 라이브러리의 베이스가 된다.

 

하아..

OkHttp를 이해하기 위해 우선 REST API가 뭔지부터 알아보자

 

 

2. REST API

REST는 Representational State Transfer라는 용어의 약자로서 2000년도에 로이 필딩 (Roy Fielding)의 박사학위 논문에서 최초로 소개되었습니다. 로이 필딩은 HTTP의 주요 저자 중 한 사람으로 그 당시 웹(HTTP) 설계의 우수성에 비해 제대로 사용되지 못하는 모습에 안타까워하며 웹의 장점을 최대한 활용할 수 있는 아키텍처로써 REST를 발표했다고 합니다.

 

음, 좋아 그니까 어떤 사람이 웹(HTTP)을 잘 써먹기 위해 REST라는 아키텍처를 발표한 거구나!

근데 빌어먹을 아키텍처는 또 뭐람. 이것부터 알아봐야겠네..

 

 

2-1. 아키텍

 

 

최적화를 목표로 두고 시스템 구성과 동작원리
그리고 시스템의 구성환경 등을 설명 및 설계하는 청사진 또는 설계도입니다.

 

아이고 머리야.. 분명히 잘 정리된 문장인데 내 머리는 조금만 있어 보이는 단어를 쓰면 왜 읽기를 거부할까

내가 이해한 대로 예를 들어 정리해보자.

 

건물을 지을 때는 여러 가지 요소를 염두에 두어야 한다.

어떻게 짓느냐에 따라 공간을 더 확보할 수도 있고, 배선관을 더 효율적으로 배치할 수도 있을 테고...

이런 것들을 계획하고 설계하는 것을 청사진 혹은 설계도라고 한다.

 

프로그램도 마찬가지다.

개발하기 전에 구성을 잘 짜고 최적화된 코드를 설계해야 좋은 프로그램이 나오겠지?

즉, 시스템을 설계하기 위한 청사진, 설계도를 아키텍처라고 부르는 것이다

 

 

 

출처: People photo created by Racool_studio - www.freepik.com

 

그니까 대충 이런 느낌이다.

로이 필딩이라는 사람이 HTTP를 활용할 수 있도록 지침서를 만들었고

나 같은 아기 개발자는 그걸 보고 그 지침을 따르는 거!

 

 

2-2. RESTful

개발자 모집공고를 보면 종종 "RESTful 한 시스템을 구축할 줄 아는 자"같은 문구를 볼 수 있다.

검색을 해본 결과 이게 정식 명칭(?)은 아니고 그냥 흔히들 이렇게 부르는 것 같다.

위에서 내가 REST API를 지침서라고 표현을 했는데

지침서이니 만큼 REST API에는 권장하는 규칙이 있다.

말 그대로 권장, 권장이다.

"충전기는 정품을 사용하세요" 따위와 같은 권장사항 말이다.

그 말은 권장사항을 지키지 않아도 사용이 가능하다는 것이다.

 

REST API에는 여러 가지 규칙이 있는데

그중에는 개발자는 자주 어기거나 쉽게 놓치게 되는 부분이 있다고 한다.

그렇게 규칙을 어기게 되다 보면 이건 REST 하지 못하게 되는 것이다.

(이렇게 표현을 한다. REST 하지 못하다. REST 하다.)

만약 반대로 REST API의 규칙을 전부 다 지킨다면? 이건 RESTful 한 것이다.

그렇다면 대체 그 빌어먹을 규칙들은 무엇일까?

 

 

2-3. REST의 구성

  • 자원(URI)
  • 행위(HTTP METHOD)
  • 표현

 

REST는 이렇게 구성된다고 한다.

근데 나는 여기서 또 막혀버렸다...

아니 URL은 평소에 많이 들어봤는데 URI는 뭐지???

 

 

2-3-1. URL vs URI

URL(Uniform resource Locator) - 통합 자원 식별자로 인터넷에 있는 자원을 나타내는 유일한 주소

URI(Uniform resource Identifier) - 네트워크 상에서 자원 위치를 알려주기 위한 규약

 

두 용어의 정의를 가져왔는데 역시 난 모르겠다.

그래서 예제를 찾아왔다.

 

  URL URI
www.naver.com/ O O
nid.naver.com/user2/help/myInfo.nhn O O
nid.naver.com/user2/help/myInfo.nhn?lang=ko_KR X O

 

예제를 보니 되게 간단한 것 같았다.

'/'로 웹의 계층을 나타내면 URL, "?lang=ko_KR"처럼 식별자를 이용하면 URI이다.

(여기서 식별자는 내가 원하는 정보에 도달하기 위해 사용되는 값을 의미한다)

여기서 중요한 건 URL의 상위 개념이 URI이기 때문에

URL에 해당되면 URI라고도 부를 수 있다.

 

 

 

2-4. REST의 특징

  • Uniform
  • Stateless
  • Cacheable
  • Self-descriptiveness
  • Client - Server 구조
  • 계층형 구조

 

정말 도통이 감이 안 잡혀서 특징들에 대한 설명을 여기저기서 찾아보았는데

이 부분에 대해서는 내가 정리를 해서 포스팅하기엔 아직 부족하다는 생각이 들었다.

REST의 R도 모르는 상태에서 아침 10시에 시작해 지금 저녁 6시... 8시간도 안됐는데...

이 블로그를 나만 보면 상관없지만 혹시나 누군가 보고 잘못된 정보를 얻어가면 너무나 죄송한 일이기 때문에..

내가 참고한 블로그 몇 개를 올려두고 더 깊이 공부한 다음에 정리해야겠다.

 


 

REST API 란 ?

HTTP란 ? - HyperText Transfer Protocol의 준말로 링크 기반으로 데이터를 요청하고 받겠다는 것 - 클라이언트와 서버가 요청을 하고 응답을 하기 위해 따르는 프로토콜 - HTML 문서를 주고 받을 수 있음

ijbgo.tistory.com

 

RESTful에 대해서 설명해주세요.(REST, RESTful, RESTful API 개념 정리)

REST가 뭐에요? RESTful에 대해서 설명해주세요. REST가 무엇인가? REST는 분산 시스템 설계를 위한 아키텍처 스타일이다. 아키텍처 스타일이라는건 쉽게 말하면 제약 조건의 집합이라고 보면 된다. RE

jeong-pro.tistory.com

 

Rest API - Uniform Interface

Rest API 특징들 중에서 이번에는 Uniform Interface에 대해 설명할 까 하다.   정의는 URL로 지정된 리소스에 대한 조작을 통일하고 한정된 인터페이스로 수행하는 아키텍쳐 스타일이다. 단순히 정의

programmer7895.tistory.com

 

[REST API] REST API에 관하여_6가지 제약조건

안녕하세요. 한 달 전 정도에 REST API사용에 주의할 점이라는 주제로 Youtube를 본 것을 정리한 적이 있습니다. 이때의 아이디어를 떠올려 새로운 게시물을 연재해 볼까 합니다. 오늘의 주제는 REST A

sabarada.tistory.com


 

3. Retrofit

Retrofit는 서버와 클라이언트 간 http 통신을 위한 인터페이스입니다.

 

Retrofit은 비교적 설명이 간단해서 이해하기 쉬웠다.

클라이언트가 서버에게 요청을 하고

서버가 클라이언트에게 응답을 하는

이 과정(=통신)을 쉽게 사용할 수 있게 해주는 놈이 Retrofit이라는 것이다.

근데 다음 두 문장 때문에 다시 헷갈리기 시작했다.

 

Retroift은 REST API 방식을 사용합니다.
OkHttp는 Retrofit의 베이스가 됩니다.

 

으악 빌어먹을!!!

그니까 A는 B이고... C는 B인데... 예?

 

 

[2018.03.17] 99. OkHttp VS Retrofit

도입 이번 포스팅에서는 Okhttp 라이브러리와 Retrofit 라이브러리의 개념과 차이점에 대해 정리 할 예정이다. 안드로이드 개발을 하면서 서버와 통신하기 위해 가장 많이 사용하는 라이브러리이지

heepie.me

이분의 블로그를 보니 이해가 됐다.

Retrofit 코드를 보면 OkHttp 클라이언트를 선언한다고 되어있다.

= Retrofit을 쓰면 OkHttp도 쓴다고 볼 수 있다.

= Retrofit이 OkHttp를 포함한다고 볼 수 있다.

= OkHttp를 베이스로 Retrofit이 만들어졌다.

 

 

4. 결론

Okhttp는 REST API, HTTP 통신을 간편하게 구현할 수 있도록 다양한 기능을 제공해주는 라이브러리이다.
그리고 Retrofit이라는 라이브러리의 베이스가 된다.

 

이제 처음에 언급했던 이 문장이 이해가 갔다.


REST API는 HTTP를 설계할 때 지켜야 할 아키텍처(= 가이드, 규칙, 지침서)인데

OkHttp랑 Retrofit은 이걸 간편하게 구현할 수 있도록 해준다.

REST API를 쉽게 사용하기 위한 도구쯤으로 생각하면 될 것 같다.

그리고 Retrofit은 OkHttp를 기반으로 만들어진 놈이다.

라는 게 내가 내린 결론이다.

 

 

 

 

 


(2021-05-29 추가)

Retrofit에 더 자세히 알아보고 싶다면 아래 두 포스팅을 참고하자.

 

Retrofit이란? (사용하기 전에 알아야 할 것들)

1. Retrofit  1-1. Retrofit 이란?  1-2. TMI 2. 기본 개념  2-1. Request URL  2-2. JSON과 HTML  2-3. GET과 POST  2-4. parameter 3. 사용 전 세팅  3-1. gradle  3-2. AndroidManifest.xml  3-3. da..

todaycode.tistory.com

 

 

레트로핏을 이용하여 서버와 통신하자!

1. 사용법  1-1. Interface 정의  1-2. Retrofit 객체 생성  1-3. HTTP 요청과 응답 2. 예제 소스 이번 게시물에서는 Retrofit을 이용하여 버튼을 누를 때마다 다음 페이지의 공지사항을 불러와서 띄우는 기..

todaycode.tistory.com


 

반응형

댓글