UDP UDP는 User Datagram Protocol의 약자입니다. 데이터를 독립적인 관계를 지니는 패킷인 Datagram 단위로 처리하는 프로토콜입니다. 비연결형 프로토콜로 사전에 연결 설정 없이 데이터를 전달합니다. 하나의 메시지에서 분할된 각각의 패킷은 서로 다른 경로로 전송될 수 있습니다. 송신 측에서 전송한 패킷의 순서와 수신 측에 도착한 패킷의 순서가 다를 수 있습니다. 서로 다른 경로로 패킷을 처리함에도 불구하고 순서를 부여하거나 재조립하지 않습니다. 흐름 제어, 혼잡 제어, 오류 제어를 하지 않으므로 손상된 세그먼트에 대한 재전송을 하지 않습니다. 속도가 빠르며 네트워크 부하가 적다는 장점이 있지만, 신뢰성 있는 데이터 전송을 보장하지 못합니다. UDP는 Multicast, DNS, R..
TCP 일반적으로 TCP와 IP를 함께 사용하는데, TCP는 패킷 추적 및 관리를 담당하고 IP가 데이터의 배달을 담당합니다. 신뢰성 있는 데이터 전송을 지원하는 연결 지향형 프로토콜입니다. 사전에 3-way handshake 과정을 통해 연결을 설정하고 통신을 시작합니다. 4-way handshake 과정을 통해 연결을 해제합니다. (가상 회선 방식) 흐름 제어, 혼잡 제어, 오류 제어를 통해 신뢰성을 보장하지만 이 때문에 UDP보다 전송 속도가 느립니다. 데이터의 전송 순서를 보장하며 수신 여부를 확인할 수 있습니다. 대부분의 웹 HTTP 통신, 이메일, 파일 전송 등에 사용됩니다. 흐름 제어 송신 측과 수신 측 사이의 데이터 처리 속도를 해결하기 위한 기법입니다. 만약 송신 측의 전송량 > 수신 측..
OSI 7 계층 OSI 7 계층은 네트워크에서 통신이 일어나는 과정을 7단계로 나눈 것을 말합니다. OSI 7 계층으로 나누는 이유 OSI 7 계층으로 나눈 이유는 통신이 일어나는 과정을 단계별로 파악할 수 있기 때문입니다. 계층별의 기능과 통신 과정을 단계별로 나누어서 쉽게 이해할 수 있습니다. 또한, 특정한 곳에 이상이 생기면 그 단계만 수정할 수 있기 때문에 편리합니다. 1. 물리 계층 (Physical Layer) 주로 전기적, 기계적, 기능적인 특성을 이용해서 통신 케이블로 데이터를 전송합니다. 리피터, 케이블, 허브 등 2. 데이터 링크 계층 (Data Link Layer) 물리 계층으로 송수신되는 정보를 관리하여 안전하게 전달되도록 도와줍니다. Mac 주소를 통해 통신합니다. Frame에 M..
Paging3 페이징은 데이터를 가져올 때 한 번에 모든 데이터를 가져오는 것이 아니라 일정한 페이지로 나눠서 가져오는 것을 뜻합니다. 이러한 페이징 방식을 사용하면 앱에서 네트워크 대역폭과 시스템 리소스를 더 효율적으로 사용하기에 성능, 메모리, 비용 측면에서 굉장히 효율적입니다. Android Jetpack에서는 페이징을 위한 Paging3 라이브러리를 제공합니다. Paging3는 로컬 저장소 또는 네트워크를 통해 데이터를 나누어 효율적으로 로딩할 수 있게 도와줍니다. Paging3는 구글에서 권장하는 Android 앱 아키텍처에 맞게 설계되었으며, 다른 Jetpack 컴포넌트와 잘 동작할 수 있도록 설계되었습니다. 페이징 라이브러리 개요 | Android 개발자 | Android Developers..
Flow 코루틴에서 Suspend 함수를 사용하면 작업이 모두 완료된 후에 단일 값만 반환받을 수 있습니다. 하지만 Flow를 사용하면 중간중간 진행되는 코루틴 작업 중에 갱신되는 값까지 반환받을 수 있습니다. 단일 값만 반환하는 정지 함수와 달리 여러 값을 순차적으로 내보낼 수 있는 유형입니다. 코루틴을 기반으로 빌드되며 여러 값을 제공할 수 있습니다. 비동기식으로 계산할 수 있는 데이터 스트림의 개념입니다. 내보낸 값은 동일한 유형이어야 합니다. 예를 들어, Flow는 정수 값을 내보내는 Flow입니다. Android의 Kotlin 흐름 | Android Developers Android의 Kotlin 흐름 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 코루틴에서 흐름..
코루틴 (Coroutine) 코루틴은 '동시'를 뜻하는 co와 '작업들의 집합'을 뜻하는 routine이 합쳐져 만들어진 단어입니다. 일반적으로 루틴은 단 하나의 입구점과 출구점을 가지는 반면, 코루틴은 여러 개의 입구점과 출구점을 가질 수 있습니다. 따라서, 코루틴은 이전에 실행이 중단된 지점에서 다시 실행을 재개할 수 있는 기능을 가집니다. 코루틴을 적용하면 데이터베이스 또는 네트워크 작업 같은 장시간 작업으로 인한 메인 스레드 블로킹 현상을 줄일 수 있으며, 비동기 작업 중 예외 발생에 따른 메모리 누수를 방지할 수 있습니다. 즉, 비동기적으로 실행되는 코드를 간소화하기 위해 동시성 프로그래밍 개념을 코틀린에 도입한 것을 코루틴이라고 합니다. Android의 Kotlin 코루틴 | Android D..
DI (Dependency Injection) DI는 의존성 주입이라 부르며, 하나의 객체에 다른 객체의 의존성을 제공하는 기술입니다. 여기서 의존성은 서비스를 사용할 때 필요한 객체를 뜻합니다. Android의 종속 항목 삽입 | Android 개발자 | Android Developers Android의 종속 항목 삽입 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 종속 항목 삽입(DI)은 프로그래밍에 널리 사용되는 기법으로, Android 개발에 적합합니 developer.android.com DI 기법 예시 DI를 예시로 Car 클래스와 Engine 클래스로 설명하면 다음과 같습니다. Car 클래스가 실행되기 위해서는 Engine 클래스의 인스턴스가 있어야 합니다. ..
🚀 기능 요구 사항 12월 이벤트 플래너 개발 요청 사항은 다음과 같습니다. 고객들이 식당에 방문할 날짜와 메뉴를 미리 선택하면 이벤트 플래너가 주문 메뉴, 할인 전 총주문 금액, 증정 메뉴, 혜택 내역, 총혜택 금액, 할인 후 예상 결제 금액, 12월 이벤트 배지 내용을 보여주기를 기대합니다. 12월 중 식당 예상 방문 날짜는 언제인가요? (숫자만 입력해 주세요!) 방문할 날짜는 1 이상 31 이하의 숫자로만 입력받아 주세요. 1 이상 31 이하의 숫자가 아닌 경우, "[ERROR] 유효하지 않은 날짜입니다. 다시 입력해 주세요."라는 에러 메시지를 보여 주세요. 모든 에러 메시지는 "[ERROR]"로 시작하도록 작성해 주세요. 주문하실 메뉴와 개수를 알려 주세요. (e.g. 해산물파스타-2,레드와인-..