반응형 전체 글378 안드로이드 Webp이용해 이미지 용량 줄이는 방법 앱의 용량을 줄이고 로딩속도를 늘이는데,코딩도 중요하지만 이미지 용량을 줄이는 것도 중요합니다.안드로이드 스튜디오를 이용하면,이미지 파일을 Webp로 전환하하여 용량을 크게 줄일 수 있는데요.오늘은 이 방법을 알아보겠습니다. 1. Webp 이미지 파일Webp는 Google에서 만든 이미지 파일형식입니다.안드로이드와 안드로이드 스튜디오에서도 사용이 가능한데요.사실 저희에게는 거창한 알고리즘 보다,png나 jpg보다 얼마나 사이즈를 줄일 수 있느냐가 중요한데요.약 70%까지도 줄일 수 있다고 합니다. 2. 손실 압축 방식과 무손실 압축 방식webp는 JPEG와 같은 손실압축방식과 PNG와 같은 무손실 압축방식을 모두 다 지원하는데요.API레벨 18이상에서는 PNG와 같은 무손실 압축과 투명배경 지원도 가능합.. 2024. 11. 15. RxJava CompositeDisposable의 clear()와 dispose()의 차이점 CompositeDisposable은 여러 Disposable 객체를 한 곳에서 관리할 수 있는,RxJava의 유용한 클래스입니다.이 CompositeDisposable에 dispose()함수를 사용하면,구독을 해제하고 관련리소스를 해제해 줍니다.dispose는 '처분하다', '처리하다'의 뜻을 가지고 있기도 하지요.그런데, clear()라는 메소드도 있습니다. 메소드 이름만 보면 둘 다 비슷한 의미를 가지고 있는 것 같은데,어떻게 다른 걸까요?오늘 글에서 보겠습니다. 1. dispose()dispose()는,현재 CompositeDisposable에 추가된 모든 Disposable을 해제하고, CompositeDisposable 자체도 해제하는 강력한 메소드입니다. 여기서 말하는 Disposable은.. 2024. 11. 15. 안드로이드 Splash Screen API 적용하기 21년도 구글에서 새로운 Splash Screen에 대해서 발표하였습니다.이제는 이를 적용하지 않는 Android12이상의 기기에서는,이중으로 Splash화면이 보여지고 있는데요.오늘은 SplashScreen 를 적용하는 방법에 대해 알아보겠습니다. 1. 하위 호환성 위한 라이브러리 설치새로운 SplashScreen은 Android 12버전부터만 적용가능합니다.따라서 그 이하의 기기에서의 호환성을 위해서는 아래의 라이브러리가 필요합니다.build.gradle에 아래 한 줄을 추가해 줍니다. implementation 'androidx.core:core-splashscreen:1.0.1' 2. 이미지 준비먼저 새로운 Splash화면을 적용할 이미지가 준비되어야 합니다.기존에 Splash이미지를 가지고.. 2024. 11. 15. Playstore 앱 제목 수정 요청 케이스 오랜만에 업데이트한 앱이 있었는데요.예전에는 무료 앱인 경우,유저들에게 어필하기 위해서 '무료'나 'Free'라는 단어를,제목에 넣었습니다. 그런데 오랜만에 앱을 업데이트해서 올렸더니,다음과 같이 수정하라고 메일이 날아왔습니다. 핵심은 며칠까지 수정해서 제출 안 하면,플레이스토어에서 앱을 삭제하겠다는 것입니다. 무거운 마음으로,Playstore에 접속해 보니,다행히 다음과 같이 가이드가 나와 있습니다.가격이나 프로모션을 나타내는 키워드를 사용하면 안 됩니다.이런 점은, 예전보다 구글이 많이 좋아진 것 같습니다. 바로 제목에 포함되어 있던 Free를 빼고,스토어 등록정보를 업데이트하였습니다. 날이 갈수록 구글스토어의 정책은 타이트해져 가고 있는데요.구글 플레이스토어에 앱 이름을 등록할 때,가.. 2024. 11. 8. RxJava fromAction()과 andThen() 으로 구현하는 순차적 실행 코드 오늘은 RxJava의 연산자인 Completable.fromAction()과 andThen() 연산자를 이용해서,순차적으로 실행이 보장되는 코드를 구현하는 방법을 정리하였습니다. 1. Completable.fromAction()1-1. Completable.fromAction()Completable.fromAction() 메서드는,주어진 Action을 실행하고,그 결과를 Completable 형태로 반환합니다. 본격적으로 이해하기 전에 이 메소드의 특징을 간단히 알아보겠습니다.Completable이 구독될 때까지 실행되지 않음.각 구독마다 Action이 새로 실행됨기본적으로 구독이 발생한 스레드에서 실행됨 ("subscribe()"를 호출한 스레드에서 실행)하지만 subscribeOn()을 통해 실행 .. 2024. 11. 8. RxJava first()와 single()의 차이 총정리 RxJava에서 Observable을 Single타입으로 변환할 수 있는 방법이 있는데요.바로 first()와 single()을 사용하는 것 입니다.오늘은 이 둘의 차이를 알아보고 적절하게 사용하는 방법에 대해 보겠습니다. 1. first()와 single의 차이RxJava의 Observable의 first()나 single()을 사용하면,하나의 아이템만을 구독할 수 있습니다. 이 둘을 표로 비교하면 다음과 같습니다. first()single()사용스트림의 첫 번째 항목만 필요할 때 사용정확히 하나의 항목만 방출되는지 확인하고, 그 항목을 방출(여러개 방출시 에러)에러처리비어있으면 NoSuchElementException발생 시킴비어있거나 둘 이상의 항목을 포함하면 에러를 발생 시킴완료 시점첫 번째 항.. 2024. 11. 4. RxJava concatMap 정리: flatMap과 비교하며 이해하기 비동기 병렬 처리는 성능 향상에 큰 도움이 되지만, 데이터의 처리 순서가 중요한 상황도 많습니다.예를 들어 데이터베이스 작업이나 파일 처리와 같이 순서가 중요한 작업에서는 순차적 처리가 필수적이지요.RxJava에서는 이러한 순차적 처리를 보장해주는 concatMap 연산자를 제공해 주는데요. 오늘은 이를 살펴보고,비동기 처리에 사용하는 flatMap과 비교하며 이해해 보겠습니다.1. concatMap 의 특징1-1. 순서보장과 순차적 실행concatMap은 실행순서에 있어서 다음과 같은 특징을 가지고 있습니다.원본 Observable의 항목 순서를 엄격히 유지원본 Observable에서 방출된 각 항목에 대해 생성된 Observable들을 순차적으로 실행이전 Observable이 완료된 후에만 다음 O.. 2024. 11. 3. RxJava flatMapCompletable 과 flatMap + ignoreElement 조합의 차이 이해하기 오늘은 RxJava에서 Completable을 방출해주도록 변환해주는 연산자인,flatMapCompletable과 flatMap + ignoreElement 조합의 차이에 대해서 알아보겠습니다. 1. flatMapCompletableflatMapCompletable은,Single이나 Observable의 각 항목을 Completable로 변환합니다. 여기서 말하는 Completable은,onComplete 혹은 onError 이벤트만 발생시키는,Observable 을 말합니다. Completable을 방출한다는 것은,flatMap을 통해서 작업을 한 후,반환되는 데이터가 필요하지 않다는 뜻 입니다.이런 종류의 작업으로는 데이터베이스에 저장하는 경우를 생각해 볼 수 있겠네요. Observable.just(.. 2024. 11. 2. Java 8의 메서드 참조(Method Reference) 문법 이해하기 오늘은 Java8의 메소드 참조 문법에 대해서 알아보겠습니다.이 문법은 RxJava에서도 사용가능한데,이를 사용하면 아주 간결한 표현이 가능해집니다. 1. 메소드 참조이미 이름이 있는 메서드를 람다 표현식으로 사용할 수 있게 해주는 문법입니다.메소드 참조 문법은 '클래스::메소드' 순서로 적어서 사용하는데요.예를 들어, String 클래스의 정적 메소드인 toUpperClass는 아래와 같이 사용할 수 있습니다. String::toUpperCase 그런데 잘 보면, 클래스와 메소드만 있고,인자로 사용되는 변수명 자체가 사라진 것을 볼 수 있습니다. 보통 람다식에서라면 아래와 같이 변수명이 하나 필요한데요.s -> s.toUpperCase() 메소드 참조를 이용하면,컴파일러가 컨텍스트를 통해,필요한 매개.. 2024. 11. 2. RxJava ignoreElements() 연산자에 대한 이해 오늘은 RxJava의 연산자 중,ignoreElements()에 대해서 알아보겠습니다. 1. ignoreElements()연산자 이름만 보면 이해하기가 쉬운데요.Observable 에서 흘러나오는,데이터를 모두 무시하는 연산자입니다. 그런데, 그냥 무시할꺼면 왜 사용할까요?흘러나오는 데이터가 필요없기 때문입니다.단순히 완료 되었는지, 또는 오류가 발생했는지만, 알고 싶을 때 사용합니다. ignroeElements()를 사용해 주면, 원래의 Observable이 Completable로 변환되는데요.Completable은,onComplete 또는 onError 이벤트만 발생시키는,특별한 유형의 Observable입니다. Observable numbers = Observable.range(1, 5);numbe.. 2024. 10. 30. Android Studio 에서 기억해야 하는 핵심 단축키 안드로이드 스튜디오를 사용할 때 코드사용에 큰 도움을 주는 단축키들이 많이 있습니다.이런 것들은 자주 사용하면서 기억해 두면 생산성이 높아지는데 큰 도움을 주는데요.이 글에서 정리해 보도록 하겠습니다.1. 선언 및 Usage 찾기 Cmd + B (Usage 찾기)해당 코드가 선언된 곳이나 사용된 곳을 찾도록 도와줍니다. 2. 관련 Action 보여주기Alt + Enter 예를 들어서, Kotlin에서 if문에서 return을 밖으로 꺼내는 것이나,expression body형태로 고칠 때, Action의 도움을 받아서 쉽게 코드를 수정할 수 있습니다. 예를 뿐만아니라, Import 되지 않은 클래스들 같은 경우에 바로 임포트 하는 옵션을 제공해 준다든지,하드코딩된 스트링 값에 대해서, String... 2024. 10. 17. 안드로이드 스튜디오에서 넘치는 글 개행하기: soft wrap 안드로이드 앱을 제작할 때,json파일을 불러와 사용하는 경우도 생기는데요.긴 텍스트가 포함된 JSON 데이터를 안드로이드 스튜디오에서 확인할 때,개발자들은 끊임없이 가로 스크롤을 해야 합니다.이로 인해 가독성이 떨어지고 오타를 찾기가 매우 어려워지죠. 이를 개선하려면, 안드로이드 스튜디오자체에서 개행을 할 수 있도록 해 주어야 하는데요.이를 'soft wrap' 혹은 'word wrap'이라고 합니다.오늘은 이를 안드로이드 스튜디오에서 설정하는 방법을 정리하겠습니다. 1. 설정먼저 안드로이드 스튜디오의 'Preferences'를 찾습니다.단축키는 아래와 같습니다.Command + ,(콤마) 2. Editor 나오는 좌측 네비게이션에서,"Editor > General"로 들어갑니다.그럼 아래와 같이.. 2024. 10. 10. CSS에서 VH, VW 와 %에 대한 이해 오늘은 CSS에서,상대적인 사이즈를 계산하도록 도와주는,VH, VW와 %에 대해서 정리해 보겠습니다. 1. VHVH는 Viewport Height 에 대한 약자입니다.현재 브라우저 창의 높이를 기준으로 하는 상대적인 단위인데요.1vh는 뷰포트 높이의 1%를 의미합니다.100vh라고 하면 뷰포트의 전체 높이와 같습니다. 예를 들어 아래와 같은 html이 있다고 가정해 보겠습니다. 전체 높이절반 높이 css를 아래와 같이 해주면 쉽게 전체 높이 또는 절반 높이에 대해서 그리는 것이 가능합니다. .full-height { height: 100vh; background-color: #f0f0f0;}.half-height { height: 50vh; background-color: #d0d.. 2024. 9. 17. FlexBox 로 구현하는 모던 CSS 테이블이나,float, position등을 이용한 CSS는,디자이너들의 복잡한 요구사항을 구현하는데 많은 어려움이 있었습니다.반응형이 기본이 되어버린 시대에,점점 더 구현이 어려워지게 되었는데요. 이러한 문제들을 해결하기 위한 방법으로,Flexbox가 등장하였고,2017년경부터는 대부분의 브라우저에서 지원을 하고 있습니다.오늘은 이 Flexbox에 대해서 정리해 보도록 하겠습니다. 1. FlexBoxFlexBox는 반응형 웹 디자인을 구현하거나, 복잡한 레이아웃을 간단하게 만드는 데 매우 유용한데요.컨테이너가 그 자식 요소들(flex items)의 크기와 순서를,동적으로 조정해 줄 수 있기 때문입니다. 블럭요소나 inline요소를 이용해 css를 구성하는 경우가 많은데요.하지만 flex로 모든 것을 구성.. 2024. 9. 17. NodeJS Handlebars 레이아웃 분리하기: Navigation과 Bottom 웹디자인을 적용할 때,모든 페이지마다 네비게이션과 bottom의 카피라이트 영역의 코드를 작성하는 것은,매우 비효율적인 방법입니다.그래서, 이러한 레이아웃 영역을 분리해서 코딩을 하게 되는데요.오늘은 NodeJS의 뷰템플릿엔진인 Handlebars를 사용할 때,Navigation과 Bottom영역등의 레이아웃을 분리하는 방법에 대해서 정리해 보겠습니다. 참고로 Handlebars에 대한 기본적인 사항은 아래 글을 참조해 주세요.>> Handlebars 사용방법의 모든 것: Nodejs 뷰 템플릿 엔진 1. 파일 구성 및 nodejs 설정1-1. 파일 구성직접 코딩 작업을 하기 전에,각각의 레이아웃들을 어떻게 폴더로 나누어서 저장하는지에 대해서 먼저 보겠습니다.handlebars의 파일들은 보통 '/vie.. 2024. 9. 16. 도메인 등록을 하기 전 알아야 하는 것들 # DNS 웹사이트 개설에는 도메인이 필수적입니다.도메인은 인터넷상의 주소로,등록을 통해 사용자들이 웹사이트에 접속할 수 있게 해 주는데요.오늘은 도메인이 어떤 것이고, 어떻게 웹사이트와 연결해 주는지 정리하겠습니다. 1. 도메인1-1. 도메인인터넷은 수많은 컴퓨터들이 서로 연결되어 있는 거대한 네트워크인데,각 컴퓨터는 인터넷에 연결되 있는 동안, 유일한 IP 주소를 가지도록 되어 있습니다. 이 때 IP주소들은 모두 숫자로 구성되어 있는데요.예를 들면, '192.0.2.1'과 같이요. 이런 주소는 기억하기가 너무 어렵습니다.그래서, 네트워크의 컴퓨터들의 구분은 이러한 숫자로 하되,사람들에게는 이에 매칭되는 기억하기 쉬운 이름을 사용할 수 있도록 하고 있는데요. '192.0.2.1'이라는 IP 주소 대신,'examp.. 2024. 9. 16. HTTP Header를 이용한 클라이언트 타입 확인 방법 인증 및 보안을 할 때는,디바이스의 특징에 따라서 다른 접근이 필요한 경우가 발생합니다.이럴 대, HTTP Header를 사용해서 클라이언트, 즉 디바이스의 타입을 구별할 수 있는데요.오늘은 HTTP Header를 이용한 클라이언트 타입 확인 방법을 알아보겠습니다. 1. User-Agent 헤더 활용하기User-Agent 헤더는 클라이언트의 브라우저, 운영 체제, 디바이스 등의 정보를 포함하기 때문에,이를 활용해서 클라이언트의 타입을 확인할 수 있습니다. const userAgent = req.headers['user-agent'];if (userAgent.includes('Mobile')) { // 모바일 디바이스} else if (userAgent.includes('Tablet')) { // 태블.. 2024. 9. 14. 실행중인 서버의 IP주소 알아내기: ifconfig Docker나 Docker-compose를 이용해서 컨테이너를 띄우거나,웹서버를 만들어서 실행시켰을 때,해당 서버의 ip 주소로 접속해, 잘 실행이 되었는지 알고 싶을 때가 있습니다. 오늘은 ip주소를 알아낼 수 있는 방법 2가지에 대해서 정리해 보겠습니다.ifconfig.me 서비스 사용하기 (외부서비스 사용)ifconfig 명령어 (리눅스 내부 명령어 사용) 1. ifconfig.me 서비스 사용하기1-1. ifconfig.meifconfig.me는 현재 사용 중인 네트워크의 공인 IP 주소를,빠르고 간단하게 확인할 수 있게 해주는 웹 서비스입니다.이 서비스를 이용해 서버의 터미널 창에서,다음 명령어로 쉽게 ip주소를 확인할 수 있습니다. curl ifconfig.me 위에서 사용된 'ifconfi.. 2024. 9. 14. 이전 1 2 3 4 ··· 21 다음