Backblaze + 클라우드플레어를 이용한 서버 비용 절약 방법

AWS S3 + 클라우드플레어를 사용하면 사용자와 클라우드플레어 CDN간의 대역폭 비용은 무료이지만 여전히 S3에서 클라우드플레어로 전송되는 대역폭에 대한 비용을 지불해야합니다. 즉, 클라우드플레어 CDN에서 캐시 미스(cache miss)가 많이 발생해서 오리진까지 요청이 많이 가면 오리진까지 도달한 해당 요청/응답에 사용된 대역폭 비용을 AWS에 지불해야 한다는 뜻 입니다. 반대로 말해 클라우드플레어에서 캐시 히트(cahce hit)가 되는 경우에는 S3까지 요청이 도달하지 않으니 S3 비용도 발생하지 않습니다. 클라우드플레어 CDN에서 100% 캐시 히트가 될 수는 없으니 일부 요청은 오리진으로 도달할 것이고 이 요청이 많아질 수록 비용이 발생하게 되는데, 이러한 비용을 내지 않기 위해서 S3를 대체할만한 서비스들 중 클라우드플레어와 Bandwidth Alliance 로 맺어진 회사의 서비스를 사용하면 됩니다. 여기서는 대표적으로 Backblaze라는 서비스를 검토해 보겠습니다. ...

2022년 2월 2일 · 2분 · 342단어

nginx ingress controller 무중단 업데이트하기

이 글은 스퀘어랩 기술 블로그에도 동일하게 업로드되어있습니다. https://squarelab.co/blog/update-nginx-ingress-controller/ AWS 상에서 쿠버네티스(k8s) 클러스터를 운영할때 NLB(Network Load Balancer)와 nginx ingress controller 를 조합해서 사용하면 매우 편리합니다. 일단 k8s 클러스터로 들어가는 모든 트래픽을 원하는 하나의 네트워크 로드밸런서로 몰아서 사용이 가능하기 때문에 로드밸런서 비용을 절약 가능하고, 여기에 추가로 nginx에서 제공하는 다양한 기능을 모두 사용할 수 있는 장점이 있습니다. 이렇게 사용하다보면 외부에서 클러스터 내부로 들어오는 대부분의 트래픽이 nginx ingress controller 를 통해서 들어올 것이기 때문에 nginx ingress 관련 설정을 변경하거나, 버전을 올리거나 할 때의 작은 실수가 클러스터 내에서 실행중인 모든 서비스에 대한 장애로 이어질 수 있기 때문에 항상 주의해야합니다. ...

2021년 12월 24일 · 7분 · 1324단어

Jenkins에 저장된 credential/password 값 알아내기

젠킨스에 크레덴셜로 저장된 비밀번호 등의 값을 알아내고 싶은 경우 두가지 방법이 있다 job을 만들어서 아래 파이프라인 스크립트를 수행 https://www.codurance.com/publications/2019/05/30/accessing-and-dumping-jenkins-credentials 내용을 기반으로 좀더 간단하게 작성했음 pipeline { agent any stages { stage('sshUserPrivateKey') { steps { script { withCredentials([ sshUserPrivateKey( credentialsId: 'gerrit', keyFileVariable: 'keyFile', passphraseVariable: 'passphrase', usernameVariable: 'username' ) ]) { print 'keyFile=' + keyFile print 'passphrase=' + passphrase print 'username=' + username print 'keyFile.collect { it }=' + keyFile.collect { it } print 'passphrase.collect { it }=' + passphrase.collect { it } print 'username.collect { it }=' + username.collect { it } print 'keyFileContent=' + readFile(keyFile) } } } } } } jenkins 서버에 직접 ssh 접속이 가능하다면 /var/jenkins_home/credential.xml 파일을 오픈 (젠킨스 설치 경로는 설치 방식에 따라 조금씩 다를 수 있음) 파일 안에서 원하는 password 또는 credential을 찾음. (암호화되어 저장되어있는 경우 {XXXXX==} 와 같은 식으로 표현되어있음) ...

2021년 10월 27일 · 1분 · 152단어

mongodb 서버의 실제 IP 주소 알아내는 방법

mongodb+srv://mongodb-atlas-serverles.asdf.mongodb.net 위와같은 mongodb connection string이 있을때 해당 mongodb에 접속할 수 있는 실제 서버의 IP주소를 알고싶은 경우 다음과 같이하면 된다. # -type=SRV 옵션을 사용해서 DNS 레코드 중 SRV 타입을 검색한다 # connection string에 명시된 주소 앞쪽에 _mongodb._tcp 를 붙여준다. $ nslookup -type=SRV _mongodb._tcp.mongodb-atlas-serverles.asdf.mongodb.net Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: _mongodb._tcp.mongodb-atlas-serverles.asdf.mongodb.net service = 0 0 27017 mongodb-atlas-serverless-example-dev-lb.asdf.mongodb.net. 출력된 결과를 보면 mongodb-atlas-serverless-example-dev-lb.asdf.mongodb.net 부분이있는데 이것이 실제 주소이다. # 위에서 얻은 주소로 다시한번 쿼리 $ nslookup mongodb-atlas-serverless-example-dev-lb.asdf.mongodb.net Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: mongodb-atlas-serverless-example-dev-lb.dvfze.mongodb.net canonical name = 123456-nlb-12345.elb.ap-southeast-1.amazonaws.com. Name: 123456-nlb-12345.elb.ap-southeast-1.amazonaws.com Address: 13.213.131.24 Name: 123456-nlb-12345.elb.ap-southeast-1.amazonaws.com Address: 13.213.229.91 여기서 나온 IP 주소들이 실제 mongodb 서버의 주소이다. ...

2021년 9월 7일 · 1분 · 99단어

brew service 명령어 사용법 및 주요 경로

명령어 brew services 그냥 실행하면 현재 유저 권한으로 등록/실행된 service 목록 조회 sudo를 붙여서 실행하면 root로 등록/실행된 service목록 조회 실수로 동일한 서비스가 root와 현재 유저에 둘다 실행되서 겹치는 경우가 있을 수 있으니 꼭 root권한이 필요한 서비스가 아니라면 현재 유저 권한 기준으로 서비스를 실행할 것 brew services [restart/stop/start] [서비스명] 재시작/종료/시작 주요 경로 로그 /usr/local/var/log 설정 /usr/local/etc httpd 설정 /usr/local/etc/httpd 데이터 및 로그 /usr/local/var/log/httpd mysql 설정 /usr/local/etc/my.cnf 데이터 및 로그 /usr/local/var/mysql

2021년 9월 2일 · 1분 · 69단어

정규식으로 사용자 이름에서 특수문자, 이모지 걸러내기

네이버, 카카오톡, 페이스북 등 다른 플랫폼을 통해 소셜 로그인을 하는 경우 사용자 이름 등에 이모지(emoji)나 특수문자가 붙어있는 경우들이 종종 있다. 이렇게 전달받은 사용자 이름을 그대로 사용하면 닉네임이 아닌 실제 이름을 입력해야하는 예약시스템 등과 연동할 때 특수문자로 인한 오류가 자주 발생한다. 이러한 오류를 피하기 위해서는 전달받은 이름에서 정규식을 통해 특수문자와 이모지를 걸러내는 것이 가장 일반적인 접근방식이다. 얼핏 생각해서 영어/한글 이름만 허용하고 공백을 제외한 나머지 특수문자를 걸러내려면 아래처럼 할 수 있겠다. [가-힣a-zA-Z ]+ 국내용 서비스라면 이렇게만 해도 큰 문제가 없겠지만 다국어 지원이 안되기 떄문에 뭔가 찝찝한 기분이 든다. 한자, 일본어, 독일어, 스페인어 태국어 등의 영어 알파벳이 아닌 문자체계를 사용하는 여러 언어까지 지원하려면 어떻게 해야할까? ...

2021년 2월 17일 · 2분 · 233단어

타임존 시차 계산기 앱 ‘리모클(Remocle)’ 추천

골치아픈 타임존(Timezone) 시차 계산 코로나 대유행이 시작되기 전인 2019년에는 아내와 함께 디지털 노마드 개발자 생활을 하면서 미국 서부와 태국 등을 돌아다녔다. 몸은 해외에 있었지만 국내 회사에 다니면서 리모트 워크를 하고있었기 때문에 계속 한국에 있는 팀원들과 협업을 했고, 때문에 항상 한국 시간과 현지 시간을 신경써야 했다. 특히 미국 서부는 시간대가 PST(Pacific Standard Time), MST(Mountain Standard Time) 두개인데, 타임존 경계 중간쯤 머무르는 날에는 방문하는 목적지에 따라 하루에도 여러번 +1시간 -1시간이 오락가락해서 총 3개의 시간대를 고려해서 시차를 계산해야 해야 했다. ...

2020년 11월 12일 · 3분 · 529단어

JavaScript 개발자에게 Kotlin coroutine 10분만에 이해시키기

Kotlin의 coroutine은 비동기 프로그래밍을 편리하게 하기 위한 매우 강력한 툴이다. 하지만 처음 접했을 때 suspend, async, await, runBlocking, launch, coroutineScope, suspendCoroutine 등 생소한 용어들이 많다보니 어떤 상황에 어떤 코드를 작성해야하는지 적응하는데 시간이 많이 걸린다. 하지만 비동기 프로그래밍이라는 개념 자체는 언어가 달라지더라도 일맥상통한다. 때문에 JavaScript에서 비동기 프로그래밍을 많이 해본 사람들이라면 다양한 상황에 맞춰서 JavaScript 예제와 Kotlin coroutine 예제 코드를 나란히 놓고 비교해서 설명하는 방식으로 10분만에 이해 시킬 수 있을 것이라 확신한다. ...

2020년 6월 19일 · 6분 · 1111단어

개발자를 위한 효율적인 MacOS 백업 방법

아이맥(iMac) 또는 맥북(Macbook)을 새로 구입해서 기존 데이터를 마이그레이션 하거나, 기존 사용하던 맥에 문제가 생겨서 AS 센터를 방문해야할 경우 데이터 백업이 필수이다. 이때 어떻게 하면 꼭 필요한 파일만 백업해서 백업 소요시간과 디스크 용량을 절약 할 수 있을지 알보도록 하자. 작업을 진행하기 전에 Mac OS 쓸모없는 파일 정리를 통한 하드 공간 확보 글을 보고 필요없는 파일들을 먼저 정리해두자. 자주 사용하지 않는 앱들도 미리 삭제하면 백업을 좀더 빠르게 할 수 있다. 앱 바이너리 파일 뿐만 아니라 관련해서 생성되는 설정/캐시파일까지 깨끗하게 삭제하려면 AppCleaner를 이용해서 앱을 삭제하는 것을 추천한다. ...

2020년 5월 2일 · 4분 · 716단어

자주쓰는 Xcode 단축키 모음

CMD + SHIFT + J : 열려있는 파일을 프로젝트 트리에서 보여주기 CMD + SHIFT + D 또는 Y: 디버깅 윈도우 열기/닫기 토글 CTRL + 1 : 현재 파일 관련 추가 메뉴 (find caller, callee) CTRL + 6 : 현재 파일 요약 (method, variable list) CMD + click: 정의로 이동 CMD + OPT + click: 정의로 이동하되 현재 창 반대편에 열기 CTRL + CMD + 왼쪽 / 오른쪽: 히스토리 이전/다음 이동 CMD + SHIFT + F: 전체 파일 스트링 검색 CMD + SHIFT + O: 파일 검색창 오픈 검색된 파일 선택시 OPT + Enter: 현재창 반대편에 열기 검색된 파일 선택시 OPT + SHIFT + Enter: 창 고르기 CMD + R: 실행 CMD + SHIF + K: 클린 CMD + 1 … 9: 왼쪽 사이드바의 탭 선택- CMD + CTRL + E: 특정 단어 선택 후 누르면 현재 파일내 동일 단어를 일괄 편집 (모든 파일을 분석해서 업데이트해주는 refactor와는 다름에 주의) CMD + OPT + 왼쪽 / 오른쪽: 현재 커서가 위치한 블록 접기/펼치기 (코드 양이 많을때 불필요한 메서드나 nesting된 블록을 접어놓고 보기 좋음)

2019년 11월 29일 · 1분 · 170단어