개발 기록
안드로이드 대기업 기술 면접 정리 - 2 본문
참고자료
2차시 면접
1. 지금까지 개발해왔던 경험들을 바탕으로, 기술적인부분에서의 간략한 자기소개 부탁드립니다.
1차시 면접과 같은 간단한 자기소개를 부탁하셨습니다.
지금까지 해왔던 Android Studio 관련 프로젝트나 동아리활동, 최근 Kotlin 을 공부중이라는 부분에 대해 설명했습니다.
2. 네트워크 관련 질문
2-1. RESTful API 에 대해 아시나요?
RESTful API 란, Rest 의 속성을 가지는(REST의 원리를 따르는) 서비스 API 를 의미합니다.
REST 란, Representational State Transfer 의 약자로 웹, 웹 상의 자원들을 HTTP URI 의 형태로 표현(Represent) 하고 URI 의 형식으로 HTTP Method(GET,POST,PUT,DELETE)를 통해 해당 자원을 조작(CRUD)할 수 있는 Software Architecture 를 의미합니다. 혹은 그러한 작동원리 및 규정등을 의미합니다.
RESTful 한 인터페이스는 4가지 원칙(에 해당하는 가이드라인) 을 가지게 됩니다.
1. 자원의 식별 - 자원 각각을 메세지에 의해 식별가능해야 합니다. 주로 웹 기반의 REST 시스템에서 URI를 사용하며, 자원은 XML 이나 JSON 형태를 가집니다.
2. URI 등의 메세지를 통한 Resource의 조작. 메세지와 HTTP Method 만을 이용해 Resource를 충분히 조작할 수 있어야합니다.
여기서 Resource 조작은 CRUD Operation 을 지정해주는 작업을 의미합니다.
CRUD Operation : Create, Read, Update, Delete 로 자원을 조작하는 4가지 기본동작.
3. 자기서술적 메세지 - URI 메세지등에 자원과 자원을 처리해야하는 방법에 대한 정보를 충분히 포함하고 있어야 합니다. 즉, Client 는 URI 만을 보고 자원을 어떻게 다룰 수 있는지를 파악 가능해야 합니다.
4. Hyper Media
Client가 Resource에 접근할 수 있도록, 구분되는 표현을 통해 접근을 제공해 주어야 합니다. HyperText Link 등을 의미합니다.
RESTful 한 시스템에는 위의 조건에 추가하여 다음과 같은 6가지 필요조건이 존재합니다.
1. Client / Server 구조 : 자원을 요청하는 쪽이 Client가 되고, 요청받는 쪽이 Server가 됩니다.
2. Stateless : Client가 요청 및 요청한 Context 는 서버에 저장되면 안됩니다. Cookie나 context등을 신경쓸 필요없어 구현이 단순해지고, 서버의 부담을 줄일 수 있습니다. Client의 이전 요청이 다음 요청에 영향을 주면 안됩니다.(DB 를 수정하여 영향을 주는 것은 가능합니다.)
3. Cachable : Client는 응답을 Caching 할 수 있어야합니다.
4. Layered System : Client 에게는 서버에 직접 연결이 되었는지, 중간 계층의 서버를 통해 연결이 되어 있는지를 알 수 없어야합니다. Client는 Server만 호출하고, Server는 다중계층으로 구현하여 보안 및 확장성을 향상 시킬수 있습니다.
5. Code on demand : Javascript 나 Java applet 등을 이용하여 기능을 확장할 수 있습니다. 주로 Client가 Server에서 Script를 받아 실행시킵니다.( Optional, 꼭 존재할 필요는 없음 )
6. Interface Consistency : Interface Architecture를 작은 단위로 분리하고 단순화시켜 Client, Server의 각 파트가 독립적으로 관리,개선될 수 있도록 합니다. HTTP 표준 프로토콜을 따르는 모든 플랫폼에서 사용할 수 있으며, 특정 언어나 기술등의 플랫폼에 의존하지 않습니다.
이 외에도 REST 시스템의 장단점이나 RESTful API 의 설계규칙등이 존재합니다. 더 깊은 내용을 원하시는 분들은 제가 RESTful API 를 찾아보며 참고했던 아래의 링크들을 봐주세요.
● 참고자료
https://ko.wikipedia.org/wiki/REST
REST - 위키백과, 우리 모두의 백과사전
REST 대한민국의 힙합 음악가에 대해서는 R-EST 문서를 참조하십시오. REST (Representational State Transfer)는 월드 와이드 웹 과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처 의 한 형식이다. 이 용어는 로이 필딩(Roy Fielding)의 2000년 박사학위 논문에서 소개되었다. 필딩은 HTTP 의 주요 저자 중 한 사람이다. 이 개념은 네트워킹 문화에 널리 퍼졌다. 엄격한 의미로 REST 는 네트워크 아키텍처 원리의 모음이다. 여기서 '네트워크 아키텍처 원리'란 자원을 정의하고 자...
ko.wikipedia.org
https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
[Network] REST란? REST API란? RESTful이란? - Heee's Development Blog
Step by step goes a long way.
gmlwjd9405.github.io
https://www.a-mean-blog.com/ko/blog/%ED%86%A0%EB%A7%89%EA%B8%80/_/REST%EC%99%80-RESTful-API
토막글: REST와 RESTful API - A MEAN Blog
REST와 RESTful API 작성자: Ian H Date: 2017/08/03 REST REST란 Re presentational S tate T ransfer 의 약자 로 소프트웨어 프로그램 개발의 아키텍처의 한 형식입니다. Representational State Transfer- '대표적인 상태 전달' 이 단어만 듣고 REST가 무슨 뜻인지 알 수 있는 사람은 영어권에서도 없을 것이라고 생각이 되는데요, 저는 개인적으로 이 단어를 변형해서 ' 자원(resource)의 대표(representation)에 의한 상태 전달 ' ...
www.a-mean-blog.com
2-2. 네트워크 통신을 사용해본 적이 있는지? OkHttp3에 대해 알고있는가?
위의 RESTful API 와 연계되는 질문이였습니다. OkHttp3 와 Retrofit 등을 이용하여 네트워크 자원에 접근하고 적용해본 적이 있는지와 관련 내용을 잘 이해하고 있는지를 물어보셨습니다.
OKHttp3 는 Square 사의 Open Source 라이브러리로, HTTP 통신을 위해 사용됩니다. 이를 이용하면 GET, PUT, POST 등을 쉽게 구현할 수 있습니다. Android Studio 로 구현하는 Application은 주로 데이터를 제공받는 Client 역할을 하기 때문에, OKHttp3는 서버와의 네트워크 통신을 구현하는데 이용됩니다.
아래 포스트는 OkHttp를 이용한 구현 예시를 잘 표현해두었습니다.
http://snowdeer.github.io/android/2017/03/03/get-and-post-and-put-using-okhttp/
OkHttp를 활용한 GET, POST · snowdeer's Code Holic
Open Source compile 'com.squareup.okhttp3:okhttp:3.6.0' GET 예제 public boolean getUserInfo(final Context context) { try { OkHttpClient client = new OkHttpClient(); String url = SERVER_CONFIGURATION.ADDRESS + ":" + SERVER_CONFIGURATION.PORT + "/v1/userinfo"; Request request = ...
snowdeer.github.io
네트워크 통신은 Worker Thread 에서 동작하여야 하기 때문에, 이전에는 HttpUrlConnection, Async Task 등을 이용하여 구현하였었습니다. 하지만, OKHttp3 을 이용하면 Android Studio 에서 네트워크 통신을 매우 간단하게 구현할 수 있습니다.
주로 RESTful API 를 다루는 Retrofit2 와 같이 사용됩니다. Retrofit 은 같은 Square 사의 작품으로, RESTful 한 인터페이스를 가지는 CRUD 방식의 서버연결을 다루기 쉽게 제공해주는 라이브러리 입니다.
Retrofit 에 대해서는 아래 문서를 참고하세요.
http://devflow.github.io/retrofit-kr/
Retrofit - 한글 문서
소개 Retrofit은 HTTP API를 자바 인터페이스 형태로 사용할 수 있습니다. public interface GitHubService { @GET("/users/{user}/repos") Call<list> listRepos(@Path("user") String user); } Retrofit 클래스로 GitHubService 인터페이스를 구현하여 생성합니다. Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.github.com") ...</list
devflow.github.io
OKHttp3 와 Retrofit을 이용한 구현자료는 아래 링크를 참고해주세요.
https://jongmin92.github.io/2018/01/29/Programming/android-retrofit2-okhttp3/
Retrofit2 + OkHttp3 사용하기 - 92Hz | Jongmin's Blog
신입사원 프로젝트로 간만에 안드로이드 개발을 하게됐습니다. 서버와 통신하기위해 Square에서 만든 Retrofit 라이브러리를 사용했는데, 기존에 사용하던 버전(1.x)과 변경된 부분이 많아 새롭게 사용법을 알아보고자 합니다. Retrofit 테스트는 API 테스트 사이트 를 통해서 Fake data를 가져오는 실습을 해보겠습니다. 해당 글의 대부분은 Retrofit 2.0 Example 을 참고했습니다. Retrofit2 Retrofit 의외에 다른 라이브러리도 있지만, Retrofit을 사용하기로 한 이유는 성능과 간단한 구현...
jongmin92.github.io
'안드로이드 자료' 카테고리의 다른 글
안드로이드 대기업 기술 면접 정리 - 1 (1) | 2020.01.12 |
---|---|
Thread, Handler, Looper를 통한 백그라운드 (0) | 2020.01.12 |
Android 기술 면접 - 질문 정리 (0) | 2020.01.12 |
RecyclerView 작동 원리 (0) | 2020.01.10 |
Java 기술 면접 - 질문 정리 (0) | 2020.01.10 |