본문 바로가기
반응형

분류 전체보기379

안드로이드 Cache 디렉토리 이용해 xml 화면 공유하기 오늘은 안드로이드 Cache 디렉토리를 이용해,xml로 구성된 화면을,이미지 파일로 생성해 공유하는 방법을 보겠습니다. 구체적인 구현방법을 알아보기 전에,이미지 공유를 위해서,안드로이드 저장공간 중,왜 Cache 디렉토리를 이용해야 하는지부터,알아보겠습니다. 1. 안드로이드 Cache를 사용하는 이유저장소에 대한 권한은 계속 바뀌어 왔습니다.프라이버시를 강화한 것이라고 하지만,안드로이드 버전별 코드 파편화가 심해지는 현상 때문에,구현하는 개발자 입장에서 테스트해야할 기기도 많아졌고,동적권한 관련해서 코드도 복잡해 졌습니다. 그래서 저는 항상 권한으로부터 자유로운 공간들을 사용할 수 없는지부터 판단합니다.이러한 공간에서 해결할 수 없는 저장공간에 대해서만,복잡하게 파편화된 코드를 사용하는 것 이지요. 이렇.. 2024. 12. 10.
안드로이드 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.
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.
Docker 컨테이너 내부의 파일 복사하기: cp 명령어 사용법 오늘은 Docker 컨테이너 내부에서 특정한 파일을 복사하는 방법에 대해서 정리해 보겠습니다. 1. cp 명령어 이용한 복사 Docker에는 이러한 파일 복사를 위한 명령어가 존재합니다. 복사를 하기 위해서는 아래의 사항들을 알고 있어야 합니다. 복사할 파일과 저장할 파일의 위치 컨테이너 이름 or 컨테이너 id A. 컨테이너 이름을 이용한 복사 컨테이너 이름을 이용한 cp 명령어 사용방법은 아래와 같습니다. 이 때 명령어 실행은 컨테이너 내부가 아니라, 바깥에서 실행해 주어야 합니다. docker cp :/usr/src/app/db/app-db.db ~/Downloads/ 2024. 4. 12.
Linux 크론탭으로 작업 예약 마스터하기: Crontab 스케쥴링 특정한 시간에 스크립트로 작성한 작업들을 실행시키도록 하려고 할 때, 필요한 것이 리눅스의 크론탭인데요. 오늘은 이것을 활용하여 작업을 예약하는 방법에 대해서 정리해 보겠습니다. 1. Crontab(크론탭) 1-1. Crontab crontab은 유닉스 기반 시스템에서 반복적인 작업을 스케줄링하기 위해 사용되는 유틸리티입니다. crontab의 이름은 "cron table"의 줄임말인데요. 시간 기반 작업 스케줄러인 cron이 참조하는 설정 파일을 관리합니다. 쉽게 말해서 Crontab은 특정 시간, 날짜, 간격에 자동으로 스크립트나 프로그램을 실행하도록 스케줄을 설정해서, 미래의 반복적인 작업을 자동화 할 수 있게 도와줍니다. 1-2. 스크립트 크론탭을 정해진 시간에 실행하기 위해서, 실행할 스크립트를 .. 2024. 4. 10.
linux 환경변수 설정 방법 정리: Bash 와 Z Shell PATH 및 기본 에디터 변경(Nano) 환경변수에 PATH를 추가하거나, 기본에디터를 nano로 바꾸고 싶을 때, 환경변수를 정의해 놓고 사용하면 편리한데요. linux 에서 환경변수를 설정하는 방법에 대해서 정리해 보겠습니다.  1. 현재의 환경변수 값 알아보기 현재 linux에서 환경변수 값들을 알아보기 위해서는 아래 명령어를 입력해 주면 됩니다. 아래 명령어는 현재 시스템에서 설정된 모든 환경 변수의 이름과 해당 값들을 보여줍니다. printenv 'printenv' 명령어 볼 수 있는 환경변수 값들은, 모두 'echo $환경변수'로 개별적으로 확인해 볼 수 있습니다. 환경변수 값 중 PATH에 대한 값을 보고싶다면 아래 명령어를 사용합니다. echo $PATH 2.기본 쉘 확인하기 기본 쉘을 확인하는 명령어는 다음과 같습니다. ech.. 2024. 4. 9.
async 와 await 로 작성하는 읽기쉬운 비동기코드 # forEach Javascript에서 비동기를 사용할 때 Promise라는 API를 정리해 보았었는데요. 오늘은 또다른 API인 aysnc와 await에 대해서 정리해 보도록 하겠습니다. 1. async와 await Async와 await는 Javascript에서 비동기 처리를 쉽게 할 수 있게 해줍니다. 비동기 코드를 동기 코드처럼 읽고 쓰기 쉽게 만들어 주기 때문인데요. 콜백의 연쇄로 인한 복잡성을 피하고, 코드를 보다 직관적으로 만들 수 있게 도와줍니다. Promise에 대한 기본적인 이해가 있다면, async와 await의 개념을 쉽게 받아들일 수 있습니다. Promise에 대해서는 아래 글을 참조해 주세요. >> Javascript의 Promise를 알아보자 #ES6 1-1. Code를 통한 Promise 와.. 2024. 4. 6.
Handlebars 사용방법의 모든 것: Nodejs 뷰 템플릿 엔진 NodeJS와 함께 널리 사용하는 뷰템플릿 엔진인 Handlebars에 대해 정리하겠습니다. 1. Handlebars Handlebars는 JavaScript 템플릿 엔진입니다. 웹 애플리케이션에서 동적으로 HTML을 생성하는 데 사용되는데요. 중괄호'{{ }}'를 사용하여 템플릿 내에 변수, 조건문, 반복문 등을 삽입해 줍니다. HTML형식을 해치지 않으면서도, 서버에서 데이터를 가져와 동적인 HTML을 생성하는 데 유용합니다. 2. Handlebars 설치 아래는 npm을 이용해서, handlebars의 모듈을 설치하는 코드입니다. npm install express-handlebars --save 3. 중괄호 문법 handlebars 를 설정하고 사용하기 전에, 핵심이 되는 중괄호 문법을 보겠습니다.. 2024. 4. 2.
Javascript Spread 문법(...): 코드를 간결하게 만드는 비법 오늘은 Javascript의 spread 문법에 대해서 정리해 보겠습니다. 1. Spread(...)문법 이 문법은 ES6(ES2015)에 도입되었는데요. Spread 문법은 ... (세 개의 점)을 사용해 배열, 객체, 혹은 함수의 인자 등을 '펼쳐서(spread out)', 사용하게 해 주는데요. 이 점3개가 요소가 펼쳐짐을 의미합니다. 객체나 배열을 분해해 펼쳐서 사용하게 해주는 유용한 문법이지요. Spread 문법(...)을 이용하면, 배열이나 객체를 쉽게 조작할 수 있게 해주기 때문에, 코드가 간결해지고, 데이터 처리가 유연해 집니다. 함수 인자를 다루는 상황에서도 활용도가 매우 높구요. 2. Spread(...) 문법 사용 예 1-1. 배열 합치기 코드를 보면서 Spread 문법을 이해해 보겠.. 2024. 2. 17.