Dev23 [Android] 프로젝트 개발 기록1 - splash animation 그리기 / github에 google-services.json 잘못 올림 1. splash animation 그리기 animation을 활용한 splash 화면을 만들고자 했다. 텍스트로 적혀진 온점(.)을 직선으로 그어지는 형태로 애니메이션 효과를 주고자 했고, 처음에는 온점 위에 직선을 그리는 형태로 할라 했지만 디자인 과정에서 정했던 색상값이 투명도가 60%였기 때문에, 그대로 겹칠 경우 온점 부분만 진하게 칠해져서 부자연스러웠다. 그런 이유로 직선을 그리기 직전 온점을 invisible 상태로 만들고, 직선을 그리는 형태로 했다. var startAnimation by remember { mutableStateOf(false) }val lineProgress = remember { Animatable(0f) }val coroutineSc.. Dev/Projects 2024. 9. 29. [Android] HLS in Android 서론 HLS란? HLS(HTTP Live Streaming)은 비디오 스트리밍 프로토콜로, 오디오나 동영상을 여러 개의 작은 세그먼트로 분할하고, 이러한 세그먼트를 HTTP 기반의 웹 서버를 통해 전송한다. 주로 Twitch 같은 라이브 스트리밍 플랫폼이나, OTT에서 사용하는 방식이다. HLS 사용 이유 HLS를 사용하는 가장 큰 이유는 적응형 비트레이트 스트리밍이라는 장점 때문이다. HLS는 네트워크 상태에 따라 스트리밍 품질을 동적으로 조정하여 버퍼링을 최소화하고, 여러 품질 수준으로 인코딩된 동일한 콘텐츠를 제공하고, 클라이언트는 현재 네트워크 상태에 가장 적합한 비트레이트를 선택한다. 또한 HTTP를 기반으로 전송하기 때문에, 기존의 HTTP 인프라를 그대로 사용할 수 있다... Dev/Android 2024. 7. 20. [Android] Android Multi-Module 서론 멀티 모듈이란? 안드로이드 멀티 모듈(Multi-module)은 대규모 프로젝트를 여러 개의 모듈로 나눠서 관리하는 방법이다. 모듈은 프로젝트의 독립적인 단위로, 독립적으로 빌드되고 테스트 될 수 있다. 멀티 모듈 왜 쓰나요? 멀티 모듈을 사용하는 이유는 크게 다음의 이유로 구분할 수 있다. 1. 코드 재사용성 - 공통 기능을 라이브러리 모듈로 분리하여 여러 기능 모듈에서 재사용할 수 있음( 추후 사용될 Build - logic Module에서 자주 적용할 예정)2. 빌드 시간 단축- 모듈별로 독립적인 빌드가 가능하므로, 변경된 모듈만 빌드하여 전체 빌드 시간을 단축할 수 있음3. 코드 가독성- 각 모듈이 독립적으로 관리되므로 코드의 가독성이 향상됨4. 유지 보수성- 모듈별로 책임이 .. Dev/Android 2024. 7. 18. [Android] Android studio WearOS App (갤럭시 워치 앱) 빌드 방법 프로젝트를 진행하던 중 Mobile APP 모듈 개발이 끝나고, 워치에 포함될 Wear 모듈을 빌드하며 테스트를 해야할 일이 생겼다. 다른 워치 시리즈의 경우는 어떤지는 모르겠는데, 일단 내가 갖고 있던 갤럭시 워치6 44mm의 경우에는 컴퓨터와 직접적인 USB 연결을 통한 빌드 방식은 불가능하기 때문에 무선 디버깅이 필수적이었다. 근데 모바일 무선 디버깅은 QR 인식이나 pair code를 입력해서 진행하는데 워치에는 카메라는 당연히 없거니와 모바일엔 있던 pair code를 입력하는 그게 없었다. 그래서 직접 방법을 찾아서 어떻게 연결에 성공시켰고, 해당 방법을 자세히 기록해두고자 한다. 1. Wearable 개발자 도구 켜기 이 부분은 기존에 핸드폰에서 개발자 도구를 켜는 방식이랑 .. Dev/Android 2024. 5. 15. [네트워크] Day 11 서버 서버 OS는 멀티태스크 혹은 멀티스레드라는 기능으로 다수의 프로그램을 동시에 함께 작동한다. 멀티 태스크는 OS가 갖추고 있는 기능의 하나로, 복수의 태스크(프로그램)을 동시에 함께 실행하는 기능을 말한다. 하나의 프로세서는 어떤 시점에서 하나의 태스크만 실행할 수 있지만, 단시간에 태스크를 전환하면서 실행하므로 동시에 실행하는 것처럼 보인다. OS의 종류에 따라 멀티프로세스라고도 불린다. 멀티스레드는 멀티태스크와 같이 복수의 스레드를 동시에 실행하는 기능을 말하고, 멀티태스크와의 차이점은 태스크와 스레드의 차이이다. OS 내부에서 태스크는 각각 별도의 프로그램으로 취급되지만, 스레드는 한 개의 프로그램 속을 몇 부분으로 나눈 것으로 취급한다. 이 방법은 클라이언트가 접속했을 때 새로 프로그램을 기.. Dev/CS 2023. 12. 30. [네트워크] Day 10 방화벽 방화벽은 미리 정의된 보안 규칙에 기반하여 들어오고 나가는 네트워크 트래픽을 모니터링하고 제어하는 네트워크 보안 시스템이다. 방화벽은 신뢰할 수 있는 내부 네트워크와 신뢰할 수 없는 외부 네트워크 사이에 장벽을 구성하는 것을 의미한다. 서로 다른 네트워크를 지나는 데이터를 허용하거나 거부하는 하드웨어나 소프트웨어 장치이다. 네트워크 관리자의 입장에서 높은 신뢰도를 갖는 구간은 내부 네트워크 구간이라 하고, 낮은 신뢰도를 갖는 구간을 인터넷 구간 또는 외부 네트워크 구간이라고 한다. 초창기 방화벽은 패킷 자체만을 보고 정책에 따라 허용 또는 거부를 결정했으며, 이 떄의 방화벽을 1세대 방화벽이라 한다. 방화벽 내부에서 상태(세션)을 관리하지 않는 기본 형태의 방화벽이며, 이 방화벽은 특정한 IP를 .. Dev/CS 2023. 12. 22. [네트워크] Day 9 인터넷 ADSL 모뎀에서 전기 신호로 변환된 셀은 스플리터라는 장치로 들어가고, ADSL 신호는 여기서 음성 신호와 섞여 전화 회선에 함께 흘러나간다. 스플리터는 전화 회선에서 신호가 들어온 경우, 전화 음성 신호와 ADSL의 신호를 나누는 역할을 한다. ADSL의 높은 주파수를 차단하여 전화기에는 전화 신호가 흐르게, ADSL 모뎀에는 원래 신호가 그대로 흐르게끔 한다. ADSL 모뎀 내부에는 사용 주파수 범위 외의 주파수는 차단하기 때문에, 음성 신호를 미리 스플리터가 차단할 필요가 없다. 전화 케이블을 통해 전화국에 도착한 신호가 배선반과 스플리터를 통과하여 DSLAM에 도착하면 전기 신호가 디지털 데이터의 셀로 복원된다. DSLAM이 신호의 파형을 읽어 진폭과 위상을 조사하고, 이것이 어느 비트 .. Dev/CS 2023. 12. 16. [네트워크] Day 8 라우터 라우터는 기본 동작 외에 주소 변환과 패킷 필터링 기능을 추가적으로 가지고 있다. 우선 주소 변환은 인터넷의 보급이 빨라지면서 개개인의 주소가 늘어나게 되면 고유한 주소가 전부 고갈될 수 있다는 예측으로부터 시작되었다. 주소변환은 사내와 같은 환경에서 사내의 기기에 할당되는 주소는 다른 회사의 주소와 중복되어도 다른 네트워크를 갖추고 있어 문제가 되지 않는다는 성질을 이용했고, 특정 주소를 사내용으로 사용한다는 규칙을 세웠다. 이러한 규칙에 기초한 사내용 주소는 프라이빗 주소라 하며, 이전에 사용하던 고유한 주소는 글로벌 주소라 한다. 프라이빗 주소 규칙은 사내에서 사용하는 것은 특정 범위 내로 한정한다는 것이다. 단 이 과정에서 사내에서의 패킷 전송을 위해 사내에서의 주소 중복은 피해야 한다. .. Dev/CS 2023. 12. 13. [네트워크] Day 6 리피터 허브 LAN 어댑터의 PHY(MAU) 회로에서 전기 신호로 형태를 바꾼 패킷은 트위스트 페어 케이블(꼰 선쌍)에 들어가게 된다. 이더넷 신호는 플러스와 마이너스의 전압이므로 LAN 어댑터의 PHY(MAU) 회로의 플러스와 마이너스 신호 단자에서 신호가 나오는 형태이다. PHY(MAU) 회로에서 나온 신호는 RJ-45 커넥터와 연결되어 케이블을 통해 전기 신호가 전달된다. LAN 케이블로 사용하는 트위스트 페어 케이블은 신호선을 꼬아서 잡음을 억제한다. 케이블 외부로부터 발생하는 전자파에 의해 발생한 전류가 상쇄되어 잡음에 의한 전류가 약해진다. 또한 신호선을 꼬는 간격을 약간씩 다르게 하여 신호선 내의 잡음의 영향인 크로스토크를 감소시킨다. 신호가 리피터 허브에 도달하면 LAN 전체에 신호가 흩어.. Dev/CS 2023. 12. 6. [네트워크] Day 5 패킷 이더넷의 원형은 수신처의 정보가 맨 앞에 담긴 신호를 연결된 모든 컴퓨터에게 전달하고, 해당되는 기기는 패킷을 수신하고 나머지는 패킷을 폐기하는 형식이다. 이 후 스위칭 허브를 사용한 이더넷의 형태가 나타났으며, 기존의 전원에게 신호를 보내는 방식에서 수신처 MAC 주소를 나타내는 부분에만 신호를 전달하는 형태로 변경되었다. MAC 헤더까지 붙은 패킷은 LAN 어댑터에게 전달되고, 패킷은 디지털 신호에서 전기 혹은 빛 신호로 변환되어 네트워크 케이블에 송출된다. LAN 어댑터는 연결 후 하드웨어 초기화 작업과 이더넷 송수신 동작을 제어하는 MAC 회로에 MAC 주소를 설정한다. LAN 드라이버는 IP 담당 부분으로부터 패킷을 전달받으면 LAN 어댑터의 버퍼 메모리에 복사한다. 복사를 마친 뒤 패킷 .. Dev/CS 2023. 12. 3. [네트워크] Day 4 서버 연결 종료 클라이언트 혹은 서버 어느 쪽이든 데이터 보내기를 완료한 쪽에서 연결 끊기 단계에 들어간다. 서버 측에서 연결 끊기 단계에 들어가는 경우, 서버측 어플리케이션이 먼저 Socket 라이브러리의 close를 호출한다. 서버 측의 프로토콜 스택은 TCP 헤더를 만들고, FIN 비트에 1을 설정하여 연결 끊기는 나타내는 정보를 담는다. 클라이언트가 FIN 비트가 1인 TCP 헤더를 받게 되면, 클라이언트는 패킷을 받았다는 사실 전달을 위한 ACK 번호를 서버에게 반송하고, 클라이언트는 read를 호출하여 서버가 보낸 데이터를 웹 어플리케이션에 전달하고 난 뒤, 마찬가지로 FIN 비트를 1로 설정한 TCP 헤더를 서버 측에 전달하고 서버 측은 그에 대한 ACK 번호 응답을 반송하게 된다. 패킷 패.. Dev/CS 2023. 11. 29. [네트워크] Day 3 서버 접속 서버 접속 동작의 첫 번째는 통신 상대와의 사이에 제어 정보를 주고받아 소켓에 필요한 정보를 기록하고 데이터 송수신이 가능한 상태로 만드는 것이다. 구체적인 예로는 클라이언트의 IP 주소나 포트 번호를 서버 측에 알리는 것이 해당된다. 제어 정보는 크게 두 가지로 나뉘어진다. 하나는 클라이언트와 서버가 통신을 절충하기 위해 주고 받는 제어 정보이고, 다른 하나는 프로토콜 스택의 동작을 제어하기 위한 정보이다. 클라이언트와 서버가 연락을 절충하기 위해 주고받는 제어 정보는 접속 동작 뿐만 아니라 데이터를 송수신하는 동작이나, 연결을 끊는 동작도 포함하여 통신 동작 전체에서 어떤 정보가 필요한지 TCP 프로토콜의 사양으로 규정하고 있다. 이 정보는 접속, 송수신, 연결 끊기 각 단계에서 전송되는 .. Dev/CS 2023. 11. 14. 이전 1 2 다음