2026/04/01

오늘의 이야기

파이썬 및 데이터 계약으로 웹 스크래핑 파이프라인 구축

스크래핑



• 이 기사에서는 데이터 계약을 통합한 실용적인 종단 간 데이터 파이프라인 시연을 제시한다. 목표는 2023/24 시즌 프리미어리그 테이블 순위를 긁어내고 여러 단계를 거쳐 AWS S3 버킷에 데이터를 업로드하는 것이다.

• 파이프라인은 웹 스크래핑이 허용되는지 확인하고 스크래핑 봇을 사용하여 데이터를 추출하고 데이터를 변환하여 AWS S3에 로드하는 것을 포함한다. 데이터 계약은 데이터가 데이터 소비자의 기대에 부합하도록 하기 위해 활용된다.

• 데이터 출처는 프리미어리그 홈페이지이며, 셀레늄을 사용하여 데이터를 스크래핑한다. 데이터 계약은 추출 및 변환된 데이터에 대한 예상 스키마 및 데이터 품질 검사를 정의하는 데 사용된다.

• 파이프라인은 파이썬과 소다, 보토3, 판다, 요청 등 다양한 라이브러리를 사용하여 구현된다. 코드는 모듈로 구성되며 명확한 구조를 따릅니다.

• 결과는 데이터가 성공적으로 스크래핑, 변환 및 AWS S3에 로드됨을 보여준다. 파이프라인은 데이터 거버넌스를 개선하고 데이터 품질을 보장하는 데 데이터 계약을 사용하는 이점을 보여준다.

• 이 기사는 또한 웹사이트의 서비스 조건을 존중하는 것의 중요성과 추가 도구와 고려 사항이 있는 생산 환경에서 데이터 계약을 사용할 수 있는 가능성에 대해 논의한다.

https://levelup.gitconnected.com/create-a-web-scraping-pipeline-with-python-using-data-contracts-281a30440442

Create a web scraping pipeline with Python using data contracts

Add data quality to each source layer for quality in, quality out

levelup.gitconnected.com





오늘의 이야기


#billcorea #운동동아리관리앱
🏸スチーニーたち、バドミントン同好会必須アプリ登場!
👉マッチプレイ - スコア記録&試合相手を探す🎉
一人で、友達、同好会どこでもぴったりです! 🤝
バドミントン好きならぜひ使ってみてください

アプリショートカット👉 https://play.google.com/store/apps/details?id=com.billcorea.matchplay




오늘의 이야기

코틀린 코루틴 플로우와 안드로이드 서비스

천사표



• 이 글에서는 클라이언트 구성 요소(활동, 뷰 모델 등)와 서비스 간의 양방향 통신 메커니즘에 대한 구현을 제시합니다.

• 구현은 명령 패러다임과 달리 반응적 접근 방식을 취할 것입니다.

• 현대 응용 프로그램은 여러 가지 이유로 명령형 구현 대신 반응형 구현을 사용하는 경향이 있습니다.

• 구성 요소 간의 느슨한 결합: 구성 요소는 다른 구성 요소가 소비할 데이터를 생성할 뿐이며 데이터 소스는 소비자에 대한 지식이 없으며 그 반대의 경우도 마찬가지입니다.

• 구성 요소 간의 유일한 계약은 데이터 정의입니다.

• 구성 요소는 서로의 인스턴스가 필요하지 않으며 이상적으로는 다른 구성 요소 인터페이스에 의해 노출된 방법을 호출할 필요가 없습니다.

• 역방향 호환성에 대한 문제는 거의 없습니다.

https://blog.stackademic.com/kotlin-coroutine-flows-and-android-services-af665f2a9f8f

Kotlin Coroutine Flows and Android Services

A reactive approach to service communication

blog.stackademic.com





오늘의 이야기

Compose에서 스핀 휠 만들기

spin wheel




• 블리츠위에서 빙고, 솔리테어, 매치3, 풀 등의 클래식 게임을 플레이할 수 있는 애플리케이션을 개발하고 있습니다. 또한 무작위 보너스 금액과 같은 무작위 아이템이 있으므로 사용자에게 일종의 행운의 바퀴를 표시하고 싶었습니다.

• 안드로이드 앱은 전체 구성으로 되어 있습니다. 바퀴를 재창조하기 위해 라이브러리를 찾았지만 디자인이나 기술적인 측면에서 나에게 맞는 라이브러리는 없었습니다.

• https://github.com/commandiron/SpinWheelCompose에서 약간의 영감을 얻었지만 거의 모든 것을 다시 작업했습니다. 내 물레바퀴는 매개변수로 섹션 목록을 받아들여야 합니다. 각 섹션에는 브러시 배경이 있으며 섹션에는 컴포저블 그림이 있습니다. 이 구성 가능한 것은 섹션의 회전을 따라야 합니다. 단면이 거꾸로 되어 있으면 컴포지트도 거꾸로 되어 있어야 합니다.

• 내 물레바퀴는 다음과 같은 기능을 할 수 있어야 합니다.

• - 애니메이션 없이 특정 섹션으로 이동

• - 무기한 회전

• - 특정 섹션에서 부드럽게 멈출 수 있어야 합니다.

• 섹션을 만들어야 합니다. 구성에서는 끌어올리기라는 수식어 덕분에 호를 그리는 것이 쉽습니다(sweepAngle은 도 단위의 호 크기입니다). 그리고 함수 끌어올리기 아크: 박스(수식어 = 수식어.크기(200.dp).drawBehind {드로아크(브러시 = 브러시.수직 구배(listOf(color.Red, color.Yellow)startAngle = 0f, sweepAngle = 30f, useCenter = true,)}) {}} 좋아요, 이제 섹션을 상단으로 옮기고 중앙으로 이동해야 브러시를 올바르게 바르고 섹션 내용을 쉽게 배치할 수 있습니다.

• 시작각 = -90f - (sweepAngle / 2) 더 좋은데 제 붓이 전체 원에 적용되어 있어서 노란색이 보이지 않아요. 그래서 브러시를 반쯤 멈추라고 말해야 합니다. 이에 대한 파라미터가 있습니다. endY = 200.dp.toPx() /2f 야, 기대되는 결과가 있어.

• 이제 콘텐츠로 넘어갈 수 있습니다. 먼저 데이터 클래스에서 섹션을 설정합니다.

https://medium.com/voodoo-engineering/creating-a-spin-wheel-in-compose-b71d1b0c7b77

Creating a spin-wheel in Compose

Introduction

medium.com





오늘의 이야기


#스하리1000명프로젝트,
한국에서 길을 잃었나요? 한국어를 못하더라도 이 앱을 사용하면 쉽게 돌아다닐 수 있습니다.
귀하의 언어로 말하면 귀하의 언어로 번역, 검색 및 결과가 표시됩니다.
여행자에게 좋습니다! 영어, 일본어, 중국어, 베트남어 등 10개 이상의 언어를 지원합니다.
지금 사용해 보세요!
https://play.google.com/store/apps/details?id=com.billcoreatech.opdgang1127




2026/03/31

오늘의 이야기

Jetpack Compose에서 Jetpack Media3를 사용하여 미디어 플레이어 앱 구축

미디어 플레이어



• Jetpack Media3는 Android에서 미디어 플레이어 앱을 구축하기 위한 강력한 프레임워크를 제공하며, ExoPlayer는 플레이어 인터페이스의 기본 구현으로 사용됩니다.

• ExoPlayer는 플레이리스트 지원, 다양한 스트리밍 포맷, DRM 보호, 광고 삽입 등 비디오 및 오디오 재생을 위한 포괄적인 기능을 제공하여 개발 프로세스를 단순화합니다.

• 이 글은 Media3 ExoPlayer와 Jetpack Compose를 활용하여 알림 지원이 되는 기본 미디어 플레이어 앱을 만드는 과정을 안내해 드립니다.

• Media3는 다른 미디어나 미디어2 라이브러리와 어떻게 다른가요?

• Media3는 구성 요소 간의 커넥터가 필요하지 않기 때문에 다른 재생 라이브러리에서 눈에 띈다.

• Media3를 사용하면 미디어 세션 클래스는 ExoPlayer 및 MediaController와 같은 UI 구성 요소를 포함하여 플레이어 인터페이스를 구현하는 모든 클래스를 수락할 수 있다.

• 이 간소화된 접근 방식은 앱의 다른 부분 간의 상호 작용을 단순화하여 개발 프로세스를 훨씬 쉽게 만든다.

https://medium.com/@myofficework000/building-a-media-player-app-with-jetpack-media3-in-jetpack-compose-16ae8c35f955

Building a Media Player App with Jetpack Media3 in Jetpack compose

Jetpack Media3 offers a robust framework for building media player apps on Android, with ExoPlayer as the default implementation of the…

medium.com





오늘의 이야기

안드로이드: Hilt에서 Koin으로 마이그레이션

안드로이드



• 이 글에서는 의존성 주입(DI) 프레임워크를 훨씬 더 간단한 접근법으로 업그레이드하여 PokeAPI 프로젝트를 계속할 것입니다. 우리는 Hilt DI를 Koin으로 대체할 것입니다.

• Hilt는 코드 생성 및 주석을 통해 각 구성 요소에 종속성을 주입하여 큰 역할을 하지만, 개발자가 너무 많은 상용판과 코드 생성으로 인해 제어의 일부를 잃음에 따라 종속성을 해결하는 것은 매우 혼란스러운 프로세스가 됩니다.

• Koin은 코틀린 DSL(Domain-Specific-Language) 위에 구축되어 있으며 처리하기에 훨씬 간단한 프레임워크로 나타납니다.

• 또한 Dagger/Hilt와 달리 Koin은 빌드 타임 대신 실행 타임에서 종속성을 해결합니다.

• 이제 프레임워크를 변경하여 프로젝트를 변경하기 시작하겠습니다.

• 그래들 파일을 구성하는 것부터 시작하겠습니다.

• 먼저 모든 Hilt 종속성을 제거하고 이 종속성으로 대체하고 동기화합니다.

https://blog.stackademic.com/android-migrating-hilt-to-koin-0c1012104780

Android: Migrating Hilt to Koin

In this article we will continue our PokeAPI project by upgrading our Dependency Injection(DI) framework into a much simpler approach. We…

blog.stackademic.com





오늘의 이야기



#스치니1000프로젝트 #재미 #행운기원 #Compose #Firebase

🎯 야 너 토요일마다 로또 확인하냐?
나도 맨날 "혹시나~" 하면서 봤거든 ㅋㅋ

근데 이제는 그냥 안 해
AI한테 맡겼어 🤖✨

그것도 구글 Gemini로다가!

그래서 앱 하나 만들었지
👉 "로또 예상번호 by Gemini" 🎱

AI가 분석해서 번호 딱! 뽑아줌
그냥 보고 참고만 하면 됨

재미로 해도 좋고…
혹시 모르는 거잖아? 😏


https://play.google.com/store/apps/details?id=com.billcorea.gptlotto1127




오늘의 이야기

제트팩 구성의 상태 관리: ViewModel vs Remember function

안즈로이드



• 상태 관리는 동적이고 반응성이 좋은 사용자 인터페이스를 만들기 위해 제트팩 컴포즈에서 중요합니다. 뷰모델에 상태를 저장하는 것과 뷰 내에서 기억 함수를 사용하는 것 사이의 선택은 딜레마를 제시한다.

• 전통적으로 MVVM과 MVI 패턴은 뷰모델이 로직과 상태를 처리하는 반면 뷰 계층은 프레젠테이션과 사용자 상호 작용에 중점을 두는 별도의 문제를 처리한다.

• 제트팩 컴포즈의 반응형 UI 패러다임과 기억 기능은 스크롤 위치와 같은 일시적인 UI 상태를 관리하기 위한 대안을 제공하면서 이러한 분리에 도전한다.

• 스크롤 상태에 대한 기억을 사용하면 코드가 단순화되지만 뷰모델과 뷰 사이의 분리가 흐려져 MVI 아키텍처가 잠재적으로 복잡해질 수 있습니다.

• MVI 원칙을 엄격하게 준수하면 스크롤 위치를 포함한 모든 상태가 뷰모델에 의해 관리되어야 한다고 지시한다.

• 그러나 특정 UI 상태 유형에 대한 기억의 실용성과 효율성을 무시할 수 없다.

• 이 기사는 UI 상호 작용이 MVI 아키텍처 내에서 이 상태를 효과적으로 수정할 수 있는 방법을 설명하는 뷰모델이 하단 시트 상태를 유지하는 접근법을 탐구한다.

https://blog.stackademic.com/state-management-in-jetpack-compose-viewmodel-vs-remember-function-5fc78cdec92f

State Management in Jetpack Compose: ViewModel vs. Remember Function

Have you ever found yourself pondering the best practices for managing state in your applications? With the advent of Jetpack Compose, how…

blog.stackademic.com





오늘의 이야기


#스하리1000명프로젝트

스치니들!
내가 만든 이 앱은, 내 폰에 오는 알림 중에서 중요한 키워드가 있는 경우
등록해둔 친구에게 자동으로 전달해주는 앱이야 📲

예를 들어, 카드 결제 알림을 와이프나 자녀에게 보내주거나
이번 달 지출을 달력처럼 확인할 수도 있어!

앱을 함께 쓰려면 친구도 설치 & 로그인해줘야 해.
그래야 친구 목록에서 서로 선택할 수 있으니까~
서로 써보고 불편한 점 있으면 알려줘 🙏

👉 https://play.google.com/store/apps/details?id=com.nari.notify2kakao





오늘의 이야기

제트팩 컴포즈와 AES 암호화를 사용한 생체 인증 구현

생체인증



• 안드로이드용 최신 UI 툴킷인 제트팩 컴포즈와 AES 암호화를 사용하여 생체 인증을 구현하는 방법을 설명합니다.

• 생체 인증은 지문, 얼굴 특징 또는 홍채 패턴과 같은 고유한 생물학적 특성을 활용하여 신원을 검증하는 방법입니다.

• AES 암호화는 민감한 데이터를 보호하는 데 사용되는 강력한 암호화 알고리즘입니다.

• 생체 인증을 사용할 때 암호 솔루션이 필수적인 이유는 데이터 보호, 키 관리, 규정 준수 요건, 공격에 대한 방어 때문입니다.

• 본 블로그 게시물에서는 지문 인증을 구현하는 데 초점을 맞춥니다.

https://blog.canopas.com/how-to-implement-biometric-authentication-with-jetpack-compose-and-aes-encryption-1b72cfccf4d4

How to Implement Biometric Authentication with Jetpack Compose and AES Encryption

Exciting News! Our blog has a new Home! 🚀

blog.canopas.com





오늘의 이야기

#스하리1000명프로젝트, Perso in Corea? Anche se non parli coreano, questa app ti aiuta a muoverti facilmente. Basta parlare la tua lingua: traduc...