본문 바로가기
Android Q&A/Android One a day

[안드로이드 면접] - 2 :

by Jman 2023. 1. 25.

1. Http VS Https 

더보기

둘 다 인터넷을 이용하는 프로토콜이다.

Hypertext transfer protocol 의 약자로 웹 서버와 사용자의 인터넷 브라우저 사이에서 문서를 전송하기 위한 통신규약이다.

 

둘이 비슷하지만 한 가지 다른 점은 https 가 모든 통신 내용을 암호화 한다는 점이다. 끝에 's' 가 붙은 건, secure socket 을 의미한다. 안전한 통신망이라는 뜻이다.

 

패킷이 암호화 되어 있기 때문에 패킷 캡쳐 프로그램으로 캡쳐를 하여도 암호화된 내용만 보인다. 암호화는 TLS 라고 하여 Transport 계층에서 이루어지고, L4 의 전송계층에서 암화가 이루어진다.

 

TLS란?

Transport Layer Security 의 줄임말로 과거 SSL 에서 발전하며 이름이 변경된 것이다. 하지만, 아직 SSL 이란 명칭이 많이 사용되고 있다.

 

 

2. http 를 왜 사용하는 걸까?

더보기

https 는 끝에 붙은 's' 가 안전한 통신망(secure socket) 이라는 걸 알고 있다.

또한 암호화 처리 되어있으니, 안전한 브라우저가 되는 게 틀림없다.

그러면 모든 브라우저가 https 를 사용하는게 맞다. 또한 구글에서 2014년에 https 로 바꾸라고 권고까지 하였다.

 

하지만, https 암호화를 하려면 웹 서버에 부하가 생기게 된다. 즉, 비용이 비싸다.

http 는 비연결형으로 웹페이지 보는 중 인터넷 연결이 끊겼다가 다시 연결되어도 페이지를 계속 볼 수 있지만, https 는 소켓 자체를 인증을 하기 때문에 인터넷 연결이 끊기면 소켓도 끊어져서 다시 https 인증을 해야한다. (이 부분에서 시간이 걸린다.)

 

따라서, 아무나 봐도 상관없는 페이지는 http 로, 남에게 보이면 안되는 금융 정보나 메일 등 중요한 것은 https 로 한다.

 

현재 우리나라는 https 를 많이 사용한다. 하지만, 중국은 감시 때문에 http 를 사용이 많다고 한다. (TLS 1.3 금지)

 

 

3. RESTful API 란?

더보기

Representational State Transfer 라는 용어의 약자로 로이 필딩(Roy Fielding)이 웹(HTTP) 설계의 우수성에 비해 제대로 사용되지 못하는 모습이 안타까워 웹의 장점을 최대한 활용할 수 있는 아키텍처로써 REST API가 최초로 소개 했다.

 

Rest API 란? HTTP 프로토콜 장점을 살릴 수 있는 네트워크 기반 아키텍처이다.

 

따라서, RESTful 하다는 건, REST 특징을 지키면서 API 를 제공한다는 것을 의미한다.

여기서 REST 하다는 건 아래의 6가지다.

  • Uniform Interface : URI 로 지정한 소스에 대한 요청을 통일되고, 한정적으로 수행하는 아키텍처 스타일을 의미
  • Client-Server : 자원이 있는 쪽이 Server, 자원을 요청하는 쪽이 Client
  • Stateless : 상태를 갖지 않아, 이전 요청이 다음 요청의 처리에 연관되어지지 않는다. 고로 각 요청이 별개의 것으로 인지
  • Cacheable : HTTP 프로토콜을 그대로 사용하므로 웹에서 사용하는 기존의 인프라를 그대로 활용할 수 있음.
  • Layered System : 클라이언트는 REST API Server 만 호출할 수 있다. 서버는 다중 계층으로 구성될 수 있음.
  • Code on Demand(optional) 

 

4. OkHttp VS Retrofit

더보기

이 두 가지는 Square 사에서 만든 HTTP 통신 라이브러리다. 

OkHttp 는 Rest API, HTTP 통신을 간편하게 구현할 수 있도록 여러가지 기능을 제공한다.

 

그리고 이러한 OkHttp를 기반으로 더 Type-safe 하고, 더 직관적으로 사용할 수 있도록 인터페이스로 만들어진 게 Retrofit 이다. 두 차이점은 세 가지로 나눌 수 있다.

  1. 애노테이션 사용으로 코드의 가독성이 좋고, 직관적인 설계가 가능하다. (url 작성 부분에서 오타율이 줄고, 가독성이 올라감.)
  2. 통신 결과 값을 JSON 으로 수동으로 변환해줄 필요가 없다. (JSON 파싱하기 위한 코드를 작성하지 않아도 됨)
  3. 결과값을 메인 스레드에서 바로 사용할 수 있다. (runBlocking 사용하지 않아도 됨)

위 차이점 세 가지를 보았을 때 Retrofit 이 좋다고만 생각할 수도 있지만, OkHttp 는 Interceptor 를 통해 API 통신 과정에서 가로채서 별도의 작업을 할 수 있는 장점이 있다.

그러니, 둘 다 같이 장점만을 사용하는 것이 좋다.

 

 

5. OkHttp Interceptor 란?

더보기

API 통신에서 요청에 대해 monitor, rewrite, retry 할 수 있는 강력한 메카니즘이다.

Interceptor 를 통해서 우리는 API 통신을 만들 때 통신 과정을 모니터링 하거나, 특별한 작업을 수행할 수 있다.

Interceptor 에는 두 가지 타입이 존재한다. Application Interceptor, Network Interceptor 가 있다.