프로그래밍 381

비트코인(Bitcoin)으로 알아보는 암호화폐의 원리 - 작업증명(Proof of work)

신뢰! 신뢰! 신뢰! 비트코인은 그저 데이터에 불과한데 어떻게 화폐로서의 기능을 할 수 있을까? 화폐는 기본적으로 신뢰를 바탕으로 만들어졌다. 통용되는 종이 화폐도 신뢰성있는 기관인 중앙 정부가 인정했기때문에 가치를 가진다. 신뢰 없이는 5만원권 뭉치도 그저 이쁜 종이쪼가리에 불과하다. 비트코인은 기존의 화폐처럼 발행과 결제가 중앙 장부나 은행, 카드사 등 특정 기관에 집중되어있지 않고, 개개인에 분산되어있다. 사기꾼 천지인 이 세상에서 어떻게 서로가 서로를 믿게 할까? 최초의 암호화폐인 비트코인은 암호화와 블록체인을 통해 이러한 탈중앙화(Decentralized)된 금융거래를 가능케 했다. 유튜브 3Blue1Brown의 라는 영상 내용을 바탕으로 비트코인이 했던 고민들을 같이 살펴보자. 앨리스, 밥, ..

[안드로이드] BottomSheetBehavior로 차이 카드 앱 처럼 UI 구성하기

어? 이거 좋다! 차이카드에는 올려서 부스트하기 기능이있다. 아래에서부터 핸들을 쭉 땅겨서 부스트가 작동하도록하는 것인데... 플레이오에서 레벨업 페이지와 내역페이지가 리스트로 죽 늘어진 레이아웃을 보고...차이처럼 구성해보는 것은 어떨까 건의드렸다. 성능상의 문제가 있기도 했지만, 작은 폰을 쓰는 유저들은 아래에 내역이 있는지 조차 모를 확률도 있었다. (ㅋㅋㅋ) 호기롭게 건의했지만 혼자서 공부하다보니 저런 레이아웃이 어떻게 구현되어있고, 뭐라고 검색해야 할지도 몰랐는데 해답은~ BottomSheet이었다. 그동안 BottomSheet은 BottomSheetDialog로만 이용해봐서 일반 뷰에서 쓰는건 처음이었는데, behavior만 설정해주면 간단히 멋진 레이아웃을 구현할 수 있었다. 다음 화면과 같..

adb에서 쉽게 딥링크(Deeplink) 열기 / 인텐트(Intent) 전송

딥링크 열기 adb shell am start -d "rally://accounts/Checking" -a android.intent.action.VIEW Action을 가진 액티비티 실행 -a 옵션 뒤의 액션을 가지고 있는 액티비티가 실행된다. adb shell am start -a android.intent.action.MAIN 패키지를 지정한 실행 -p 옵션 뒤에 패키지를 설정하면 해당 패키지에서 실행된다. adb shell am start -a android.intent.action.MAIN -p com.example.app 액티비티 실행 -n 옵션 뒤에 컴포넌트 이름을 적어준다. adb shell am start -a android.intent.action.MAIN -n com.example.a..

Redis의 개념과 활용법

Redis란? Redis는 인 메모리 키 값 데이터 구조 스토어다. 일반 Database는 데이터를 디스크에 저장하지만, 레디스는 데이터를 서버의 주 메모리에 저장한다. 그렇기 때문에 전통적 Database보다 데이터 접근 시간이 약 1ms 정도로 월등히 빠르며, 다양한 형식의 데이터를 저장할 수 있다. 대표적으로는 List, Set, Hash, Bitmap 등이 있다. 메모리에 저장하다보니 데이터가 휘발하지 않을까?라는 생각이 들 수도 있지만, 예기치 못한 셧다운 등 필요한 경우 Snapshot을 떠서 저장할 수 있다. Redis의 활용법 캐시(Caching) 캐시는 데이터의 접근시간을 줄이기 위해 가져온 데이터를 복사해두는 임시 공간이다. Redis는 앞서 설명했듯 메모리에 데이터가 저장되어있어 캐시..

[안드로이드] VideoView 소리없이 비디오 재생하기

사용자의 폰에서 돌아가는 다른 미디어 플레이에 지장을 주지 않으면서 현재 비디오 뷰의 Volume을 줄여서 재생해야하는 경우가 있다. MediaPlayer.setVolume(0F, 0F)를 하게되면 볼륨은 줄여지지만, 동시에 미디어 볼륨에도 지장을 주므로 VideoView 내에서 AudioFocus를 AUDIOFOCUS_NONE으로 설정해주는 작업이 필요하다. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // MusicPlayer를 방해하지 않음 setAudioFocusRequest(AudioManager.AUDIOFOCUS_NONE) }

[Nginx] 리버스 프록시로 사용하기 (백업 서버 설정, 로드 밸런싱)

Upstream Nginx를 리버스 프록시로 이용하기 위해서는 nginx의 내장 모듈 중의 하나인 upstream 모듈을 사용하면 된다. upstream 모듈은 proxy_pass등의 지시자에 의해 참조되며 nginx가 받은 요청들을 처리할 서버의 집합을 정의할 수 있다. *리버스 프록시가 무엇인가요? 가정 lou-server1.com, lou-server-2.com, lou-server-3.com이라는 3개의 서버에 각각 웹 애플리케이션이 동작하고 있다고 가정한다. upstream 지시자 바로 뒤의 'backend' 부분은 서버 집합의 그룹명이다. 나중에 proxy_pass에서 이 이름을 가지고 참조 할 수 있다. upstream 블록안에는 현재 동작중인 서버 목록이 들어가게 된다. server 지시자..

DOMContentLoaded와 jQuery document.ready()의 중요한 차이점

포스팅을 보다보면 javascript의 DOMContentLoaded와 jQuery의 ready()가 동일하다고 설명되어있다. 결론부터 말하자면, 동일한 시점에 Trigger되는 것은 맞지만 이들의 작동방식에는 중요한 차이점이 있다. document.addEventListeners('DOMContentLoaded', function () {}) $(document).ready(function () {}) DOM이 준비되어 조작해도 되는 상태가 되면, ready()나 DOMContentLoaded가 호출 된다. 하지만 DOMContentLoaded의 경우 addListener를 한 시점이 이미 이벤트가 일어난 시점(DOM이 준비되어버린)인 경우에는 호출되지 않는다. 반면에, ready()의 경우에는 이미 ..

Ngnix의 개념과 작동방식 정리 (feat. Apache)

Nginx의 등장 배경: Apache 의 문제점 Apache 웹 서버에 대해서 들어본적이 있는가? 아주 어렸을때부터 수차례...(게임에 관심이 많았던 건지) 아파치 톰캣 서버 어쩌고 저쩌고를 많이 본 기억이있다. Apache는 Nginx의 등장 전 까지 가장 널리 쓰이던 웹 서버다. 웹 서버는 World Wide Web에서 만들어진 클라이언트 요청을 서비스하기위해 HTTP나 그 이외의 프로토콜(HTTPS/SMTP/FTP...)을 사용하는 SW/HW다. 하드웨어로서의 웹 서버는 웹 서버가 설치되어있는 컴퓨터를 의미하며, 소프트웨어로서의 웹 서버는 앞서말한 기능을 제공하는 컴퓨터 프로그램을 말한다. Apache, Nginx, IIS 등이 있다. 대부분은 웹 페이지 컨텐츠를 제공하는 역할을 한다. Nginx는..

[Okhttp3] Expected URL scheme 'http' or 'https' but no colon was found 해결방법

Fatal Exception: java.lang.IllegalArgumentException Expected URL scheme 'http' or 'https' but no colon was found okhttp3.HttpUrl$Builder.parse$okhttp (HttpUrl.java:1260) okhttp3.HttpUrl$Companion.get (HttpUrl.java:1633) okhttp3.Request$Builder.url (Request.java:184) okhttp3.Cache$Entry.response (Cache.java:641) okhttp3.Cache.get$okhttp (Cache.java:183) okhttp3.internal.cache.CacheInterceptor.int..

맥에서 ANSI 인코딩 txt 파일 읽는 간단한 해결법

Windows에서 ANSI 인코딩으로 저장된 메모장 txt 파일을 맥에서 읽어들이려하면 다음과 같은 문구가 뜨면서 열리지 않을 것이다. 문서 ~을(를) 열 수 없습니다. 유니코드 (UTF-8) 텍스트 인코딩이 적용되지 않습니다. 파일이 다른 텍스트 인코딩을 사용하여 저장되었거나, 텍스트 파일이 아닐 수 있습니다. 해결방법은...간단하다. 크롬 브라우저를 열어서 해당 txt 파일을 끌어다 놓으면 파일이 열린다. ㅋㅋㅋ 그대로 글자를 긁어서 저장하면 완성! Converter같은걸 찾고 있었는데...너무 어렵게 생각한듯 하다.