반응형 전체 글374 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. tailwind css 와 handlebars 함께 사용하기 오늘은 NodeJS에서 많이 사용하는 handlebars 뷰템플릿 엔진과,tailwind css를 함께 사용하는 방법에 대해 알아보겠습니다. 1. tailwind와 handlebars의 설치tailwind는 개발환경에서 css작성 후,최종적으로 css로 컴파일 된 파일만,production 레벨에서 사용하게 됩니다. 따라서, Production레벨에서는 tailwindcss모듈을 설치할 필요가 없습니다.그래서 설치할 때, 개발 의존성으로 -dev를 붙여줍니다. npm install tailwindcss --save-dev handlebars는 설치와 설정이 조금 더 복잡한데요.이에 관해서는 아래 글을 참조해 주세요.>> Handlebars 사용방법의 모든 것: Nodejs 뷰 템플릿 엔진 2. tail.. 2024. 9. 13. Docker Compose로 NodeJS, Nginx 설치 및 실행하기 # YAML Docker Compose 는 여러 컨테이너로 구성된 애플리케이션을 정의하고 관리하게 해주는데요.오늘은 Docker Compose를 이용해서,NodeJS, NGINX를 설치하고 서버를 실행하는 방법을 정리해 보도록 하겠습니다. 이 글에서는 NGINX나 Docker의 기초에 대해서는 다루지 않고 있는데요.Docker에 관한 글은 아래 글을 참조해 주시구요.>> Docker와 DockerHub를 이용한 배포 와 실행 # NodeJS Dockerfile NGINX에 관한 글은 아래 글을 참조해 주세요.>> NGINX에 대한 정리 #Upstream #Reverse Proxy #Proxy_pass 1. Docker Compose하나의 프로덕트를 서버에서 실행하려면,여러개의 Docker 컨테이너가 필요합니다.가장 .. 2024. 9. 13. Git 사용방법 총정리 하기 # github branch stash 오늘은 Git을 사용하는 방법에 대해서 총정리해 보도록 하겠습니다.이 글은 Git을 VSCode 나 Android Studio 혹은 Source Tree같은 IDE나 그래픽 버전관리프로그램의 도움없이도,기본적인 기능들을 다룰 수 있도록 하는 것을 목표로 작성하였습니다. 1. Git의 설치1-1. MacGit의 설치는 MacOS를 기준으로 Homebrew 를 사용하면 편리한데요.Homebrew가 설치되어 있지 않다면, 터미널에서 아래 명령어로 Homebrew를 설치해주면 됩니다. /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 이제 설치된 homebrew를 이용해서 아래 명령어로 gi.. 2024. 9. 13. 전개 연산자(Spread Operator) 정리 오늘은 Javascript의 전개연산자(Spread Operator)에 대해서 정리해 보겠습니다. 1. 전개연산자...는 전개 연산자(Spread Operator)로 ES6부터 도입되었는데요.배열이나 객체를 펼쳐서(확장해서),다른 배열이나 객체로 복사하거나 병합할 때 사용합니다.코드를 더 간결하게 해주고 가독성을 높여줍니다. 1-1. 배열병합전개연산자를 이용한 배열병합을 잘 이해하도록 도와주는 코드를 보겠습니다.아래의 arr1과 arr2는 전개 연산자인 '...'을 이용해서,아래와 같이 conbinedArray라는 병합된 array를 쉽게 만들어 낼 수 있습니다. const arr1 = [1, 2, 3];const arr2 = [4, 5, 6];const combinedArray = [...arr1, ... 2024. 9. 12. 데이터베이스 시간 기록: created_at 과 updated_at 자동 업데이트 하기 SQL문을 이용하면, 데이터베이스의 열이 업데이트 되면, 갱신된 현재의 시간으로 데이터가 바뀌도록 쉽게 할 수 있는데요. 오늘은 이것을 NodeJS과 MySQL을 이용해 구현해 보겠습니다. 1. 데이터베이스 생성 쿼리 먼저 student라는 학생에 관한 데이터를 다루는 테이블을 생성하는 SQL문을 생성하겠습니다. 주의해서 볼 부분이 'created_at'과 'updated_at'인데요. 'DEFAULT CURRENT_TIMESTAMP': 값이 지정되지 않은 경우, 현재 시간이 기본값으로 설정 됨 'ON UPDATE CURRENT_TIMESTAMP': 열을 UPDATE 할 때 해당 열에 현재 시간을 설정함. 특정 열의 값을 업데이트할 때마다 해당 열의 값이 현재 시간으로 자동으로 갱신됨. 'ON UPDAT.. 2024. 4. 13. 이전 1 2 3 4 ··· 21 다음