이 세 가지 키워드는 오다가다 참 많이 봤는데
누군가 나에게 이게 뭐냐고 물어보면 입 뻥긋도 못할 것 같다.
대충 알고 넘어가면 걸림돌이 될테니 정리해놓자.
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시간도 안됐는데...
이 블로그를 나만 보면 상관없지만 혹시나 누군가 보고 잘못된 정보를 얻어가면 너무나 죄송한 일이기 때문에..
내가 참고한 블로그 몇 개를 올려두고 더 깊이 공부한 다음에 정리해야겠다.
3. Retrofit
Retrofit는 서버와 클라이언트 간 http 통신을 위한 인터페이스입니다.
Retrofit은 비교적 설명이 간단해서 이해하기 쉬웠다.
클라이언트가 서버에게 요청을 하고
서버가 클라이언트에게 응답을 하는
이 과정(=통신)을 쉽게 사용할 수 있게 해주는 놈이 Retrofit이라는 것이다.
근데 다음 두 문장 때문에 다시 헷갈리기 시작했다.
Retroift은 REST API 방식을 사용합니다.
OkHttp는 Retrofit의 베이스가 됩니다.
으악 빌어먹을!!!
그니까 A는 B이고... C는 B인데... 예?
이분의 블로그를 보니 이해가 됐다.
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에 더 자세히 알아보고 싶다면 아래 두 포스팅을 참고하자.
'오늘은 뭘 배울까? > etc' 카테고리의 다른 글
맥린이가 알려주는 맥 사용법 및 설정 (6) | 2021.05.03 |
---|---|
[Heroku] 헤로쿠 가입/설치/사용법 with 파이썬 (8) | 2021.02.13 |
자바로 셀레니움(Selenium)을 써보자 :: 크롤링 (6) | 2020.12.25 |
API란 대체 뭘까? (0) | 2020.12.21 |
비전공자를 위한 이해할 수 있는 IT 지식 후기 (0) | 2020.12.20 |
댓글