강의 내용 정리
서버란?
- 서버(Server) : 데이터나 리소스를 제공하는 시스템으로 사용자의 요청을 기다리고 요청이 들어오면 그에 맞는 응답을 전송한다.
클라이언트란?
- 클라이언트(Client) : 사용자를 대표하여 서버에 정보나 서비스를 요청하는 시스템으로 웹 브라우저, 모바일 앱, 데스크톱 앱 등 다양한 형태로 존재합니다.
서버와 클라이언트간 통신 방식의 종류
- HTTP/HTTPS: 웹 기반의 애플리케이션에서 주로 사용됩니다. REST API나 SOAP와 같은 웹 서비스 통신 방식에서 기반이 됩니다.
- WebSockets: 실시간 양방향 통신이 필요한 애플리케이션 (예: 채팅 애플리케이션, 실시간 게임)에서 사용됩니다.
- Socket (TCP/UDP): TCP 또는 UDP 프로토콜을 사용하여 데이터를 전송합니다. 지속적인 연결을 유지하면서 양방향 통신이 가능합니다.
- FTP (File Transfer Protocol): 파일 전송에 특화된 프로토콜입니다. 클라이언트와 서버 간의 파일 전송을 위해 사용됩니다.
- RPC (Remote Procedure Call): 네트워크를 통해 다른 주소 공간에 있는 프로그램의 프로시저(또는 함수)를 호출하는 방식입니다.
- SOAP (Simple Object Access Protocol): XML 기반의 메시징 프로토콜로, 주로 웹 서비스에서 사용됩니다.
- GraphQL: 페이스북이 개발한 데이터 쿼리 및 조작 언어로, 클라이언트가 필요한 데이터의 구조를 명시하여 서버로부터 데이터를 받아옵니다.
- gRPC: 구글이 개발한 RPC 프로토콜로, 효율적인 양방향 통신을 지원하며 여러 프로그래밍 언어를 지원합니다.
- MQTT: IoT (Internet of Things) 기기와 같은 경량 클라이언트에서 사용되는 메시지 프로토콜입니다.
- Message Queues (예: RabbitMQ, Kafka): 비동기 메시징을 위한 시스템으로, 메시지를 전송하는 생산자와 메시지를 받아 처리하는 소비자 사이에서 메시지를 전송합니다.
프로토콜이란?
- 프로토콜(Protocol) : 프로토콜은 통신 규약 즉, 약속이다. 클라이언트와 서버간에 통신을 하기위한 몇가지 약속이다. HTTP라는 프로토콜을 이용해서 대화를 나누면 HTTP를 이용해 주고받는 메시지는 "HTTP 메시지"라고 부른다.
API란?
- 서버는 클라이언트에게 리소스를 잘 활용할 수 있도록 인터페이스를 제공해 줘야 하는데 이것을 API라고 한다. 식당에서 메뉴판을 제공하듯 서버에서는 리소스를 잘 활용할 수 있도록 API를 제공하는 것이다. API는 Application Programming Interface의 약자이며, interface의 사전적의미는 "의사소통이 가능" 하도록 만들어진 "접점"을 의미한다.
REST API
JSON
-
JSON은 JavaScript Object Notation라는 의미의 축약어로 데이터를 저장하거나 전송할 때 많이 사용되는 경량의 DATA 교환 형식이다. 서버로부터 데이터를 가져오기 위해서 하나의 약속으로 JSON이란 데이터형식을 사용하여 통신한다고 생각하면 된다. 기본 형태는 하나의 NAME과 VALUE로 이루어져있다. NAME에는 String 타입이, VALUE에는 숫자, 문자열, 불리언, 객체, 배열, NULL값등이 올 수 있다.
-
JSON 배열은 대괄호[]로 둘러쌓아 표현하며 쉼표 , 를 사용하여 여러 JSON 데이터를 포함할 수 있다.
GSON
-
GSON이란 JavaScript Object Notation의 준말로 구글에서 제공하는 오픈소스 라이브러리이다. 웹 상에서 데이터를 주고 받을 때 자주 사용되는 경량 데이터 포맷이다. JSON 데이터를 우리가 사용하는 프로그래밍 언어의 객체로 변환해야 할 때(직렬화(Serialization))나 객체를 JSON 형태로 변환해야 할 때(역직렬화(Deserialization)) GSON 라이브러리가 매우 간단하게 작업해준다.
-
GSON을 사용하는 이유는 코드의 간결성, 성능 효율성, 광범위한 커뮤니티 지원 및 잘 정리된 문서 등이 있다.
-
기본사용법
Kotlin 객체를 JSON으로 변환
val gson = Gson()
val jsonString = gson.toJson(someObject)
JSON을 Kotlin 객체로 변환
val myClassInstance: MyClass = gson.fromJson(jsonString, MyClass::class.java)
Retrofit
- Retrofit은 Square Inc.에서 개발한 안드로이드 및 자바를 위한 타입-세이프한 HTTP 클라이언트 라이브러리이다. REST API의 HTTP 요청을 자바 인터페이스로 변환하는 것을 주 목적으로 한다.
Retrofit의 장점
-
코드의 간결성
- 복잡한 HTTP API 요청을 쉽고 간결하게 만들 수 있습니다.
- 간단한 어노테이션을 통해 요청 메서드와 URL을 정의할 수 있습니다.
-
안정성과 확장성
- 내부적으로 OkHttp 라이브러리를 사용하여 통신, 이를 통해 안정적인 통신이 가능합니다.
- 인터셉터를 사용하여 요청/응답 프로세스를 확장하거나 수정할 수 있습니다.
-
다양한 플러그인과 컨버터 지원
- 다양한 데이터 형식(JSON, XML 등)에 대해 데이터 변환 컨버터를 제공합니다.
- RxJava, Coroutines와 같은 비동기 프로그래밍 라이브러리와 연동 가능합니다.
실습
- 강의를 따라하면서 미세먼지 앱을 만들어보았다.

강의 내용 따라하다가 크래시가 났었는데
java.net.UnknownServiceException: CLEARTEXT communication to apis.data.go.kr not permitted by network security policy
다음 내용으로 에러가 났다.
http를 https로 바꿔주니 간단하게 문제가 해결되었다!
앱 개발 프로세스
- 아이디어 구상 -> 기획 단계(기능 정의, 화면 설계 등) -> 디자인 구상 -> 개발 -> 테스트 단계 -> 배포
강의는 이렇게 끝났지만 계속 복습해봐야 할 것 같다.
하루의 마무리